Skip to main content

How do I reconcile Stripe payouts independent of which ERP I use?

Every Stripe payout is backed by BalanceTransaction records — one per charge, fee, refund, or adjustment that makes up the net payout amount. Reconciling a payout means listing its BalanceTransactions by payout ID and summing them by type, a mechanic that's identical regardless of which ERP or accounting system receives the result.

Zuny FesterBy Zuny Fester, Head of Operations and Marketing
Reviewed by Zuny Fester
Published Last reviewed Editorial policy

Part of the finance integrations guide.

What backs every payoutBalanceTransaction records, one per underlying charge, fee, refund, or adjustment
How to list themList BalanceTransaction, filtered by payout=po_xxx
Common typescharge, refund, stripe_fee, payout (the transfer itself)
What this doesn't coverManual payouts — Stripe can't identify which transactions are in a manually triggered payout, so those need reconciling by hand

What a payout ID actually points to

Retrieving a Payout object by itself only returns its properties — id, amount, currency, status — not the individual transactions that make up that total. The itemized detail lives in BalanceTransaction records instead, one per funds movement, each carrying a payout field that links it back to the specific payout it was included in.

Listing the transactions that make it up

A List BalanceTransaction call filtered by payout=po_xxx returns every transaction included in that payout, each with a type field — charge for a customer payment, refund for money returned, stripe_fee for Stripe's own fees, and dozens of narrower types for adjustments, disputes, and currency conversions. Passing expand[]=data.source on the same call pulls the underlying Charge or Refund object for each transaction in the same response, without a second round of API calls.

Why this is the same regardless of ERP

Everything up to this point — listing the BalanceTransactions for a payout and summing them by type — happens entirely on Stripe's side, before any of it touches NetSuite, Sage Intacct, QuickBooks, or anything else. The specific pain of mapping that itemized detail into a particular ERP's bank-deposit or journal-entry shape is a separate, ERP-specific problem; unbundling the payout itself into its component charges, fees, and refunds is not, and doesn't need to be re-solved for every accounting system a workflow might write to.

Next step

Map the finance workflow with the most exposure and prove the automation path.

Bring the invoice, contract, payment reconciliation, or customer finance workflow you have to defend at audit. Loopfour can map the trigger, controls, integrations, and approval loop.

Book a workflow review

Worked example

An $8,000 payout broken into its components

A payout of $8,000 lands in the bank. Retrieving the Payout object alone returns just that total and a status of paid — nothing about what it's made of. Listing BalanceTransactions filtered by that payout ID returns, for example, $8,340 across 41 charge transactions, -$210 across 3 refund transactions, and -$130 across stripe_fee transactions, netting to the $8,000 that actually settled. That breakdown is identical whether the workflow downstream writes to NetSuite, Sage Intacct, or QuickBooks — only what happens after this point differs by ERP.

Frequently Asked Questions

Only partly. Stripe's own documentation is explicit that for manual payouts, Stripe can't identify which transactions are included in each one — you're responsible for reconciling those against your transaction history yourself.

This page covers unbundling a payout into BalanceTransactions, which happens entirely on Stripe's side. The NetSuite-specific pages cover what happens next — mapping that detail into NetSuite's own bank-deposit and journal-entry structures, and the timing gaps that come with it.

Yes, if it has more than the default 10 results — set the limit parameter or use Stripe's auto-pagination to retrieve the full set for the payout.

Sources

Related