FrancodesystemsFran<code>systems
PaymentsCustom integration

QuickBooks Stripe integration

Every Stripe charge, refund and payout lands in QuickBooks on its own, with fees split out and the bank reconciled.

QuickBooksQuickBooks
Stripe

Implementation time · 4-8 días laborables

Diagnosis

The problem

Stripe deposits a net amount that bundles dozens or hundreds of transactions minus its fees, and that number never matches the sum of your invoices. The team spends the close downloading the Stripe balance report, splitting fees by hand and wrestling with refunds and disputes so the bank reconciles. Generic connectors record the net as a single income line and leave the fee hidden, which distorts margins and VAT.

Proposal

The solution

We connect Stripe to QuickBooks Online so every charge, refund, dispute and payout is recorded in your accounting on its own. Each Stripe payout hits the bank net (charges minus fees minus refunds), so we break it down into its journal entries: gross income per charge, the Stripe fee as an expense, and refunds as credit notes. The result is that the amount on your bank statement matches QuickBooks to the cent with no manual adjustments. Everything is idempotent: if Stripe retries a webhook, we never duplicate anything.

Scope

What we automate

  • Every Stripe charge creates the income entry in QuickBooks with the right customer and tax.
  • Stripe fees are recorded as a separate expense, not hidden inside the net.
  • Refunds generate credit notes and disputes (chargebacks) get their own entry.
  • Each payout is broken down and reconciled against the bank deposit to the cent.
  • Multi-currency and presentment currency with the exchange rate of the transaction date.
  • Idempotency: webhook retries and duplicate events never duplicate entries.
Who uses it

Real use cases

These are the profiles that most ask us for the QuickBooksStripe integration and what they get in the end.

Case 01

SaaS with recurring subscriptions on Stripe Billing

Before: Each payout net did not match the invoices and the fee stayed hidden, skewing the margin.

After: Income, fee and refunds split in every entry; real margin visible and the bank reconciled.

Case 02

Marketplace with many refunds and the odd dispute

Before: Refunds and chargebacks were keyed by hand and broke the close every month.

After: Every refund and dispute lands on its own; the close stopped breaking.

Case 03

Business charging in several currencies with Stripe

Before: The exchange rate was applied by eye and multi-currency reconciliation was impossible.

After: Every transaction uses the rate of its date; multi-currency reconciliation squares on its own.

Before / After

What changes exactly

Without the integration

  • Download the Stripe balance report and split fees by hand.
  • Record the net payout as a single income line and lose the real margin.
  • Wrestle with refunds and disputes so the bank reconciles.
  • A monthly close that stretches with every new payout.

With the integration

  • Every charge, fee and refund in its own entry.
  • Payouts reconciled against the bank to the cent.
  • Disputes and chargebacks recorded and traceable.
  • Monthly close in a review, not in days.
Architecture

How we build it

We listen to Stripe events (charge, refund, dispute, payout) in a persisted queue and an idempotent worker rebuilds each payout from the balance transactions API before writing to the QuickBooks Online API with retries and backoff. Every transaction carries its balance transaction id as an external key, so a retry never creates a second entry.

flow.ts
webhook stripe.event
queue.enqueue(jobId)
worker.handle() // idempotent
quickbooks.api.call() // retries with backoff
log.emit({ status: 'ok' })
FAQ

Frequently asked questions

Do you record the net payout or each transaction separately?

We break each payout into its transactions: gross income per charge, fee as an expense and refunds as credit notes. That keeps real margin and VAT correct, and the net still reconciles with the bank.

How is the Stripe deposit reconciled with the bank?

We group the transactions in each payout and reconcile them against the matching bank movement, so the statement amount matches QuickBooks to the cent without manual adjustments.

What about disputes, chargebacks and dispute fees?

Each dispute gets its own entry (the held amount and, where it applies, the dispute fee as an expense). When it resolves in your favour, we post the reversal. Everything stays traceable.

Does it work with Stripe Billing and subscriptions?

Yes. Recurring Stripe Billing charges land like one-off charges, with their customer and tax, and Stripe invoices map to QuickBooks invoices if you use them.

Shall we talk about your Stripe integration?

A 30-minute call, no strings. You leave with scope and a price.