{
  "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
          }
        ]
      ]
    }
  }
}