Back to Blog
n8nQuickBooksintegrationautomationaccounting

n8n + QuickBooks Integration: Automate Invoices, Expenses & Reports

n8nautomation TeamApril 11, 2026
TL;DR: n8n connects directly to QuickBooks Online via its HTTP Request node and OAuth2, letting you automate invoice creation, expense categorization, payment reminders, and financial reporting. This guide walks through five practical workflows you can build today to eliminate manual bookkeeping.

Connecting n8n with QuickBooks Online eliminates the repetitive data entry that eats into your week. Instead of manually creating invoices, chasing payments, or reconciling transactions, you build workflows that handle it on autopilot. Whether you're a freelancer, agency, or small business, these automations turn QuickBooks from a tool you dread opening into one that runs itself.

Why Automate QuickBooks with n8n

QuickBooks Online is the accounting backbone for millions of businesses, but it still requires a surprising amount of manual work. Creating invoices after closing a deal, categorizing bank feed transactions, following up on late payments — these tasks are predictable, rule-based, and perfect for automation.

n8n is particularly well-suited for QuickBooks automation because of three things:

  • Full API access via HTTP Request node — QuickBooks has a comprehensive REST API, and n8n's HTTP Request node with OAuth2 credentials gives you access to every endpoint: invoices, expenses, customers, payments, reports, and more.
  • Cross-platform orchestration — The real power is connecting QuickBooks to your other tools. When a deal closes in your CRM, an invoice appears in QuickBooks. When a Stripe payment lands, it's recorded automatically. n8n handles the glue logic between all of these.
  • Conditional logic and error handling — Financial data demands accuracy. n8n's IF nodes, Switch nodes, and error workflows let you build validation checks so bad data never hits your books.

If you're running n8n on n8nautomation.cloud, your instance is always online and ready to process these workflows — no worrying about server uptime during invoice runs or payment sync windows.

Connecting QuickBooks to n8n via OAuth2

QuickBooks Online uses OAuth 2.0 for API authentication. Here's how to set up the connection in n8n:

  1. Go to the Intuit Developer Portal and create an app. Select the QuickBooks Online Accounting scope.
  2. Under your app's Keys & credentials section, grab the Client ID and Client Secret.
  3. Set the redirect URI to your n8n instance's OAuth callback URL (e.g., https://yourname.n8nautomation.cloud/rest/oauth2-credential/callback).
  4. In n8n, create a new OAuth2 API credential. Set the Authorization URL to https://appcenter.intuit.com/connect/oauth2 and the Token URL to https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer.
  5. Set the scope to com.intuit.quickbooks.accounting.
  6. Click Connect and authorize the app in the popup window.

Once authenticated, every HTTP Request node in your workflows can use this credential to call QuickBooks endpoints. The base URL for all API calls is https://quickbooks.api.intuit.com/v3/company/{realmId}/, where realmId is your QuickBooks company ID.

Tip: Store your realmId as a workflow variable or environment variable so you don't hardcode it into every HTTP Request node. This makes it easy to switch between sandbox and production environments.

Auto-Generate Invoices from CRM Deals

This workflow creates a QuickBooks invoice the moment a deal is marked "Closed Won" in your CRM. No more copying client details between systems.

Workflow structure:

  1. Trigger node — Use a Webhook node or a CRM-specific trigger (HubSpot Trigger, Pipedrive Trigger, etc.) that fires when a deal status changes to "won."
  2. HTTP Request node (Find or Create Customer) — Query QuickBooks to check if the customer already exists: GET /query?query=SELECT * FROM Customer WHERE DisplayName = '{{customerName}}'. If no match, create the customer with a second HTTP Request node using POST /customer.
  3. HTTP Request node (Create Invoice) — Send a POST /invoice request with a JSON body containing the customer reference, line items, due date, and any terms from the deal record.
  4. Send Confirmation — Use a Slack or Email node to notify your finance team that the invoice was created, including the invoice number and amount.

The key detail is the line items mapping. QuickBooks expects each line item as an object with DetailType, Amount, and a SalesItemLineDetail containing the ItemRef. Use n8n's Function node to transform your CRM deal products into this format before the API call.

Categorize Expenses Automatically with AI

Manually categorizing bank transactions is tedious and error-prone. This workflow uses n8n's AI capabilities to auto-categorize expenses as they flow into QuickBooks.

