Stripe + QuickBooks reconciliation for a Canadian SaaS
A daily reconciliation pipeline between Stripe (subscriptions, refunds, disputes, payouts) and QuickBooks Online for a B2B SaaS doing low-thousands of transactions per month. Replaces a manual export-and-paste job and surfaces problems the same day they happen.
What was breaking.
Finance was spending around 6 hours per week exporting Stripe CSVs, splitting subscription revenue from one-off charges, mapping fees and refunds, and pasting into QuickBooks. Reconciliation lagged by a week, so disputed charges and failed dunning weren't caught until they'd already aged. Month-end close was painful and the CFO had no real-time view of MRR or churn.
How I built it.
- Mapped every Stripe event the business cared about (charge.succeeded, charge.refunded, invoice.paid, charge.dispute.created, payout.paid) to its QuickBooks counterpart — sales receipt vs invoice vs credit memo vs journal entry.
- Built an n8n workflow that subscribes to Stripe webhooks, normalises each event and writes the corresponding QBO record via API. Idempotent — re-runnable on any time window without creating duplicates.
- Added a daily reconciliation report: Stripe payouts vs QBO bank deposits, with a delta column and click-through to any unmatched lines.
- Built a small custom dashboard for the CFO showing MRR, churn, refunds and disputes sliced by plan and customer segment — auto-refreshes from Stripe.
- Failed payments and dunning surface in a Slack channel within 60 seconds so customer success can act before retries exhaust.
What makes it tick.
- Event-driven, not batch — books revenue the moment Stripe confirms it.
- Dispute flow: when a chargeback fires, QBO automatically posts the credit memo and the customer is tagged for retention outreach.
- Year-end accountant export bundled into a single click — no more "can you pull last year's CSV again".
- Every sync writes an audit row so any QBO entry can be traced back to the originating Stripe event.
What changed.
Reconciliation effort dropped from around 6 hours per week to under 30 minutes of review. Close timeline went from T+7 to T+1. Three disputed charges in the first quarter were resolved before the chargeback window closed because they were caught same-day instead of a week late.
Tools used.
- Stripe API
- QuickBooks Online API
- n8n
- PHP
- MySQL
- Slack API
- Webhooks
Have a similar workflow problem?
If this looks like the kind of system your business needs, the fastest way to start is a short discovery call.
Book a discovery call