This workflow corresponds to n8n.io template #6770 — 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 →
{
"id": "0PCgKBDaVH6uI0KX",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Create customers & Sales Receipts in Quickbook from Google Sheet Data",
"tags": [],
"nodes": [
{
"id": "01eb09e0-1209-4614-ab15-16ee134500b4",
"name": "Google Sheets Trigger",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
-360,
-60
],
"parameters": {
"event": "rowAdded",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1vHkhooOUi5AbeLg-HG72jU-jCCJncqdEyY3dXboQc1g/edit#gid=0",
"cachedResultName": "Customers"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "https://docs.google.com/spreadsheets/d/1vHkhooOUi5AbeLg-HG72jU-jCCJncqdEyY3dXboQc1g/edit?gid=0#gid=0"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "generated-601704ef-7cbd-449a-afd3-da0f6d324ddd",
"name": "Workflow Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-580,
-400
],
"parameters": {
"width": 800,
"height": 280,
"content": "## Workflow Overview\n\nThis workflow first checks if a customer from the Google Sheet already exists in QuickBooks Online using their **Customer Name** or **Email**.\n\n- If the customer **exists**, the workflow proceeds directly to the **Create Sales Receipt** step.\n- If the customer **does not exist**, a new customer is created in QuickBooks Online, and then the workflow proceeds to the **Create Sales Receipt** step."
}
},
{
"id": "generated-b0d6eeec-8888-4a1a-a47e-6e4507bd358c",
"name": "QuickBooks Customer Check & Creation",
"type": "n8n-nodes-base.stickyNote",
"position": [
-200,
200
],
"parameters": {
"color": 4,
"width": 800,
"height": 280,
"content": "### QuickBooks Customer Check & Creation\n\n1. **Check Customer Existence**: This node queries QuickBooks Online to see if a customer with the matching \"Customer Name\" or \"Email\" already exists.\n2. **Customer Exists?**: This \"If\" node evaluates the output from \"Check Customer Existence\".\n * The \"True\" branch (top output) means the customer was found.\n * The \"False\" branch (bottom output) means the customer was not found.\n3. **Create Customer**: This node is executed only if the \"Customer Exists?\" node's \"False\" branch is taken, meaning a new customer needs to be created in QuickBooks Online."
}
},
{
"id": "generated-2e0f8a9c-3a00-4222-997a-ccfd0dfdd357",
"name": "Customer Exists?",
"type": "n8n-nodes-base.if",
"position": [
440,
40
],
"parameters": {
"options": {
"ignoreCase": true,
"looseTypeValidation": true
},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ba271f0d-1115-4bb7-a39b-7b2e97afe9cb",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $('Get many customers').all().length }}",
"rightValue": 0
}
]
}
}
},
{
"id": "generated-035f9a50-5501-4f7e-a282-4054830fd813",
"name": "Create Customer",
"type": "n8n-nodes-base.quickbooks",
"position": [
760,
160
],
"parameters": {
"operation": "create",
"displayName": "={{ $json[\"Customer Name\"] }}",
"additionalFields": {
"Active": true,
"Balance": "",
"Taxable": false,
"GivenName": "",
"FamilyName": "",
"CompanyName": "",
"PrimaryPhone": "={{ $json.Phone }}",
"BillWithParent": false,
"BalanceWithJobs": 0,
"PrimaryEmailAddr": "={{ $json.Email }}",
"PrintOnCheckName": "",
"FullyQualifiedName": "",
"PreferredDeliveryMethod": "Print"
}
},
"credentials": {
"quickBooksOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"id": "generated-f97635f5-7da3-4756-9569-88abcf4259ea",
"name": "Create Sales Receipt",
"type": "n8n-nodes-base.quickbooks",
"position": [
1020,
-20
],
"parameters": {
"resource": "payment",
"operation": "create",
"CustomerRef": "={{ $json.Id || $json.customer.Id }}",
"additionalFields": {
"TxnDate": ""
}
},
"credentials": {
"quickBooksOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"id": "ae9dae6f-5c70-4547-8dd7-90fd4eb3b431",
"name": "QuickBooks Customer Check & Creation1",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
-380
],
"parameters": {
"color": 4,
"width": 820,
"height": 340,
"content": "### Sales Receipts\n\n1. **Check Customer Existence**: This node queries QuickBooks Online to see if a customer with the matching \"Customer Name\" or \"Email\" already exists.\n2. **Customer Exists?**: This \"If\" node evaluates the output from \"Check Customer Existence\".\n * The \"True\" branch (top output) means the customer was found.\n * The \"False\" branch (bottom output) means the customer was not found.\n3. **Create Customer**: This node is executed only if the \"Customer Exists?\" node's \"False\" branch is taken, meaning a new customer needs to be created in QuickBooks Online."
},
"typeVersion": 1
},
{
"id": "0b6028de-052f-40ad-a384-c126f3d2c20a",
"name": "Check Customer Existence",
"type": "n8n-nodes-base.quickbooks",
"position": [
60,
0
],
"parameters": {
"filters": {
"query": "=DisplayName = '{{ $json[\"Customer Name\"] }}'"
},
"operation": "getAll"
},
"credentials": {
"quickBooksOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "32e15321-dbce-4da0-b087-1bd2c8902643",
"connections": {
"Create Customer": {
"main": [
[
{
"node": "Create Sales Receipt",
"type": "main",
"index": 0
}
]
]
},
"Customer Exists?": {
"main": [
[
{
"node": "Create Sales Receipt",
"type": "main",
"index": 0
}
],
[
{
"node": "Create Customer",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets Trigger": {
"main": [
[
{
"node": "Create a customer",
"type": "main",
"index": 0
},
{
"node": "Check Customer Existence",
"type": "main",
"index": 0
}
]
]
},
"Check Customer Existence": {
"main": [
[
{
"node": "Customer Exists?",
"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.
googleSheetsTriggerOAuth2ApiquickBooksOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Simply add new transaction details to a designated Google Sheet, and this workflow takes over. Using specific status keywords in a column to trigger the process, it automatically creates new customer profiles and generates sales receipts in QuickBooks. This creates a complete,…
Source: https://n8n.io/workflows/6770/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow creates a seamless data pipeline from a Google Sheet directly into QuickBooks, automating the creation of new customers and their initial sales estimates. It’s designed to save time, red
Automate your entire email experimentation workflow with this AI-powered A/B testing orchestrator 🚀. This n8n automation generates two intelligent email variants using AI, sends campaigns through Mail
Stickynote Workflow. Uses googleTranslate, googleSheetsTrigger, googleDrive, httpRequest. Event-driven trigger; 22 nodes.
Automate IT asset allocation for new hires with an intelligent, AI-powered workflow 🤖. This automation reads employee data from Google Sheets, determines role-based requirements, and intelligently ass
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.