Get paid and reconciled · Implementation guide
How to reconcile Stripe with QuickBooks Online, and when to automate it
To reconcile Stripe with QuickBooks Online, treat each Stripe payout as a batch. Record every payment at its gross amount, record Stripe's fees, refunds and disputes as their own lines, and group them so the total matches the single net deposit on your bank statement. QuickBooks Online can't connect directly to Stripe as a merchant service, so you have three ways to do that grouping: by hand in QuickBooks, with a connector app, or with a custom sync built on the Stripe and QuickBooks APIs.
I build Stripe to QuickBooks integrations for small businesses. This guide covers how I choose between those three options, the steps I follow, and the pitfalls that usually break reconciliation.
Why don't Stripe payouts match QuickBooks deposits?
Stripe doesn't send you each payment separately. It collects payments, takes out its fees, subtracts refunds and disputes, and sends what's left to your bank as a payout. Stripe describes each automatic payout as the transfer that settles a batch of transactions. So your bank shows one deposit, while QuickBooks shows several invoices paid at their full amounts. The two only agree after you account for everything Stripe netted out of that batch.
Three more things cause mismatches:
- Timing. Stripe's payout reconciliation report groups payouts by their estimated arrival date, not the date your bank posts the deposit. Its data can also arrive later than the payout itself.
- Payment method. Bank debits like ACH take longer to settle than cards, so a payment can land in a later payout than you expect.
- Instant payouts. You choose the timing and amount of an instant payout, so Stripe can't tell you which transactions it included. You have to reconcile those yourself.
Which should you use: manual, a connector app, or a custom sync?
| Option | How it works | Fits when | Watch for |
|---|---|---|---|
| Manual, inside QuickBooks | Record each payment to Undeposited Funds, then use the Bank Deposit screen to group one payout's payments and add Stripe's fee as a negative line to an expense account. Match the result to the bank feed. | You have few payouts and few refunds, and someone has time to do it every week. | It's slow and easy to get wrong, and the work grows with your volume. Stripe's IIF export is for QuickBooks Desktop only. QuickBooks Online can't import IIF files. |
| A connector app | An app from the Stripe App Marketplace syncs Stripe sales, fees, refunds and payouts into QuickBooks Online. Commerce Sync and Paytraqer are two examples. | Stripe is your main source of sales and the app's mapping fits how your books are set up. | Check how the app maps products, fees and payouts to your chart of accounts before you turn it on, and decide what happens to transactions that don't match. |
| A custom sync | Your own code listens for Stripe events, pulls the transactions in each payout, and writes payments, fees and deposits to QuickBooks Online through its Accounting API. | Your invoices or bookings live in another system (a booking engine, a CRM or another app), you need your own invoice matching, or exceptions need a human to approve them. | You own the upkeep: webhook security, retries, duplicates, and handling events that arrive out of order. |
QuickBooks Online has no direct Stripe connection. Intuit says QuickBooks Online “can only integrate directly with QuickBooks Payments merchant services”. So for Stripe, the only option that uses QuickBooks' built-in tools alone is the manual Bank Deposit method.
How do you set up Stripe to QuickBooks reconciliation, step by step?
- Use automatic payouts, or pick the right report. Stripe's payout reconciliation report covers automatic payouts. If you use manual payouts, Stripe points you to its Balance report instead.
- Tag every payment with your own reference. Put your invoice or booking ID in the PaymentIntent's metadata. Stripe's itemized payout reconciliation export can include that metadata as a column, which lets you match each Stripe transaction to its QuickBooks record.
- Set up the accounts in QuickBooks. Create an expense account for Stripe fees (Intuit suggests the “Bank charges” detail type). Then decide where payments wait before the payout lands. Undeposited Funds is QuickBooks' built-in holding account. For QuickBooks Desktop, Stripe's IIF export creates a separate bank-type “Stripe Account” that holds charges, refunds and payouts.
- Record each payment at its gross amount. Use Receive payment against the invoice, deposited to Undeposited Funds, or to your clearing account if you set one up.
- For each payout, list what's inside it. Download the itemized CSV from Stripe's payout reconciliation report. In code, list balance transactions filtered by the payout ID. Each balance transaction has a gross
amount, afeeand anet, and Stripe recommends using itsreporting_categoryfield for accounting. - Create one QuickBooks deposit per payout. Select that payout's payments in the Bank Deposit screen. Add Stripe's fees as a negative line to your fee account, and account for any refunds and disputes in that payout. Then confirm the deposit total equals the payout amount.
- Match the deposit to your bank feed. Once the deposit equals the payout, match it to the bank transaction in QuickBooks.
- Send exceptions to a person. Anything that doesn't tie out goes to a named person to approve, instead of being guessed. That includes an unmatched payment, a partial refund or a dispute.
- Automate what repeats. Once the manual steps work, move them into a connector or a custom sync. Stripe sends webhook events such as
payout.paid,payout.failed,charge.refundedandcharge.dispute.createdthat can trigger each step.
How should you handle Stripe fees, refunds and disputes in QuickBooks?
- Fees: Record sales at the gross amount and fees as an expense. Intuit's guide for third-party merchant services has you enter the fee as a negative amount on the Bank Deposit screen, coded to an expense account, so the deposit matches what the bank received.
- Refunds: Stripe doesn't return its processing fees from the original payment when you refund it. Your books should therefore show the refund and the fee you kept as separate items. Refunds come out of your available Stripe balance and lower that payout. A refund issued shortly after the charge may go through as a reversal, which works differently from a refund. A refund can also fail, in which case Stripe puts the money back in your balance.
- Disputes: When a customer disputes a charge, Stripe takes the disputed amount plus a dispute fee out of your balance. For businesses outside Mexico, the fee for receiving a dispute isn't refundable. If you counter the dispute and win, Stripe returns the separate “dispute countered” fee along with the disputed amount. Disputes can stay open for months, so track each one until it closes.
- Negative balances: If your refunds are larger than your new sales, your Stripe balance can go negative. Stripe can then create a payout that debits your bank account. Record it as money going out, not as a deposit.
What are the most common Stripe to QuickBooks reconciliation pitfalls?
- Recording net instead of gross. Revenue looks smaller and Stripe's fees disappear from your expenses.
- Matching on dates. Payout dates, the report's “estimated arrival” date and your bank's posting date can all be different. Match on the payout ID and amount instead.
- Duplicate or out-of-order webhooks. Stripe says webhook endpoints may get the same event more than once and doesn't guarantee the order events arrive in. A custom sync should track the event IDs it has already processed, quickly return a
2xxresponse, and do the actual work in a queue. - Unverified webhooks. Check the
Stripe-Signatureheader on every event before you act on it. - Currency conversion. If you charge in one currency and settle in another, the balance transaction carries an
exchange_rate. Record the deposit at the settled amount, and book any difference from the invoice amount as an exchange gain or loss (confirm the treatment with your accountant). - Instant payouts. They don't come with a per-payout list of transactions, so reconcile them against your transaction history.
- QuickBooks API details. A QuickBooks Online Deposit needs a
DepositToAccountRef, the bank account the money goes into, and it records payments moving out of Undeposited Funds into that bank account.
When should you hire a Stripe to QuickBooks consultant?
Hire help when:
- someone spends hours every week matching Stripe payouts by hand;
- payments come from several places (Stripe, ACH, checks, a booking engine) and none of them matches QuickBooks;
- a connector app is installed but its sync leaves unmatched deposits for someone to fix;
- your accountant keeps asking what a deposit was for;
- you want refunds, disputes and partial payments to go to a person for approval instead of being guessed.
When I take this on, I build inside the tools you already use. I map how each Stripe transaction should land in QuickBooks, write that down, and choose manual, a connector or a custom sync with you. Then I build it so that anything unusual waits for a named person on your team. You own what I build: it runs in your accounts, and you get the runbook. Start with the 3-Day Revenue Plumbing Fix if your payments and email setup both need work, or with integrations and syncs for a custom Stripe to QuickBooks flow.
What have I built with Stripe and QuickBooks?
This is how I describe my work for Alohause on diegogallovich.com:
"Built the full stack application with booking engines connected to their PMS. Automated financial operations by implementing Stripe to QuickBooks integrations for reconciliation of payments. Hundreds of accounting hours saved."
Questions
Can QuickBooks Online connect directly to Stripe?
Not as a merchant service. Intuit says QuickBooks Online integrates directly only with QuickBooks Payments. For Stripe, you either record payouts manually with the Bank Deposit screen, install a connector app, or build a custom sync on the Stripe and QuickBooks Online APIs.
Should I record Stripe sales at gross or net?
Gross. Record each payment at the full amount and Stripe's fee as an expense. In QuickBooks, add the fee as a negative line on the bank deposit so the deposit equals the payout.
Does Stripe give back its fee when I refund a customer?
No. Stripe says its processing fees from the original transaction aren't returned when you refund.
How do I see which payments are in a Stripe payout?
Open Stripe's payout reconciliation report and download the itemized CSV for that payout. In code, list balance transactions with the payout filter. That filter works for automatic payouts only.
Can I import Stripe's IIF file into QuickBooks Online?
No. Stripe says IIF files can't be imported into QuickBooks Online. The IIF export is for QuickBooks Desktop.
Do I need a custom build?
Not always. If Stripe is your only payment source and a connector's mapping fits your chart of accounts, a connector can be enough. A custom sync makes sense when payments start in another system, you need your own matching rules, or exceptions need a human to approve them.