Pick the resource, not just "transactions"
Stripe splits activity across several object types: charges, balance transactions, invoices, customers, and subscriptions. A report that mixes them into one flat sheet is harder to build formulas against than one sheet per resource, each with a consistent, resource-appropriate set of columns.
Set a real date range and status filter
- Scope the export to a date range, not your entire account history, so refreshes stay fast.
- Filter by status where it matters, for example excluding refunded or failed charges from a revenue report.
- Keep raw amounts in the smallest currency unit alongside a converted column, so you can check the conversion.
- Include the object id in every row for traceability back to the Stripe dashboard.
Read-only access, not a full API key
An export that only reads data should only be able to read data. Use a restricted, read-only Stripe API key scoped to the resources you're exporting, rather than a key with write access sitting in a spreadsheet-connected script. See how to create a restricted read-only Stripe API key for reporting for the exact permissions to set.
Refresh on a schedule, not by memory
A CSV exported once is accurate for exactly one moment. If the sheet feeds a recurring report, refresh it hourly, daily, or weekly instead of re-exporting by hand, and make sure large exports can resume mid-run rather than restarting from page one every time.
Reconciling payouts specifically?
A payout export is a different job from a transaction export: you need the balance transactions behind each payout, not just the payout row. See how to reconcile Stripe payouts in Google Sheets for that case.
Skip the manual export
Stripe Exporter saves reports over charges, payouts, balance transactions, invoices, customers, and subscriptions, and refreshes them manually, hourly, daily, or weekly.
See Stripe Exporter