Informes de gastos automatizados de Airtable a QuickBooks
Este es unInvoice Processing, Multimodal AIflujo de automatización del dominio deautomatización que contiene 20 nodos.Utiliza principalmente nodos como If, Merge, Airtable, HttpRequest, AirtableTrigger. Automatización de informes de gastos de Airtable a QuickBooks
- •Clave de API de Airtable
- •Pueden requerirse credenciales de autenticación para la API de destino
Nodos utilizados (20)
{
"id": "WCAyzxSt6yCROjq8",
"meta": {
"instanceId": "1a54c41d9050a8f1fa6f74ca858828ad9fb97b9fafa3e9760e576171c531a787"
},
"name": "Automate Expense Reporting from Airtable to QuickBooks",
"tags": [],
"nodes": [
{
"id": "92e68aed-1a03-478b-89d4-5d94e98b3db0",
"name": "Airtable Trigger",
"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": "Buscar registros",
"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": "If",
"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": "Sin operación, do nothing",
"type": "n8n-nodes-base.noOp",
"position": [
1580,
1580
],
"parameters": {},
"typeVersion": 1
},
{
"id": "5edab364-f81e-47e3-8da4-601b84b3ac19",
"name": "Descargar archivo",
"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": "Combinar",
"type": "n8n-nodes-base.merge",
"position": [
2800,
760
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "02450b3c-81fa-4159-a910-730365a05dfd",
"name": "Actualizar registro",
"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": "Nota adhesiva",
"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": "Nota adhesiva1",
"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": "Nota adhesiva2",
"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": "Nota adhesiva3",
"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": "Nota adhesiva4",
"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-Crear Gasto",
"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-Subir Archivo",
"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": "Nota adhesiva5",
"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": "Nota adhesiva6",
"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": "Nota adhesiva7",
"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": "Nota adhesiva8",
"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": "Nota adhesiva9",
"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": "Nota adhesiva10",
"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": "No Operation, do nothing",
"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
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado - Procesamiento de facturas, IA Multimodal
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
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
Compartir este flujo de trabajo