Intermediate~20 min setupFinance & FinanceVerified April 2026
QuickBooks logo
Stripe logo

How to Create QuickBooks Bank Deposits from Stripe Payouts with N8n

Automatically creates a bank deposit record in QuickBooks whenever Stripe processes a payout to your bank account.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

Teams running their own N8n instance who want customizable payout reconciliation without per-execution costs

Not ideal for

Businesses needing instant setup or those without technical resources to manage webhook endpoints

Sync type

real-time

Use case type

sync

Real-World Example

💡

A 25-person B2B SaaS company gets 40+ Stripe payouts monthly from different subscription plans and one-time payments. Their bookkeeper spent 2 hours each week manually entering deposits and matching them to Stripe dashboard data. Now deposits auto-create in QuickBooks within seconds of payout completion, with Stripe payout IDs in the memo field for instant reconciliation.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.

Prices shown for annual billing. Based on published pricing as of April 2026.

Estimated ROI

1000

min saved/mo

$583

labor value/mo

Free

no platform cost

Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.

Implementation

Skip the setup

Import this workflow directly into n8n

Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured — you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

N8n instance running and accessible (self-hosted or cloud)
Stripe account with payout processing enabled
QuickBooks Online subscription with API access
Intuit Developer account for QB app registration
Admin access to your bank account setup in QuickBooks

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Deposit Amountamount
Arrival Datearrival_date
Payout IDid
Bank Accountaccount
Currencycurrency
1 optional field▸ show
Methodmethod

Step-by-Step Setup

1

Workflows > New > Triggers > Webhook

Set up Stripe webhook endpoint

Create a webhook trigger in N8n to catch Stripe payout events. This receives real-time notifications when payouts complete.

  1. 1Click the + button to create a new workflow
  2. 2Add a 'Webhook' trigger node from the triggers panel
  3. 3Copy the webhook URL from the node settings
  4. 4Set HTTP method to 'POST'
What you should see: You should see a unique webhook URL like https://your-n8n.domain/webhook/abc123
Common mistake — Copy the webhook URL carefully — it expires if you regenerate it, and any scenarios using the old URL will silently stop working.
2

Stripe Dashboard > Developers > Webhooks

Configure Stripe webhook

Tell Stripe to send payout events to your N8n webhook. Only enable payout.paid events to avoid noise from other transactions.

  1. 1Go to Stripe Dashboard > Developers > Webhooks
  2. 2Click 'Add endpoint'
  3. 3Paste your N8n webhook URL
  4. 4Select only 'payout.paid' from the event list
  5. 5Click 'Add endpoint'
What you should see: Stripe shows your endpoint as 'Enabled' with 1 event type selected
Common mistake — Don't select all payout events — payout.created fires before funds actually transfer
3

Workflows > Node Library > QuickBooks Online

Add QuickBooks Online node

Connect to QuickBooks to create bank deposits. You'll need a QB developer app with sandbox credentials for testing first.

  1. 1Drag a 'QuickBooks Online' node after the webhook
  2. 2Select 'Deposit' as the resource
  3. 3Choose 'Create' as the operation
  4. 4Click 'Create New' next to Credentials
What you should see: The node shows 'QuickBooks Online' with red connection indicator until credentials added
4

Credentials > QuickBooks Online > OAuth2

Set up QuickBooks OAuth

Create OAuth credentials to access QuickBooks. This requires a Intuit developer account and app registration.

  1. 1Go to developer.intuit.com and create an app
  2. 2Copy the Client ID and Client Secret
  3. 3In N8n credentials, paste both values
  4. 4Click 'Connect my account' and authorize access
  5. 5Select your test company file
What you should see: Green 'Connected' status appears next to QuickBooks Online credentials
Common mistake — Test with a sandbox company first — creating deposits in live QB affects your actual books
5

QuickBooks Node > Parameters

Map deposit basic fields

Configure the essential deposit information using Stripe payout data. Set the deposit account to match your actual bank account in QuickBooks.

  1. 1Set 'Deposit To Account' to your bank account from dropdown
  2. 2Map 'Total Amount' to {{ $json.data.object.amount }}
  3. 3Set 'Transaction Date' to {{ $json.data.object.arrival_date }}
  4. 4Add 'Memo' with text 'Stripe payout {{ $json.data.object.id }}'
What you should see: All required fields show mapped values with Stripe webhook data references
Common mistake — Stripe amounts are in cents — you'll need to divide by 100 in the next step
QuickBooks fields
DocNumber
CustomerRef.name
TotalAmt
Balance
DueDate
available as variables:
1.props.DocNumber
1.props.CustomerRef.name
1.props.TotalAmt
1.props.Balance
1.props.DueDate
6

QuickBooks Node > Total Amount > Expression

Add amount conversion

Convert Stripe's cent-based amounts to dollars for QuickBooks. Use N8n's expression editor to handle the math automatically.

  1. 1Click the expression icon next to Total Amount
  2. 2Replace the mapping with {{ $json.data.object.amount / 100 }}
  3. 3Set currency to 'USD' or your base currency
  4. 4Test the expression shows dollars not cents
What you should see: Expression preview shows dollar amount like 1247.50 instead of 124750
Common mistake — Don't forget this step — QB will create deposits for 100x the actual amount
7

QuickBooks Node > Line Items

Configure deposit line items

Add line items to break down the deposit. Map Stripe fees and net amount as separate lines for accurate reconciliation.

  1. 1Scroll to 'Line Items' section
  2. 2Click 'Add Line Item'
  3. 3Set 'Amount' to {{ $json.data.object.amount / 100 }}
  4. 4Set 'Description' to 'Stripe payout for {{ $json.data.object.arrival_date }}'
