{
  "name": "Full-cycle invoice automation: Airtable, QuickBooks & Stripe",
  "nodes": [
    {
      "id": "989dcbdc-5d15-45df-bb0e-db6049c537e2",
      "name": "Airtable Trigger",
      "type": "n8n-nodes-base.airtableTrigger",
      "position": [
        60,
        1780
      ]
    },
    {
      "id": "45863a72-e832-448e-88e6-edb6ee1c8908",
      "name": "IF - Status Check",
      "type": "n8n-nodes-base.if",
      "position": [
        1580,
        1580
      ]
    },
    {
      "id": "43c615f1-777f-43da-8274-2b9ecce18aa0",
      "name": "IF - Customer Exists?",
      "type": "n8n-nodes-base.if",
      "position": [
        3020,
        1340
      ]
    },
    {
      "id": "2cb49f5e-08f7-46ea-afab-217e98908a14",
      "name": "Merge QBO Customer",
      "type": "n8n-nodes-base.merge",
      "position": [
        4320,
        1540
      ]
    },
    {
      "id": "60920472-77b6-4243-89b0-f162f6e900d9",
      "name": "Stripe - Find Customer",
      "type": "n8n-nodes-base.stripe",
      "position": [
        5800,
        1020
      ]
    },
    {
      "id": "bd0adf89-499a-40ee-9e37-648ae0aad30d",
      "name": "IF - Stripe Customer Exists?",
      "type": "n8n-nodes-base.if",
      "position": [
        7220,
        1160
      ]
    },
    {
      "id": "ea27b7d1-4e6e-4620-b402-b0b8e0db436d",
      "name": "Stripe - Create Customer",
      "type": "n8n-nodes-base.stripe",
      "position": [
        7960,
        980
      ]
    },
    {
      "id": "901e1828-f5e5-4801-83a0-53fce11f4ea0",
      "name": "Merge Stripe Customer",
      "type": "n8n-nodes-base.merge",
      "position": [
        8520,
        1380
      ]
    },
    {
      "id": "4c99441c-1f72-49d6-b421-62e3c2c72b28",
      "name": "QuickBooks - Find Customer",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        2360,
        1160
      ]
    },
    {
      "id": "497c8d82-1916-4ac6-acd2-7fdc561d3919",
      "name": "Create an invoice",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        13120,
        1420
      ]
    },
    {
      "id": "b1330d78-6e36-4296-98b0-0312804e955d",
      "name": "Create a customer",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        3680,
        1100
      ]
    },
    {
      "id": "8b371200-572e-4995-b7d7-d496751342f4",
      "name": "Search records",
      "type": "n8n-nodes-base.airtable",
      "position": [
        800,
        1360
      ]
    },
    {
      "id": "d56e433c-447b-406f-8467-a8c5de082d5b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -100,
        1920
      ],
      "parameters": {
        "width": 500,
        "height": 300,
        "content": "### Step 1: Airtable Trigger 🚦📋\n\nThis node triggers the workflow whenever there is a change in the **Created** column, effectively activating when new data is added.\n\nWhy this step is important:\n\n- ⏰ "
      }
    },
    {
      "id": "44f16735-21cb-4a35-bb97-45bf8ec79469",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        620,
        1040
      ],
      "parameters": {
        "width": 460,
        "height": 300,
        "content": "### Step 2: Airtable Search Records 🔍📋\n\nThis node searches and retrieves all records from a specific Airtable table.\n\nWhy this step is important:\n\n- 🔎 Gathers complete data from the table for processi"
      }
    },
    {
      "id": "430acba9-f9ad-424f-888e-a239968e9bbf",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1360,
        1220
      ],
      "parameters": {
        "width": 500,
        "height": 300,
        "content": "### Step 3: Status Check (If Node) ✅❌\n\nThis node checks whether the **Status** field is set to **'Approved for Invoicing'**.\n\n- **True:** Continues with the workflow.\n- **False:** Gracefully exits the"
      }
    },
    {
      "id": "5d2740d4-c4fc-4290-914c-bcbff9202b1c",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2200,
        2080
      ],
      "parameters": {
        "width": 520,
        "height": 300,
        "content": "### Graceful Exit (No-Op Node) 🛑✨\n\nThis **No Operation** node acts as a graceful exit point for items whose status is **not** 'Approved for Invoicing'.\n\nWhy this step is important:\n\n- 🛡️ Prevents furt"
      }
    },
    {
      "id": "12d6c762-e245-4203-b91d-a03ad0c39c5a",
      "name": "Exit from workflow",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2400,
        1920
      ]
    },
    {
      "id": "d3de759a-8382-4127-867f-84afbc9fb1b6",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2180,
        800
      ],
      "parameters": {
        "width": 460,
        "height": 320,
        "content": "### Step 4: Find Customer in QuickBooks 🔍👤\n\nThis node uses the **Find Customer** operation to search for a customer in QuickBooks based on the **Display Name** parameter.\n\nWhy this step is important:\n"
      }
    },
    {
      "id": "2aa200ff-342e-4a9b-b46d-956dc31ea3e1",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2820,
        1480
      ],
      "parameters": {
        "width": 580,
        "height": 340,
        "content": "### Step 5: Customer Existence Check (If Node) ❓✅❌\n\nThis node checks whether a customer exists in QuickBooks.\n\n- **False:** Customer exists; workflow continues without creating a new customer.\n- **Tru"
      }
    },
    {
      "id": "054ac6a9-7198-49d3-8005-8291e2b99de1",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3480,
        780
      ],
      "parameters": {
        "width": 480,
        "height": 300,
        "content": "Create Customer in QuickBooks ➕👤\n\nThis node uses the **Create Customer** operation to add a new customer to QuickBooks using details from Airtable.\n\nWhy this step is important:\n\n- 🆕 Adds new customers"
      }
    },
    {
      "id": "e656e242-fcd7-4f4b-b8c7-1093e6873c9d",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4160,
        1180
      ],
      "parameters": {
        "width": 500,
        "height": 300,
        "content": "### Step 6: Merge Customer Data Node 🔗📊\n\nThis node merges data from existing customers with newly created customer records.\n\nWhy this step is important:\n\n- 🔄 Combines customer information into a singl"
      }
    },
    {
      "id": "43640cbe-d8c0-4d46-a8be-71ed26deaf88",
      "name": "If - Stripe Customer Id",
      "type": "n8n-nodes-base.if",
      "position": [
        5100,
        1180
      ]
    },
    {
      "id": "e7fd405d-2dca-453d-ad16-086d855393e0",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4840,
        800
      ],
      "parameters": {
        "width": 600,
        "height": 340,
        "content": "### Step 7: Stripe Customer ID Check (If Node) 🔍💳\n\nThis node checks whether the **Stripe Customer ID** already exists for users in Airtable.\n\n- **True:** Stripe Customer ID exists; proceeds to find th"
      }
    },
    {
      "id": "d8810872-3110-450d-a87e-a68c6acec976",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5540,
        680
      ],
      "parameters": {
        "width": 580,
        "height": 300,
        "content": "Find Customer in Stripe 🔍💳\n\nThis node uses the **Find Customer** operation to search for a customer in Stripe based on the **Stripe Customer ID**.\n\nWhy this step is important:\n\n- 🔎 Quickly locates the"
      }
    },
    {
      "id": "0af13885-0000-48a4-9a1a-5ca0695d4329",
      "name": "Merge - Stripe Customers",
      "type": "n8n-nodes-base.merge",
      "position": [
        6320,
        1460
      ]
    },
    {
      "id": "66ce007d-361a-44d1-b397-c8bf354bc62a",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        6180,
        1620
      ],
      "parameters": {
        "width": 480,
        "height": 300,
        "content": "### Step 8: Merge Stripe Customer Data Node 🔗💳\n\nThis node merges data from the **If Node** decision with the newly retrieved customer data from the **Stripe - Find Customer** node.\n\nWhy this step is i"
      }
    },
    {
      "id": "642cf14a-238f-4525-bc6c-a4d88ad2ff25",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        7020,
        780
      ],
      "parameters": {
        "width": 540,
        "height": 340,
        "content": "### Step 9: Stripe Customer Existence Check (If Node) 🔍✅❌\n\nThis node checks whether a Stripe customer exists based on the **name**.\n\n- **True:** Customer does **not** exist; proceeds to create a new c"
      }
    },
    {
      "id": "fe468b60-5f78-4a61-9262-a0c24e2054e8",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        7740,
        640
      ],
      "parameters": {
        "width": 500,
        "height": 320,
        "content": "Create Customer in Stripe ➕💳\n\nThis node uses the **Create Customer** operation to add a new customer in Stripe using the **name** and **email address** from Airtable.\n\nWhy this step is important:\n\n- 🆕"
      }
    },
    {
      "id": "84f2c126-13e0-4999-95ed-c62155473934",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        8320,
        1540
      ],
      "parameters": {
        "width": 520,
        "height": 300,
        "content": "### Step 10: Merge New Stripe Customer Data Node 🔗💳\n\nThis node merges data from the previous **If Node** with the newly created Stripe customer data.\n\nWhy this step is important:\n\n- 🔄 Combines decisio"
      }
    },
    {
      "id": "d72208de-119a-4cc7-8f41-c04e8534fdf5",
      "name": "Search records by email",
      "type": "n8n-nodes-base.airtable",
      "position": [
        9260,
        1080
      ]
    },
    {
      "id": "0dc8e7c1-e027-4641-9618-357f72d67039",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        9060,
        760
      ],
      "parameters": {
        "width": 480,
        "height": 300,
        "content": "### Step 11: Search Records in Airtable 🔍📋\n\nThis node searches for complete records in the Airtable table based on the **email address** from the previous merge node.\n\nWhy this step is important:\n\n- 🔎"
      }
    },
    {
      "id": "62d46511-8cf8-4160-a242-bea2e4e81086",
      "name": "Update Quickbooks and Stripe Customer Ids",
      "type": "n8n-nodes-base.airtable",
      "position": [
        9980,
        1400
      ]
    },
    {
      "id": "5cbaa7bd-1ef6-49d8-8b61-fef3f2d3090c",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        9780,
        1580
      ],
      "parameters": {
        "width": 520,
        "height": 300,
        "content": "### Step 12: Update Records in Airtable ✏️🔄\n\nThis node updates the Airtable records to add or modify the **QuickBooks Customer ID** and **Stripe Customer ID** for the corresponding users.\n\nWhy this st"
      }
    },
    {
      "id": "cdd5c85d-1168-4b4e-ab95-b17132f0bd10",
      "name": "Generate Payment Links",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        10700,
        1080
      ]
    },
    {
      "id": "86d2ad6f-2501-4885-9f61-40563bcd132a",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        10500,
        760
      ],
      "parameters": {
        "width": 520,
        "height": 300,
        "content": "### Step 13: Generate Stripe Payment Link (HTTP Request) 🔗💳\n\nThis node sends a **POST** HTTP request with the **Stripe Price ID** and **quantity** from Airtable to generate a ready-to-pay link.\n\nWhy t"
      }
    },
    {
      "id": "cce1f3fd-3731-41ea-8b6c-b1b6872f571c",
      "name": "Get all Quickbook products",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        11440,
        1400
      ]
    },
    {
      "id": "e4819fee-6591-45cf-b9e7-000ec6ba07e4",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        11240,
        1580
      ],
      "parameters": {
        "width": 540,
        "height": 280,
        "content": "### Step 14: Fetch All Products from QuickBooks (HTTP Request) 📦🔍\n\nThis node sends an HTTP request to retrieve all products from QuickBooks.\n\nWhy this step is important:\n\n- 📋 Gathers the full product "
      }
    },
    {
      "id": "29e7df5d-6b99-44a4-8493-d3c2aec66353",
      "name": "Sticky Note18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        12060,
        760
      ],
      "parameters": {
        "width": 540,
        "height": 300,
        "content": "### Step 15: Filter Products by Airtable Data (Code Node) ⚙️🔍\n\nThis node runs custom code to filter and return only the product details that exist in Airtable.\n\nWhy this step is important:\n\n- 🎯 Narrow"
      }
    },
    {
      "id": "b6e2c9d4-502b-44e6-b907-8eab05c7561e",
      "name": "Filter and Return product details",
      "type": "n8n-nodes-base.code",
      "position": [
        12260,
        1100
      ]
    },
    {
      "id": "4e309a57-bebd-4a0e-871f-1f66e7119099",
      "name": "Sticky Note19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        12960,
        1620
      ],
      "parameters": {
        "width": 480,
        "height": 300,
        "content": "### Step 16: Create Invoice in QuickBooks 🧾✨\n\nThis node uses the **Create Invoice** operation to generate an invoice in QuickBooks based on data from previous nodes.\n\nWhy this step is important:\n\n- 📄 "
      }
    },
    {
      "id": "52c262a3-df12-47a4-bc8a-73eaaea82ec8",
      "name": "Update Stripe Payment Link and Quickbooks Invoice #",
      "type": "n8n-nodes-base.airtable",
      "position": [
        13840,
        1100
      ]
    },
    {
      "id": "cba338d9-dbad-4cf8-becc-609892ba96dc",
      "name": "Sticky Note20",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        13640,
        740
      ],
      "parameters": {
        "width": 480,
        "height": 320,
        "content": "### Step 17: Update Airtable Records ✏️🔄\n\nThis node updates Airtable records with the newly created **Stripe Payment Link** and **QuickBooks Invoice #**.\n\nWhy this step is important:\n\n- 🔗 Keeps Airtab"
      }
    },
    {
      "id": "e8125d20-5e72-443c-82ca-9f444ff91e1d",
      "name": "Workflow Completed",
      "type": "n8n-nodes-base.noOp",
      "position": [
        14660,
        1420
      ]
    },
    {
      "id": "b3e74b53-f2e4-4c37-adb0-008766c0c21e",
      "name": "Sticky Note21",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        14500,
        1560
      ],
      "parameters": {
        "width": 500,
        "height": 300,
        "content": "### Step 18: Workflow Completion (No-Op Node) ✅🎉\n\nThis **No Operation** node marks the successful completion of the entire workflow.\n\nWhy this step is important:\n\n- 🎯 Signifies a clean and error-free "
      }
    },
    {
      "id": "75b2998f-2369-425a-b88b-f8e7383861f1",
      "name": "Sticky Note22",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -60,
        40
      ],
      "parameters": {
        "width": 620,
        "height": 680,
        "content": "### Prerequisites ⚙️🔗\n\n#### AIRTABLE\n- Create and connect your Airtable account using a **Personal Access Token**.\n- Create a table with the following columns:\n  - **Deal Name** - Short representation"
      }
    },
    {
      "id": "d88adcf9-9557-4759-9638-bfdd2f6e00b8",
      "name": "Sticky Note23",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        14500,
        900
      ],
      "parameters": {
        "width": 360,
        "height": 300,
        "content": "### Get in Touch\n\nPlease feel free to reachout to us, if you need any help in settin up this workflow.\n\nWe can also help customize workflow pet the use-case. \n\nReach out us at: getstarted@intuz.com\n\nW"
      }
    }
  ],
  "connections": {
    "Search records": {
      "main": [
        [
          {
            "node": "IF - Status Check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable Trigger": {
      "main": [
        [
          {
            "node": "Search records",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a customer": {
      "main": [
        [
          {
            "node": "Merge QBO Customer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create an invoice": {
      "main": [
        [
          {
            "node": "Update Stripe Payment Link and Quickbooks Invoice #",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF - Status Check": {
      "main": [
        [
          {
            "node": "QuickBooks - Find Customer",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Exit from workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge QBO Customer": {
      "main": [
        [
          {
            "node": "If - Stripe Customer Id",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF - Customer Exists?": {
      "main": [
        [
          {
            "node": "Create a customer",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge QBO Customer",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge Stripe Customer": {
      "main": [
        [
          {
            "node": "Search records by email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Payment Links": {
      "main": [
        [
          {
            "node": "Get all Quickbook products",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Stripe - Find Customer": {
      "main": [
        [
          {
            "node": "Merge - Stripe Customers",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "If - Stripe Customer Id": {
      "main": [
        [
          {
            "node": "Stripe - Find Customer",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge - Stripe Customers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search records by email": {
      "main": [
        [
          {
            "node": "Update Quickbooks and Stripe Customer Ids",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge - Stripe Customers": {
      "main": [
        [
          {
            "node": "IF - Stripe Customer Exists?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Stripe - Create Customer": {
      "main": [
        [
          {
            "node": "Merge Stripe Customer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get all Quickbook products": {
      "main": [
        [
          {
            "node": "Filter and Return product details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "QuickBooks - Find Customer": {
      "main": [
        [
          {
            "node": "IF - Customer Exists?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF - Stripe Customer Exists?": {
      "main": [
        [
          {
            "node": "Stripe - Create Customer",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge Stripe Customer",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Filter and Return product details": {
      "main": [
        [
          {
            "node": "Create an invoice",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Quickbooks and Stripe Customer Ids": {
      "main": [
        [
          {
            "node": "Generate Payment Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Stripe Payment Link and Quickbooks Invoice #": {
      "main": [
        [
          {
            "node": "Workflow Completed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}