This workflow corresponds to n8n.io template #2807 — 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "7fe02521-c46a-4314-9387-b7b4983fa859",
"name": "POST Sales Receipt",
"type": "n8n-nodes-base.httpRequest",
"position": [
1320,
-120
],
"parameters": {
"url": "https://sandbox-quickbooks.api.intuit.com/YOUR_AWS_SECRET_KEY_HERE?minorversion=73",
"method": "POST",
"options": {},
"jsonBody": "={\n \"Line\": [\n {\n \"Description\": \"{{ $json.data.object.description }}\",\n \"DetailType\": \"SalesItemLineDetail\",\n \"SalesItemLineDetail\": {\n \"TaxCodeRef\": {\n \"value\": \"NON\"\n },\n \"Qty\": 1,\n \"UnitPrice\": {{ $json.data.object.amount_received / 100 }},\n \"ItemRef\": {\n \"name\": \"Subscription\", \n \"value\": \"10\"\n }\n },\n \"Amount\": {{ $json.data.object.amount / 100 }},\n \"LineNum\": 1\n }\n ],\n \"CustomerRef\": {\n \"value\": {{ $input.all()[2].json.QueryResponse.Customer[0].BillAddr.Id }},\n \"name\": \"{{ $input.all()[2].json.QueryResponse.Customer[0].DisplayName }}\"\n },\n \"CurrencyRef\": {\n \"value\": \"{{ $json.data.object.currency.toUpperCase() }}\"\n },\n \"PrivateNote\": \"Payment from Stripe Payment Intent ID: {{ $json.data.object.id }}\"\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "quickBooksOAuth2Api"
},
"credentials": {
"quickBooksOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.2
},
{
"id": "5ed429d7-c93d-48c8-b603-ca8d7efb57ed",
"name": "GET Quickbooks Customer",
"type": "n8n-nodes-base.httpRequest",
"position": [
400,
-20
],
"parameters": {
"url": "=https://sandbox-quickbooks.api.intuit.com/v3/company/9341453851324714/query?query=select * from Customer Where PrimaryEmailAddr = '{{ $json.email }}'&minorversion=73\n\n",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "quickBooksOAuth2Api"
},
"credentials": {
"httpCustomAuth": {
"name": "<your credential>"
},
"quickBooksOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "bef5b4c3-4948-4294-bd80-7039342edf0d",
"name": "Get Stripe Customer",
"type": "n8n-nodes-base.stripe",
"position": [
240,
-140
],
"parameters": {
"resource": "customer",
"customerId": "={{ $json.data.object.customer }}"
},
"credentials": {
"stripeApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "042fff2c-b5e7-4877-b935-f6a707118c4a",
"name": "New Payment",
"type": "n8n-nodes-base.stripeTrigger",
"position": [
80,
-260
],
"parameters": {
"events": [
"payment_intent.succeeded"
]
},
"credentials": {
"stripeApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "12235c25-712b-4e84-b744-60573e00d381",
"name": "If Customer Exists",
"type": "n8n-nodes-base.if",
"position": [
560,
100
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "aef7393c-c4ff-4196-887d-6a9b057381f8",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.QueryResponse.Customer[0].PrimaryEmailAddr.Address }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "68f63246-cb95-494f-918c-c0c6da5a64f9",
"name": "Use Stripe Customer",
"type": "n8n-nodes-base.merge",
"position": [
880,
120
],
"parameters": {},
"executeOnce": true,
"typeVersion": 3
},
{
"id": "e9eea332-7109-479f-8f50-65b3b9438e0e",
"name": "Create QuickBooks Customer",
"type": "n8n-nodes-base.quickbooks",
"position": [
1100,
120
],
"parameters": {
"operation": "create",
"displayName": "={{ $input.all()[0].json.name }}",
"additionalFields": {
"Balance": "={{ $input.all()[0].json.balance }}",
"PrimaryEmailAddr": "={{ $input.all()[0].json.email }}"
}
},
"credentials": {
"quickBooksOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 1
},
{
"id": "f805f03d-93b7-4e3b-8b6a-37d9dd802368",
"name": "Merge Stripe and QuickBooks Data",
"type": "n8n-nodes-base.merge",
"position": [
1100,
-120
],
"parameters": {
"numberInputs": 3
},
"typeVersion": 3
},
{
"id": "b9c31838-2bb7-4882-bd15-c096cb97e225",
"name": "Merge Payment and QuickBooks Customer",
"type": "n8n-nodes-base.merge",
"position": [
1320,
120
],
"parameters": {},
"executeOnce": true,
"typeVersion": 3
},
{
"id": "cb69fcee-8d5d-47ab-be76-9e25cb0a7f42",
"name": "POST Sales Receipt To QuickBooks",
"type": "n8n-nodes-base.httpRequest",
"position": [
1540,
120
],
"parameters": {
"url": "https://sandbox-quickbooks.api.intuit.com/YOUR_AWS_SECRET_KEY_HERE?minorversion=73",
"method": "POST",
"options": {},
"jsonBody": "={\n \"Line\": [\n {\n \"Description\": \"{{ $json.data.object.description }}\",\n \"DetailType\": \"SalesItemLineDetail\",\n \"SalesItemLineDetail\": {\n \"TaxCodeRef\": {\n \"value\": \"NON\"\n },\n \"Qty\": 1,\n \"UnitPrice\": {{ $json.data.object.amount_received / 100 }},\n \"ItemRef\": {\n \"name\": \"Subscription\", \n \"value\": \"10\"\n }\n },\n \"Amount\": {{ $json.data.object.amount / 100 }},\n \"LineNum\": 1\n }\n ],\n \"CustomerRef\": {\n \"value\": {{ $input.all()[1].json.Id}},\n \"name\": \"{{ $input.all()[1].json.DisplayName }}\"\n },\n \"CurrencyRef\": {\n \"value\": \"{{ $json.data.object.currency.toUpperCase() }}\"\n },\n \"PrivateNote\": \"Payment from Stripe Payment Intent ID: {{ $json.data.object.id }}\"\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "quickBooksOAuth2Api"
},
"credentials": {
"quickBooksOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.2
}
],
"connections": {
"New Payment": {
"main": [
[
{
"node": "Get Stripe Customer",
"type": "main",
"index": 0
},
{
"node": "Merge Stripe and QuickBooks Data",
"type": "main",
"index": 0
},
{
"node": "Merge Payment and QuickBooks Customer",
"type": "main",
"index": 0
}
]
]
},
"If Customer Exists": {
"main": [
[
{
"node": "Merge Stripe and QuickBooks Data",
"type": "main",
"index": 2
}
],
[
{
"node": "Use Stripe Customer",
"type": "main",
"index": 0
}
]
]
},
"POST Sales Receipt": {
"main": [
[]
]
},
"Get Stripe Customer": {
"main": [
[
{
"node": "GET Quickbooks Customer",
"type": "main",
"index": 0
},
{
"node": "Use Stripe Customer",
"type": "main",
"index": 1
}
]
]
},
"Use Stripe Customer": {
"main": [
[
{
"node": "Create QuickBooks Customer",
"type": "main",
"index": 0
}
]
]
},
"GET Quickbooks Customer": {
"main": [
[
{
"node": "If Customer Exists",
"type": "main",
"index": 0
},
{
"node": "Merge Stripe and QuickBooks Data",
"type": "main",
"index": 1
}
]
]
},
"Create QuickBooks Customer": {
"main": [
[
{
"node": "Merge Payment and QuickBooks Customer",
"type": "main",
"index": 1
}
]
]
},
"Merge Stripe and QuickBooks Data": {
"main": [
[
{
"node": "POST Sales Receipt",
"type": "main",
"index": 0
}
]
]
},
"Merge Payment and QuickBooks Customer": {
"main": [
[
{
"node": "POST Sales Receipt To QuickBooks",
"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.
httpCustomAuthquickBooksOAuth2ApistripeApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Streamline your accounting by automatically creating QuickBooks Online customers and sales receipts whenever a successful Stripe payment is processed. Ideal for businesses looking to reduce manual data entry and improve accounting efficiency. Trigger: The workflow is triggered…
Source: https://n8n.io/workflows/2807/ — 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.
Http Stripe. Uses httpRequest, stripe, stripeTrigger, quickbooks. Event-driven trigger; 10 nodes.
Automated Stripe Payment to QuickBooks Sales Receipt
In this example, the workflow is triggered from a new payout from Stripe. It then logs the transaction as a journal entry in Wave Accounting, helping you automate your accounting without needing to pa
This workflow automates the process of recording successful payments from Stripe into QuickBooks by creating corresponding Sales Receipts. It ensures payment data is captured accurately, checks whethe
This automation manages Stripe disputes by fetching dispute data, formatting it, logging it into Google Sheets, updating related payment records, and notifying the customer via email. It ensures finan