Skip to main content

How to Export All Data From Your Stripe Account

9 min readPipeSheets Team

There is no single button in Stripe that exports your entire account, which is why 'export all data from Stripe' is such a common search. What Stripe gives you instead is a set of export surfaces that each cover a slice of your data: CSV exports from the Dashboard lists (payments, balance activity, payouts, customers), downloadable reports built for reconciliation (the kind you need to match Stripe payouts to bank deposits), Sigma for custom SQL queries, Data Pipeline for continuous warehouse sync, and the API for programmatic access to your full history. Combined, they can get every record out. The trick is knowing which surface holds what, because exporting from the wrong one leaves you re-doing the job.

The short answer, if you just want to act: for a one-off export of transactions, use the Export button on the relevant Dashboard list with a date range covering your account's lifetime. For bookkeeping and matching bank deposits, use the balance and payout reports rather than the payments list. For a complete, structured copy of everything, including objects the Dashboard never exports, you need the API. The rest of this guide walks through each surface, what its files actually contain, and the cleanup the CSVs need before an accounting tool will accept them.

The five ways to get data out of Stripe

Every export surface Stripe offers, at a glance:

  • Dashboard CSV exports: an Export button on list pages like Payments, Balance activity, Payouts, and Customers. Filterable by date range, with column selection on most lists. Best for one-off pulls.
  • Reports (including payout reconciliation): pre-built downloadable reports in the Dashboard's reporting section, designed for accounting. Best for closing the books and matching bank deposits.
  • Sigma: Stripe's paid SQL environment. You query your own Stripe data directly and export the results. Best for custom cuts the standard exports cannot produce.
  • Data Pipeline: a paid product that syncs your Stripe data to your own data warehouse on an ongoing basis. Best for teams that already run analytics on a warehouse.
  • The API: paginated list endpoints for every object type. The only surface that guarantees complete history across all objects. Best for migration and full backup, but requires code or a developer.

Dashboard CSV exports: the fast path

Most Dashboard list pages have an Export button. Open the Payments page, click Export, choose a date range and (on most lists) which columns to include, and Stripe generates a CSV. Small exports download immediately; large ones are emailed to you as a link when ready. The same pattern works on the Balance activity page, the Payouts page, and the Customers page. For 'all data', set the date range to cover the full life of the account rather than the default recent window, which is the single most common way people end up with a partial export without noticing.

Stripe export transactions: balance activity vs payments

These two look similar and are constantly confused. The payments export lists charges: who paid, how much, when, with what status, plus card metadata and any custom metadata you attached. The balance activity export lists every movement on your Stripe balance: charges, refunds, fees, adjustments, and payouts, with gross, fee, and net columns per row. If you are doing bookkeeping, you almost always want balance activity, because it is the only view that shows Stripe's fees as explicit amounts you can post to an expense account. The payments export shows what customers paid you, not what you actually kept.

To export transactions for the books, use the Balance summary report. Its Balance change from activity section exports an itemized CSV of every charge, refund, dispute, adjustment, and fee, with gross, fee, and net in normal currency units (dollars, not cents). The report's controls let you choose the date range and the time zone, and the Payouts section exports your payouts separately. Bookkeeping into QuickBooks or Xero? Our guide to importing Stripe CSVs into QuickBooks and Xero covers the next step.

The timezone gotcha: exports are UTC

Stripe stores every timestamp in UTC, and exported timestamps generally come out in UTC unless you explicitly choose otherwise. If your business runs on US Pacific time, a charge at 6pm on March 31 local time is an April 1 charge in UTC. Export 'March' and your totals will not match the Dashboard view or your month-end expectations, off by exactly the transactions that happened in the overlap window. Before you reconcile a month or a quarter, decide which timezone defines your accounting day, and either set it during export where the option exists or convert the timestamp column afterward. If a month's export is mysteriously off by a handful of transactions, timezone is the first suspect.

The payout reconciliation report

The number that lands in your bank account is a payout: a batch of charges minus refunds minus fees, settled together. The payments export cannot explain a bank deposit, because no single charge equals the deposit amount. The payout reconciliation report exists for exactly this: it breaks each payout into the individual charges, refunds, and fees that compose it, so you can tie the deposit on your bank statement back to specific transactions. If your task is 'make the books match the bank', this report plus the balance activity export is the pairing you want. It is also the antidote to the classic double-counting problem where both gross charges and bank deposits get recorded as income.

How to export Stripe customers and subscriptions

Customers and subscriptions export from their own Dashboard pages, not from Payments or the reports. For customers, Stripe's help article on exporting customer data gives the steps: open the Customers page, use the Filter button to narrow the list if you need to, click the export button in the upper right, then choose the time zone, the date range and the columns to include. Card details are not part of this export.

Subscriptions work the same way from the Subscriptions page: filter the list, click Export, and pick All as the date range when you want every subscription rather than recent ones, as Stripe's guide to updating existing subscriptions shows. Neither page has a fixed column list in Stripe's docs, so open the column picker and choose what you need. For a migration, where you need customers, subscriptions and the links between them, the API is still the safer route, because the Dashboard CSVs flatten those relationships.

Sigma: custom queries, exportable results

Sigma is Stripe's paid analytics product: a SQL interface over your own Stripe data. Where the standard exports give you fixed shapes, Sigma lets you write the exact query you need, such as revenue by metadata field, refund rates by product, or charges joined to customers, and export the result as a CSV. You can also schedule queries to run on a recurring basis. Sigma is overkill for a one-time export, but if you keep hand-massaging the standard CSVs into the same shape every month, a saved Sigma query produces that shape directly and is usually worth the cost.

