{"id":"121pu6oiTjzkJ8OT","meta":{"instanceId":"workflow-7275210c","versionId":"1.0.0","createdAt":"2025-09-29T07:07:58.303121","updatedAt":"2025-09-29T07:07:58.303153","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"name":"↔️ Airtable Batch Processing","nodes":[{"id":"35a541ff-867e-4578-bfff-d955c6cce6c9","name":"upsert","type":"n8n-nodes-base.httpRequest","maxTries":5,"position":[760,-200],"parameters":{"url":"{{ $env.BASE_URL }}","method":"PATCH","options":{"response":{"response":{"fullResponse":true}}},"jsonBody":"={\n  \"performUpsert\": {\n    \"fieldsToMergeOn\": {{ $('Airtable Subprocess').first().json.fieldsToMergeOn.toJsonString() }}\n  },\n  \"records\": {{ $json.records.toJsonString() }}\n}","sendBody":true,"specifyBody":"json","authentication":"{{ $credentials.predefinedCredentialType }}","nodeCredentialType":"YOUR_CREDENTIAL_HERE"},"credentials":{"airtableTokenApi":{"id":"c3XcXntDvRoTITuL","name":"Airtable s.mayerhofer"}},"retryOnFail":true,"typeVersion":4.2,"waitBetweenTries":5000,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"c422716d-c0c6-4998-ac99-d62a4d298aae","name":"random data","type":"n8n-nodes-base.debugHelper","position":[-240,-720],"parameters":{"category":"randomData","randomDataType":"address"},"typeVersion":1,"notes":"This debugHelper node performs automated tasks as part of the workflow."},{"id":"e0a01b39-a431-40cd-bfa3-1764fd2af4cf","name":"When clicking ‘Test workflow’","type":"n8n-nodes-base.manualTrigger","position":[-460,-720],"parameters":{},"typeVersion":1,"notes":"This manualTrigger node performs automated tasks as part of the workflow."},{"id":"6082ce07-b4c0-42ac-92ea-302bd943ddad","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[-280,-260],"parameters":{"include":"allOtherFields","options":{"destinationFieldName":"fields"},"fieldToSplitOut":"records"},"typeVersion":1,"notes":"This splitOut node performs automated tasks as part of the workflow."},{"id":"b9cd2614-4a7b-4d68-aa4f-4cc44b27e6de","name":"batch 10","type":"n8n-nodes-base.splitInBatches","position":[-40,-260],"parameters":{"options":{},"batchSize":10},"typeVersion":3,"notes":"This splitInBatches node performs automated tasks as part of the workflow."},{"id":"bcc2b8b5-b8cf-4e0b-89dd-584c16baefa1","name":"Airtable Subprocess","type":"n8n-nodes-base.executeWorkflowTrigger","position":[-480,-260],"parameters":{"workflowInputs":{"values":[{"name":"baseId"},{"name":"tableIdOrName"},{"name":"mode"},{"name":"fieldsToMergeOn","type":"array"},{"name":"records","type":"array"}]}},"typeVersion":1.1,"notes":"This executeWorkflowTrigger node performs automated tasks as part of the workflow."},{"id":"9cb16c31-6d7b-4e49-9d24-92047a52d5e7","name":"Switch","type":"n8n-nodes-base.switch","position":[180,-260],"parameters":{"rules":{"values":[{"outputKey":"YOUR_CREDENTIAL_HERE","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"1062f23a-900f-4d7e-b16d-f3c20675a435","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.mode }}","rightValue":"update"}]},"renameOutput":true},{"outputKey":"YOUR_CREDENTIAL_HERE","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"9abb6abc-f7dc-4c6a-a32a-b7e05cf8da4b","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.mode }}","rightValue":"upsert"}]},"renameOutput":true},{"outputKey":"YOUR_CREDENTIAL_HERE","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"00e1d8d7-19bd-434d-afd2-29c9aee3f3b8","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.mode }}","rightValue":"insert"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.2,"notes":"This switch node performs automated tasks as part of the workflow."},{"id":"7dede519-a841-45a2-b85c-6f2cd4868ddb","name":"insert","type":"n8n-nodes-base.httpRequest","maxTries":5,"position":[760,40],"parameters":{"url":"{{ $env.BASE_URL }}","method":"POST","options":{"response":{"response":{"fullResponse":true}}},"jsonBody":"={\n  \"records\": {{ $json.records.toJsonString() }}\n}","sendBody":true,"specifyBody":"json","authentication":"{{ $credentials.predefinedCredentialType }}","nodeCredentialType":"YOUR_CREDENTIAL_HERE"},"credentials":{"airtableTokenApi":{"id":"c3XcXntDvRoTITuL","name":"Airtable s.mayerhofer"}},"retryOnFail":true,"typeVersion":4.2,"waitBetweenTries":5000,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"f05b5c6b-38c9-455b-966b-c3e62c5856a0","name":"rate limit?","type":"n8n-nodes-base.if","position":[940,-200],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"432e1be3-b3f3-4be3-bf0d-6b3f1b724fe7","operator":{"type":"number","operation":"equals"},"leftValue":"={{ $json.statusCode }}","rightValue":429}]}},"typeVersion":2.2,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"41fe368a-0fdb-4cec-b51e-a725c376f136","name":"Wait 0.2s to prevent rate limits","type":"n8n-nodes-base.wait","position":[1140,300],"webhookId":"918cd011-855e-4702-bec0-6b066b4d9765","parameters":{"amount":0.2},"typeVersion":1.1,"notes":"This wait node performs automated tasks as part of the workflow."},{"id":"15936739-2967-4d15-87ed-9320467a6d73","name":"retry request","type":"n8n-nodes-base.merge","position":[1340,-220],"parameters":{"mode":"chooseBranch"},"typeVersion":3,"notes":"This merge node performs automated tasks as part of the workflow."},{"id":"697de0ae-7122-42a3-beb7-db6ddba3783b","name":"rate limit?1","type":"n8n-nodes-base.if","position":[940,40],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"432e1be3-b3f3-4be3-bf0d-6b3f1b724fe7","operator":{"type":"number","operation":"equals"},"leftValue":"={{ $json.statusCode }}","rightValue":429}]}},"typeVersion":2.2,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"51929ff9-e297-454d-b1ae-54df37534b2f","name":"retry request1","type":"n8n-nodes-base.merge","position":[1340,20],"parameters":{"mode":"chooseBranch"},"typeVersion":3,"notes":"This merge node performs automated tasks as part of the workflow."},{"id":"57015189-8a53-4de9-bcf3-370161ddc6a6","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1020,220],"parameters":{"width":360,"height":260,"content":"### Adjust if your monthly call limit exceeded\nOn the Team plan this means 2 requests per second [Source]({{ $env.API_BASE_URL }} -> 0.5 second wait"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"2ceae0cb-48e2-4833-89d6-6dd3565237e5","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-520,-480],"parameters":{"color":5,"width":2080,"height":1000,"content":"# Subprocess\n[[API Docs]({{ $env.API_BASE_URL }}]"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"bb2fcf9b-da31-4827-b8d5-23c500431557","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-520,-820],"parameters":{"width":440,"height":260,"content":"## Run with test data\nConnect to Set Fields"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"7be6bdf3-a320-4005-8ccb-0ef7ac63c0cd","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[0,-880],"parameters":{"color":3,"width":340,"height":320,"content":"## Set Fields\nEnter your row data you want to send to Airtable. The key needs to correspond to the exact column name\n⚠️  Only use fields which exist in the table  ⚠️"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"9fa08e5a-2657-44b1-8403-cb70c3d15940","name":"rate limit?2","type":"n8n-nodes-base.if","position":[940,-440],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"432e1be3-b3f3-4be3-bf0d-6b3f1b724fe7","operator":{"type":"number","operation":"equals"},"leftValue":"={{ $json.statusCode }}","rightValue":429}]}},"typeVersion":2.2,"notes":"This if node performs automated tasks as part of the workflow."},{"id":"47867b7b-a7d3-484e-b320-1377159f1b58","name":"retry request2","type":"n8n-nodes-base.merge","position":[1340,-460],"parameters":{"mode":"chooseBranch"},"typeVersion":3,"notes":"This merge node performs automated tasks as part of the workflow."},{"id":"c96df332-3338-4d05-82db-4a3de9f767b3","name":"Aggregate3","type":"n8n-nodes-base.aggregate","position":[560,-440],"parameters":{"options":{},"fieldsToAggregate":{"fieldToAggregate":[{"fieldToAggregate":"records"}]}},"typeVersion":1,"notes":"This aggregate node performs automated tasks as part of the workflow."},{"id":"70298130-8fe6-46e6-985c-32093a04ae49","name":"Edit Fields4","type":"n8n-nodes-base.set","position":[380,-440],"parameters":{"include":"except","options":{},"assignments":{"assignments":[{"id":"99890d82-1a4f-432d-b7f0-e1b6492d1154","name":"records.fields","type":"object","value":"={{ Object.fromEntries(Object.entries($json.fields).filter(([key]) => key !== 'id')) }}"},{"id":"82479869-a473-4540-84a5-d5ff8ebadcd0","name":"records.id","type":"string","value":"={{ $json.fields.id }}"}]},"excludeFields":"fields","includeOtherFields":true},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"e9c5789c-2fc9-4107-8d07-6ad164ad7a69","name":"Aggregate2","type":"n8n-nodes-base.aggregate","position":[560,40],"parameters":{"options":{},"fieldsToAggregate":{"fieldToAggregate":[{"fieldToAggregate":"records"}]}},"typeVersion":1,"notes":"This aggregate node performs automated tasks as part of the workflow."},{"id":"955e1311-7ff6-460c-bf0a-65b3f4968cbf","name":"Edit Fields2","type":"n8n-nodes-base.set","position":[380,40],"parameters":{"include":"except","options":{},"assignments":{"assignments":[{"id":"99890d82-1a4f-432d-b7f0-e1b6492d1154","name":"records.fields","type":"object","value":"={{ $json.fields }}"}]},"excludeFields":"fields","includeOtherFields":true},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"602c0a94-643e-4e13-b534-3df4d0044428","name":"Aggregate1","type":"n8n-nodes-base.aggregate","position":[560,-200],"parameters":{"options":{},"fieldsToAggregate":{"fieldToAggregate":[{"fieldToAggregate":"records"}]}},"typeVersion":1,"notes":"This aggregate node performs automated tasks as part of the workflow."},{"id":"0f52badd-a85b-43b1-840f-dc4931a647e1","name":"Edit Fields1","type":"n8n-nodes-base.set","position":[380,-200],"parameters":{"include":"except","options":{},"assignments":{"assignments":[{"id":"99890d82-1a4f-432d-b7f0-e1b6492d1154","name":"records.fields","type":"object","value":"={{ $json.fields }}"}]},"excludeFields":"fields","includeOtherFields":true},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"a6ba6292-9883-48e6-b341-a67121c42968","name":"update","type":"n8n-nodes-base.httpRequest","maxTries":5,"position":[760,-440],"parameters":{"url":"{{ $env.BASE_URL }}","method":"PATCH","options":{"response":{"response":{"fullResponse":true}}},"jsonBody":"={\n  \"records\": {{ $json.records.toJsonString() }}\n}","sendBody":true,"specifyBody":"json","authentication":"{{ $credentials.predefinedCredentialType }}","nodeCredentialType":"YOUR_CREDENTIAL_HERE"},"credentials":{"airtableTokenApi":{"id":"c3XcXntDvRoTITuL","name":"Airtable s.mayerhofer"}},"retryOnFail":true,"typeVersion":4.2,"waitBetweenTries":5000,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"da6761a1-ffa2-43f3-a53d-cbd7d09af474","name":"Airtable Batch","type":"n8n-nodes-base.executeWorkflow","position":[440,-720],"parameters":{"options":{},"workflowId":{"__rl":true,"mode":"list","value":"121pu6oiTjzkJ8OT","cachedResultName":"↔️ Airtable Batch Processing"},"workflowInputs":{"value":{"mode":"upsert","baseId":"appXXXXXXXXXXXXX","records":"={{ $json.records }}","tableIdOrName":"tblXXXXXXXXXXXXX","fieldsToMergeOn":"={{[\"field1\", \"field2\"]}}"},"schema":[{"id":"baseId","type":"string","display":true,"removed":false,"required":false,"displayName":"baseId","defaultMatch":false,"canBeUsedToMatch":true},{"id":"tableIdOrName","type":"string","display":true,"removed":false,"required":false,"displayName":"tableIdOrName","defaultMatch":false,"canBeUsedToMatch":true},{"id":"mode","type":"string","display":true,"removed":false,"required":false,"displayName":"mode","defaultMatch":false,"canBeUsedToMatch":true},{"id":"fieldsToMergeOn","type":"array","display":true,"removed":false,"required":false,"displayName":"fieldsToMergeOn","defaultMatch":false,"canBeUsedToMatch":true},{"id":"records","type":"array","display":true,"removed":false,"required":false,"displayName":"records","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":true}},"typeVersion":1.2,"notes":"This executeWorkflow node performs automated tasks as part of the workflow."},{"id":"1c309f68-345c-459a-b8a4-dfe716f5badf","name":"Set Fields","type":"n8n-nodes-base.set","position":[40,-720],"parameters":{"options":{},"assignments":{"assignments":[]}},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"9be3eba5-fb5d-4fda-83c4-1295e5ed31a5","name":"Aggregate","type":"n8n-nodes-base.aggregate","position":[240,-720],"parameters":{"options":{},"aggregate":"aggregateAllItemData","destinationFieldName":"records"},"typeVersion":1,"notes":"This aggregate node performs automated tasks as part of the workflow."},{"id":"cb0960ff-61e1-4930-881c-a370bb6aaf4d","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[680,-1140],"parameters":{"color":3,"width":420,"height":580,"content":"## Airtable Batch\n### mode\npossible values: `upsert|insert|update`\n`upsert`: update if exists or insert new\n`insert`: always insert new\n`update`: update existing record. A field with the name `id` **must** be provided.\n### fieldsToMergeOn\nWill be used as an external ID to match records for updates. For records where no match is found, a new Airtable record will be created.\npossible values: `array of strings`. Example: `{{[\"field1\", \"field2\"]}}`\nAn array with at least one and at most three field names or IDs. IDs must uniquely identify a single record. These cannot be computed fields (formulas, lookups, rollups), and must be one of the following types: number, text, long text, single select, multiple select, date.\n### baseId\nThe part with `app...` in the URL:\nairtable\\.com / **app8pqOLekaICglwg** / tblnXZOdy8VtkAAJD/...\n### tableIdOrName \nThe part with `tbl...` in the URL:\nairtable\\.com / app8pqOLekaICglwg / **tblXXZOdy8VtkAAJD** /..."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"907fe5d6-9562-4ea9-a819-71ff4b34a9bb","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[0,-980],"parameters":{"color":3,"width":620,"height":420,"content":"# Copy to your workflow"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"27f94e0c-c3bd-40f3-b509-e7301339111d","name":"Wait 5s2","type":"n8n-nodes-base.wait","position":[1120,-460],"webhookId":"918cd011-855e-4702-bec0-6b066b4d9765","parameters":{},"typeVersion":1.1,"notes":"This wait node performs automated tasks as part of the workflow."},{"id":"0378ae4c-9c77-4d7d-8211-f0aa3a29ab51","name":"Wait 5s","type":"n8n-nodes-base.wait","position":[1120,-220],"webhookId":"918cd011-855e-4702-bec0-6b066b4d9765","parameters":{},"typeVersion":1.1,"notes":"This wait node performs automated tasks as part of the workflow."},{"id":"0098737b-9482-42fe-afbe-c28f1f9569d1","name":"Wait 5s1","type":"n8n-nodes-base.wait","position":[1140,20],"webhookId":"918cd011-855e-4702-bec0-6b066b4d9765","parameters":{},"typeVersion":1.1,"notes":"This wait node performs automated tasks as part of the workflow."},{"id":"2ec31fa9-6ea3-4a20-b6ed-e1d47b80e187","name":"return merged output","type":"n8n-nodes-base.code","position":[140,-440],"parameters":{"jsCode":"const output = {\n  records: [],\n  updatedRecords: [],\n  createdRecords: []\n};\n\nfor (const item of $input.all()) {\n  output.records = output.records.concat(item.json.body.records ?? [])\n  output.updatedRecords = output.updatedRecords.concat(item.json.body.updatedRecords ?? [])\n  output.createdRecords = output.createdRecords.concat(item.json.body.createdRecords ?? [])\n}\n\nreturn output;"},"typeVersion":2,"notes":"This code node performs automated tasks as part of the workflow."}],"active":false,"settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"versionId":"333e3b43-c098-4a97-8c47-df93df2672ed","connections":{"upsert":{"main":[[],[],[],[],[],[],[],[],[]]},"insert":{"main":[[],[],[],[],[],[],[],[],[]]},"update":{"main":[[],[],[],[],[],[],[],[],[]]}},"description":"Automated workflow: ↔️ Airtable Batch Processing. This workflow integrates 16 different services: stickyNote, httpRequest, wait, code, splitOut. It contains 41 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: ↔️ Airtable Batch Processing. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}