⚡ Only 300 spots remaining • Closes in 2d 14h 32m

Back to Workflow Library
Productivity

↔️ Airtable Batch Processing

This comprehensive workflow automation helps you streamline ↔️ Airtable Batch Processing processes. By using this blueprint, you can eliminate manual data entry and ensure seamless integration between your favorite platforms.

#Airtable
#Batch
#Processing

Automation Logic

n8n JSON Blueprint

This workflow is pre-configured and ready for deployment. Simply import the JSON template into your n8n instance and configure your credentials.

This is an exclusive blueprint. Copy the JSON below to use it.

QUICK DEPLOY

  • 1
    Download the .json file
  • 2
    Open n8n & click "Import"
  • 3
    Configure your API keys

PRO TIP

Always test your workflow in a development environment before pushing to production.

JSON BLUEPRINT

n8n-workflow.json
{
  "id": "121pu6oiTjzkJ8OT",
  "meta": {
    "instanceId": "d160e539d2f1a627c61dec8128071eca3529ebaa5ae124b8b92c197acd24da57"
  },
  "name": "↔️ Airtable Batch Processing",
  "tags": [
    {
      "id": "Lt9iCvabUby2qWDA",
      "name": "subprocess",
      "createdAt": "2025-03-31T18:34:58.629Z",
      "updatedAt": "2025-03-31T18:34:58.629Z"
    }
  ],
  "nodes": [
    {
      "id": "35a541ff-867e-4578-bfff-d955c6cce6c9",
      "name": "upsert",
      "type": "n8n-nodes-base.httpRequest",
      "maxTries": 5,
      "position": [
        760,
        -200
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $('Airtable Subprocess').first().json.baseId }}/{{ $('Airtable Subprocess').first().json.tableIdOrName }}",
        "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": "predefinedCredentialType",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "c3XcXntDvRoTITuL",
          "name": "Airtable s.mayerhofer"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "c422716d-c0c6-4998-ac99-d62a4d298aae",
      "name": "random data",
      "type": "n8n-nodes-base.debugHelper",
      "position": [
        -240,
        -720
      ],
      "parameters": {
        "category": "randomData",
        "randomDataType": "address"
      },
      "typeVersion": 1
    },
    {
      "id": "e0a01b39-a431-40cd-bfa3-1764fd2af4cf",
      "name": "When clicking ‘Test workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -460,
        -720
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "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
    },
    {
      "id": "b9cd2614-4a7b-4d68-aa4f-4cc44b27e6de",
      "name": "batch 10",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -40,
        -260
      ],
      "parameters": {
        "options": {},
        "batchSize": 10
      },
      "typeVersion": 3
    },
    {
      "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
    },
    {
      "id": "9cb16c31-6d7b-4e49-9d24-92047a52d5e7",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        180,
        -260
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "update",
              "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": "upsert",
              "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": "insert",
              "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
    },
    {
      "id": "7dede519-a841-45a2-b85c-6f2cd4868ddb",
      "name": "insert",
      "type": "n8n-nodes-base.httpRequest",
      "maxTries": 5,
      "position": [
        760,
        40
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $('Airtable Subprocess').first().json.baseId }}/{{ $('Airtable Subprocess').first().json.tableIdOrName }}",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "jsonBody": "={\n  \"records\": {{ $json.records.toJsonString() }}\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "c3XcXntDvRoTITuL",
          "name": "Airtable s.mayerhofer"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "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
    },
    {
      "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
    },
    {
      "id": "15936739-2967-4d15-87ed-9320467a6d73",
      "name": "retry request",
      "type": "n8n-nodes-base.merge",
      "position": [
        1340,
        -220
      ],
      "parameters": {
        "mode": "chooseBranch"
      },
      "typeVersion": 3
    },
    {
      "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
    },
    {
      "id": "51929ff9-e297-454d-b1ae-54df37534b2f",
      "name": "retry request1",
      "type": "n8n-nodes-base.merge",
      "position": [
        1340,
        20
      ],
      "parameters": {
        "mode": "chooseBranch"
      },
      "typeVersion": 3
    },
    {
      "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](https://support.airtable.com/docs/managing-api-call-limits-in-airtable#monthly-call-limits-for-free-and-team-plans) -> 0.5 second wait"
      },
      "typeVersion": 1
    },
    {
      "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](https://airtable.com/developers/web/api/update-multiple-records)]"
      },
      "typeVersion": 1
    },
    {
      "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
    },
    {
      "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
    },
    {
      "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
    },
    {
      "id": "47867b7b-a7d3-484e-b320-1377159f1b58",
      "name": "retry request2",
      "type": "n8n-nodes-base.merge",
      "position": [
        1340,
        -460
      ],
      "parameters": {
        "mode": "chooseBranch"
      },
      "typeVersion": 3
    },
    {
      "id": "c96df332-3338-4d05-82db-4a3de9f767b3",
      "name": "Aggregate3",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        560,
        -440
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "records"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "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
    },
    {
      "id": "e9c5789c-2fc9-4107-8d07-6ad164ad7a69",
      "name": "Aggregate2",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        560,
        40
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "records"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "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
    },
    {
      "id": "602c0a94-643e-4e13-b534-3df4d0044428",
      "name": "Aggregate1",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        560,
        -200
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "records"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "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
    },
    {
      "id": "a6ba6292-9883-48e6-b341-a67121c42968",
      "name": "update",
      "type": "n8n-nodes-base.httpRequest",
      "maxTries": 5,
      "position": [
        760,
        -440
      ],
      "parameters": {
        "url": "=https://api.airtable.com/v0/{{ $('Airtable Subprocess').first().json.baseId }}/{{ $('Airtable Subprocess').first().json.tableIdOrName }}/",
        "method": "PATCH",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        },
        "jsonBody": "={\n  \"records\": {{ $json.records.toJsonString() }}\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "airtableTokenApi"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "c3XcXntDvRoTITuL",
          "name": "Airtable s.mayerhofer"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "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
    },
    {
      "id": "1c309f68-345c-459a-b8a4-dfe716f5badf",
      "name": "Set Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        40,
        -720
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": []
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9be3eba5-fb5d-4fda-83c4-1295e5ed31a5",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        240,
        -720
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "records"
      },
      "typeVersion": 1
    },
    {
      "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
    },
    {
      "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
    },
    {
      "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
    },
    {
      "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
    },
    {
      "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
    },
    {
      "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
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "333e3b43-c098-4a97-8c47-df93df2672ed",
  "connections": {
    "Switch": {
      "main": [
        [
          {
            "node": "Edit Fields4",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Edit Fields2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "insert": {
      "main": [
        [
          {
            "node": "rate limit?1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "update": {
      "main": [
        [
          {
            "node": "rate limit?2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "upsert": {
      "main": [
        [
          {
            "node": "rate limit?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 5s": {
      "main": [
        [
          {
            "node": "retry request",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Wait 5s1": {
      "main": [
        [
          {
            "node": "retry request1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Wait 5s2": {
      "main": [
        [
          {
            "node": "retry request2",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "batch 10": {
      "main": [
        [
          {
            "node": "return merged output",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Airtable Batch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "batch 10",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate1": {
      "main": [
        [
          {
            "node": "upsert",
            "type": "main",
            "index": 0
          },
          {
            "node": "retry request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate2": {
      "main": [
        [
          {
            "node": "insert",
            "type": "main",
            "index": 0
          },
          {
            "node": "retry request1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate3": {
      "main": [
        [
          {
            "node": "update",
            "type": "main",
            "index": 0
          },
          {
            "node": "retry request2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Fields": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "random data": {
      "main": [
        []
      ]
    },
    "rate limit?": {
      "main": [
        [
          {
            "node": "Wait 5s",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 0.2s to prevent rate limits",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "Aggregate1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields2": {
      "main": [
        [
          {
            "node": "Aggregate2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields4": {
      "main": [
        [
          {
            "node": "Aggregate3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "rate limit?1": {
      "main": [
        [
          {
            "node": "Wait 5s1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 0.2s to prevent rate limits",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "rate limit?2": {
      "main": [
        [
          {
            "node": "Wait 5s2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 0.2s to prevent rate limits",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "retry request": {
      "main": [
        [
          {
            "node": "upsert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable Batch": {
      "main": [
        []
      ]
    },
    "retry request1": {
      "main": [
        [
          {
            "node": "insert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "retry request2": {
      "main": [
        [
          {
            "node": "update",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable Subprocess": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 0.2s to prevent rate limits": {
      "main": [
        [
          {
            "node": "batch 10",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Test workflow’": {
      "main": [
        [
          {
            "node": "random data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

To use this, copy the JSON above and paste it directly onto your n8n canvas.

IMPLEMENTATION GUIDE

Required Nodes

  • Airtable Node
  • Batch Node
  • Processing Node
  • Cron / Webhook Trigger

Core Benefits

  • 100% Automated Execution
  • Reduces Manual Data Entry
  • Infinite Scalability

Need Help Building Your Private Cloud?

Join the elite marketers who have offloaded their entire backend to n8n. Get direct support and custom builds in our private forum.

user