Skip to main content

Import Stripe Payouts Into QuickBooks or Xero: Fix the CSV First

9 min readPipeSheets Team

Stripe exports give you everything: payment IDs, customer emails, refund histories, dispute outcomes. They also give you amounts stored as integers in cents, dates in UTC timestamps, 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

Stripe stores money as integer cents to avoid floating-point rounding bugs. A $99.00 payment is exported as 9900. This is the right call internally, but accounting software universally expects decimal dollars. Importing "9900" into QuickBooks creates a $9,900 transaction. Times a thousand rows, you've just inflated your revenue by 100x.

What Stripe gives you vs. what QB/Xero wants:

  • Amounts: Stripe = cents (9900), QB/Xero = dollars (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: Convert cents to dollars

The Amount, Fee, and Net columns are all in cents. Divide each by 100. In a spreadsheet, this is =A2/100 (or whatever column the amount is in). Be careful: if you're keeping 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,9900,317,9583,Subscription,succeeded
pi_def456,2026-05-15 09:15:22,4900,172,4728,Subscription,succeeded

QuickBooks-ready:
Date,Description,Amount
05/15/2026,Stripe pi_abc123 Subscription,99.00
05/15/2026,Stripe pi_def456 Subscription,49.00

Step 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 you've converted cents to dollars.

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

"Amount is outside acceptable range" in QuickBooks

You forgot to divide by 100. A $99 payment imported as $9,900 may trip QuickBooks' large-transaction sanity check. Re-do the division and re-import.

"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 CSV export is always 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 pipeline once: convert cents to dollars, strip timestamps to dates, drop unneeded columns, rename to QB/Xero column names. Then every month it's a one-click cleanup. PipeSheets' Stripe CSV Export Cleaner has these steps as a preset, but 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 them, they handle the cents-to-dollars conversion and timezone normalization automatically. 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).

Try the automated solution

PipeSheets can fix these issues automatically. Clean your first file free.

Clean Your CSV