Stripe Speaks CSV for Humans and Ledgers
Stripe’s Dashboard and Sigma-style reporting let you export payments, payouts, customers, subscriptions, and balance transactions as CSV. Accountants in the US, UK, Australia, Canada, and Germany rely on those files to reconcile bank deposits that never match gross sales one-to-one — because Stripe deducts fees, refunds, disputes, and sometimes currency conversion before the payout hits the bank.
This guide covers how to download the right report, clean it, and map it into Excel, QuickBooks, or Xero without double-counting.
Which Stripe CSV Do You Need?
Different questions need different exports.
| Report | Answers | Typical columns |
|---|---|---|
| Payments / charges | What did customers pay? | id, Created, Amount, Fee, Net, Status, Customer |
| Payouts | What hit the bank? | id, Amount, Arrival, Status, Destination |
| Balance transactions | Full ledger of Stripe balance moves | Type, Amount, Fee, Net, Source, Available On |
| Refunds / disputes | What came back? | Charge, Amount, Reason, Status |
| Customers / subscriptions | Who and what recurs? | Customer id, Plan, Status, MRR fields |
Step-by-Step: Export and Prep a Payments CSV
Start here for monthly bookkeeping.
- In Stripe Dashboard, open Payments (or Reporting → activity) and set the date range in your account timezone.
- Export CSV for the filtered view — or use a balance transaction export for fee-accurate books.
- Open the file in the Online CSV Editor; confirm UTF-8 and a single header row.
- Keep Amount, Fee, and Net as plain numbers (Stripe usually exports minor-unit-safe decimals).
- Normalize Created timestamps to dates your ledger expects (see timezone note below).
- Import into Excel for pivot review, or map Net/Fee into QuickBooks/Xero journal lines.
- Reconcile payout Arrival amounts to the bank statement — not gross charges.
Illustrative payments shape
Column names vary by export version; map by meaning:
id,Created (UTC),Amount,Currency,Fee,Net,Status,Customer Email
ch_1,2026-05-03 14:02:11,150.00,usd,4.65,145.35,Paid,buyer@example.com
ch_2,2026-05-03 18:40:02,40.00,usd,1.46,38.54,Paid,buyer2@example.comGross vs Net vs Payout: Do Not Triple Count
The classic Stripe reconciliation mistake is booking gross sales and bank deposits as separate income.
- Gross Amount = what the customer was charged.
- Fee = Stripe’s cut (plus other balance transaction fees).
- Net = what Stripe credits to your Stripe balance.
- Payout = what leaves Stripe for your bank (may bundle many nets).
- Books usually recognize revenue from charges (or invoices), expense the fees, and treat payouts as transfers — not new revenue.
| If you only… | You will… |
|---|---|
| Import gross charges as income and ignore fees | Overstate profit |
| Import bank deposits as sales | Miss fee expense and timing differences |
| Match each charge to a payout 1:1 | Fail — payouts are batches |
| Use balance transactions + payout report together | Reconcile cleanly |
Multi-Currency and Regional Accounts
Stripe accounts in the UK, AU, CA, DE, and US often settle in local currency while charging in others.
- Keep Currency as a first-class column; never sum USD and EUR Amount blindly.
- Conversion adjustments appear as separate balance transaction types — do not delete them.
- UK VAT and EU VAT reporting may need tax columns from invoices, not only the payments CSV.
- Canadian and Australian accounts: confirm whether amounts are tax-inclusive in your product setup before mapping to Xero TaxType.
- German/EU teams: if Excel opens the CSV with semicolon assumptions, force comma delimiter in the import wizard.
Timezones and “Missing” Days
Stripe timestamps are often UTC. Your bank and ledger use local midnights.
- A May 1 01:00 UTC charge is still April 30 evening in US Pacific.
- Filter Dashboard exports using the timezone you will book in, or convert Created in the CSV before monthly close.
- Payout Arrival Date is usually the better match for bank reconciliation than Created.
Python: UTC timestamp → US/UK date column
Explicit conversion beats Excel’s guess:
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
raw = "2026-05-03 14:02:11"
dt = datetime.strptime(raw, "%Y-%m-%d %H:%M:%S").replace(tzinfo=timezone.utc)
local = dt.astimezone(ZoneInfo("America/New_York")) # or Europe/London, Australia/Sydney
print(local.date().isoformat())Mapping Stripe CSV into QuickBooks or Xero
Neither product wants raw Stripe ids as the only story — map to accounts.
- Create (or reuse) clearing accounts: Stripe Clearing, Stripe Fees, Stripe Payouts.
- Post net sales and fee expense from balance/payments exports.
- When the payout hits the bank feed, clear against Stripe Clearing — difference should be explainable (timing, FX).
- Refunds: reduce revenue or post to a returns account; link to original charge id in the memo.
- Use ISO dates in the intermediate CSV when sharing between US and UK bookkeepers.
Excel Pitfalls on Stripe Exports
Long ids and timestamps are fragile in desktop Excel.
- Charge ids like ch_… are fine as text; numeric-looking ids can lose precision — keep as text.
- Do not let Excel convert Created into a locale date serial without keeping the time if you need it.
- Save cleaned files as CSV UTF-8 before re-upload anywhere.
- Remove summary footer rows Stripe sometimes appends below the table.
Common Mistakes
Repeated close-period errors.
- Booking payouts as revenue.
- Ignoring partial refunds and disputed chargebacks in the month they settle.
- Mixing test-mode and live-mode exports.
- Filtering Dashboard to “Succeeded” only and forgetting fee lines that live on balance transactions.
- Reconciling to gross sales instead of bank arrival amounts.
Best Practices
Build a monthly Stripe close checklist.
- Export balance transactions and payouts for the same range.
- Archive CSVs with account id and period in the filename.
- Reconcile Stripe balance to zero unexplained items before closing the month.
- Document fee account mapping once per entity (US LLC vs UK Ltd vs AU Pty).
- Clean in-browser when files include customer PII.
Why Use Convert CSV Online?
Convert CSV Online is free, browser-based, and requires no account for everyday conversions. Inspect Stripe exports in the Online CSV Editor, convert to Excel for finance reviews, and keep sensitive payment CSVs in a client-side workflow on Windows, macOS, or Linux.
Clean a Stripe export now
Open the CSV, drop footer noise, normalize dates, download, then map into your ledger.
Conclusion
Stripe CSV reconciliation works when you separate charges, fees, and payouts — and respect currency and timezone. Export the right report, clean deliberately, and match the bank to payouts, not to gross volume.
FAQ
How do I download a CSV from Stripe?
Open the relevant Dashboard list or report, set filters and date range, then use Export. For fee-accurate books, prefer balance transaction style exports alongside payouts.
Why doesn’t my Stripe payout match total sales?
Payouts are net of fees, refunds, disputes, and timing. Sum Net (or use balance transactions), then compare to payout Arrival amounts — not gross Amount.
Can I import Stripe CSV into QuickBooks or Xero?
Yes after mapping columns to your chart of accounts. Treat payouts as transfers from a Stripe clearing account, not as new sales.
Which timezone does Stripe CSV use?
Many exports use UTC timestamps. Convert to your books timezone before monthly cutoffs if day-boundary accuracy matters.
Do UK and EU Stripe CSVs include VAT?
Payment exports show charge amounts; tax detail usually lives on invoices/tax reports. Do not assume VAT is a separate column in every payments CSV.
Should I use Sigma or Dashboard export?
Dashboard CSV is enough for many SMBs. Sigma/SQL-style reporting helps when you need custom joins across charges, fees, and customers.
References
Convert your CSV in the browser
Preview, clean, and convert CSV files free with Convert CSV Online—no installation and no account required for everyday conversions.