AutomationFlowsData & Sheets › Automated Airtable to Postgres Migration with N8n

Automated Airtable to Postgres Migration with N8n

ByZacharia Kimotho @imperolq on n8n.io

This ETL system automates the process of migrating data from Airtable to PostgreSQL with a single API request. It maps your Airtable schema into a Postgres-compatible structure. Automatically creates new tables in your Postgres database. Migrates all the data while preserving…

Webhook trigger★★★★★ complexity66 nodesHTTP Request
Data & Sheets Trigger: Webhook Nodes: 66 Complexity: ★★★★★ Added:

This workflow corresponds to n8n.io template #4772 — we link there as the canonical source.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "7cc4e21b-cb92-479e-a1fb-3451afecfb1f",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        740,
        140
      ],
      "parameters": {},
      "typeVersion": 3
    },
    {
      "id": "c38d0912-cce6-46fb-9a50-a466c2c25928",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        20
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "a63abdc8-3b60-43df-bcf3-91dd08fbbec4",
      "name": "Create database",
      "type": "n8n-nodes-base.code",
      "position": [
        1680,
        200
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "2de91fa1-ad35-41d5-b37f-8ef4c80af3c1",
      "name": "Ser user data",
      "type": "n8n-nodes-base.set",
      "position": [
        1480,
        200
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "32dc59c6-161b-4aa4-bd98-fe3036d793df",
      "name": "set error",
      "type": "n8n-nodes-base.set",
      "position": [
        1880,
        200
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "20c9a32b-4d06-447d-98db-b2e0a728ca38",
      "name": "Limit1",
      "type": "n8n-nodes-base.limit",
      "disabled": true,
      "position": [
        520,
        420
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "56795d8b-81bd-4add-b68f-ff924305d6e8",
      "name": "Loop Over Items1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        760,
        580
      ],
      "parameters": {},
      "typeVersion": 3
    },
    {
      "id": "92a44c39-91d1-4c96-a1c7-96ca8f99f86f",
      "name": "Ser user data1",
      "type": "n8n-nodes-base.set",
      "position": [
        1820,
        660
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "b23dee3e-2ed4-4972-b62d-7eb86752fa16",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        1640,
        660
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "8f666a17-53a7-4361-af17-7f3abadc6c71",
      "name": "Upsert records",
      "type": "n8n-nodes-base.code",
      "position": [
        2000,
        660
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "ceaa9cde-a1b0-41da-aaee-5e5ae6d772f7",
      "name": "Set columns",
      "type": "n8n-nodes-base.set",
      "position": [
        920,
        40
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "805b9321-e7f6-4834-a104-b61d1149ced0",
      "name": "Limit3",
      "type": "n8n-nodes-base.limit",
      "disabled": true,
      "position": [
        1240,
        980
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d23c5883-e59f-4315-99bc-9c148b1a2964",
      "name": "Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        1400,
        980
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "965c32c8-e6ef-4f2a-93e9-21993d397e65",
      "name": "Loop Over Items2",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1600,
        980
      ],
      "parameters": {},
      "typeVersion": 3
    },
    {
      "id": "abf83ac2-2b18-4a75-be09-b4edfeee91cb",
      "name": "Ser user data2",
      "type": "n8n-nodes-base.set",
      "position": [
        1840,
        1120
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "e69aceba-f09d-4e30-8f2d-fd51f7707d68",
      "name": "Edit Fields1",
      "type": "n8n-nodes-base.set",
      "position": [
        1820,
        960
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "7d2963d2-fd0b-4f79-8073-0e2b153b2b39",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        920
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "45a53775-a5d2-423e-9e93-e9d69059ee69",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        460
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "1235d5c0-0213-4ed6-8a74-10436712f23f",
      "name": "If1",
      "type": "n8n-nodes-base.if",
      "position": [
        1100,
        680
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "b782d0de-9c14-47ff-af73-4d0ca8874488",
      "name": "get schema",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        60,
        420
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "2c1b1269-f6a8-48f3-a9ad-6ad3a640f6b3",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        200,
        420
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5474c06f-db29-4f9c-8905-cd2865509518",
      "name": "set globals",
      "type": "n8n-nodes-base.set",
      "position": [
        380,
        420
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "527425b9-55a1-4416-bece-727413f2a1ef",
      "name": "Split Out2",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1060,
        980
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "ea5c2bb4-a6d5-4027-bf1f-df70bab1f361",
      "name": "Upsert records2",
      "type": "n8n-nodes-base.code",
      "onError": "continueRegularOutput",
      "position": [
        940,
        1380
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "dd128785-1a30-43ec-a0f0-f4e1fc0b3f3d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        1340
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "958dc213-4f2d-4814-b5b4-f469dd049698",
      "name": "Airtable - Postgres",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -240,
        -760
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "132a2f21-ef78-40b1-98aa-2cf7ae83cb26",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        340,
        -760
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "2dbef75e-c917-42db-88f9-372cdde690d6",
      "name": "Claude",
      "type": "n8n-nodes-base.html",
      "position": [
        140,
        -760
      ],
      "parameters": {},
      "typeVersion": 1.2
    },
    {
      "id": "a57a0cd3-45c8-4e6f-a806-faa5a2d02d69",
      "name": "Test credentials",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1140,
        -500
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "55cb7baf-f712-4ec1-95b0-da82f2c9294c",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        -540
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "7d745baa-5841-49e5-953e-69000647367a",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -300,
        -800
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "aa35440f-e058-4ffc-b8b2-ee01c3c8ffbe",
      "name": "Pass all data",
      "type": "n8n-nodes-base.set",
      "position": [
        -760,
        420
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "0b76bae8-0081-4782-8303-ae1524423a30",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        720,
        -400
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "c4290ddb-6bf8-4ed6-b078-164dd6ae71c8",
      "name": "Get records",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        940,
        680
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "4dfcc6f9-c738-4b69-8fa7-a33e9ac84e5f",
      "name": "Split Out3",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1280,
        660
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "82fd4438-6c3a-4c7e-92ac-208eafef23fa",
      "name": "Set record fields",
      "type": "n8n-nodes-base.set",
      "position": [
        1460,
        660
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "d0915dfd-9256-40c4-b6a8-1e0204815a24",
      "name": "New mapper",
      "type": "n8n-nodes-base.code",
      "position": [
        1080,
        220
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "ef13bffd-18c1-425f-ac49-5d4c8c219165",
      "name": "If3",
      "type": "n8n-nodes-base.if",
      "position": [
        1240,
        220
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "17dfa37d-490f-4b31-84d9-75f20997d630",
      "name": "Airtable - Postgres system",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -980,
        420
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "b612df7f-27b7-478b-a168-4f0cbc9a8bdb",
      "name": "set tables found",
      "type": "n8n-nodes-base.set",
      "position": [
        1660,
        -500
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "3f48f6d3-d8f4-4b1b-b17e-6b1ae83e3bac",
      "name": "success message",
      "type": "n8n-nodes-base.set",
      "position": [
        1480,
        -400
      ],
      "parameters": {},
      "executeOnce": true,
      "typeVersion": 3.4
    },
    {
      "id": "77d41da1-7fb6-4f7d-900a-e5fa8b895b78",
      "name": "Failure message",
      "type": "n8n-nodes-base.set",
      "position": [
        1500,
        -240
      ],
      "parameters": {},
      "executeOnce": true,
      "typeVersion": 3.4
    },
    {
      "id": "7b7f1fdc-168b-4d59-aced-50a6fc94a250",
      "name": "Pass both responses",
      "type": "n8n-nodes-base.set",
      "position": [
        1680,
        -240
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "62380ea4-521f-434e-b993-f80cfe46644f",
      "name": "if successful",
      "type": "n8n-nodes-base.if",
      "position": [
        1280,
        -320
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "9a224788-cddc-4f84-b035-071bbcd18adb",
      "name": "Test postgres credentials",
      "type": "n8n-nodes-base.code",
      "position": [
        1100,
        -320
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "086846b4-b698-4d25-b0cc-0eb0aa524f8a",
      "name": "Edit postgres fields",
      "type": "n8n-nodes-base.set",
      "position": [
        920,
        -320
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "99d1c93c-52d1-4035-b0ff-83eb9a44d8de",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1720,
        -260
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "44b12810-895a-4f50-a5e0-e2d306c11491",
      "name": "base id to delete",
      "type": "n8n-nodes-base.set",
      "position": [
        740,
        980
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "a15b9dd2-e057-432f-84cf-270ee1e87b60",
      "name": "get schema to delete",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        900,
        980
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "74940eee-8673-4353-82fa-1e14a6feedfe",
      "name": "Delete table",
      "type": "n8n-nodes-base.code",
      "onError": "continueRegularOutput",
      "position": [
        2020,
        1120
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "9a8ea80f-acd3-4aae-ac9c-d76217e74756",
      "name": "Set user data3",
      "type": "n8n-nodes-base.set",
      "position": [
        740,
        1380
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "73ef4d66-022d-42a9-a89e-1f2864bf8617",
      "name": "Edit Fields2",
      "type": "n8n-nodes-base.set",
      "position": [
        920,
        500
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "363734be-a114-4963-8506-079cc8330176",
      "name": "Edit airtable fields1",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2000,
        960
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "79ff06d3-216d-4419-9103-d00030847648",
      "name": "Edit airtable fields2",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1180,
        1380
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "bee99633-57a6-413f-b26c-cba90b31ae5e",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        -540,
        400
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "3df05140-7aec-4333-958d-e68382168888",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1760,
        60
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "7ec508c9-60e0-41f5-a79b-a1f100843f33",
      "name": "set webhook",
      "type": "n8n-nodes-base.set",
      "position": [
        -40,
        -760
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "d2d998aa-b64c-4c09-ae6d-81fca23a306b",
      "name": "postgres credentials",
      "type": "n8n-nodes-base.set",
      "position": [
        -220,
        -400
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "19486fd8-9dd6-45b6-8bfb-3d0b04c88921",
      "name": "Credential response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1860,
        -400
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "5255ec1d-6f79-4d74-82d1-ee3ed1c8b401",
      "name": "Credential response1",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1360,
        520
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "16c6d887-f5c9-4a67-a9fc-62534bed91be",
      "name": "Set webhook user data",
      "type": "n8n-nodes-base.set",
      "position": [
        -240,
        420
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "750c16c0-5111-49f9-92ca-c0e4be56f928",
      "name": "airtable fields",
      "type": "n8n-nodes-base.set",
      "position": [
        920,
        -500
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "29bef374-f55d-4ff3-982e-3a86ff1bd828",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -580,
        200
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "3efd48d2-e29c-4b1d-9b67-753c8197d0e6",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        200
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "0de7ce0e-35da-43bc-818f-8d830047ea2d",
      "name": "Validate  base id",
      "type": "n8n-nodes-base.set",
      "position": [
        -80,
        420
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "6a59b874-7323-4cc9-85dd-c66d17b33250",
      "name": "Field mapping",
      "type": "n8n-nodes-base.set",
      "position": [
        920,
        220
      ],
      "parameters": {},
      "typeVersion": 3.4
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "airtable fields",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Edit postgres fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If1": {
      "main": [
        [
          {
            "node": "Split Out3",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If3": {
      "main": [
        [
          {
            "node": "Ser user data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Claude": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fields": {
      "main": [
        [
          {
            "node": "Loop Over Items2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit1": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          },
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit3": {
      "main": [
        [
          {
            "node": "Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "postgres credentials",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set webhook user data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "base id to delete",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set user data3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "set globals",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "set error": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New mapper": {
      "main": [
        [
          {
            "node": "If3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out2": {
      "main": [
        [
          {
            "node": "Limit3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out3": {
      "main": [
        [
          {
            "node": "Set record fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get schema": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Ser user data1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get records": {
      "main": [
        [
          {
            "node": "If1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "set globals": {
      "main": [
        [
          {
            "node": "Limit1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "set webhook": {
      "main": [
        [
          {
            "node": "Claude",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delete table": {
      "main": [
        [
          {
            "node": "Loop Over Items2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "Edit airtable fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields2": {
      "main": [
        [
          {
            "node": "Credential response1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Field mapping": {
      "main": [
        [
          {
            "node": "New mapper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pass all data": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ser user data": {
      "main": [
        [
          {
            "node": "Create database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "if successful": {
      "main": [
        [
          {
            "node": "success message",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Failure message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ser user data1": {
      "main": [
        [
          {
            "node": "Upsert records",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ser user data2": {
      "main": [
        [
          {
            "node": "Delete table",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set user data3": {
      "main": [
        [
          {
            "node": "Upsert records2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upsert records": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create database": {
      "main": [
        [
          {
            "node": "set error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Failure message": {
      "main": [
        [
          {
            "node": "Pass both responses",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Set columns",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Field mapping",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upsert records2": {
      "main": [
        [
          {
            "node": "Edit airtable fields2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "airtable fields": {
      "main": [
        [
          {
            "node": "Test credentials",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "success message": {
      "main": [
        [
          {
            "node": "Pass both responses",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items1": {
      "main": [
        [
          {
            "node": "Edit Fields2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get records",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items2": {
      "main": [
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Ser user data2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Test credentials": {
      "main": [
        [
          {
            "node": "set tables found",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "set tables found": {
      "main": [
        [
          {
            "node": "Credential response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set record fields": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate  base id": {
      "main": [
        [
          {
            "node": "get schema",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "base id to delete": {
      "main": [
        [
          {
            "node": "get schema to delete",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable - Postgres": {
      "main": [
        [
          {
            "node": "set webhook",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Pass both responses": {
      "main": [
        [
          {
            "node": "Credential response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit postgres fields": {
      "main": [
        [
          {
            "node": "Test postgres credentials",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get schema to delete": {
      "main": [
        [
          {
            "node": "Split Out2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "postgres credentials": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set webhook user data": {
      "main": [
        [
          {
            "node": "Validate  base id",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Test postgres credentials": {
      "main": [
        [
          {
            "node": "if successful",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable - Postgres system": {
      "main": [
        [
          {
            "node": "Pass all data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This ETL system automates the process of migrating data from Airtable to PostgreSQL with a single API request. It maps your Airtable schema into a Postgres-compatible structure. Automatically creates new tables in your Postgres database. Migrates all the data while preserving…

Source: https://n8n.io/workflows/4772/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

BP_check. Uses googleSheets, @n-octo-n/n8n-nodes-json-database, httpRequest, itemLists. Webhook trigger; 99 nodes.

Google Sheets, @N Octo N/N8N Nodes Json Database, HTTP Request +2
Data & Sheets

v25.1.3. Uses httpRequest, mySql, n8n-nodes-zohozeptomail. Webhook trigger; 98 nodes.

HTTP Request, MySQL, N8N Nodes Zohozeptomail
Data & Sheets

This solution enables you to manage all your Notion and Todoist tasks from different workspaces as well as your calendar events in a single place. This is 2 way sync with partial support for recurring

Redis, Notion, Todoist +6
Data & Sheets

Notion to Clockify Sync Template. Uses scheduleTrigger, clockify, compareDatasets, stopAndError. Webhook trigger; 68 nodes.

Clockify, Stop And Error, Notion +1
Data & Sheets

This workflow synchronizes three entities from Notion to Clockify, allowing tracked time to be linked to client-related projects or tasks.

Clockify, Stop And Error, Notion +1