What you should see: Line items section shows one entry with mapped payout amount and description
Common mistake — Keep line items simple — complex breakdowns can fail QB validation
8

Node Context Menu > Add Error Workflow

Add error handling

Set up error handling to catch failed deposits and log issues. This prevents silent failures when QB rejects deposits.

  1. 1Right-click the QuickBooks node
  2. 2Select 'Add Error Workflow'
  3. 3Add a 'No Operation' node to the error branch
  4. 4Enable 'Continue on Fail' in QuickBooks node settings
What you should see: Red error line appears connecting QuickBooks node to NoOp node
Common mistake — Without error handling, failed deposits stop the entire workflow
9

Stripe Dashboard > Webhooks > Test

Test with Stripe test data

Send a test payout event from Stripe to verify your workflow processes correctly. Use Stripe's webhook testing tool.

  1. 1Go back to Stripe webhook settings
  2. 2Click 'Send test webhook'
  3. 3Select a 'payout.paid' sample event
  4. 4Click 'Send test webhook' button
  5. 5Check N8n execution log for results
What you should see: N8n shows successful execution with green checkmarks on both nodes
Common mistake — Test events use fake data — amounts and dates won't match real payouts
n8n
▶ Run once
executed
QuickBooks
Stripe
Stripe
🔔 notification
received
10

QuickBooks > Banking > Banking

Verify QuickBooks deposit

Check that the deposit actually appeared in QuickBooks with correct amounts and details. This confirms the full integration works.

  1. 1Open QuickBooks Online
  2. 2Go to Banking > Banking tab
  3. 3Look for the new deposit entry
  4. 4Verify amount matches Stripe payout
  5. 5Check memo contains Stripe payout ID
What you should see: New deposit appears in QB with correct amount and Stripe reference in memo
Common mistake — Deposits might take 2-3 minutes to appear due to QB's API caching
11

Workflow Header > Active Toggle

Activate the workflow

Turn on the workflow to process real Stripe payouts automatically. Monitor the first few executions to catch any issues.

  1. 1Click the workflow toggle to 'Active'
  2. 2Verify webhook endpoint shows 'Listening'
  3. 3Wait for your next real Stripe payout
  4. 4Check execution history for successful runs
What you should see: Workflow status shows 'Active' with green indicator
Common mistake — Monitor closely for the first week — real payout data sometimes differs from test events

Drop this into an n8n Code node.

Copy this template{{ new Date($json.data.object.arrival_date * 1000).toISOString().split('T')[0] }}
▸ Show code
{{ new Date($json.data.object.arrival_date * 1000).toISOString().split('T')[0] }}

... expand to see full code

{{ new Date($json.data.object.arrival_date * 1000).toISOString().split('T')[0] }}

Scaling Beyond 400+ payouts/month+ Records

If your volume exceeds 400+ payouts/month records, apply these adjustments.

1

Add execution queuing

Use N8n's 'Wait' node with random delays between QB API calls to stay under their 500 calls/hour limit. Set delays of 8-10 seconds for high-volume accounts.

2

Batch weekend processing

Queue weekend payouts and process them Monday morning to avoid rate limits during business hours when your team uses QuickBooks heavily.

Going live

Production Checklist

Before you turn this on for real, confirm each item.

Troubleshooting

Common errors and how to fix them.

Frequently Asked Questions

Common questions about this workflow.

Analysis

VerdictWhy n8n for this workflow

Use N8n for this if you're already running your own N8n instance or want full control over the webhook processing. The self-hosted nature means zero per-execution costs once you're past the learning curve. You can customize error handling, add complex data transformations, and store execution logs locally. Skip N8n if you need this running in 10 minutes — Zapier handles the QB OAuth dance much smoother.

Cost

This workflow uses 2 executions per payout (webhook + QB deposit creation). At 50 payouts/month, that's 100 executions total. N8n cloud charges nothing for the first 5,000 executions monthly. Self-hosted is just your server costs. Zapier's QB integration sits on their $20/month plan after the 5-task free tier, so you'd pay $240/year. Make charges $9/month for 1,000 operations. N8n wins on cost if you're already hosting it.

Tradeoffs

Zapier's QuickBooks integration handles bank account lookup automatically — their dropdown populates your actual accounts without manual mapping. Make's error handling is more visual with better retry logic built-in. But N8n gives you raw webhook data access and custom JavaScript transforms that both others limit. You can build complex payout categorization logic or custom reconciliation reports that Zapier and Make can't match.

You'll hit Stripe's webhook retry behavior if your N8n goes down — they retry failed webhooks for 3 days then give up. QuickBooks rate limits hit at 500 API calls per hour, so high-volume accounts need throttling. The trickiest issue: QB's bank account IDs change if you disconnect/reconnect your actual bank, breaking the deposit mapping until you update the workflow. Set up monitoring on failed executions or you'll miss payouts silently.

Ideas for what to build next

  • Add fee trackingCreate separate journal entries for Stripe fees by parsing the fee breakdown from payout webhook data into QB expense accounts.
  • Set up chargeback alertsMonitor Stripe dispute webhooks and create QB journal entries or send Slack notifications when chargebacks affect your payout amounts.
  • Build payout reportingSend monthly payout summaries to Google Sheets or email with total deposits, fees, and net amounts for easier financial reporting.

Related guides

Was this guide helpful?
QuickBooks + Stripe overviewn8n profile →