Airtable에서 QuickBooks로의 경비 보고서 자동화
이것은Invoice Processing, Multimodal AI분야의자동화 워크플로우로, 20개의 노드를 포함합니다.주로 If, Merge, Airtable, HttpRequest, AirtableTrigger 등의 노드를 사용하며. Airtable에서 QuickBooks로의 비용 보고서 자동화
- •Airtable API Key
- •대상 API의 인증 정보가 필요할 수 있음
{
"id": "WCAyzxSt6yCROjq8",
"meta": {
"instanceId": "1a54c41d9050a8f1fa6f74ca858828ad9fb97b9fafa3e9760e576171c531a787"
},
"name": "Automate Expense Reporting from Airtable to QuickBooks",
"tags": [],
"nodes": [
{
"id": "92e68aed-1a03-478b-89d4-5d94e98b3db0",
"name": "Airtable 트리거",
"type": "n8n-nodes-base.airtableTrigger",
"position": [
-120,
1120
],
"parameters": {
"baseId": {
"__rl": true,
"mode": "id",
"value": "appT0dprL0zCSuG45"
},
"tableId": {
"__rl": true,
"mode": "id",
"value": "{YOUR_AIRTABLE_TABLE_ID}"
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"triggerField": "Created",
"authentication": "airtableTokenApi",
"additionalFields": {}
},
"typeVersion": 1
},
{
"id": "0b1822e8-1fcf-4ef0-872d-ec3b50d0ef9d",
"name": "레코드 검색",
"type": "n8n-nodes-base.airtable",
"position": [
240,
1120
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "{YOUR_AIRTABLE_BASE_ID}",
"cachedResultUrl": "https://airtable.com/{YOUR_AIRTABLE_BASE_ID}",
"cachedResultName": "airtable_expenses_dummy.csv"
},
"table": {
"__rl": true,
"mode": "list",
"value": "{YOUR_AIRTABLE_TABLE_ID}",
"cachedResultUrl": "https://airtable.com/{YOUR_AIRTABLE_BASE_ID}/{YOUR_AIRTABLE_TABLE_ID}",
"cachedResultName": "expense management"
},
"options": {},
"operation": "search"
},
"typeVersion": 2.1
},
{
"id": "6bd50650-7226-48ad-afe3-c2493e6c50f8",
"name": "조건문",
"type": "n8n-nodes-base.if",
"position": [
700,
1120
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "dd2d7985-b436-4213-a3b9-56916c8f59b4",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.Status }}",
"rightValue": "Approved"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "2d50d1e9-8c4c-4dff-91cb-d39d0c1d0237",
"name": "작업 없음, 아무것도 하지 않음",
"type": "n8n-nodes-base.noOp",
"position": [
1580,
1580
],
"parameters": {},
"typeVersion": 1
},
{
"id": "5edab364-f81e-47e3-8da4-601b84b3ac19",
"name": "파일 다운로드",
"type": "n8n-nodes-base.httpRequest",
"position": [
1560,
780
],
"parameters": {
"url": "={{ $json['Receipt URL'] }}",
"options": {
"response": {
"response": {
"responseFormat": "file",
"outputPropertyName": "=Receipt"
}
}
}
},
"typeVersion": 4.2
},
{
"id": "84784657-8fad-4e60-aa32-bdf75255ac2f",
"name": "병합",
"type": "n8n-nodes-base.merge",
"position": [
2800,
760
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "02450b3c-81fa-4159-a910-730365a05dfd",
"name": "레코드 업데이트",
"type": "n8n-nodes-base.airtable",
"position": [
3840,
760
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "{YOUR_AIRTABLE_BASE_ID}",
"cachedResultUrl": "https://airtable.com/{YOUR_AIRTABLE_BASE_ID}",
"cachedResultName": "airtable_expenses_dummy.csv"
},
"table": {
"__rl": true,
"mode": "list",
"value": "{YOUR_AIRTABLE_TABLE_ID}",
"cachedResultUrl": "https://airtable.com/{YOUR_AIRTABLE_BASE_ID}/{YOUR_AIRTABLE_TABLE_ID}",
"cachedResultName": "expense management"
},
"columns": {
"value": {
"id": "={{ $('Search records').item.json.id }}",
"Status": "Done"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Receipt URL",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Receipt URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Amount",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Amount",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Memo",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Memo",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "QBO Vendor ID",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "QBO Vendor ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "QBO Expense Account ID",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "QBO Expense Account ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "QBO Payment Account ID",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "QBO Payment Account ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Category",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Created",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Receipt Type",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Receipt Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Customer",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update"
},
"typeVersion": 2.1
},
{
"id": "cb4a1747-f86b-427a-8325-113315392775",
"name": "스티커 메모",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
1300
],
"parameters": {
"color": 3,
"width": 500,
"height": 300,
"content": "### Step 1: Airtable Trigger 🚦📋\n\nThis node triggers the workflow whenever there is a change in the **Created** column, effectively activating when new data is added.\n\nWhy this step is important:\n\n- ⏰ Automatically starts the workflow on new entries.\n- 📈 Monitors real-time changes for timely processing.\n- 🔄 Ensures your automation responds instantly to new Airtable data.\n\nIt’s the step that keeps your workflow synced with your Airtable updates. 🔔✨\n"
},
"typeVersion": 1
},
{
"id": "d3c122f4-ce1a-4968-b57a-f8fa3ad261eb",
"name": "스티커 메모1",
"type": "n8n-nodes-base.stickyNote",
"position": [
60,
780
],
"parameters": {
"width": 460,
"height": 300,
"content": "### Step 2: Airtable Search Records 🔍📋\n\nThis node searches and retrieves all records from a specific Airtable table.\n\nWhy this step is important:\n\n- 🔎 Gathers complete data from the table for processing.\n- 📊 Enables further filtering, updating, or analysis within the workflow.\n- 🗂️ Provides a snapshot of all relevant records at once.\n\nIt’s the step that collects your data foundation for the automation ahead. 🧱✨\n"
},
"typeVersion": 1
},
{
"id": "2bc54880-2d88-41e6-9327-37dd97da3689",
"name": "스티커 메모2",
"type": "n8n-nodes-base.stickyNote",
"position": [
500,
1280
],
"parameters": {
"color": 4,
"width": 500,
"height": 340,
"content": "### Step 3: Status Check (If Node) ✅❌\n\nThis node checks whether the **Status** field is set to **Approved**.\n\n- **True:** Status is Approved; workflow continues.\n- **False:** Status is not Approved; workflow can exit or take alternate action.\n\nWhy this step is important:\n\n- ✔️ Ensures only approved items proceed in the workflow.\n- 🛑 Prevents processing of unapproved or incomplete records.\n- 🔄 Maintains workflow accuracy and efficiency.\n\nIt’s the decision point that filters records based on their approval status. 🚦✨\n"
},
"typeVersion": 1
},
{
"id": "111d0402-84f5-4f09-b78d-b5b9ead43713",
"name": "스티커 메모3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1420,
1260
],
"parameters": {
"width": 440,
"height": 300,
"content": "### Graceful Exit (No-Op Node) 🛑✨\n\nThis **No Operation** node acts as a graceful exit for items whose **Status** is not Approved.\n\nWhy this step is important:\n\n- 🛡️ Prevents further processing of unapproved records.\n- 🔄 Ensures the workflow ends cleanly without errors.\n- 🧹 Maintains clear and organized workflow logic.\n\nIt’s the safe stopping point that quietly ends the flow when no action is needed. 🚪✅\n"
},
"typeVersion": 1
},
{
"id": "b9847915-663e-4ec6-b815-71b09d28e687",
"name": "스티커 메모4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1360,
440
],
"parameters": {
"color": 6,
"width": 480,
"height": 300,
"content": "### Step 4: Download File from Receipt URL (HTTP Request) 📥💻\n\nThis node sends an **HTTP Request** to download the file from the provided **Receipt URL**.\n\nWhy this step is important:\n\n- 📄 Retrieves the actual file (e.g., invoice, receipt) for further processing.\n- 🔗 Ensures the workflow has access to the necessary document.\n- ⚡ Enables downstream nodes to work with the downloaded file.\n\nIt’s the step that pulls the file into your workflow for processing or storage. 🗂️✨\n"
},
"typeVersion": 1
},
{
"id": "6c6f6ede-b978-4351-abe3-cc6226ebc746",
"name": "QBO-비용 생성",
"type": "n8n-nodes-base.httpRequest",
"position": [
2220,
460
],
"parameters": {
"url": "https://sandbox-quickbooks.api.intuit.com/v3/company/{YOUR_QUICKBOOKS_COMPANY_ID}/purchase",
"method": "POST",
"options": {},
"jsonBody": "={\n \"PaymentType\": \"Cash\",\n \"TxnDate\": \"{{$json['Date']}}\",\n \"PrivateNote\": \"{{$json['Memo']}}\",\n \"AccountRef\": { \"value\": \"{{$json['QBO Payment Account ID']}}\" },\n \"EntityRef\": { \"type\": \"Vendor\", \"value\": \"{{$json['QBO Vendor ID']}}\" },\n \"Line\": [\n {\n \"Amount\": {{$json['Amount']}},\n \"DetailType\": \"AccountBasedExpenseLineDetail\",\n \"AccountBasedExpenseLineDetail\": {\n \"AccountRef\": { \"value\": \"{{$json['QBO Expense Account ID']}}\" }\n }\n }\n ]\n}\n",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "quickBooksOAuth2Api"
},
"typeVersion": 4.2
},
{
"id": "d6f91071-2044-4c56-b940-962a63765b60",
"name": "QBO-파일 업로드",
"type": "n8n-nodes-base.httpRequest",
"position": [
3320,
760
],
"parameters": {
"url": "https://sandbox-quickbooks.api.intuit.com/v3/company/{YOUR_QUICKBOOKS_COMPANY_ID}/upload?minorversion=65",
"method": "POST",
"options": {
"response": {
"response": {
"responseFormat": "json"
}
}
},
"sendBody": true,
"contentType": "multipart-form-data",
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "file_content_01",
"parameterType": "formBinaryData",
"inputDataFieldName": "Receipt"
}
]
},
"nodeCredentialType": "quickBooksOAuth2Api"
},
"typeVersion": 4.2
},
{
"id": "b12dc68f-ef24-42a7-801c-54d03e729b67",
"name": "스티커 메모5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2060,
100
],
"parameters": {
"color": 5,
"width": 440,
"height": 300,
"content": "**Step 5 - Create Expense in QuickBooks (QBO) 💸🧾**\n\nThis node uses the **Create Expense** operation to add an expense in QuickBooks based on data from Airtable.\n\nWhy this step is important:\n\n- 📊 Automatically records expenses from your Airtable data.\n- 🔗 Links expenses to the correct accounts and vendors in QuickBooks.\n- ⚡ Streamlines bookkeeping and financial tracking.\n\nIt’s the step that turns raw expense data into an official QuickBooks record. ✅✨\n"
},
"typeVersion": 1
},
{
"id": "e0617428-57bd-4fd6-b4cd-afec5931f363",
"name": "스티커 메모6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2640,
920
],
"parameters": {
"width": 480,
"height": 340,
"content": "### Step 6: Merge Expense and File Data Node 🔗📂\n\nThis node merges data from the **Create Expense** node and the **Download File** node.\n\nWhy this step is important:\n\n- 🔄 Combines expense details with the corresponding file (receipt or invoice).\n- 📊 Ensures all relevant information is packaged together for the next steps.\n- ⚙️ Maintains data integrity and prepares a unified dataset for further processing.\n\nIt’s the step that consolidates expense and file data for smooth workflow continuation. 🤝✨\n"
},
"typeVersion": 1
},
{
"id": "21f9dc2b-852c-43eb-9600-beb33c567bf7",
"name": "스티커 메모7",
"type": "n8n-nodes-base.stickyNote",
"position": [
3120,
500
],
"parameters": {
"color": 3,
"width": 480,
"height": 240,
"content": "### Step 7: Upload File to QuickBooks (QBO Upload) 📤🧾\n\nThis node uses the **Upload File** operation to attach the downloaded file (e.g., receipt or invoice) to QuickBooks.\n\nWhy this step is important:\n- 🔗 Ensures proper documentation for bookkeeping and auditing.\n- ⚡ Automates file management within QuickBooks, saving time and reducing errors.\n\n"
},
"typeVersion": 1
},
{
"id": "5e7976bb-8812-407b-b79e-a67f2462e07c",
"name": "스티커 메모8",
"type": "n8n-nodes-base.stickyNote",
"position": [
3680,
940
],
"parameters": {
"color": 4,
"width": 480,
"height": 300,
"content": "### Step 8: Update Airtable Record Status ✏️✅\n\nThis node updates the **Status** column of the Airtable records to **Done**.\n\nWhy this step is important:\n\n- 🔄 Marks the completion of the workflow for each record.\n- 📋 Provides clear visibility on processed items.\n- ⚡ Ensures Airtable reflects the latest workflow status.\n\nIt’s the step that closes the loop by updating the record’s status to indicate successful processing. 🏁✨\n"
},
"typeVersion": 1
},
{
"id": "f270dc7e-492a-4f23-9f65-f4658c3aedde",
"name": "스티커 메모9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-180,
20
],
"parameters": {
"color": 3,
"width": 600,
"height": 440,
"content": "### Prerequisites ⚙️🔗\n\n- Create and connect your **Airtable** account using a **Personal Access Token**.\n- Create a table with the following columns:\n - **Status**\n - **Receipt URL**\n - **Amount**\n - **Date**\n - **Memo**\n - **QBO Vendor ID**\n - **QBO Expense Account ID**\n - **QBO Payment Account ID**\n - **Category**\n - **Receipt Type**\n - **Customer**\n- Connect your oauth2 Quickbooks credentials\n- Add your company id in the QBO nodes\nThese configurations ensure your Airtable is ready for seamless integration with QuickBooks and the workflow. ✅✨\n"
},
"typeVersion": 1
},
{
"id": "a356ca74-915c-4349-9d68-c1a03cdc58f8",
"name": "스티커 메모10",
"type": "n8n-nodes-base.stickyNote",
"position": [
1500,
1800
],
"parameters": {
"width": 440,
"height": 300,
"content": "### Get in Touch\n\nPlease feel free to reachout to us, if you need any help in settin up this workflow.\n\nWe can also help customize workflow pet the use-case. \n\nReach out us at: getstarted@intuz.com\n\nWebsite: https://www.intuz.com/\n\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "71973fac-b373-4884-b5d0-f70497f5c2cb",
"connections": {
"6bd50650-7226-48ad-afe3-c2493e6c50f8": {
"main": [
[
{
"node": "5edab364-f81e-47e3-8da4-601b84b3ac19",
"type": "main",
"index": 0
}
],
[
{
"node": "2d50d1e9-8c4c-4dff-91cb-d39d0c1d0237",
"type": "main",
"index": 0
}
]
]
},
"84784657-8fad-4e60-aa32-bdf75255ac2f": {
"main": [
[
{
"node": "d6f91071-2044-4c56-b940-962a63765b60",
"type": "main",
"index": 0
}
]
]
},
"5edab364-f81e-47e3-8da4-601b84b3ac19": {
"main": [
[
{
"node": "6c6f6ede-b978-4351-abe3-cc6226ebc746",
"type": "main",
"index": 0
},
{
"node": "84784657-8fad-4e60-aa32-bdf75255ac2f",
"type": "main",
"index": 1
}
]
]
},
"0b1822e8-1fcf-4ef0-872d-ec3b50d0ef9d": {
"main": [
[
{
"node": "6bd50650-7226-48ad-afe3-c2493e6c50f8",
"type": "main",
"index": 0
}
]
]
},
"d6f91071-2044-4c56-b940-962a63765b60": {
"main": [
[
{
"node": "02450b3c-81fa-4159-a910-730365a05dfd",
"type": "main",
"index": 0
}
]
]
},
"92e68aed-1a03-478b-89d4-5d94e98b3db0": {
"main": [
[
{
"node": "0b1822e8-1fcf-4ef0-872d-ec3b50d0ef9d",
"type": "main",
"index": 0
}
]
]
},
"6c6f6ede-b978-4351-abe3-cc6226ebc746": {
"main": [
[
{
"node": "84784657-8fad-4e60-aa32-bdf75255ac2f",
"type": "main",
"index": 0
}
]
]
}
}
}이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 청구서 처리, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Intuz
@intuzWorkflow automation can help automate your routine activities and help saves $$$, as well as hours of time. As a boutique tech consulting company, Intuz help businesses with custom AI/ML, AI Workflow Automations, and software development. Automate your business workflow for: Sales Marketing Accounting Finance Operations E-Commerce Customer Support Admin & Backoffice Logistics & Supply Chain
이 워크플로우 공유