Workflow structure:

  1. Schedule Trigger — Run every hour (or at whatever interval suits your transaction volume).
  2. HTTP Request node — Query recent uncategorized purchases: SELECT * FROM Purchase WHERE AccountRef = 'Uncategorized' STARTPOSITION 1 MAXRESULTS 100.
  3. AI Agent node — Pass each transaction's vendor name, amount, and memo to an AI model with a system prompt that maps to your QuickBooks chart of accounts. For example: "Given these expense categories: [Office Supplies, Software Subscriptions, Travel, Meals, Professional Services], classify this transaction: Vendor: Adobe Systems, Amount: $54.99, Memo: Monthly subscription."
  4. HTTP Request node (Update Purchase) — Update each purchase record with the AI-assigned category using POST /purchase with the corrected AccountRef.
Note: Always include a confidence threshold in your AI classification. If the model returns low confidence, route the transaction to a human review queue instead of auto-categorizing. Financial data accuracy is non-negotiable.

Send Payment Reminders for Overdue Invoices

Late payments hurt cash flow. This workflow checks QuickBooks daily for overdue invoices and sends escalating reminders automatically.

Workflow structure:

  1. Schedule Trigger — Runs daily at 9:00 AM.
  2. HTTP Request node — Query overdue invoices: SELECT * FROM Invoice WHERE DueDate < '{{today}}' AND Balance > '0'.
  3. Function node — Calculate how many days each invoice is overdue. Split into buckets: 1-7 days (friendly reminder), 8-30 days (firm reminder), 30+ days (urgent notice).
  4. Switch node — Route each invoice to the appropriate reminder path based on the overdue bucket.
  5. Email Send node — Send a templated email to the customer contact. The 1-7 day email is a gentle nudge. The 30+ day email includes a warning about service suspension or collection action.
  6. Google Sheets node (optional) — Log each reminder sent with the date, invoice number, and customer for audit tracking.

The escalation logic is simple but effective. Each reminder tier uses a different email template stored in the workflow's static data, so you customize the tone without touching the logic.

Build Automated Weekly Financial Reports

Instead of pulling reports manually from QuickBooks every Friday, this workflow generates a summary and delivers it to your inbox or Slack channel.

Workflow structure:

  1. Schedule Trigger — Every Friday at 6:00 PM.
  2. HTTP Request nodes (parallel) — Hit multiple QuickBooks report endpoints simultaneously:
    • GET /reports/ProfitAndLoss?start_date={{weekStart}}&end_date={{weekEnd}}
    • GET /reports/BalanceSheet?date={{weekEnd}}
    • GET /reports/AgedReceivables?date={{weekEnd}}
  3. Function node — Extract the key numbers: total revenue, total expenses, net income, cash balance, total receivables, and overdue amount. Format everything into a clean summary.
  4. Email Send or Slack node — Deliver the report to stakeholders. Include week-over-week comparisons if you store previous results.

For more polished output, you can feed the raw numbers into a Google Sheets template or use n8n's HTML node to generate a formatted report as a PDF attachment.

Tip: Running financial report workflows on a managed instance at n8nautomation.cloud ensures your Friday reports always run on time — even if you forget to check on your server.

Sync Payments Between Stripe and QuickBooks

If you collect payments through Stripe, keeping QuickBooks in sync manually is a recipe for reconciliation headaches. This workflow records every Stripe payment as a QuickBooks payment automatically.

Workflow structure:

  1. Stripe Trigger node — Listen for payment_intent.succeeded events.
  2. Function node — Extract the customer email, amount, currency, and Stripe charge ID from the webhook payload.
  3. HTTP Request node (Find Invoice) — Look up the matching open invoice in QuickBooks by customer reference and amount: SELECT * FROM Invoice WHERE CustomerRef = '{{customerId}}' AND TotalAmt = '{{amount}}' AND Balance > '0'.
  4. IF node — Check whether a matching invoice was found. If yes, record a payment against it. If no, create a sales receipt instead (for one-off payments without a prior invoice).
  5. HTTP Request node (Create Payment)POST /payment with the invoice reference, amount, and payment method. Include the Stripe charge ID in the PrivateNote field for easy cross-referencing during audits.

This workflow eliminates the double-entry problem entirely. Every Stripe charge shows up in QuickBooks within seconds, correctly linked to the right invoice and customer. If you handle volume — dozens or hundreds of transactions per day — this kind of real-time sync is essential, and having a dedicated n8n instance on n8nautomation.cloud ensures no webhook gets dropped due to resource constraints.

Each of these workflows takes 15-30 minutes to build in n8n's visual editor. Once running, they save hours of manual bookkeeping every week and eliminate the human errors that make reconciliation painful. Start with the one that causes you the most pain — usually invoice creation or payment sync — and expand from there.

Ready to automate with n8n?

Get affordable managed n8n hosting with 24/7 support.