1. Export the file from Stripe
- In the Stripe Dashboard open Reports > Payout reconciliation.
- Choose a date range that contains the payouts' arrival dates.
- In the "Payout reconciliation" section click Download, pick Itemized and CSV.
- Make sure the automatic_payout_id column is included (it is by default in current versions).
Why a raw Stripe payouts export fails in Xero (manual journal import)
The deposit in your bank is the payout: charges minus refunds minus Stripe fees, often across several days. Entering the deposit as income understates revenue and hides the fees; entering every charge as a deposit double counts.
Xero's bank statement import puts every line into one bank account, so a payout split into sales, fees and refunds needs either a clearing account in Xero or a journal. A manual journal per payout (or per month when the export does not link sales to payouts) books gross sales, fees, refunds and payments you sent to their own accounts, and the payout amount to a payout clearing account: a current asset account that is not a bank account, because Xero does not let manual journals post to bank or credit card accounts. When the deposit arrives in your bank feed, reconcile it in Xero against that payout clearing account (Receive Money coded to it), and the clearing account goes back to zero. Xero imports the journals as drafts, and you post them after checking.
What is unusual about the Stripe payouts file
- Every row carries automatic_payout_id, so we can build one journal entry per payout.
- The payout itself is not a row: the payout amount is the sum of the rows that belong to it.
- Only automatic payouts are covered; instant and manual payouts cannot be matched by Stripe.
- Also accepts the payouts section export of Reports > Balance and the legacy balance_history.csv with its Transfer column.
What Xero (manual journal import) requires
- Columns as in Xero's manual journal template: Narration, Date, Description, AccountCode, TaxRate, Amount and two pairs of tracking columns.
- Narration and Date on the first row of each journal; the rows below with both left blank belong to the same journal.
- Dates as dd mmm yyyy (05 Mar 2026) or dd/mm/yyyy.
- Account codes, not names (for example 200). Debits positive, credits negative; each journal adds up to zero.
- No bank or credit card accounts: the payout is booked to a payout clearing account (a current asset), and the bank feed deposit is reconciled against it.
- Up to 300 lines per file (we split bigger files without breaking a journal). Journals are in your base currency.
2. Before and after
Before: the Stripe payout reconciliation CSV as downloaded
"automatic_payout_id","automatic_payout_effective_at","balance_transaction_id","created","available_on","currency","gross","fee","net","reporting_c... "po_7X2TestPayoutA0001","2025-02-04 00:00:00","txn_7X2TestBBBB00001","2025-01-30 16:31:18","2025-02-04 00:00:00","usd","102.00","3.26","98.74","cha... "po_7X2TestPayoutA0001","2025-02-04 00:00:00","txn_7X2TestBBBB00002","2025-01-31 10:05:00","2025-02-04 00:00:00","usd","49.99","1.75","48.24","char... "po_7X2TestPayoutA0001","2025-02-04 00:00:00","txn_7X2TestBBBB00003","2025-01-31 12:00:00","2025-01-31 12:00:00","usd","-10.00","0.00","-10.00","re... "po_7X2TestPayoutA0001","2025-02-04 00:00:00","txn_7X2TestBBBB00004","2025-02-01 00:00:00","2025-02-01 00:00:00","usd","-0.50","0.00","-0.50","fee"... "po_7X2TestPayoutB0002","2025-02-06 00:00:00","txn_7X2TestBBBB00005","2025-02-02 08:00:00","2025-02-06 00:00:00","usd","300.00","9.00","291.00","ch... "po_7X2TestPayoutB0002","2025-02-06 00:00:00","txn_7X2TestBBBB00006","2025-02-03 09:00:00","2025-02-03 09:00:00","usd","-30.00","15.00","-45.00","d...
After: what Xero (manual journal import) receives
| *Narration | *Date | Description | *AccountCode | *TaxRate | *Amount | TrackingName1 | TrackingOption1 | TrackingName2 | TrackingOption2 |
|---|---|---|---|---|---|---|---|---|---|
| Stripe payout po_7X2TestPayoutA0001 (2025-02-04, BR-20250204-1) | 04 Feb 2025 | Gross sales - Stripe payout po_7X2TestPayoutA0001 | -151.99 | ||||||
| Refunds - Stripe payout po_7X2TestPayoutA0001 | 10.00 | ||||||||
| Fees - Stripe payout po_7X2TestPayoutA0001 | 5.51 | ||||||||
| Deposit - Stripe payout po_7X2TestPayoutA0001 | 136.48 | ||||||||
| Stripe payout po_7X2TestPayoutB0002 (2025-02-06, BR-20250206-1) | 06 Feb 2025 | Gross sales - Stripe payout po_7X2TestPayoutB0002 | -300.00 | ||||||
| Refunds - Stripe payout po_7X2TestPayoutB0002 | 30.00 |
Synthetic sample data that follows the real export layout, not a real account. The "after" output was produced from it by the same converter this page runs.
3. Import the converted file into Xero (manual journal import)
- Make sure every account code in the file exists in your Xero chart of accounts (enter your codes in the options before downloading). The payout clearing code must be a current asset account, not a bank or credit card account: Xero does not accept those in a manual journal.
- In Xero, in the Accounting menu, select Manual journals.
- Click Import, then Browse, and select this CSV.
- Click Import, review the message, then click Complete Import. The journals arrive as drafts.
- Open the Draft tab and check each journal: add a tax rate to each line if the file has none, and tick "Show journal on cash basis reports" if you report on a cash basis (the template has no column for it). Then select the journals and click Post.
- When the deposit (or the net pay withdrawal) appears in your bank feed, reconcile it against the payout clearing account (Receive Money or Spend Money coded to that account), not against sales.
Questions
- Why does my Stripe revenue not match my deposits?
- Stripe deducts its fees, refunds and dispute amounts before paying out, and one payout can cover charges from several days. The payout journal entry shows each part separately, so both the deposit and the revenue come out right.
- How does the payout reach my bank account in Xero?
- Xero does not accept bank or credit card accounts in a manual journal, and a journal line cannot be reconciled against a bank feed line anyway. So each journal books the payout to a payout clearing account, a current asset account you create (for example Payouts in transit), not a bank account. When the deposit appears in your bank feed, reconcile it against that clearing account (Receive Money coded to it). Do not code the deposit to sales: the journal has already booked the sales, so that would count them twice.
- Does this cover instant or manual payouts?
- No. Stripe only links charges to automatic payouts in this report, so instant and manual payouts cannot be matched to the charges they paid out.
- What is not confirmed yet?
- Xero's template download needs a Xero login, so we have not compared the exact header text (including the asterisks Xero puts on required columns) with a freshly downloaded template; the column names follow Xero's help page. We have also not confirmed Xero's default account codes, which tax rate names exist in each country, or whether imported journals arrive with "Show journal on cash basis reports" ticked. We have not imported the result into a real Xero organisation. Check the first journal before importing many.
Other ways to convert Stripe payouts
Other exports to Xero manual journal
- Etsy payouts to a Xero manual journal
- Airbnb payouts to a Xero manual journal
- Gumroad payouts to a Xero manual journal
- Square payouts to a Xero manual journal
- Shopify Payments payouts to a Xero manual journal
- Amazon settlement report to a Xero manual journal
- eBay transaction report to a Xero manual journal
- Walmart recon report to a Xero manual journal
- Gusto payroll journal to a Xero manual journal