Stripe is the most popular payment gateway for Shopify merchants — and also the source of the most reconciliation confusion. If you've ever exported your Shopify orders and your Stripe payouts and tried to match them manually, you know the problem: the numbers almost never line up cleanly.
This isn't a Stripe bug or a Shopify bug. It's a structural gap between how the two platforms record transactions. Understanding it is the first step to fixing it.
How Shopify and Stripe record transactions differently
Shopify records a transaction at the order level — one line per order, with the total amount the customer paid. Stripe records transactions at the charge level — including authorizations, captures, refunds, disputes, and fees as separate line items.
A single Shopify order can generate up to six separate Stripe records: an authorization, a capture, a Stripe processing fee, a payout batch entry, possibly a refund, and possibly a dispute record. Reconciliation means mapping all of these back to one Shopify order — correctly.
The 6 most common Stripe-Shopify mismatch causes
How to reconcile Shopify orders with Stripe payouts manually
The correct approach matches on Stripe charge ID, not on order amount or date. Here's the process:
- Export Shopify orders as CSV (include the "Payment reference" column — this is the Stripe charge ID)
- Export Stripe payments as CSV from the Stripe Dashboard → Payments → Export
- Join the two datasets on the Stripe charge ID (VLOOKUP in Excel, or MATCH in Google Sheets)
- For matched rows, compare: Shopify order total vs. Stripe charge amount (gross, before fees)
- Separately, export Stripe fee data and subtract to get net amounts
- Flag any Shopify orders with no matching Stripe charge ID — these are potential ghost orders
- Export Stripe refunds and disputes separately and reconcile against Shopify refund records
How long does Shopify-Stripe reconciliation take?
For a store processing 100 orders per month: 1–2 hours. For 500 orders: half a day. For 2,000+ orders: you need a dedicated process or automated tooling. The manual approach also doesn't scale — every new transaction type (refunds, disputes, multi-currency) adds another layer of joins and transformations to your spreadsheet.
More critically, manual reconciliation happens monthly at best. By the time you catch a discrepancy, the trail for investigating it (Stripe logs, customer emails, gateway records) may be weeks old and harder to trace.
What to do when you find a Stripe-Shopify discrepancy
- If a Shopify order has no Stripe charge ID: the payment may have failed at authorization. Check the Stripe dashboard for a declined charge on the same date and amount.
- If the amounts differ by your Stripe fee rate: this is expected — account for fees separately in your books, don't treat it as a discrepancy.
- If a charge appears in Stripe with no matching Shopify order: this may be a duplicate charge. Contact Stripe support with both charge IDs.
- If a refund appears in Stripe but not in Shopify: the refund may have been issued directly from the Stripe dashboard. Check your Shopify order timeline and update it manually if needed.
Fincile does this in minutes, not hours
Connect Shopify + Stripe via OAuth. Fincile pulls every order, every charge, every refund and dispute, and cross-references them automatically using cent-safe arithmetic. Discrepancies surface immediately with the exact order ID and variance amount.
No credit card required · Read-only Stripe access · Results in minutes