All 67 builds

Invoices and getting paid

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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 n8n

Who 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

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