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.
Frequently asked questions
Does n8n have a native QuickBooks node? Yes. n8n includes a built-in QuickBooks Online node with support for customers, invoices, payments, products/services, bills, estimates, and purchase orders. Authentication uses OAuth2, which means you connect your QuickBooks Online account once and n8n handles token refresh automatically. The node does not support QuickBooks Desktop — that requires a different integration approach via the QuickBooks Desktop Connector or a local middleware.
How do you connect QuickBooks to n8n? In n8n, go to Credentials → New → QuickBooks OAuth2. You will need a QuickBooks app client ID and client secret — create a free app at developer.intuit.com. Set the redirect URI to your n8n OAuth callback URL (shown in the credential form). After saving, click Connect and authorize through the QuickBooks OAuth2 flow. n8n stores and refreshes the token automatically.
Can n8n sync Stripe payments to QuickBooks automatically? Yes. Use a Stripe Trigger node listening for the payment_intent.succeeded event. Extract the amount, currency, customer email, and description from the Stripe payload. In n8n, look up the QuickBooks customer by email (or create if not found), then create a QuickBooks Invoice or Sales Receipt with the Stripe payment data. This eliminates manual bookkeeping for every Stripe transaction. See our detailed walkthrough: stripe to QuickBooks sync with n8n.
What QuickBooks records can n8n create and update? The n8n QuickBooks Online node supports: Customers (create, update, get, get all), Invoices (create, delete, get, get all, send, void), Payments (create, delete, get, get all, void), Products/Services (create, update, get, get all), Bills (create, update, delete, get, get all), Estimates (create, delete, get, get all, send), and Purchase Orders (create, update, delete, get, get all). For operations not covered by the node, use the HTTP Request node with QuickBooks OAuth2 credentials to call the QuickBooks API directly.
How do you handle QuickBooks API rate limits in n8n? QuickBooks Online enforces rate limits — typically 500 requests per minute per app per realm. For batch workflows processing many records, add a Wait node (250–500ms) between QuickBooks node calls. Enable Retry on Fail on any HTTP Request nodes calling QuickBooks directly, with 3 tries and a 1-second wait. For large data migrations, process records in batches of 50–100 using n8n's Loop Over Items node to stay well within limits.
Can n8n send QuickBooks invoices automatically? Yes. The QuickBooks node includes a Send action on the Invoice resource. After creating an invoice, add a second QuickBooks node set to Invoice → Send, passing the invoice ID. QuickBooks will send the invoice to the customer email address stored on the customer record. You can also use the Estimate → Send action for quotes before a project begins.
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.