Data Pipeline: continuous sync to your warehouse

Data Pipeline is for teams that want Stripe data living alongside the rest of their analytics. Instead of exporting files, it delivers your Stripe data into your own data warehouse and keeps it updated. There are no CSVs to babysit and no date-range windows to remember, and your analysts query Stripe data with the same tools they use for everything else. It is infrastructure rather than an export, so it is the wrong answer for 'I need my data out this afternoon', and the right one for 'I never want to run a manual export again'.

Exporting Stripe data to BI tools

If the data is headed for a BI tool such as Tableau, Power BI, or Looker, skip recurring CSV exports. Stripe's Data Pipeline documentation lists the supported destinations: Snowflake, Amazon Redshift, Databricks, and BigQuery, or Parquet files in Amazon S3, Google Cloud Storage, or Azure Blob Storage, with a full refresh every three hours. Connect your BI tool to that warehouse the way you connect it to the rest of your data. For a one-off chart, an exported balance activity CSV works too; drop the columns you don't need and give the rest clear headers first, so the BI tool has less to guess.

The API: the only truly complete export

Every Stripe object type, including charges, customers, invoices, subscriptions, disputes, balance transactions, and payouts, is available through paginated list endpoints in the API. This is the only surface that guarantees you can retrieve your complete history across every object type, including relationships the CSV exports flatten away, like which subscription generated which invoice. The cost is that it requires code: a script that pages through each endpoint and writes the results out. For account migration or a genuine full backup, the API is the correct tool; a Dashboard CSV is a report, not a backup. One critical detail: API amounts are integers in the smallest currency unit, so 2999 means $29.99. Sum a column of API amounts without dividing by 100 and every total will be wrong by two orders of magnitude.

Which export for which job

Match the surface to the task:

  • Taxes: balance activity export for the tax year, in the timezone your accountant uses, plus the payout reconciliation report so deposits tie to the bank statement.
  • Monthly bookkeeping: balance activity export (gross, fee, net) monthly, with payouts recorded as transfers rather than income.
  • Migrating away from Stripe: API export of customers, subscriptions, and payment history. Note that raw card numbers are never exportable by design; Stripe supports migrating card data directly to another PCI-compliant processor on request.
  • Backup and audit trail: API export of every object type on a schedule, or Data Pipeline if you have a warehouse.
  • One-off analysis: Dashboard export of the relevant list, or a Sigma query if the standard columns cannot answer the question.

Why the exported CSVs are not ready for your accounting tool

Getting the data out is half the job. Stripe's exports are faithful to Stripe's internal model, which is not the model QuickBooks, Xero, or your spreadsheet expects. Three problems show up in almost every export: amounts that may need unit conversion (API-derived data is in cents; report CSVs are already in decimals), timestamps in UTC and ISO format that your accounting tool cannot parse as dates, and a long tail of columns you do not need, including one column per metadata key you ever attached to a charge.

What a raw report row looks like:

  id,created,amount,fee,net,currency,metadata[order_id],metadata[campaign]
  txn_1AbC...,2026-08-31 23:14:09,49.99,1.75,48.24,usd,ORD-1042,summer-sale

What your bookkeeping import needs:

  date,description,gross,fee,net
  08/31/2026,ORD-1042,49.99,1.75,48.24

Different column names, a UTC timestamp vs a local date, and two
metadata columns that need renaming or dropping. (Pulled the same
row through the API? Then amount is 4999 and fee is 175: cents.)

This gap is exactly what PipeSheets covers, and the Stripe CSV Export Cleaner is built for it. Upload the Stripe CSV, drop the metadata and ID columns you do not need, rename the survivors to the headers your accounting tool expects, and reorder them to match its template, with a live preview before you download. Save the cleanup once and re-run it on every future export, since Stripe's format will be the same next month. The free tier handles files up to 25MB, which covers a typical year of exports for most businesses.

If you'd rather not repeat this every month, create a free account and run the ready-made Stripe Export Cleaner on your own export; you'll see a preview of every change before you download, and files up to 25MB are free. It converts the Created (UTC) dates and keeps amounts exactly as exported, so check one payment you know first: if the file is in cents (API-based files), add a step that divides by 100.

Two decisions are yours, not the tool's. First, the amount unit: if the file came from the API, divide the amount columns by 100; report CSVs are already in decimals and must not be divided. Second, the accounting day: shifting UTC timestamps to your local time zone is easiest to get right at export time, by choosing the time zone in the report's controls. Then run the structural cleanup (drop, rename, reorder, trim) through a saved cleanup, and the export becomes a file your accounting tool imports on the first try.

A full-export checklist

Before you call the export done:

  • Date range covers the account's full lifetime, not the default recent window.
  • You exported balance activity (gross, fee, net), not just the payments list, if this is for bookkeeping.
  • You know which timezone the timestamps are in, and it matches your accounting day.
  • Amount columns are in the unit you think they are; check one known transaction against the Dashboard.
  • Payouts are exported separately so bank deposits can be matched as transfers.
  • For migration or backup, you used the API, since Dashboard CSVs are reports and do not cover every object type.

Stripe's export story is fragmented but complete: Dashboard CSVs for quick pulls, reports for reconciliation, Sigma for custom questions, Data Pipeline for continuous sync, and the API for everything. Pick the surface that matches the job, watch the timezone and the units, and budget ten minutes for cleanup, and 'export all my Stripe data' goes from a vague worry to a repeatable routine.

Try the automated solution

PipeSheets can fix these issues automatically. Create a free account to clean your first file.

Create a free account

Or see how it works: Stripe CSV Export Cleaner