AutomationFlowsE-commerce › Sync Shopify Customer Order Data to Airtable with Auto-updates

Sync Shopify Customer Order Data to Airtable with Auto-updates

ByMohammed Abid @mohammedabid on n8n.io

Shopify Order Data to Airtable

Webhook trigger★★★★☆ complexity25 nodesAirtable
E-commerce Trigger: Webhook Nodes: 25 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #6495 — 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
{
  "id": "V4k5QjFUZSrtTDiE",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Shopify Customer Append/Update",
  "tags": [],
  "nodes": [
    {
      "id": "3b321191-c893-490a-a46d-269f417c4e72",
      "name": "Code17",
      "type": "n8n-nodes-base.code",
      "position": [
        -2600,
        260
      ],
      "parameters": {
        "jsCode": "const order = items[0].json.body;\nconst customer = order.customer || {};\nconst address = customer.default_address || order.billing_address || {};\nconst firstLineItem = order.line_items?.[0] || {};\n\nfunction extractIdFromGid(gid) {\n  return gid ? gid.split('/').pop() : '';\n}\n\nfunction formatDate(dateStr) {\n  return dateStr ? new Date(dateStr).toISOString().split('T')[0] : '';\n}\n\nfunction calculateDaysSince(dateStr) {\n  if (!dateStr) return '';\n  try {\n    const diff = new Date() - new Date(dateStr);\n    return Math.floor(diff / (1000 * 60 * 60 * 24));\n  } catch {\n    return '';\n  }\n}\n\nfunction calculateAvgDays(firstDate, lastDate, totalOrders) {\n  if (!firstDate || !lastDate || totalOrders < 2) return '';\n  try {\n    const start = new Date(firstDate);\n    const end = new Date(lastDate);\n    const diffDays = (end - start) / (1000 * 60 * 60 * 24);\n    return (diffDays / (totalOrders - 1)).toFixed(1); // Rounded to 1 decimal\n  } catch {\n    return '';\n  }\n}\n\n// Extract order dates\nconst firstOrderDate = formatDate(order.created_at); // Adjust as needed\nconst lastOrderDate = formatDate(order.created_at);  // You may update this later\n\nconst totalOrders = 1; // For webhook use, we assume it's the first or increment later\n\nconst output = {\n  // Basic Customer Info\n  customer_id: customer.id || '',\n  first_name: customer.first_name || '',\n  last_name: customer.last_name || '',\n  email: customer.email || '',\n  phone: customer.phone || address.phone || '',\n\n  // Address Info\n  address: [\n    address.address1,\n    address.address2,\n    address.city,\n    address.province || address.state,\n    address.country,\n    address.zip\n  ].filter(Boolean).join(', '),\n\n  address1: address.address1 || '',\n  address2: address.address2 || '',\n  city: address.city || '',\n  province: address.province || '',\n  zip: address.zip || '',\n  country: address.country || '',\n  country_name: address.country_name || '',\n\n  // Order Info\n  order_id: order.id || '',\n  order_name: order.name || '',\n  first_order_date: firstOrderDate,\n  last_order_date: lastOrderDate,\n  total_orders: totalOrders.toString(),\n  total_spent: order.total_price || '0.00',\n  payment_method: order.gateway || '',\n  days_since_last_order: calculateDaysSince(order.created_at),\n\n  // Variant Info\n  last_product_id: firstLineItem.product_id || '',\n  last_variant_id: firstLineItem.variant_id || '',\n\n  // Calculated Metric\n  average_days_between_orders: calculateAvgDays(firstOrderDate, lastOrderDate, totalOrders),\n\n  source: 'webhook:order/create'\n};\n\nreturn [{ json: output }];"
      },
      "typeVersion": 2
    },
    {
      "id": "794b3523-183b-44d2-bcee-eac796ec8279",
      "name": "BTSD",
      "type": "n8n-nodes-base.set",
      "position": [
        -1900,
        280
      ],
      "parameters": {
        "options": {
          "dotNotation": true
        },
        "assignments": {
          "assignments": [
            {
              "id": "071f21f4-5fff-4a1f-b666-3542c268e059",
              "name": "Customer ID",
              "type": "string",
              "value": "={{ $json.customer_id }}"
            },
            {
              "id": "1fb07c80-5a38-4f51-aa93-312a50a2b3d2",
              "name": "Name",
              "type": "string",
              "value": "={{ $json.first_name }} {{ $json.last_name }}"
            },
            {
              "id": "6f876cc3-a445-4bcd-8e39-13d8ef1aa561",
              "name": "email",
              "type": "string",
              "value": "={{ $json.email }}"
            },
            {
              "id": "1048cfd4-531f-4723-adae-2710097216e3",
              "name": "phone",
              "type": "string",
              "value": "={{ $json.phone }}"
            },
            {
              "id": "180947ae-95b1-4224-829b-c9e7b470184b",
              "name": "address",
              "type": "string",
              "value": "={{ $json.address }}"
            },
            {
              "id": "c208750e-7a8d-4f5a-a8c5-58fff3bef183",
              "name": "order_id",
              "type": "string",
              "value": "={{ $json.order_id }}"
            },
            {
              "id": "c7bc0c28-6e55-469c-98cb-01ce6f86bea8",
              "name": "first_order_date",
              "type": "string",
              "value": "={{ $json.first_order_date }}"
            },
            {
              "id": "bf1fe1b5-b410-4901-b01a-a8be7b175405",
              "name": "last_order_date",
              "type": "string",
              "value": "={{ $json.last_order_date }}"
            },
            {
              "id": "97ed7e35-f49b-42b7-95a2-16e54fea8a61",
              "name": "total_orders",
              "type": "string",
              "value": "={{ $json.total_orders }}"
            },
            {
              "id": "e60cd7ed-d2a3-4355-84b0-858ebc838baa",
              "name": "total_spent",
              "type": "string",
              "value": "={{ $json.total_spent }}"
            },
            {
              "id": "a3e78009-487b-4072-a953-2c627ffa5eef",
              "name": "payment_method",
              "type": "string",
              "value": "={{ $json.payment_method }}"
            },
            {
              "id": "1d65409c-5137-41b2-9786-0b164f99c039",
              "name": "days_since_last_order",
              "type": "string",
              "value": "={{ $json.days_since_last_order }}"
            },
            {
              "id": "1886359f-1cfd-4e82-a3ee-23058e413b40",
              "name": "last_product_id",
              "type": "string",
              "value": "={{ $json.last_product_id }}"
            },
            {
              "id": "c44e1aec-29ac-4f8e-8d55-8e9dc6392040",
              "name": "last_variant_id",
              "type": "string",
              "value": "={{ $json.last_variant_id }}"
            },
            {
              "id": "0a8e26b9-b161-473b-bebe-53f668bd4086",
              "name": "average_days_between_orders",
              "type": "string",
              "value": "={{ $json.average_days_between_orders }}"
            },
            {
              "id": "0dbc481e-0f09-4e83-bb22-840abefeaf3f",
              "name": "source",
              "type": "string",
              "value": "={{ $json.source }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f441b054-7767-4884-82f9-c55187824fc4",
      "name": "Code19",
      "type": "n8n-nodes-base.code",
      "position": [
        -1000,
        280
      ],
      "parameters": {
        "jsCode": "// Get the item from BTSD node\nconst fieldItem = $items(\"BTSD\")[0];\nconst customerIdToFind = (fieldItem.json[\"Customer ID\"] || \"\").toString().trim().toLowerCase();\n\n// Get all rows from CCUST\nconst sheetItems = $items(\"CCUST\");\n\nlet found = false;\nlet matchedRow = null;\n\n// Log the value you are searching for\nconsole.log(\"Looking for Customer ID:\", customerIdToFind);\n\nif (customerIdToFind) {\n  matchedRow = sheetItems.find(item => {\n    const sheetCustomerId = (item.json[\"Customer ID\"] || \"\").toString().trim().toLowerCase();\n    console.log(\"Comparing with Sheet ID:\", sheetCustomerId);\n    return sheetCustomerId === customerIdToFind;\n  });\n\n  found = !!matchedRow;\n}\n\n// Return result\nreturn [{\n  json: {\n    ...fieldItem.json,\n    message: found\n      ? \"\u2705 Customer ID is found in Customer Sheet\"\n      : \"\u274c Customer ID is not available in Customer Sheet\"\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "e46fa249-7b57-41dd-bd48-866d66c69f60",
      "name": "If7",
      "type": "n8n-nodes-base.if",
      "position": [
        -540,
        280
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "3fe2fdac-8c9d-4c69-a55f-25173e573d44",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.message }}",
              "rightValue": "\u2705 Customer ID is found in Customer Sheet"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "e160ba34-9fb7-43ba-af93-10804109d7bb",
      "name": "Edit Fields15",
      "type": "n8n-nodes-base.set",
      "position": [
        -200,
        580
      ],
      "parameters": {
        "options": {
          "dotNotation": true
        },
        "assignments": {
          "assignments": [
            {
              "id": "96beb035-525f-4f6a-b3f9-17ea8f270086",
              "name": "Customer ID",
              "type": "string",
              "value": "={{ $json['Customer ID'] }}"
            },
            {
              "id": "45ae46cd-bb49-45df-94a5-78b2b5326b66",
              "name": "Name",
              "type": "string",
              "value": "={{ $json.Name }}"
            },
            {
              "id": "40cb8857-c693-4dee-96f4-3a5957fb95ea",
              "name": "email",
              "type": "string",
              "value": "={{ $json.email }}"
            },
            {
              "id": "b329feae-0ab5-42ca-8c9f-62d362b1e307",
              "name": "phone",
              "type": "string",
              "value": "={{ $json.phone }}"
            },
            {
              "id": "9bd52f34-18ac-41c5-9815-1a6f209dc87b",
              "name": "address",
              "type": "string",
              "value": "={{ $json.address }}"
            },
            {
              "id": "37434d0f-ac34-43b2-a28a-2ebfe1579f57",
              "name": "order_id",
              "type": "string",
              "value": "={{ $json.order_id }}"
            },
            {
              "id": "ae8db41c-048b-4fab-a608-298d55352961",
              "name": "first_order_date",
              "type": "string",
              "value": "={{ $json.first_order_date }}"
            },
            {
              "id": "83b10e54-5448-4ddb-99df-9e019a4ac1f7",
              "name": "last_order_date",
              "type": "string",
              "value": "={{ $json.last_order_date }}"
            },
            {
              "id": "a58288e0-6495-487f-ac5f-8b16f9dad4a8",
              "name": "total_orders",
              "type": "string",
              "value": "={{ $json.total_orders }}"
            },
            {
              "id": "2850839d-da6e-46af-89f4-60a592d026d5",
              "name": "total_spent",
              "type": "string",
              "value": "={{ $json.total_spent }}"
            },
            {
              "id": "0f6806a1-8d58-448b-b538-ef5c6aef64c1",
              "name": "payment_method",
              "type": "string",
              "value": "={{ $json.payment_method }}"
            },
            {
              "id": "3f88e644-6dd3-4d17-9767-729bd50464b9",
              "name": "days_since_last_order",
              "type": "string",
              "value": "={{ $json.days_since_last_order }}"
            },
            {
              "id": "0d620f7e-6744-4fa6-a6c6-56e9c11dc6ab",
              "name": "last_product_id",
              "type": "string",
              "value": "={{ $json.last_product_id }}"
            },
            {
              "id": "9a23f612-a77a-4025-8ff8-10f0b33adea8",
              "name": "last_variant_id",
              "type": "string",
              "value": "={{ $json.last_variant_id }}"
            },
            {
              "id": "b8492b42-9bdc-4d30-ab41-c3068dd187f5",
              "name": "average_days_between_orders",
              "type": "string",
              "value": "={{ $json.average_days_between_orders }}"
            },
            {
              "id": "22f220ad-8e9c-4f2b-9025-05b0d5e6f9d5",
              "name": "source",
              "type": "string",
              "value": "={{ $json.source }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4e8aa075-9d8e-421f-9083-12c0ae82a0d0",
      "name": "Code20",
      "type": "n8n-nodes-base.code",
      "position": [
        1140,
        600
      ],
      "parameters": {
        "jsCode": "const rows = $input.all();\nconst lastRow = rows[rows.length - 1];\nreturn [lastRow];"
      },
      "typeVersion": 2
    },
    {
      "id": "a564ed1d-9086-4bd3-aa73-d044d1f47e88",
      "name": "Edit Fields16",
      "type": "n8n-nodes-base.set",
      "position": [
        1600,
        600
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "fbac0979-9c87-4773-917c-9c2fc3128c8b",
              "name": "S No",
              "type": "string",
              "value": "={{ $json['S No'] }}"
            },
            {
              "id": "6fe94f05-df4d-4bab-965b-91b128a5ec6a",
              "name": "Customer ID",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json['Customer ID'] }}"
            },
            {
              "id": "9c6edb2d-13ad-49bb-843d-44bcb95b5309",
              "name": "Name",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.Name }}"
            },
            {
              "id": "16c84c98-d9af-4369-84d4-0593c1974b62",
              "name": "email",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.email }}"
            },
            {
              "id": "42c1b194-0e75-4c78-a3c1-9411cf9f7b78",
              "name": "phone",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.phone }}"
            },
            {
              "id": "3c89ccad-2ebd-4dc5-bc91-4b994ac76e37",
              "name": "address",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.address }}"
            },
            {
              "id": "0f504cf8-ff4b-4623-b957-ff833c19b214",
              "name": "order_id",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.order_id }}"
            },
            {
              "id": "08ca89c2-60a9-4747-bdc0-a381b9fd5d4b",
              "name": "first_order_date",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.first_order_date }}"
            },
            {
              "id": "e319166a-cfa9-4a7a-93a5-8213b882e43a",
              "name": "last_order_date",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.last_order_date }}"
            },
            {
              "id": "5c5b6de6-50b4-4fef-a96a-a5af805c9e55",
              "name": "total_orders",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.total_orders }}"
            },
            {
              "id": "896ae405-c711-4471-b197-df70c7976c94",
              "name": "total_spent",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.total_spent }}"
            },
            {
              "id": "454e43f4-9aa1-483c-b823-fed167bf45ff",
              "name": "payment_method",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.payment_method }}"
            },
            {
              "id": "69e45286-a40d-4ff1-88df-0217a6c23655",
              "name": "days_since_last_order",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.days_since_last_order }}"
            },
            {
              "id": "a5fe350c-c97d-41cd-924c-fc1815ab6aa8",
              "name": "last_product_id",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.last_product_id }}"
            },
            {
              "id": "c0eebbe0-ee58-4b67-99b6-1d5b5d69a24c",
              "name": "last_variant_id",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.last_variant_id }}"
            },
            {
              "id": "9c073c61-c16c-4f89-a96e-2baca6f4dfc6",
              "name": "average_days_between_orders",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.average_days_between_orders }}"
            },
            {
              "id": "b45ad319-507c-419a-93b1-24eb9b4c1fb9",
              "name": "source",
              "type": "string",
              "value": "={{ $('Edit Fields15').item.json.source }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7ba12eb2-e694-4bcc-87a7-120f111151f1",
      "name": "Code21",
      "type": "n8n-nodes-base.code",
      "position": [
        2040,
        600
      ],
      "parameters": {
        "jsCode": "// Get first item from previous node\nconst input = items[0].json;\n\n// Read the previous number from a field like \"S No\" or \"number\"\nlet previousNumber = parseInt(input[\"S No\"] || input.number || 0);\n\n// Make sure it's a valid number\nif (isNaN(previousNumber)) previousNumber = 0;\n\n// Increment by 1\nconst newNumber = previousNumber + 1;\n\n// Add the incremented number back to the data\nreturn [{\n  json: {\n    ...input,\n    \"S No\": newNumber\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "b49c2db7-2ca6-47b5-959f-238df3ea171d",
      "name": "Edit Fields18",
      "type": "n8n-nodes-base.set",
      "position": [
        -60,
        -200
      ],
      "parameters": {
        "options": {
          "dotNotation": true
        },
        "assignments": {
          "assignments": [
            {
              "id": "96beb035-525f-4f6a-b3f9-17ea8f270086",
              "name": "Customer ID",
              "type": "string",
              "value": "={{ $json['Customer ID'] }}"
            },
            {
              "id": "45ae46cd-bb49-45df-94a5-78b2b5326b66",
              "name": "Name",
              "type": "string",
              "value": "={{ $json.Name }}"
            },
            {
              "id": "40cb8857-c693-4dee-96f4-3a5957fb95ea",
              "name": "email",
              "type": "string",
              "value": "={{ $json.email }}"
            },
            {
              "id": "b329feae-0ab5-42ca-8c9f-62d362b1e307",
              "name": "phone",
              "type": "string",
              "value": "={{ $json.phone }}"
            },
            {
              "id": "9bd52f34-18ac-41c5-9815-1a6f209dc87b",
              "name": "address",
              "type": "string",
              "value": "={{ $json.address }}"
            },
            {
              "id": "37434d0f-ac34-43b2-a28a-2ebfe1579f57",
              "name": "order_id",
              "type": "string",
              "value": "={{ $json.order_id }}"
            },
            {
              "id": "ae8db41c-048b-4fab-a608-298d55352961",
              "name": "first_order_date",
              "type": "string",
              "value": "={{ $json.first_order_date }}"
            },
            {
              "id": "83b10e54-5448-4ddb-99df-9e019a4ac1f7",
              "name": "last_order_date",
              "type": "string",
              "value": "={{ $json.last_order_date }}"
            },
            {
              "id": "a58288e0-6495-487f-ac5f-8b16f9dad4a8",
              "name": "total_orders",
              "type": "string",
              "value": "={{ $json.total_orders }}"
            },
            {
              "id": "2850839d-da6e-46af-89f4-60a592d026d5",
              "name": "total_spent",
              "type": "string",
              "value": "={{ $json.total_spent }}"
            },
            {
              "id": "0f6806a1-8d58-448b-b538-ef5c6aef64c1",
              "name": "payment_method",
              "type": "string",
              "value": "={{ $json.payment_method }}"
            },
            {
              "id": "3f88e644-6dd3-4d17-9767-729bd50464b9",
              "name": "days_since_last_order",
              "type": "string",
              "value": "={{ $json.days_since_last_order }}"
            },
            {
              "id": "0d620f7e-6744-4fa6-a6c6-56e9c11dc6ab",
              "name": "last_product_id",
              "type": "string",
              "value": "={{ $json.last_product_id }}"
            },
            {
              "id": "9a23f612-a77a-4025-8ff8-10f0b33adea8",
              "name": "last_variant_id",
              "type": "string",
              "value": "={{ $json.last_variant_id }}"
            },
            {
              "id": "b8492b42-9bdc-4d30-ab41-c3068dd187f5",
              "name": "average_days_between_orders",
              "type": "string",
              "value": "={{ $json.average_days_between_orders }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "2d53e348-ef23-4513-a216-1eb38375d7e6",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -2160,
        260
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "1be37343-8232-4f5d-bd95-07c52890a771",
      "name": "CCUST",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -1580,
        280
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appgGEef4Mw8vFS78",
          "cachedResultUrl": "https://airtable.com/appgGEef4Mw8vFS78",
          "cachedResultName": "IPM"
        },
        "sort": {
          "property": [
            {
              "field": "S No"
            }
          ]
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbl0LFpP9q21ZHyHr",
          "cachedResultUrl": "https://airtable.com/appgGEef4Mw8vFS78/tbl0LFpP9q21ZHyHr",
          "cachedResultName": "Customer Sheet"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "1"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "79d22973-b0d6-43eb-9462-b8cd5eaf5e37",
      "name": "CustomerSheet",
      "type": "n8n-nodes-base.airtable",
      "position": [
        420,
        -200
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appgGEef4Mw8vFS78",
          "cachedResultUrl": "https://airtable.com/appgGEef4Mw8vFS78",
          "cachedResultName": "IPM"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbl0LFpP9q21ZHyHr",
          "cachedResultUrl": "https://airtable.com/appgGEef4Mw8vFS78/tbl0LFpP9q21ZHyHr",
          "cachedResultName": "Customer Sheet"
        },
        "columns": {
          "value": {
            "Address": "={{ $json.address }}",
            "Customer ID": "={{ $json['Customer ID'] }}",
            "Customer Name": "={{ $json.Name }}",
            "Email Address": "={{ $json.email }}",
            "Contact Number": "={{ $json.phone }}",
            "Last Variant ID": "={{ $json.last_variant_id }}",
            "Days Since Last Order": "={{ $json.days_since_last_order }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "S No",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "S No",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer ID",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Customer ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Customer Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Address",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Email Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Contact Number",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Contact Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Product Ordered (Last SKU / product title)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Last Product Ordered (Last SKU / product title)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Variant ID",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Last Variant ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Created At",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Created At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "First Order Date",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "First Order Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Order Date",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Last Order Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Days Since Last Order",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Days Since Last Order",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Average Days Between Orders (Purchase frequency metric)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Average Days Between Orders (Purchase frequency metric)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Orders",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Total Orders",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Returned Orders",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Total Returned Orders",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Discount Availed",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Total Discount Availed",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Spent",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Total Spent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Refunds",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Total Refunds",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Preferred Payment Method",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Preferred Payment Method",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Type",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Customer Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Engagement Source",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Engagement Source",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Value Segment",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Value Segment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Risk Indicator",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Risk Indicator",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Calculation",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Calculation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Customer ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "upsert"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "897a477f-9a17-4da2-9003-b45b80ac57cd",
      "name": "CustomerSheet4",
      "type": "n8n-nodes-base.airtable",
      "position": [
        380,
        600
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appgGEef4Mw8vFS78",
          "cachedResultUrl": "https://airtable.com/appgGEef4Mw8vFS78",
          "cachedResultName": "IPM"
        },
        "sort": {
          "property": [
            {
              "field": "S No"
            }
          ]
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbl0LFpP9q21ZHyHr",
          "cachedResultUrl": "https://airtable.com/appgGEef4Mw8vFS78/tbl0LFpP9q21ZHyHr",
          "cachedResultName": "Customer Sheet"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "1"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "77e1ccce-7e4a-46c2-9a68-3fb688079a6d",
      "name": "PRDSHEET4",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2780,
        600
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appgGEef4Mw8vFS78",
          "cachedResultUrl": "https://airtable.com/appgGEef4Mw8vFS78",
          "cachedResultName": "IPM"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbl0LFpP9q21ZHyHr",
          "cachedResultUrl": "https://airtable.com/appgGEef4Mw8vFS78/tbl0LFpP9q21ZHyHr",
          "cachedResultName": "Customer Sheet"
        },
        "columns": {
          "value": {
            "S No": "={{ $json[\"S No\"] }}",
            "Address": "={{ $json.address }}",
            "Created At": "={{ $json.first_order_date }}",
            "Customer ID": "={{ $json[\"Customer ID\"] }}",
            "Total Spent": "={{ $json.total_spent }}",
            "Total Orders": "={{ $json.total_orders }}",
            "Customer Name": "={{ $json.Name }}",
            "Email Address": "={{ $json.email }}",
            "Contact Number": "={{ $json.phone }}",
            "Last Order Date": "={{ $json.last_order_date }}",
            "First Order Date": "={{ $json.first_order_date }}",
            "Days Since Last Order": "={{ $json.days_since_last_order }}",
            "Preferred Payment Method": "={{ $json.payment_method }}",
            "Average Days Between Orders (Purchase frequency metric)": "={{ $json.average_days_between_orders }}"
          },
          "schema": [
            {
              "id": "S No",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "S No",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer ID",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Customer ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Customer Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Address",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Email Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Contact Number",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Contact Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Product Ordered (Last SKU / product title)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Last Product Ordered (Last SKU / product title)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Variant ID",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Last Variant ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Created At",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Created At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "First Order Date",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "First Order Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Order Date",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Last Order Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Days Since Last Order",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Days Since Last Order",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Average Days Between Orders (Purchase frequency metric)",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Average Days Between Orders (Purchase frequency metric)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Orders",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Total Orders",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Returned Orders",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Total Returned Orders",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Discount Availed",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Total Discount Availed",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Spent",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Total Spent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Refunds",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Total Refunds",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Preferred Payment Method",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Preferred Payment Method",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Type",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Customer Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Engagement Source",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Engagement Source",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Value Segment",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Value Segment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Risk Indicator",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Risk Indicator",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Calculation",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Calculation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Customer ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "fefc5e1d-099f-47b3-bdd3-ff8ec5138265",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3340,
        140
      ],
      "parameters": {
        "width": 340,
        "height": 320,
        "content": "## Webhook Trigger when the Customer create order\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2c9e0430-4150-414f-8b90-33999b8d4dcf",
      "name": "customerCreate",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -3240,
        260
      ],
      "parameters": {
        "path": "customerCreate",
        "options": {},
        "httpMethod": "POST",
        "authentication": "jwtAuth"
      },
      "typeVersion": 2
    },
    {
      "id": "97cdefda-5a75-4891-a07f-c1f57310ac3a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2840,
        -380
      ],
      "parameters": {
        "color": 4,
        "width": 600,
        "height": 860,
        "content": "# Extracting data from body object\n## customer_id, first_name\n## last_name,  email\n## phone, address\n## address1, address2, city, province\n## zip, country, country_name\n## order_id, order_name\n## first_order_date, last_order_date\n## total_orders\n## total_spent\n## payment_method\n## days_since_last_order\n## last_product_id\n## last_variant_id\n## source\n"
      },
      "typeVersion": 1
    },
    {
      "id": "40f78983-237f-4e93-a592-f17f4a398923",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1700,
        -40
      ],
      "parameters": {
        "color": 5,
        "width": 320,
        "height": 500,
        "content": "# Airtable Customer Sheet\n\n## Listing out total rows of customer sheet\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c5888b04-72c9-412d-9443-4ff819429a32",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1280,
        -400
      ],
      "parameters": {
        "color": 4,
        "width": 680,
        "height": 900,
        "content": "# I'm a note \n## Check if the Customer ID from BTSD (new order/customer) exists in CCUST (customer sheet).\n\n\ud83d\udd04 Steps:\n\nGet Customer ID from BTSD node.\n\nNormalize it: toString(), .trim(), .toLowerCase().\n\nLoop through all rows in CCUST node.\n\nCompare each row\u2019s Customer ID the same way.\n\nIf match found:\n\n\u2705 Return: \"Customer ID is found in Customer Sheet\"\n\nIf not found:\n\n\u274c Return: \"Customer ID is not available in Customer Sheet\"\n\n\ud83d\udd0d Use Case:\nUseful for checking duplicates before saving customer data, or for tagging new vs. existing customers.\n\n\u2699\ufe0f Returns:\nSame data from BTSD + a message field with status."
      },
      "typeVersion": 1
    },
    {
      "id": "9e84864f-35ff-472e-a3ba-684c6452f670",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        200,
        380
      ],
      "parameters": {
        "color": 5,
        "width": 440,
        "height": 440,
        "content": "# Airtable Customer Sheet\n\n## Listing out total rows of customer sheet\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2da38eb1-9ed6-424b-9019-499ec498a9d0",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        100
      ],
      "parameters": {
        "color": 4,
        "width": 460,
        "height": 760,
        "content": "## Return Only Last Row\nPurpose: Get the last item from all incoming rows and pass it forward.\n\n\ud83d\udccc How it works:\n\n$input.all() \u2192 Fetches all incoming items.\n\nrows[rows.length - 1] \u2192 Picks the last item.\n\nreturn [lastRow]; \u2192 Sends only the last row to the next node.\n\n\ud83d\udce6 Use Case:\nUse when you only want to process or forward the latest record"
      },
      "typeVersion": 1
    },
    {
      "id": "b9a1e8aa-b8e1-4ca6-b423-b42a3f5b31bf",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1820,
        80
      ],
      "parameters": {
        "color": 4,
        "width": 540,
        "height": 800,
        "content": "# Auto-Increment \"S No\" from Previous Node\n## Take the serial number (S No) from previous node data, increment it by 1, and return the updated data.\n\n\ud83d\udccc How it works:\n\nReads the first item from the input.\n\nChecks for \"S No\"  field.\n\nIf missing or invalid, uses 0 as default.\n\nAdds +1 to generate the new serial number.\n\nReturns the full original data + updated \"S No\" field."
      },
      "typeVersion": 1
    },
    {
      "id": "adbb346f-1172-4834-bb89-3e07b13798ec",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2640,
        380
      ],
      "parameters": {
        "color": 5,
        "width": 460,
        "height": 500,
        "content": "# Airtable Sheet\n## Appending data in Airtable of new Customer Sheet "
      },
      "typeVersion": 1
    },
    {
      "id": "d9ecb297-0e3e-47d5-a837-0fb8073b8fb6",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        260,
        -500
      ],
      "parameters": {
        "color": 5,
        "width": 480,
        "height": 560,
        "content": "# Airtable Customer Sheet\n## Updating the existing Customer Record in customer sheet like if he/she has changed the personal details like Address, Email Address, Contact number. "
      },
      "typeVersion": 1
    },
    {
      "id": "fb8ea402-0810-4295-81ff-eb58c612ee5c",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -4640,
        -940
      ],
      "parameters": {
        "color": 3,
        "width": 980,
        "height": 1740,
        "content": "## This automation is built in n8n (a no-code/low-code automation platform). It automatically updates or adds customer data into your system every time a customer places an order on your Shopify store \u2014 whether they're a new customer or an existing one.\n\nNo manual copy-pasting. No missing data. Everything gets updated in real time.\n\n\n## \ud83d\ude80 How Does It Help?\n\n\u2705 Keeps your customer records up-to-date automatically\n\n\u2705 Tracks new vs. repeat customers\n\n\u2705 Avoids duplicate entries\n\n\u2705 Makes customer follow-ups, marketing, and analytics more powerful\n\n\u2705 Saves you time \u2014 no more downloading/exporting/importing from Shopify\n\n## \ud83d\udd27 How It Works (in Simple Terms)\n\nWhen someone places an order:\n\n1. \u2705 The order data from Shopify is captured\n\n\n2. \ud83e\udde0 The automation checks:\n\nIs this a new customer or an existing one?\n\nDoes their data already exist in your Airtable/CRM system?\n\n\n\n3. \u270d If they are new \u2192 it adds a new customer entry\nIf they already exist \u2192 it updates their data with the new order\n\n## \ud83e\uddf1 Technical Workflow (n8n Nodes Overview)\n\nHere\u2019s how this is structured inside n8n:\n\n1. Webhook / Shopify Trigger Node \u2013 Triggers when a new order is received\n\n\n2. IF Node \u2013 Checks if the customer already exists\n\n\n3. Airtable Lookup Node \u2013 Searches for customer ID\n\n\n4. Set Node \u2013 Prepares structured customer/order data\n\n\n5. Create or Update Node \u2013\n\nIf customer not found \u2192 Create New Customer Row\n\nIf customer found \u2192 Update Their Info\n\n \n## \ud83d\udecd Real-World Benefits for Store Owners\n\nImagine this:\n\nA new customer places an order. Their full profile is saved \u2014 instantly.\n\nA regular customer comes back? Their last order date gets updated.\n\nYou want to send marketing emails? Your customer database is ready.\n\n\n## No need to export orders from Shopify, filter duplicates, and clean data \u2014 the system does it for you.\n\n\nYou save time, avoid errors, and create a stronger customer experience \u2014 all automated.\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "81e248f6-f49f-42fb-ac99-2c99bc6a0dfc",
  "connections": {
    "If7": {
      "main": [
        [
          {
            "node": "Edit Fields18",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Edit Fields15",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "BTSD": {
      "main": [
        [
          {
            "node": "CCUST",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CCUST": {
      "main": [
        [
          {
            "node": "Code19",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code17": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code19": {
      "main": [
        [
          {
            "node": "If7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code20": {
      "main": [
        [
          {
            "node": "Edit Fields16",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code21": {
      "main": [
        [
          {
            "node": "PRDSHEET4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "PRDSHEET4": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CustomerSheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields15": {
      "main": [
        [
          {
            "node": "CustomerSheet4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields16": {
      "main": [
        [
          {
            "node": "Code21",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields18": {
      "main": [
        [
          {
            "node": "CustomerSheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CustomerSheet4": {
      "main": [
        [
          {
            "node": "Code20",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "customerCreate": {
      "main": [
        [
          {
            "node": "Code17",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "BTSD",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

Shopify Order Data to Airtable

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

More E-commerce workflows → · Browse all categories →

Related workflows

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

E-commerce

Shopify Order Data to Airtable

Airtable
E-commerce

It seamlessly syncs order data from an Airtable base directly to your Shopify store, creates the official order, and automatically sends a beautiful confirmation email to the customer, closing the loo

Airtable, Shopify, Gmail
E-commerce

This workflow provides a robust, end-to-end automated pipeline for managing e-commerce orders. It bridges the gap between your storefront and your fulfillment team by handling inventory validation, mu

Gmail, Slack, Google Sheets
E-commerce

This n8n workflow helps Shopify store owners and teams automatically confirm orders via WhatsApp. It checks if the customer's number is valid using Rapiwa API, sends a personalized message, and logs e

HTTP Request, Google Sheets
E-commerce

What Problem Does It Solve? Keeping product data consistent between Shopify and Odoo is a major operational challenge. Manually creating new products in Odoo every time they are added to Shopify is sl

Odoo