{"workflow":{"id":14085,"name":"Process emailed PDF invoices into QuickBooks bills with OpenAI","views":117,"recentViews":2,"totalViews":117,"createdAt":"2026-03-16T12:14:10.023Z","description":"# AI Invoice Processor for QuickBooks - Email to Bill with PDF Attachment\n\nAutomatically processes vendor invoices received by email, creates QuickBooks bills with full details, and attaches the original PDF.\n\n## Who is this for?\n\n- Small/medium businesses using QuickBooks Online\n- Bookkeepers processing 20+ invoices/month\n- Accounting firms managing multiple clients\n- Anyone tired of manually entering invoice data into QuickBooks\n\n## What it does\n\n1. **Monitors Gmail** for new emails with PDF attachments (every 15 minutes)\n2. **Extracts text** from the PDF using n8n's built-in PDF parser\n3. **AI classification** - determines if the PDF is actually an invoice (skips receipts, contracts, etc.)\n4. **AI data extraction** - pulls structured data: vendor name, invoice number, amount, currency, dates, and line items\n5. **Vendor lookup** - searches QuickBooks for the vendor by name\n6. **Creates a Bill** in QuickBooks with all extracted data (amount, description, dates)\n7. **Attaches the original PDF** to the bill for reference\n8. **Sends confirmation email** back to the sender with bill details\n\n## Error handling\n\n- **Not an invoice?** Silently skipped - no noise\n- **AI can't extract valid data?** Email sent to AP team with error details\n- **Vendor not found in QuickBooks?** Email sent to AP team with vendor name and action steps\n\n## Setup (5 minutes)\n\n### Prerequisites\n- Gmail account (OAuth2)\n- OpenAI API key\n- QuickBooks Online account (OAuth2)\n\n### Steps\n\n1. **Import the workflow** into your n8n instance\n2. **Connect credentials:**\n   - Gmail OAuth2\n   - OpenAI API\n   - QuickBooks OAuth2\n3. **Edit the Config node** with your values:\n   - `realmId` - your QuickBooks Company ID (Settings → Account)\n   - `apTeamEmail` - where error notifications go\n   - `defaultExpenseAccountId` - your QB expense account ID (see below)\n4. **Activate the workflow**\n\n### How to find your Expense Account ID\n\n1. Log in to QuickBooks Online\n2. Go to Settings (gear icon) → Chart of Accounts\n3. Find an expense account (e.g. \"Office Supplies\", \"Professional Services\")\n4. Hover → click **View register** (or **Run report**)\n5. Look at the URL for `accountId=XX` or `account=XX`\n6. That number is your `defaultExpenseAccountId`\n\n### Sandbox vs Production\n\nIf using QuickBooks Sandbox, update the Upload PDF to Bill node URL from:\n```\nhttps://quickbooks.api.intuit.com/v3/company/...\n```\nto:\n```\nhttps://sandbox-quickbooks.api.intuit.com/v3/company/...\n```\n\n## Technical details\n\n### AI extraction schema\n\nThe AI extracts these fields from each invoice PDF:\n\n| Field | Type | Example |\n|-------|------|---------|\n| `is_invoice` | boolean | `true` |\n| `vendor_name` | string | \"Acme Corp\" |\n| `invoice_number` | string | \"INV-2024-001\" |\n| `amount` | number | 1500.00 |\n| `currency` | string | \"USD\" |\n| `due_date` | string | \"2024-12-31\" |\n| `txn_date` | string | \"2024-12-01\" |\n| `line_items` | array | [{description, amount, quantity}] |\n\n### Binary data flow\n\nPDF binary data is lost after the AI extraction step (LangChain nodes don't preserve binary). The attachment pipeline solves this by referencing the binary from the Config node using `$('Config').item.binary.attachment_0` - a named reference that works regardless of the connection path.\n\n### Force Inline Binary (n8n v2 quirk)\n\nn8n v2 stores binary data as database streams. QuickBooks' `/upload` API requires `Content-Length` in multipart uploads, which streams can't provide. A Code node converts binary streams to inline base64 before upload.\n\n### Nodes used\n\n- Gmail Trigger (polling)\n- Extract from File (PDF)\n- Information Extractor (LangChain + OpenAI)\n- QuickBooks Online (vendor search, bill creation)\n- HTTP Request (PDF upload to bill)\n- Gmail (confirmation & error emails)\n- Code nodes (data transformation)\n- IF nodes (routing logic)\n\n## Limitations\n\n- **Single line item per bill** - the native QuickBooks node supports only one line item. All extracted line items are combined into the description field with invoice number.\n\n","workflow":{"meta":{"instanceId":"e122e4b90b0dc212c47b42e306cb84c993d082784105d7fe578eca9a9d068de0","templateCredsSetupCompleted":true},"nodes":[{"id":"39652963-fcf3-4a38-a624-494fff9c0ad2","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-3248,-304],"parameters":{"color":7,"width":380,"height":1100,"content":"## QuickBooks: AI Invoice Processor\nAutomatically processes vendor invoices received by email.\n\n### Who is this for?\n- Small/medium businesses using QuickBooks Online\n- Bookkeepers processing 20+ invoices/month\n- Accounting firms managing multiple clients\n\n### How it works\n1. **Gmail** monitors for new emails with PDF attachments\n2. **Extract from PDF** converts the PDF to text\n3. **AI (Information Extractor)** extracts structured invoice data and classifies if it's actually an invoice\n4. **QuickBooks** vendor search by name → gets Vendor ID\n5. **QuickBooks** creates a Bill with extracted data\n6. **PDF attachment** pipeline uploads the original invoice to the bill\n7. **Confirmation email** sent back to the sender\n\n### Setup checklist\n- [ ] Connect **Gmail** credentials\n- [ ] Connect **OpenAI** API credentials\n- [ ] Connect **QuickBooks OAuth2** credentials\n- [ ] Edit the **Config** node with your values:\n  - `realmId` — your QuickBooks Company ID\n  - `apTeamEmail` — AP team email for error notifications\n  - `defaultExpenseAccountId` — see steps below\n- [ ] (Optional) Add Gmail label filter\n\n### How to find `defaultExpenseAccountId`\n1. Log in to **QuickBooks Online**\n2. Go to **Settings** (gear icon) → **Chart of Accounts**\n3. Find your default expense account (e.g. \"Accounts Payable\", \"Office Supplies\", \"Professional Services\")\n4. Click on the account → look at the URL: `...?accountId=`**`123`**\n5. Copy the number and paste it into the **Config** node"},"typeVersion":1},{"id":"80ffeb80-2ad7-4f75-81e8-b2f0ef11a3da","name":"Gmail Trigger","type":"n8n-nodes-base.gmailTrigger","position":[-2624,464],"parameters":{"simple":false,"filters":{"q":"filename:pdf"},"options":{"downloadAttachments":true},"pollTimes":{"item":[{"mode":"everyX","unit":"minutes","value":15}]}},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"Qmag Gmail account"}},"typeVersion":1.3},{"id":"831e4ca0-e94d-4aec-9938-351a14fff163","name":"Config","type":"n8n-nodes-base.set","position":[-2400,464],"parameters":{"options":{},"assignments":{"assignments":[{"id":"realm-id","name":"realmId","type":"string","value":"ADD_REALM_ID"},{"id":"ap-email","name":"apTeamEmail","type":"string","value":"user@example.com"},{"id":"confirm-enabled","name":"sendConfirmation","type":"boolean","value":false},{"id":"expense-account","name":"defaultExpenseAccountId","type":"string","value":"ADD_EXPENSE_ACC_ID"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"57b2333f-236c-45fa-858f-075e0b5f61ae","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-2704,-304],"parameters":{"color":4,"width":540,"height":340,"content":"## 1. Email Trigger & Config\nMonitors Gmail for new emails with PDF invoice attachments.\n\n**Config node** centralizes all settings:\n- `realmId` — Your QuickBooks Company ID (find in QB → Settings → Account)\n- `apTeamEmail` — Where error notifications go\n- `sendConfirmation` — Toggle confirmation emails on/off\n- `defaultExpenseAccountId` — QB expense account for line items\n\n**Gmail Setup:**\n- Connect your Gmail account\n- Optionally filter by label or sender\n- `Simplify` is set to false to get headers + binary attachments"},"typeVersion":1},{"id":"d0090bee-8ac3-4800-9109-d8ab7becd36b","name":"Extract Text from PDF","type":"n8n-nodes-base.extractFromFile","position":[-2176,464],"parameters":{"options":{"joinPages":true},"operation":"pdf","binaryPropertyName":"attachment_0"},"typeVersion":1},{"id":"1922f9d5-77cb-4d7f-be4c-2c3c7ba3fb1e","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1792,-320],"parameters":{"color":6,"width":520,"height":460,"content":"## 2. AI Invoice Classification & Extraction\nUses the **Information Extractor** node with OpenAI to:\n\n1. **Classify** if the PDF is actually an invoice (`is_invoice`)\n2. **Extract** structured data if it is:\n   - `vendor_name` — Company issuing the invoice\n   - `invoice_number` — Reference number\n   - `amount` — Total due\n   - `currency` — 3-letter code (USD, EUR, etc.)\n   - `due_date` / `txn_date` — Dates in YYYY-MM-DD\n   - `line_items` — Array of {description, amount, quantity}\n\nNon-invoices (receipts, contracts, etc.) are silently skipped.\nInvalid extractions (missing vendor/amount) route to AP team."},"typeVersion":1},{"id":"25001adb-7534-4591-b2c9-d281ce45dbb9","name":"AI Extract Invoice Data","type":"@n8n/n8n-nodes-langchain.informationExtractor","position":[-1952,464],"parameters":{"text":"={{ $json.text }}","options":{},"schemaType":"fromJson","jsonSchemaExample":"{\n  \"is_invoice\": true,\n  \"vendor_name\": \"Acme Corp\",\n  \"invoice_number\": \"INV-2024-001\",\n  \"amount\": 1500.00,\n  \"currency\": \"USD\",\n  \"due_date\": \"2024-12-31\",\n  \"txn_date\": \"2024-12-01\",\n  \"line_items\": [\n    {\n      \"description\": \"Consulting services\",\n      \"amount\": 1500.00,\n      \"quantity\": 1\n    }\n  ]\n}"},"typeVersion":1.2},{"id":"630af547-c6aa-4970-8b25-6e15cde0ec8f","name":"OpenAI Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[-1888,688],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o","cachedResultName":"gpt-4o"},"options":{"temperature":0}},"credentials":{"openAiApi":{"id":"credential-id","name":"Gabi - OpenAi account"}},"typeVersion":1.2},{"id":"b4aed971-35b5-49dd-abc3-7b3b7a3efa13","name":"Is Invoice?","type":"n8n-nodes-base.if","position":[-1600,464],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"invoice-check","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.output.is_invoice }}","rightValue":""}]}},"typeVersion":2.2},{"id":"abf0afc3-ff40-44b4-8333-1b81d1ce2ca9","name":"Validate Extracted Data","type":"n8n-nodes-base.code","position":[-1376,464],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Validate required fields from AI extraction\nconst data = $json.output;\nconst errors = [];\n\nif (!data.vendor_name) errors.push('vendor_name is missing');\nif (!data.amount || data.amount <= 0) errors.push('amount is missing or invalid');\nif (!data.line_items || data.line_items.length === 0) errors.push('no line items found');\n\n// Normalize dates\nconst normalizeDate = (d) => {\n  if (!d) return null;\n  const parsed = new Date(d);\n  if (isNaN(parsed.getTime())) return null;\n  return parsed.toISOString().split('T')[0];\n};\n\nreturn {\n  json: {\n    valid: errors.length === 0,\n    errors: errors,\n    data: {\n      ...data,\n      due_date: normalizeDate(data.due_date),\n      txn_date: normalizeDate(data.txn_date),\n      currency: data.currency || 'USD'\n    }\n  }\n};"},"typeVersion":2},{"id":"696a8869-5b7b-494f-a438-ab4a8f096b01","name":"Is Valid?","type":"n8n-nodes-base.if","position":[-1152,464],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"valid-check","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.valid }}","rightValue":""}]}},"typeVersion":2.2},{"id":"f4a8ba4c-523a-4080-a8f0-5ca820bd32fe","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-944,-336],"parameters":{"color":3,"width":600,"height":464,"content":"## 3. QuickBooks: Vendor Search & Bill Creation\nSearches QuickBooks for the vendor by name extracted by AI.\n- If no vendor found → error notification to AP team\n\n**Bill Creation (Native QB node):**\n- Uses native QuickBooks node for reliable OAuth2 auth\n- Single line item with total amount (native node limitation)\n- Invoice number included in line description\n- DueDate, TxnDate, TotalAmt from AI extraction\n- Returns Bill ID for PDF attachment step\n\n**Note:** Native QB node supports only one line item per bill.\nIndividual line items are combined into the description field."},"typeVersion":1},{"id":"6a3cf6b3-4f64-45ab-872c-e3fb4b81893f","name":"Vendor Found?","type":"n8n-nodes-base.if","position":[-704,368],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"vendor-exists","operator":{"type":"string","operation":"exists"},"leftValue":"={{ $json.Id }}","rightValue":""}]}},"typeVersion":2.2},{"id":"7df64e49-0f8a-4b0d-ba1f-4d879b89ecbb","name":"Prepare Bill Data","type":"n8n-nodes-base.code","position":[-480,272],"parameters":{"mode":"runOnceForEachItem","jsCode":"const data = $('Validate Extracted Data').item.json.data;\nconst vendorId = $('Search vendor').item.json.Id;\nconst config = $('Config').item.json;\n\n// Build combined description from line items + invoice number\nconst lineDescriptions = (data.line_items || []).map(item => {\n  const qty = item.quantity && item.quantity > 1 ? ` x${item.quantity}` : '';\n  return `${item.description}${qty} - ${data.currency} ${item.amount}`;\n});\n\nlet description = '';\nif (data.invoice_number) description += `Invoice #${data.invoice_number}\\n`;\ndescription += lineDescriptions.join('\\n');\n\nreturn {\n  json: {\n    vendorId: vendorId,\n    amount: data.amount,\n    description: description.substring(0, 4000),\n    accountId: config.defaultExpenseAccountId,\n    dueDate: data.due_date || '',\n    txnDate: data.txn_date || '',\n    totalAmt: data.amount\n  }\n};"},"typeVersion":2},{"id":"f1ec4648-a509-4f54-aeb3-4102c663d1a1","name":"Create Bill","type":"n8n-nodes-base.quickbooks","position":[-256,272],"parameters":{"Line":[{"Amount":"={{ $json.amount }}","accountId":"={{ $json.accountId }}","DetailType":"AccountBasedExpenseLineDetail","Description":"={{ $json.description }}"}],"resource":"bill","VendorRef":"={{ $json.vendorId }}","operation":"create","additionalFields":{"DueDate":"={{ $json.dueDate }}","TxnDate":"={{ $json.txnDate }}","TotalAmt":"={{ $json.totalAmt }}"}},"credentials":{"quickBooksOAuth2Api":{"id":"credential-id","name":"QuickBooks Online account"}},"typeVersion":1},{"id":"7db34b32-3a46-40a8-b0c3-8a139035fd11","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-128,-336],"parameters":{"color":2,"width":1004,"height":464,"content":"## 4. PDF Attachment Pipeline\nAttaches the original PDF invoice to the created QuickBooks bill.\n\n**Binary data flow:**\nBinary (PDF) is lost after the AI extraction step, so the attachment nodes reference it by name from **Config** using `$('Config').item.binary.attachment_0`.\n\nBoth nodes are connected to Create Bill for **execution order** (they must run after the bill exists), but get binary data via named reference.\n\n**The Force Inline Binary fix:**\nn8n v2 stores binary as DB streams without Content-Length. QuickBooks upload API requires it. The Code node converts streams to inline base64.\n\n**Pipeline:**\n1. Build metadata JSON (AttachableRef → Bill) — gets binary from Config by name\n2. Convert metadata to binary field (`myBinaryFile`)\n3. Fetch PDF Binary from Config by name\n4. Merge PDF binary + metadata binary into one item\n5. ⚠️ Force Inline Binary (stream → base64)\n6. Upload multipart to QB `/upload` endpoint"},"typeVersion":1},{"id":"fd3ac551-c596-4e60-a49c-ef28e138824d","name":"Build Attachment Metadata","type":"n8n-nodes-base.code","position":[-32,176],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Binary is lost in the main pipeline after AI extraction.\n// Reference it by name from Config node which still has attachment_0.\nconst binaryData = $('Config').item.binary.attachment_0;\n\nreturn {\n  json: {\n    \"AttachableRef\": [{\n      \"EntityRef\": {\n        \"type\": \"Bill\",\n        \"value\": $('Create Bill').item.json.Id\n      }\n    }],\n    \"FileName\": binaryData.fileName,\n    \"ContentType\": binaryData.mimeType\n  }\n};"},"typeVersion":2},{"id":"c28826ab-acca-4d7e-86ed-ba02cf0b2f72","name":"Metadata to Binary","type":"n8n-nodes-base.code","position":[192,176],"parameters":{"mode":"runOnceForEachItem","jsCode":"const jsonString = JSON.stringify($json);\n  const buffer = Buffer.from(jsonString, 'utf-8');\n\nreturn {\n    json: $json,\n    binary: {          \n      myBinaryFile: {\n        data: buffer.toString('base64'),\n        mimeType: 'application/json',\n        fileName: 'data.json'\n      }\n    }\n  };"},"typeVersion":2},{"id":"18017675-b796-4d38-b5da-219a7baa10ec","name":"Fetch PDF Binary","type":"n8n-nodes-base.code","position":[192,368],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Fetch the original PDF binary from Config node by name.\n// Binary is lost in the main pipeline after AI extraction,\n// but Config still has attachment_0.\nconst configBinary = $('Config').item.binary;\n\nreturn {\n  json: {},\n  binary: configBinary\n};"},"typeVersion":2},{"id":"07470c1c-506a-4499-a9d7-7b481db3af7e","name":"Merge PDF + Metadata","type":"n8n-nodes-base.merge","position":[416,272],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3.2},{"id":"c997f004-ac58-4128-9bc2-f74ba73e8573","name":"Force Inline Binary","type":"n8n-nodes-base.code","position":[640,272],"parameters":{"jsCode":"// CRITICAL: Force binary data from database stream to inline base64.\n// Without this, QuickBooks upload API fails because n8n v2 stores\n// binary as DB streams which lack Content-Length headers.\n\nconst items = $input.all();\n\nfor (let i = 0; i < items.length; i++) {\n  const item = items[i];\n\n  if (item.binary?.attachment_0) {\n    const buffer = await this.helpers.getBinaryDataBuffer(i, 'attachment_0');\n    const meta = item.binary.attachment_0;\n    item.binary.attachment_0 = {\n      data: buffer.toString('base64'),\n      mimeType: meta.mimeType,\n      fileName: meta.fileName,\n      fileExtension: meta.fileExtension || 'pdf',\n    };\n  }\n\n  if (item.binary?.myBinaryFile) {\n    const buffer = await this.helpers.getBinaryDataBuffer(i, 'myBinaryFile');\n    const meta = item.binary.myBinaryFile;\n    item.binary.myBinaryFile = {\n      data: buffer.toString('base64'),\n      mimeType: meta.mimeType,\n      fileName: meta.fileName,\n      fileExtension: meta.fileExtension || 'json',\n    };\n  }\n}\n\nreturn items;"},"typeVersion":2},{"id":"9acd7686-2d20-4411-97e7-1c070a69d49e","name":"Upload PDF to Bill","type":"n8n-nodes-base.httpRequest","position":[864,272],"parameters":{"url":"=https://quickbooks.api.intuit.com/v3/company/{{ $('Config').item.json.realmId }}/upload","method":"POST","options":{"response":{"response":{"fullResponse":true}}},"sendBody":true,"contentType":"multipart-form-data","authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"file_metadata_01","parameterType":"formBinaryData","inputDataFieldName":"=myBinaryFile"},{"name":"file_content_01","parameterType":"formBinaryData","inputDataFieldName":"attachment_0"}]},"nodeCredentialType":"quickBooksOAuth2Api"},"credentials":{"quickBooksOAuth2Api":{"id":"credential-id","name":"QuickBooks Online account"}},"typeVersion":4.2},{"id":"4943de3b-0962-4410-afbb-5f1b1e9b7b34","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1040,-336],"parameters":{"color":5,"width":400,"height":420,"content":"## 5. Confirmation & Error Handling\n\n**Success path:**\nSends confirmation email back to the invoice sender with bill details (toggleable via Config).\n\n**Skip paths:**\n- ⏭️ **Not an invoice** — PDF is not an invoice, silently skipped\n\n**Error paths:**\n- ❌ **AI extraction failed** — Missing required fields, forwards to AP team\n- ❌ **Vendor not found** — Notifies AP team with the vendor name so they can create it in QuickBooks"},"typeVersion":1},{"id":"6f3b3896-bfb0-4d1d-b044-764ad7ab9079","name":"Send Confirmation?","type":"n8n-nodes-base.if","position":[1088,272],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"confirm-check","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $('Config').item.json.sendConfirmation }}","rightValue":""}]}},"typeVersion":2.2},{"id":"c4de8abb-56db-471a-b4ff-85f9193a79b4","name":"Send Confirmation Email","type":"n8n-nodes-base.gmail","position":[1312,272],"webhookId":"a24cf3aa-9be0-41aa-97d4-09057c5569e2","parameters":{"sendTo":"={{ $('Gmail Trigger').item.json.from }}","message":"=Hi,\n\nYour invoice has been processed automatically.\n• PDF: Attached to bill ✓\n\nThis is an automated message from the Invoice Processor workflow.","options":{},"subject":"=Invoice Processed: {{ $('Validate Extracted Data').item.json.data.invoice_number || 'N/A' }} → QuickBooks Bill #{{ $('Create Bill').item.json.Id }}","emailType":"text"},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"Qmag Gmail account"}},"typeVersion":2.1},{"id":"2f320970-0c12-4dec-bfc4-5ca4feaef46a","name":"Error: Extraction Failed","type":"n8n-nodes-base.gmail","position":[-928,560],"webhookId":"0283b400-90bc-4c82-82ad-a6d0fbd724df","parameters":{"sendTo":"={{ $('Config').item.json.apTeamEmail }}","message":"=The AI could not extract valid invoice data from an email.\n\n• From: {{ $('Gmail Trigger').item.json.from }}\n• Subject: {{ $('Gmail Trigger').item.json.subject }}\n• Errors: {{ $json.errors.join(', ') }}\n\nPlease process this invoice manually in QuickBooks.\n\nOriginal email ID: {{ $('Gmail Trigger').item.json.messageId }}","options":{},"subject":"=[Manual Processing] Could not extract invoice data from {{ $('Gmail Trigger').item.json.from }}","emailType":"text"},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"Qmag Gmail account"}},"typeVersion":2.1},{"id":"ce12f7ea-c81b-4751-9e13-39f11e53ddc6","name":"Error: Vendor Not Found","type":"n8n-nodes-base.gmail","position":[-480,464],"webhookId":"cac36ab3-9685-4bae-9400-8596dab93c01","parameters":{"sendTo":"={{ $('Config').item.json.apTeamEmail }}","message":"=An invoice was received but the vendor was not found in QuickBooks.\n\n• Vendor Name (from invoice): {{ $('Validate Extracted Data').item.json.data.vendor_name }}\n• Invoice #: {{ $('Validate Extracted Data').item.json.data.invoice_number || 'N/A' }}\n• Amount: {{ $('Validate Extracted Data').item.json.data.currency }} {{ $('Validate Extracted Data').item.json.data.amount }}\n• From: {{ $('Gmail Trigger').item.json.from }}\n\n**Action needed:**\n1. Create the vendor in QuickBooks, OR\n2. Check if the vendor exists under a different name\n3. Process the invoice manually\n\nOriginal email ID: {{ $('Gmail Trigger').item.json.messageId }}","options":{},"subject":"=[Action Required] Unknown vendor: {{ $('Validate Extracted Data').item.json.data.vendor_name }}","emailType":"text"},"credentials":{"gmailOAuth2":{"id":"credential-id","name":"Qmag Gmail account"}},"typeVersion":2.1},{"id":"da38272a-a472-4af7-ac6c-a7e490d128b4","name":"Search vendor","type":"n8n-nodes-base.quickbooks","position":[-928,368],"parameters":{"limit":1,"filters":{"query":"=WHERE DisplayName LIKE '%{{ $json.data.vendor_name }}%'"},"resource":"vendor","operation":"getAll"},"credentials":{"quickBooksOAuth2Api":{"id":"credential-id","name":"QuickBooks Online account"}},"typeVersion":1}],"pinData":{},"connections":{"Config":{"main":[[{"node":"Extract Text from PDF","type":"main","index":0}]]},"Is Valid?":{"main":[[{"node":"Search vendor","type":"main","index":0}],[{"node":"Error: Extraction Failed","type":"main","index":0}]]},"Create Bill":{"main":[[{"node":"Build Attachment Metadata","type":"main","index":0},{"node":"Fetch PDF Binary","type":"main","index":0}]]},"Is Invoice?":{"main":[[{"node":"Validate Extracted Data","type":"main","index":0}]]},"Gmail Trigger":{"main":[[{"node":"Config","type":"main","index":0}]]},"Search vendor":{"main":[[{"node":"Vendor Found?","type":"main","index":0}]]},"Vendor Found?":{"main":[[{"node":"Prepare Bill Data","type":"main","index":0}],[{"node":"Error: Vendor Not Found","type":"main","index":0}]]},"Fetch PDF Binary":{"main":[[{"node":"Merge PDF + Metadata","type":"main","index":1}]]},"OpenAI Chat Model":{"ai_languageModel":[[{"node":"AI Extract Invoice Data","type":"ai_languageModel","index":0}]]},"Prepare Bill Data":{"main":[[{"node":"Create Bill","type":"main","index":0}]]},"Metadata to Binary":{"main":[[{"node":"Merge PDF + Metadata","type":"main","index":0}]]},"Send Confirmation?":{"main":[[{"node":"Send Confirmation Email","type":"main","index":0}]]},"Upload PDF to Bill":{"main":[[{"node":"Send Confirmation?","type":"main","index":0}]]},"Force Inline Binary":{"main":[[{"node":"Upload PDF to Bill","type":"main","index":0}]]},"Merge PDF + Metadata":{"main":[[{"node":"Force Inline Binary","type":"main","index":0}]]},"Extract Text from PDF":{"main":[[{"node":"AI Extract Invoice Data","type":"main","index":0}]]},"AI Extract Invoice Data":{"main":[[{"node":"Is Invoice?","type":"main","index":0}]]},"Validate Extracted Data":{"main":[[{"node":"Is Valid?","type":"main","index":0}]]},"Build Attachment Metadata":{"main":[[{"node":"Metadata to Binary","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":28,"nodeTypes":{"n8n-nodes-base.if":{"count":4},"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":6},"n8n-nodes-base.gmail":{"count":3},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.quickbooks":{"count":2},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.gmailTrigger":{"count":1},"n8n-nodes-base.extractFromFile":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenAi":{"count":1},"@n8n/n8n-nodes-langchain.informationExtractor":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Codez & AI","username":"codez","bio":"Building automations and AI agents for businesses","verified":true,"links":["https://codez.ro"],"avatar":"https://gravatar.com/avatar/896ac5706f22050261dab53648aed193ebdf79040118c0a0ab0d3378dd5bd9f1?r=pg&d=retro&size=200"},"nodes":[{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":356,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmail","codex":{"data":{"alias":["email","human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"transform\"]","defaults":{"name":"Gmail"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":455,"icon":"file:quickbooks.svg","name":"n8n-nodes-base.quickbooks","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.quickbooks/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/quickbooks/"}]},"categories":["Finance & Accounting"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"transform\"]","defaults":{"name":"QuickBooks Online"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAwIDI1MDAiPjxjaXJjbGUgY3g9IjEyNTAiIGN5PSIxMjUwIiByPSIxMjUwIiBmaWxsPSIjMmNhMDFjIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTMwMS4zIDEyNDkuNmMuMSAyODIuNiAyMjggNTEyLjQgNTEwLjYgNTE0LjloNzIuM3YtMTg4LjloLTcyLjNjLTE3NS4yIDQ3LjgtMzU1LjktNTUuNS00MDMuNi0yMzAuNy0uNC0xLjQtLjctMi44LTEuMS00LjItNDkuMS0xNzcuNSA1My43LTM2MS40IDIzMC42LTQxMi41aDM2LjFhMzIyIDMyMiAwIDAgMSAxMzcuNSAwSDk4N3YxMDAyLjljLS45IDEwNi4xIDg0LjQgMTkyLjkgMTkwLjUgMTkzLjlWNzI5LjZIODEzYy0yODQuNiAxLjUtNTE0IDIzMy40LTUxMi41IDUxOHYuMXptMTM4Ny41LTUxOS44aC03Mi4zdjE5OC45aDcyLjNjMTc0LjgtNDcuNyAzNTUuMSA1NS4zIDQwMi44IDIzMCAuNCAxLjMuNyAyLjcgMS4xIDQgNDguOCAxNzYuOS01My43IDM2MC4xLTIyOS45IDQxMS4xaC0zNi4xYTMyMiAzMjIgMCAwIDEtMTM3LjUgMGgtMTc1LjZWNTcxYy45LTEwNi4xLTg0LjQtMTkyLjktMTkwLjUtMTkzLjl2MTM5Ny40aDM2NC41YzI4Ny4xLTQuNSA1MTYuMi0yNDAuOCA1MTEuOC01MjcuOS00LjQtMjgwLjgtMjMwLjktNTA3LjQtNTExLjgtNTExLjh6Ii8+PC9zdmc+"},"displayName":"QuickBooks Online","typeVersion":1,"nodeCategories":[{"id":8,"name":"Finance & Accounting"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":824,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmailTrigger","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.gmailtrigger/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"Gmail Trigger"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail Trigger","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1153,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"OpenAI Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1235,"icon":"file:extractFromFile.svg","name":"n8n-nodes-base.extractFromFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","decode","decoding","Move Binary Data","Binary","File","PDF","JSON","HTML","ICS","iCal","txt","Text","RTF","XML","64","Base64","Convert"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Extract from File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAuOTM3NSAyQzAuNDE5NzMzIDIgMCAyLjQxOTczIDAgMi45Mzc1VjM3LjMyMjFDMCAzNy44Mzk5IDAuNDE5NzMzIDM4LjI1OTYgMC45Mzc1IDM4LjI1OTZIMjYuMjE1NEMyNi43MzMyIDM4LjI1OTYgMjcuMTUyOSAzNy44Mzk5IDI3LjE1MjkgMzcuMzIyMUwyNy4xNTI5IDMwLjY3MTlMMTYuNzk2OSAzMC42NzE5QzE0Ljg5ODQgMzAuNjcxOSAxMy4zNTk0IDI5LjEzMjkgMTMuMzU5NCAyNy4yMzQ0VjI1LjM1OTRDMTMuMzU5NCAyMy40NjA5IDE0Ljg5ODQgMjEuOTIxOSAxNi43OTY5IDIxLjkyMTlIMjcuMTUyOUwyNy4xNTI5IDE1Ljc4MjFIMTQuMzA4M0MxMy43OTA2IDE1Ljc4MjEgMTMuMzcwOCAxNS4zNjI0IDEzLjM3MDggMTQuODQ0NlYySDAuOTM3NVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTE2LjAyNzEgMkMxNS45NDA4IDIgMTUuODcwOCAyLjA2OTk2IDE1Ljg3MDggMi4xNTYyNVYxMi44MTM0QzE1Ljg3MDggMTMuMDcyMyAxNi4wODA3IDEzLjI4MjEgMTYuMzM5NiAxMy4yODIxSDI2Ljk5NjdDMjcuMDgzIDEzLjI4MjEgMjcuMTUyOSAxMy4yMTIyIDI3LjE1MjkgMTMuMTI1OUwyNy4xNTI5IDEyLjYxNzFDMjcuMTUyOSAxMi4zNjg4IDI3LjA1NDUgMTIuMTMwNyAyNi44NzkxIDExLjk1NUwxNy4yMjI1IDIuMjc1MzhDMTcuMDQ2NiAyLjA5OTA4IDE2LjgwNzkgMiAxNi41NTg4IDJIMTYuMDI3MVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTI5Ljc2NDIgMzQuNjUwM0MyOS4wMzQgMzMuOTE2IDI5LjAzNzQgMzIuNzI4OCAyOS43NzE2IDMxLjk5ODZMMzMuNjE5NyAyOC4xNzE5TDE2Ljc5NjkgMjguMTcxOUMxNi4yNzkxIDI4LjE3MTkgMTUuODU5NCAyNy43NTIxIDE1Ljg1OTQgMjcuMjM0NFYyNS4zNTk0QzE1Ljg1OTQgMjQuODQxNiAxNi4yNzkxIDI0LjQyMTkgMTYuNzk2OSAyNC40MjE5TDMzLjU0MTIgMjQuNDIxOUwyOS43NzE2IDIwLjY3MzNDMjkuMDM3NCAxOS45NDMxIDI5LjAzNCAxOC43NTU5IDI5Ljc2NDIgMTguMDIxNkMzMC40OTQ0IDE3LjI4NzQgMzEuNjgxNiAxNy4yODQgMzIuNDE1OSAxOC4wMTQyTDM5LjQ0NzEgMjUuMDA2NEMzOS44MDEgMjUuMzU4MyA0MCAyNS44MzY4IDQwIDI2LjMzNTlDNDAgMjYuODM1IDM5LjgwMSAyNy4zMTM1IDM5LjQ0NzEgMjcuNjY1NUwzMi40MTU5IDM0LjY1NzZDMzEuNjgxNiAzNS4zODc4IDMwLjQ5NDQgMzUuMzg0NSAyOS43NjQyIDM0LjY1MDNaIiBmaWxsPSIjMzUzRjZFIi8+Cjwvc3ZnPgo="},"displayName":"Extract from File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1273,"icon":"fa:project-diagram","name":"@n8n/n8n-nodes-langchain.informationExtractor","codex":{"data":{"alias":["NER","parse","parsing","JSON","data extraction","structured"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.information-extractor/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Chains","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Information Extractor"},"iconData":{"icon":"project-diagram","type":"icon"},"displayName":"Information Extractor","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":34,"name":"Invoice Processing"},{"id":49,"name":"AI Summarization"}],"image":[]}}