AutomationFlowsFinance › Automate Real-time Quickbooks Invoice Sync to Google Sheets

Automate Real-time Quickbooks Invoice Sync to Google Sheets

ByIntuz @intuz on n8n.io

It instantly syncs new QuickBooks invoices to Google Sheets, using specific invoice data or keywords as triggers to ensure your financial records are always accurate and up-to-date.

Webhook trigger★★★★☆ complexity10 nodesQuickBooksGoogle Sheets
Finance Trigger: Webhook Nodes: 10 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #7229 — 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": "4gzrrLiXlAZrOodq",
  "name": "Quickbooks Invoice to Google Sheet Automation",
  "tags": [],
  "nodes": [
    {
      "id": "a10919bd-1940-4f81-8c7f-44725a12b7e1",
      "name": "QuickBooks Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        260,
        1100
      ],
      "parameters": {
        "path": "quickbooks-invoice",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 1
    },
    {
      "id": "73b985b5-5984-4c30-9113-3238e0bca12f",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        1440,
        1100
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  return {\n    json: {\n      ID: item.json.Id,\n      Domain: item.json.domain,\n      \"Customer Name\": item.json.CustomerRef?.name || \"\",\n      \"Due Date\": item.json.DueDate || \"\"\n    }\n  };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "621a872a-3622-4bd2-8a92-fc2947132359",
      "name": "Get an invoice",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        880,
        1100
      ],
      "parameters": {
        "resource": "invoice",
        "invoiceId": "={{ $json.body.eventNotifications[0].dataChangeEvent.entities[0].id }}"
      },
      "typeVersion": 1
    },
    {
      "id": "61c0a129-a49e-407d-8d26-57f999333558",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2100,
        1100
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Domain",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "{YOUR_SHEET_ID}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{YOUR_GOOGLE_DOCUMENT_ID}/edit#gid=0",
          "cachedResultName": "quickbooks"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "{YOUR_GOOGLE_DOCUMENT_ID}",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/{YOUR_GOOGLE_DOCUMENT_ID}/edit?usp=drivesdk",
          "cachedResultName": "quickbooks"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "bd74fe13-f6d2-40e6-a310-f70ba77901cd",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        560
      ],
      "parameters": {
        "color": 3,
        "width": 480,
        "height": 500,
        "content": "## \ud83d\udee0\ufe0f Prerequisites\n\nBefore running this workflow, make sure the following are set up:\n\n1. **QuickBooks Webhook Configuration**  \n   - Connect the **production URL** of your webhook to the **Intuit Developer Portal** for your specific company.  \n   - Ensure **Invoice** events are subscribed and activated (e.g., create, update, delete).\n\n2. **Google Account Integration**  \n   - Connect your **Google Client Credentials**.  \n   - Enable the following APIs:  \n     - \ud83d\udcc4 Google Sheets \n     - \ud83d\udcc2 Google Drive \n\nOnce these are in place, your workflow will seamlessly capture and log every invoice change in real time. \ud83d\ude80\ud83d\udcca\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9cef3279-b6d3-4afc-b87f-c6d5af317ae5",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        60,
        1240
      ],
      "parameters": {
        "width": 480,
        "height": 340,
        "content": "### Step 1: Webhook Trigger Activated! \ud83e\ude9d\ud83d\udce2\n\nThis node is the **starting point** of the workflow.\n\nIt listens for **invoice changes in QuickBooks**\n\nWhat it does:\n\n- \ud83d\udce1 Captures the event in real time from QuickBooks.\n- \ud83d\udce6 Passes the invoice data into the workflow instantly.\n- \ud83d\udd04 Eliminates the need for manual checks or periodic polling.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1bf6a99b-e913-462c-8484-a53ec4e60acd",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        660
      ],
      "parameters": {
        "color": 5,
        "width": 480,
        "height": 400,
        "content": "### Step 2: Invoice Data Fetcher \ud83d\udcc4\ud83d\udd0d\n\nThis node uses the **Get an Invoice** operation to pull full details of the invoice from QuickBooks.\n\nWhy this step is important:\n\n- \u2705 Retrieves complete and up-to-date invoice information.\n- \ud83d\udcca Captures fields like invoice number, date, customer.\n- \ud83e\uddfe Ensures the Google Sheet reflects the exact state of the invoice at the moment of the event.\n\nIt\u2019s the step that turns a simple event notification into a fully detailed record. \ud83d\udce5\u2728\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e7356f43-b3d8-428f-9113-457e1bd9090c",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1260,
        1240
      ],
      "parameters": {
        "color": 3,
        "width": 440,
        "height": 380,
        "content": "### Step 3: JSON Formatter \ud83d\udee0\ufe0f\ud83d\udce6\n\nThis **Code** node takes the raw invoice data from QuickBooks and formats it into a clean, structured JSON object\u2014ready to be appended to Google Sheets.\n\nWhat it does:\n\n- \ud83e\uddf9 Extracts only the necessary fields (e.g., id, domain, Customer Name, Due Date).\n- \ud83d\udd04 Converts the data into the correct order and structure for the sheet.\n- \ud83d\udcd0 Ensures consistent formatting so every row in the sheet stays organized.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c7891c9d-6699-470f-8ef7-f6ce21e01548",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1900,
        600
      ],
      "parameters": {
        "color": 6,
        "width": 520,
        "height": 460,
        "content": "### Step 4: Google Sheet Append\ud83d\udcc4\u2795\n\nThis node appends the **formatted invoice data** into your Google Sheet.\n\nImportant:  \n\u2705 Ensure your Google Sheet columns are named exactly as follows:  \n- **ID**  \n- **Domain**  \n- **Customer Name**  \n- **Due Date**\n\nWhat this step does:\n\n- \ud83d\udce5 Inserts each invoice as a new row.\n- \ud83d\udcca Keeps all invoice records neatly organized in one place.\n- \ud83d\udd04 Works in real time\u2014new or updated invoices appear instantly.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2bbfaf8c-4ce1-40c3-8ed4-b79f77237187",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2100,
        1340
      ],
      "parameters": {
        "color": 3,
        "width": 440,
        "height": 380,
        "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\nWebsite: https://www.intuz.com/\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "19e1f8a9-5325-4c3a-91c9-0b3aa765c942",
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get an invoice": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "QuickBooks Webhook": {
      "main": [
        [
          {
            "node": "Get an invoice",
            "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

It instantly syncs new QuickBooks invoices to Google Sheets, using specific invoice data or keywords as triggers to ensure your financial records are always accurate and up-to-date.

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

More Finance workflows → · Browse all categories →

Related workflows

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

Finance

This workflow automates the entire process of receiving a product/service order, checking or creating a customer in QuickBooks Online (QBO), generating an invoice, and emailing it — all triggered by a

QuickBooks
Finance

Tired of the standard, boring invoices from QuickBooks Online? This workflow completely automates the process of creating beautiful, custom-branded PDF invoices and emailing them directly to your clie

QuickBooks, HTTP Request, Email Send
Finance

Automated QuickBooks Invoice to Custom PDF & Email

QuickBooks, HTTP Request, Email Send
Finance

It actively monitors QuickBooks and, upon detecting a new invoice, immediately sends a detailed alert to your chosen Slack channel.

QuickBooks, Slack
Finance

Invoice Follow-Up (7-Day Reminder). Uses quickbooks, emailSend, googleSheets. Scheduled trigger; 5 nodes.

QuickBooks, Email Send, Google Sheets