At a Glance — n8n QuickBooks Online Integration
- QuickBooks Online only: Native n8n node uses OAuth2; QuickBooks Desktop uses a separate middleware API and is not directly supported
- Node covers: Customer, Invoice, Payment, Bill, Product/Service Item, Estimate, Purchase Order — create, update, get, delete/void operations
- OAuth2 setup: Create an Intuit Developer App → copy Client ID + Secret → connect in n8n (token refreshes automatically; no re-auth unless you revoke)
- Most common workflow: Stripe payment → QBO Sales Receipt or Invoice payment — use Payment Intent ID as DocNumber for idempotency to prevent duplicate records
- Sandbox available: Toggle Sandbox/Production in n8n credentials — test against Intuit sample data before touching real accounting records
- Avoid deletes: Use Invoice → Void (not delete) to maintain the audit trail; QBO flags deleted records but you lose searchability
What the n8n QuickBooks Node Covers
n8n ships with a native QuickBooks Online node that works through OAuth2 — no API key setup, no manual token management. Once you connect your QBO account, you get access to the following resources:
- Customer — create, update, get, get all
- Invoice — create, delete, get, get all, send, void
- Payment — create, delete, get, get all, void
- Bill — create, update, delete, get, get all
- Product/Service Item — create, update, get, get all
- Estimate — create, delete, get, get all, send
- Purchase Order — create, update, delete, get, get all
The node handles QuickBooks Online only. QuickBooks Desktop uses a completely different API (the QuickBooks Desktop Connector middleware) and is not directly supported.
Connecting QuickBooks to n8n
QuickBooks uses OAuth2, which requires a QBO Developer App to generate the credentials. This is a one-time setup:
- Go to developer.intuit.com and sign in with your Intuit account
- Create a new app — select QuickBooks Online and Payments as the platform
- In the app's Keys & OAuth section, copy the Client ID and Client Secret
- Add your n8n OAuth callback URL as a redirect URI (n8n shows this URL in the credential form)
- In n8n: Credentials → New → QuickBooks OAuth2 API → enter Client ID and Secret → click Connect
After connecting, n8n stores and refreshes the token automatically. You do not need to re-authenticate unless you revoke access in QuickBooks.
Intuit provides a sandbox environment for testing. In n8n's QuickBooks credential, toggle Environment between Sandbox and Production. Build and test your workflows in sandbox first — sandbox has sample data including customers, invoices, and products that let you verify your field mappings without touching real accounting records.
Workflow: Stripe Payment → QuickBooks Invoice
This is the most common accounting automation we build — and the one that saves teams the most time. Without automation, every Stripe payment requires a manual QuickBooks entry. With n8n, it happens in seconds.
Workflow structure
- Stripe Trigger — listen for
payment_intent.succeeded(orcharge.succeededfor older Stripe integrations) - Set node — extract
amount,currency,customer,description, andmetadatafrom the Stripe payload - QuickBooks node (Customer → Get All) — search for existing QBO customer by email (
{{ $json.customer_email }}) - IF node — does the customer exist in QBO?
- QuickBooks node (Customer → Create) — on false branch: create customer with name and email from Stripe
- QuickBooks node (Invoice → Create) — create invoice with customer ID, line item (service item ID + amount + description), due date
- QuickBooks node (Payment → Create) — apply payment to the invoice, marking it paid
For a detailed step-by-step build of this workflow, see Stripe to QuickBooks sync with n8n.
Getting the service item ID
QuickBooks invoices require a line item with a product/service ID — you cannot just pass a description string. Add a QuickBooks Item → Get All step early in your workflow to retrieve your service item IDs, then hard-code the correct ID in your Set node. Alternatively, store it as a static value in the workflow settings if you only bill for one service type.
Workflow: Form Submission → New Customer + Invoice
For service businesses that collect client details via a form (Typeform, Tally, Jotform, etc.) before billing, this workflow creates the QBO customer and sends the first invoice automatically:
- Webhook trigger — receive form submission payload
- QuickBooks (Customer → Create) — create customer with name, email, billing address from form fields
- QuickBooks (Invoice → Create) — create invoice with the new customer ID, service line item, and amount from the form
- QuickBooks (Invoice → Send) — email the invoice to the customer
- Slack node — notify your team that a new client and invoice were created
This eliminates the two manual steps that bookkeepers typically handle between a new client signing and their first invoice going out.
Workflow: Daily P&L Summary to Slack
QuickBooks has reporting built in, but pulling a daily P&L into Slack without logging into QBO is a quality-of-life improvement many finance teams appreciate.
- Schedule Trigger — 8 AM every weekday
- HTTP Request node — call the QuickBooks Reports API:
GET /v3/company/{realmId}/reports/ProfitAndLoss?date_macro=This+Monthwith OAuth2 credential - Code node — extract total income, total expenses, net income from the response JSON
- Slack node — post formatted message: "MTD: Income $X · Expenses $X · Net $X"
The Reports API is not covered by n8n's QuickBooks node, so use an HTTP Request node with the QuickBooks OAuth2 credential for this step.
Error Handling for Accounting Workflows
Accounting errors are high-stakes — a missed invoice or a duplicate payment record creates real problems. A few patterns reduce the risk:
- Idempotency checks — before creating a customer or invoice, always search for an existing record first. Use the QBO customer email or an external ID stored in metadata to detect duplicates. An IF node gates creation only when no match exists.
- Dead-letter logging — when a QBO node fails, log the raw Stripe or form payload to an Airtable base or Google Sheet. This lets you manually reconcile failures without losing the source data.
- Error workflow — assign an n8n error workflow to all accounting workflows. The error workflow should post to a dedicated Slack channel (not just the general alerts channel) so accounting staff see failures immediately. See: n8n error handling guide.
- Rate limit handling — QuickBooks enforces 500 requests/minute. For batch imports, add a Wait node between records and stay below 8 requests/second.
Need This Built?
Entech Solutions builds production QuickBooks automation with n8n — from straightforward Stripe-to-QBO syncs to multi-source accounting pipelines involving NetSuite, Shopify, and HubSpot. See our n8n QuickBooks integration service page for scope and pricing information.