Import Stripe Payouts Into QuickBooks or Xero: Fix the CSV First
Stripe exports give you everything: payment IDs, customer emails, refund histories, dispute outcomes. They also give you dates as UTC timestamps, gross, fee and net in separate columns, and twenty-something columns when your accounting software wants three. If you've tried to import a Stripe export into QuickBooks or Xero and watched it fail with a vague "invalid date" or "invalid amount" error, the problem isn't your accounting software — it's that Stripe and accounting software speak completely different dialects.
Why Stripe's Default Export Doesn't Work
Start with the amount unit, because getting it wrong is the most expensive mistake. Stripe's API stores money as whole numbers in the smallest currency unit, so a $99.00 payment is 9900. Its downloadable CSV reports use normal decimal amounts instead (99.00), as Stripe's Reports API docs explain. Which one you have depends on where the file came from: a Dashboard report gives you decimals, while a file built from API data by a script or a connector can carry cents. Import "9900" into QuickBooks and you've recorded a $9,900 sale. Check one payment you know before you do anything else.
What Stripe gives you vs. what QB/Xero wants:
- Amounts: Stripe reports = decimals (99.00), API-based files = cents (9900), QB/Xero = decimals (99.00)
- Dates: Stripe = UTC ISO timestamp (2026-05-15T14:32:05Z), QB/Xero = MM/DD/YYYY or DD/MM/YYYY
- Time zone: Stripe = UTC, your accounting period = local time
- Columns: Stripe = 20+, QB/Xero = 3-5
- Fees: Stripe = separate column, QB/Xero = needs its own line item
- Refunds: Stripe = negative payments, QB/Xero = depends on import type
Two Different Approaches
There's a strategic decision before you start cleaning: do you want each individual payment as a transaction in your books, or just the net payout that hits your bank? Both are valid, and they require different cleanup.
Approach A: Import individual payments
Each Stripe payment becomes a transaction in your accounting software. Pro: granular revenue tracking. Con: high transaction count, and you need to separately import the Stripe fees as expenses. This works best for businesses with low payment volume or businesses that need customer-level revenue tracking.
Approach B: Import net payouts
Each Stripe payout (daily or weekly transfer to your bank) becomes one transaction. The fees are already netted out — you just record the deposit amount. Pro: matches your bank deposits cleanly. Con: you lose per-payment visibility. This works best for businesses with high payment volume that just need bank reconciliation.
Approach A: Cleaning Individual Payments
Step 1: Export from Stripe
In the Stripe Dashboard, go to Payments > All payments. Click Export. Choose "All columns" — you'll drop the ones you don't need, but it's easier to drop than to re-export. Pick the date range that matches your accounting period.
Step 2: Check the amount units
Find a payment you know in the Dashboard and look at the same row in the file. If Amount, Fee, and Net already have decimals (99.00, 3.17, 95.83), skip this step. If they are whole numbers 100 times too big (9900), the data came from the API in cents: divide each column by 100 (=A2/100 in a spreadsheet). If you keep the original cents column for reference, rename it so you don't accidentally import both.
Stripe raw export (relevant columns):
id,Created (UTC),Amount,Fee,Net,Description,Status
pi_abc123,2026-05-15 14:32:05,99.00,3.17,95.83,Subscription,succeeded
pi_def456,2026-05-15 09:15:22,49.00,1.72,47.28,Subscription,succeeded
QuickBooks-ready:
Date,Description,Amount
05/15/2026,Stripe pi_abc123 Subscription,99.00
05/15/2026,Stripe pi_def456 Subscription,49.00Step 3: Strip the timestamp, convert to your local date
Stripe's Created (UTC) column has full timestamps. Extract just the date portion. Be aware of time zones: a payment at 23:00 UTC on May 15 happened at 16:00 Pacific on May 15 (same date) but at 02:00 GMT+3 on May 16 (next date). If your accounting period is on local time, you may need to shift the UTC dates. For US businesses on the West Coast, this matters at month-end — a payment that Stripe shows on the 1st may belong in your previous month.
Step 4: Decide how to handle fees
If you import each payment at gross (Amount), you need separate expense entries for each fee. The simpler alternative: import payments at Net. You lose the audit trail of "the customer paid $99, Stripe took $3.17, you got $95.83," but the math reconciles to the deposit. Pick one approach and stay consistent — flip-flopping between gross and net breaks year-over-year revenue comparisons.
Step 5: Drop the columns you don't need
Stripe exports 30+ columns. QB and Xero want 3-5. Keep: Date, Description (often payment description plus invoice ID), Amount. Drop everything else: payment IDs (or merge into description), customer emails (privacy), card details, dispute status. Less is more for accounting imports.
Approach B: Cleaning Payouts
Stripe groups payments into payouts based on your schedule (daily, weekly, or custom). Each payout is one transfer to your bank. The payouts export at Reports > Payouts gives you one row per payout with the total amount.
Mapping payouts to bank deposits
Stripe payouts typically post to your bank 1-2 business days after the Stripe-side date. If your Stripe payout is dated May 15, the bank deposit may post May 17. When you import payouts into QB or Xero, use the bank deposit date, not the Stripe-side date. Otherwise reconciliation breaks at month-end.
Handling refunds and disputes in payouts
Refunds, disputes, and chargebacks reduce future payouts. If a $100 refund happens after a $500 payout, the next payout might be $400 instead of $500. The payout export shows the net amount, so the refund is already accounted for. But if you're tracking refunds separately (you usually should), pull the refunds report independently and reconcile.
Handling Refunds and Disputes
Refunds
In the individual-payments export, refunds appear as separate rows with negative amounts. In the payout export, refunds are netted out of the payout total. If you're importing individual payments, the negative-amount refund rows will work directly in QB and Xero as long as the amounts are decimals.
Disputes
Disputes are messier. When a customer disputes a charge, Stripe holds the disputed amount plus a fee. If you win the dispute, the held amount is released; if you lose, it's gone. Disputes appear in the Disputes export, not the payments export. For accounting purposes, you typically book disputes as a separate expense category until they resolve.
Common Errors and Quick Fixes
Amounts 100 times too big
The file was in cents (usually API-based data) and nobody divided by 100, so a $99 payment went in as $9,900. Undo the import, divide the amount columns by 100, and re-import. The opposite mistake happens too: dividing a file that was already in decimals turns $99.00 into $0.99.
"Invalid date format"
Stripe's full timestamp wasn't stripped. QB and Xero want just the date portion. Make sure your Date column is in MM/DD/YYYY (US) or DD/MM/YYYY (non-US Xero), not 2026-05-15T14:32:05Z.
Imported totals don't match Stripe Dashboard
Time-zone shift. Stripe's dashboard shows times in your dashboard time zone (set in your account settings), but the payments export's Created (UTC) column is in UTC. Either change your CSV dates to match the dashboard timezone, or change the dashboard timezone to UTC and reconcile from there.
Cross-reference: if you also need to combine Stripe data with your bank statement for cash-flow analysis (rather than accounting imports), see our guide on merging bank and Stripe CSVs. The two posts cover different intents — accounting imports versus reconciliation views.
Building a Reusable Pipeline
Stripe exports always come in the same format. If you do this monthly, build the cleanup once: strip timestamps to dates, drop unneeded columns, rename to QB/Xero column names, and divide by 100 only if your source is in cents. Then every month it's a one-click cleanup. PipeSheets' ready-made Stripe Export Cleaner converts the Created (UTC) dates and keeps amounts exactly as exported, which is right for report CSVs that already have decimals. If your file is in cents, add a Numeric Transformation step that divides by 100, and check the preview before you download. The same logic applies whether you build it there or in Excel.
Prevention: Use Stripe's Tax & Accounting Integrations
Stripe has direct integrations with QuickBooks Online and Xero. If you can use one, it posts transactions for you without a CSV round trip. CSV cleanup is for the cases where direct integrations don't fit: backfilling historical data, importing into accounting software that Stripe doesn't directly support (Wave, FreshBooks), or when you need to apply business-specific logic to the import (custom categorization, merging with non-Stripe revenue).
Related guides
- Stripe Payout CSVs for Accounting: Gross, Fees, Net, and Matching Transfers to DepositsYour bank shows one Stripe deposit; Stripe made hundreds of charges. Here's how to pull the right report, split gross, fees, and net, and tie every payout to its bank line.
- Stripe Deposits Double Counted? How to Fix Your BooksIf your books show more revenue than you actually earned, and Stripe is in the picture, you have almost certainly recorded the same money twice: once as Stripe payments and again as bank deposits. Here is why it happens, how to confirm it, and how to fix a ledger that is already double counted.
- Merge Bank, Stripe, and PayPal CSV Exports for Monthly ReconciliationMerging bank, Stripe, and PayPal CSVs for monthly reconciliation double-counts revenue unless you handle payouts correctly. Here is how to normalize all three to one schema and match payouts to deposits.
- How to Merge Bank and Stripe CSVs into One Cash Flow SheetYour bank shows deposits, Stripe shows individual payments. Here's how to combine them into a single cash flow view that actually makes sense.
Related tools & guides
- Stripe CSV Export CleanerStripe is built for payments, not accounting. We bridge the gap.
- Merge Bank & Stripe ExportsFinally match those Stripe payouts to your bank deposits
- PipeSheets CSV & Excel cleanerClean any spreadsheet in seconds — free to start
- Pricing & plansCompare the free and Pro plans for your workflow
Try the automated solution
PipeSheets can fix these issues automatically. Create a free account to clean your first file.
Create a free accountOr see how it works: Stripe CSV Export Cleaner