Stripe to Excel: 3 Ways to Get Your Stripe Data into a Spreadsheet
Oct 12, 2026 · Alice
Stripe has no "Send to Excel" button, but getting Stripe data into an Excel workbook is not hard. There are three practical routes, and the right one depends on how often you need the numbers refreshed and how much setup you are willing to own.
Quick answer: how to get Stripe data into Excel
For a one-time look, export a CSV from the Stripe Dashboard and open it in Excel. For a workbook that refreshes itself, connect Excel to the Stripe API with Power Query. If your team can work in Google Sheets, sync Stripe to a Sheet automatically and download it as an Excel file when you need one.
Method | Best for | Setup | Stays current? |
1. CSV export opened in Excel | One-off checks, occasional analysis | Minutes | No. Export again each time |
2. Power Query or a script against the Stripe API | Teams that live in Excel and have technical help | An hour or more, plus upkeep | Yes, on refresh |
3. Synced Google Sheet, downloaded as .xlsx | Recurring reports where Sheets is acceptable | Minutes, then no upkeep | The Sheet does. The download is a snapshot |
Method 1: Export a CSV from Stripe and open it in Excel
This is the fastest route and needs no tools beyond Stripe and Excel. Standard Dashboard exports are CSV files, which Excel opens directly.
Step 1: Export from the Stripe Dashboard
Open the section that holds the data you want:
Transactions → Payments, Transactions → Payouts, Customers, Invoices, Subscriptions, or Disputes.
Apply any filters you need, such as status or currency.
Click Export.
Choose the time zone, date range, and columns.
Download the CSV.
For a section-by-section walkthrough, see how to export Stripe data to CSV.
Step 2: Bring the CSV into Excel
Double-clicking the file works, but Excel will guess at data types and can reformat dates and long ID values. Importing gives you control:
In Excel, go to Data → Get Data → From File → From Text/CSV.
Select the Stripe CSV.
Check the preview, then click Load. Use Transform Data first if you want to set a column to text or change a date format.
Where this method stops
Every refresh means exporting and importing again.
No single export holds everything. Most reports need two or three files joined together.
The invoice export gives one row per invoice. It does not include invoice line items, so revenue by product is hard to build accurately.
Method 2: Connect Excel to the Stripe API with Power Query
Power Query is Excel's built-in tool for importing data from outside sources and refreshing it on demand. It can call the Stripe API directly. Once it is set up, Refresh All pulls current data into the workbook. This suits teams that need to stay in Excel and have someone comfortable maintaining a query.
Step 1: Create a restricted API key
In the Stripe Dashboard, go to Developers → API keys and create a restricted key with read-only access to the resources you need, such as Charges or Invoices. Do not use your full secret key in a workbook.
Step 2: Add a blank query
In Excel, go to Data → Get Data → From Other Sources → Blank Query, then open Advanced Editor and paste the query below. Replace "rk_live_your_restricted_key" with the key that you created in Step 1. This query requests charges 100 at a time, which is the most Stripe returns per call, and keeps going until Stripe reports there are no more.
let
ApiKey = "rk_live_your_restricted_key",
GetPage = (cursor as nullable text) =>
Json.Document(
Web.Contents(
"https://api.stripe.com",
[
RelativePath = "v1/charges",
Query = if cursor = null
then [limit = "100"]
else [limit = "100", starting_after = cursor],
Headers = [Authorization = "Bearer " & ApiKey]
]
)
),
Pages = List.Generate(
() => GetPage(null),
each _ <> null,
each if [has_more] then GetPage(List.Last([data])[id]) else null,
each [data]
),
Charges = Table.FromList(
List.Combine(Pages),
Splitter.SplitByNothing(),
{"charge"}
)
in
ChargesWhen Excel asks how to connect to api.stripe.com, choose Anonymous. The key is already sent in the request header.
Step 3: Expand the columns you need
The result is one column of records. Click the expand icon in the column header and tick the fields you want, such as id, amount, currency, created, customer, and status. Within the row, you can further expand data such as billing_data in charges. Keep expanding these until all the data you need is available.
To pull a different object, change v1/charges to v1/invoices, v1/customers, or v1/payouts.
Step 4: Fix amounts and dates
Stripe returns amounts in the smallest currency unit. A $25.00 charge arrives as 2500, so divide by 100 for dollar amounts.
Dates arrive as Unix timestamps, a count of seconds since January 1, 1970. Convert them with a custom column:
#datetime(1970,1,1,0,0,0) + #duration(0,0,0,[created]).
Step 5: Limit the pull to a date range (optional)
By default the query fetches every charge on the account. Stripe accepts a date filter on any list request, which keeps refreshes fast on larger accounts.
Add these two lines under the ApiKey line. They set a start date and convert it to the Unix timestamp Stripe expects:
StartDate = #datetime(2026, 1, 1, 0, 0, 0),
StartUnix = Text.From(Number.RoundDown(Duration.TotalSeconds(StartDate - #datetime(1970, 1, 1, 0, 0, 0)))),Then replace the three Query lines so the filter is sent with every page:
Query = if cursor = null
then [limit = "100", #"created[gte]" = StartUnix]
else [limit = "100", starting_after = cursor, #"created[gte]" = StartUnix],created[gte] means "created on or after". For an end date, add created[lte] the same way.
Step 6: Refresh automatically
Excel can re-run the query without you clicking Refresh. Go to Data → Queries & Connections, right-click the query, and choose Properties. Two settings matter:
Refresh every N minutes
re-runs the query on a timer.
Refresh data when opening the file
pulls current data each time the workbook is opened.
Both only work while the workbook is open on someone's computer. Excel has no built-in way to refresh a closed file overnight. Doing that takes a workaround, such as Windows Task Scheduler or Power Automate opening the workbook on a schedule.
What a raw pull leaves out
Each Stripe endpoint returns one type of object. Several things people expect to see in a report live on a different object, so getting them into Excel takes extra queries and some joining:
Fees and net amounts.
A charge does not carry its Stripe fee, net amount, or exchange rate. Those sit on a separate balance transaction that has to be pulled and matched to the charge.
Product names.
An invoice line holds a product ID, not a name. You need a second pull of the product catalog and a lookup.
Promo codes.
The code a customer typed, such as SPRINGSUMMER20, is not on the invoice by default. It has to be requested through expanded discount and promotion code data.
Every invoice line.
The invoice object includes only a truncated list of its lines. Long invoices need a separate paged request per invoice.
Changes to older records.
A date-filtered pull fetches only objects created inside the window. A subscription that started years ago and was cancelled today will not appear.
None of this is out of reach in Power Query. Each item is one more query to write, join, and keep working.
Where this method stops
The API key is stored in the workbook in plain text. Anyone who gets the file gets the key, so keep it restricted and read-only.
When Stripe changes a field or a query breaks, someone has to fix it.
Method 3: Sync Stripe to Google Sheets, then download as Excel
If your reason for wanting Excel is "I need this in a spreadsheet" more than "it has to be Excel", a synced Google Sheet is the easiest of the three. You connect it once and it runs on its own.
To be clear about what this is: SyncStaq syncs Stripe to Google Sheets. It does not write to Excel files. What it gives you is a Sheet that stays current on its own, which you can download as an .xlsx whenever a workbook is needed.
How it works
Connect Stripe with read-only access.
SyncStaq creates a dedicated Google Sheet and fills it with six months of billing history.
The data updates every hour across seven raw tabs: Invoices, Line Items, Charges, Customers, Payouts, Subscriptions, and Disputes.
Build your formulas and reports on the Working Sheet.
Data that is already joined for you
The Sheet combines related Stripe objects, so each row already has the fields a report needs.
What you want | In a raw API pull | In the SyncStaq Sheet |
Fee, net amount, and exchange rate per charge | Pull balance transactions separately and match them to charges | On every charge row |
Product name on an invoice | Only a product ID; look it up in the product catalog | Product name and description on each invoice and each line |
Invoice line items | Truncated on the invoice; page through each invoice's lines | Their own tab, one row per line with quantity, amount, discount, and tax |
Promo code used | Requires expanded discount data | Resolved on invoices, lines, and subscription items |
Subscription details | One object with nested items | One row per subscription item, with price, interval, quantity, and product name |
Customer name and email | Only a customer ID on most objects | Filled in on every tab that has a customer ID |
Updates to older records | Missed unless you re-pull everything | The existing row is updated in place |
Values also arrive ready to use: amounts in dollars instead of cents, dates as real spreadsheet dates, and a link on each row to the matching record in the Stripe Dashboard.
Nothing to maintain
Setup is two sign-ins.
Connect Google, connect Stripe, done. There is no code to paste and no API key to create or store.
Updates happen on their own.
The Sheet refreshes every hour whether or not anyone opens it. There is no Refresh button to remember and nothing to re-export.
Nothing on your side can break.
There is no query or script for you to fix when your data grows or a field changes.
Getting it into Excel
In Google Sheets, go to File → Download → Microsoft Excel (.xlsx). Each tab becomes a worksheet in the workbook.
The download is a snapshot. The Sheet keeps updating; the Excel file does not. Download again when you need fresh numbers.
Raw data converts cleanly. Formulas that use Sheets-only functions, such as QUERY or ARRAYFORMULA, may not work in Excel, so keep Excel-bound analysis to standard functions.
You can look at the structure before connecting anything in the public sample Sheet, or read more about the Stripe to Google Sheets integration.
Common questions
Can Stripe export directly to an Excel file?
Standard Dashboard exports are CSV. Stripe's Revenue Recognition reports can be downloaded in Excel format, but that is a separate product and covers accounting reports, not raw payments or customer lists.
Can I get invoice line items into Excel?
Not from the Dashboard CSV export, which gives one row per invoice. Line items are available through the API (Method 2) or a sync that includes them (Method 3).
Is it safe to put a Stripe API key in a workbook?
Only a restricted, read-only key, and only in a file you control. Never a full secret key.
Key takeaways
A CSV export opened in Excel is the quickest way to get Stripe data into a spreadsheet, and the right choice for one-off work.
Power Query can connect Excel to the Stripe API for a refreshable workbook, at the cost of setup and upkeep.
A synced Google Sheet removes the repeat exports and can be downloaded as an Excel file at any time.
A synced Sheet also includes joined data, such as fees, product names, and promo codes, that a raw API pull needs extra queries to produce.
Stop rebuilding Stripe reports from CSV exports. SyncStaq keeps Stripe billing data synced into Google Sheets every hour, ready to download as an Excel file whenever you need one. Start a 14-day free trial.