See what a payout actually paid
Stripe pays you in lumps and an invoice ledger is a list of single amounts, and reconciling the two by eye is the job that waits for the evening before the accountant asks. Below is the workflow I built: it opens every payout into its lines, matches them to invoices, and reports only the ones that don't agree.
The question
this build answers
How do I check that Stripe payouts actually match my invoices, without matching them by hand?
From the first trigger
to the finished job.
The working version, step by step.
Fetch what's actually landed
I set it to ask Stripe for recent payouts on a weekly schedule. It drops anything that hasn't actually paid or falls outside the lookback window, then opens each surviving payout into the individual balance transactions inside it, since a payout is a lump and only the transactions inside it can be matched to anything.
Read the ledger once
The workflow reads the invoice sheet once for the whole run rather than once per payout line. I built it that way on purpose: the difference is a few seconds against a rate limit on your own sheet.
Match on reference first, amount second
The matcher looks for your invoice reference in the text Stripe carries against each transaction, and only falls back to amount and date when the reference is missing. I left the tolerance in pence for you to set, so a small gap counts as a mismatch or a rounding artefact on your own judgement.
Report every line, change nothing
Every payout line gets a verdict: matched, matched but the amount is off, a payout line with no invoice behind it, or an invoice no payout has covered. Every verdict gets appended to a report tab, and I built the ledger itself to stay untouched, so a bad match can't corrupt your books.
Draft the exceptions, never send them
When something failed to match and the summary setting is switched on, a Gmail draft gets written naming the exceptions. I left it as a draft on purpose, so a person reads the list before anyone else does.
The template, on n8n
Reconcile Stripe payouts against invoices in Google Sheets and report mismatches
I built this as an n8n workflow you import and own: 10 working nodes and five sticky notes covering the setup, the schedule and the report headers, with a Settings node holding your lookback window, your tolerance and your column names.
Open the template on n8nWho this is for
Solo operators, bookkeepers and small finance teams who take card payments through Stripe and keep invoices in a sheet. I built it against my own books first, so it assumes one Stripe account and one ledger rather than a finance department.
What it actually checks
The whole match runs on two Stripe API calls and one sheet read per run. The two HTTP Request nodes use a predefined Stripe credential type, so there's no API key pasted anywhere in the file itself.
Where it stops
I built it to report, and left the fixing to you: nothing gets written back into the invoice ledger, so you correct the ledger by hand once you've read what the report found.
Before you spend anything
The fit matters.
Who should not build this
If your invoices don't live in a sheet Google Sheets can read, the ledger step has nothing to read from, and this buys you nothing until that changes.
If your matching rules are genuinely unusual, for instance several currencies or invoices that split across more than one payout line, the plain-code matcher will need editing before you can trust it.
Yours to keep
What lands
on your desk.
- The workflow set up in your own n8n, reading your own Stripe account and your own ledger
- Your lookback window, amount tolerance, currency and column names written into one Settings node
- A report tab with the exact headers the workflow expects, created before the first run
- The exceptions summary left as a Gmail draft, never a send
See the work
Open the proof.
Published case studies of running systems. Each links to the thing itself.
A few useful
answers.
Does it change anything in my invoice ledger?
Every verdict is appended to a separate report tab, and nothing is ever written back into the ledger, so a bad match can't corrupt your books.
How does it match a payout line to an invoice?
It looks for your invoice reference in the text Stripe carries first, and only falls back to matching on amount and date when the reference is missing.
What if the amounts are a few pence out?
You set a tolerance in pence in the Settings node, so a genuine rounding difference isn't reported as a mismatch.
Does it email anyone automatically?
Only a draft, and only when something failed to match and you've switched the summary on. Nothing sends itself.
Make this work for you
Your tools.
Your working version.
Want this built and handed over working? Tell me what your version needs to do. One line is enough to start.
Start a brief


