Shopify Payments transactions export explained (2026): every column and type
The Shopify Payments transactions export is a CSV with one row per balance movement: charges, refunds, disputes, reserves, adjustments and payouts. Current exports carry 16 columns plus a Payout ID column added on 8 January 2026, amounts are in the payout currency, and the identity Net = Amount − Fee holds on every row. This page documents each column, each Type value, how deductions look, and how to join the file to the orders export.
How to get the file
Two routes, same schema (View payout details):
- One payout: Finance > Payouts > click the payout date > Export icon > Export payout transactions.
- A date range, all payouts: Settings > Payments > View payouts > View Transactions > Export > choose date range and CSV type > Export balance transactions.
Both are emailed to you and the store owner, not downloaded. Filters before export: transaction type, payout status, payment method, card type, transaction date, payout date, currency.
The columns
Header line as observed on 2026 exports: Transaction Date,Type,Order,Card Brand,Card Source,Payout Status,Payout Date,Available On,Amount,Fee,Net,Checkout,Payment Method Name,Presentment Amount,Presentment Currency,Currency
Shopify's help page lists only the first 11; the remaining five and Payout ID are present in real exports. Parse by header name, not by position.
| Column | Format | Meaning | Notes |
|---|---|---|---|
| Transaction Date | YYYY-MM-DD HH:MM:SS ±HHMM | When the balance movement was created (capture, refund, dispute) | Includes timezone offset |
| Type | lowercase string | Kind of movement | See list below |
| Order | #1001 | Order name | Empty on adjustments, reserves, payouts |
| Card Brand | Visa, Mastercard, … | Card network | Empty on non-card rows |
| Card Source | credit, debit, … | Funding type | |
| Payout Status | paid, pending, scheduled, in_transit, failed | State of the payout this row belongs to | Case varies between exports; normalise |
| Payout Date | YYYY-MM-DD | Date the payout containing this row was/will be sent | Empty while unscheduled |
| Available On | YYYY-MM-DD | Date funds finished settling | Settlement is 2 to 7 business days by country |
| Amount | decimal, - for negative | Gross amount in payout currency | No symbol, no thousands separator |
| Fee | decimal | Fee on this row | Positive on charges |
| Net | decimal | Amount − Fee | Σ Net per payout = payout total |
| Checkout | string | Checkout token | |
| Payment Method Name | string | e.g. Shopify Payments, Shop Pay | |
| Presentment Amount | decimal | What the customer paid, in their currency | |
| Presentment Currency | ISO code | Customer currency | |
| Currency | ISO code | Payout currency for Amount/Fee/Net | One payout per currency |
| Payout ID | identifier | Added 8 Jan 2026 | Matches the payout export; position not fixed |
The 2026 change: "Bank Reference" was added to payout exports and "Payout ID" to order transactions exports so merchants can "match Shopify Payments payouts with bank deposits" (Shopify changelog). Older exports and third-party templates built before January 2026 will not have the column.
Type values and their sign
The set is open; new values appear without notice. Treat unknown values as "Other" and flag them.
| Type | Amount sign | Fee | Order filled | What it is |
|---|---|---|---|---|
charge | + | + | yes | Card capture |
capture | + | + | yes | Capture of a prior authorisation (some exports) |
refund | − | 0 (occasionally −) | yes | Refund; original fee is not returned |
dispute / chargeback | − | + (chargeback fee) | yes, original order | Disputed amount withdrawn |
dispute_reversal | + | − (fee returned) | yes | Dispute won |
reserve | − then + | 0 | no | Funds held, later released |
adjustment | ± | ± | no | Tax on fees, Protect, corrections, Capital |
payout | − | 0 | no | The transfer to your bank |
payout_failure | + | 0 | no | Failed payout returned to balance |
transfer, credit, debit, advance | ± | 0 | no | Internal movements, Capital advances |
Fee policy references: refunds do not return the original fee (Refunds); dispute amount and fee are "withdrawn immediately" and returned on a win (Chargeback process); reserves show as negative then positive transactions (Reserves).
The arithmetic to assert
Three checks catch almost every parsing error:
- Row level:
Net == Amount − Feefor every row. If it fails, the file was opened and re-saved by a spreadsheet that rounded or re-formatted numbers. Re-download. - Payout level:
Σ Netgrouped by (Payout Date,Currency) equals the payoutTotalon the Payouts page and in the payout export. - Fee level: on
chargerows,Fee / Amountshould sit near your plan rate, plus 1.5% (US) or 2% (elsewhere) on rows wherePresentment Currency ≠ Currency(Currency conversion fees). The conversion fee is insideFee; there is no rate column.
Parse amounts as exact decimals, never floats. A 4,820.00 payout summed as floats across 31 rows can drift by a cent, and a cent is enough to fail a bank match.
How refunds, disputes and adjustments look in practice
A refund on order #1042 sold on 2026-02-03 and refunded on 2026-03-09 produces a charge row dated 2026-02-03 (Amount 120.00, Fee 3.78, Net 116.22, Payout Date 2026-02-06) and a refund row dated 2026-03-09 (Amount −120.00, Fee 0.00, Net −120.00, Payout Date 2026-03-12). Same order, two payouts, five weeks apart. The orders export shows only Refunded Amount = 120.00 with no date. Any reconciliation that groups by order date instead of payout date will put the refund in February and the payout will not balance.
A dispute looks like a refund with a positive Fee (the chargeback fee) and references the original order. A later dispute_reversal repeats the order number with the opposite signs.
Adjustments and reserves have an empty Order. They are payout-level lines; do not try to allocate them to orders.
Joining with the orders export
Orders > Export > Orders by date > CSV (Export orders). Exports over 50 orders are emailed.
Join key: transactions.Order ↔ orders.Name. Strip the #, trim whitespace, compare as strings (order names can carry prefixes or suffixes set in Settings > General).
Pitfalls:
- Multi-line orders: the orders CSV writes order-level fields on the first line only; following lines have an empty
Name. Forward-fillNamebefore joining. - Orders with no transaction rows: paid by PayPal, Klarna, manual, or 100% gift card. Check
orders.Payment Method(shopify_payments,paypal,manual,gift_card, combined with+). Report them as "settled outside Shopify Payments". - Many rows per order: charge + one or more refunds + dispute + reversal, spread across several payouts. Join is one-to-many.
- Partial gift card:
Amounton the charge is the order total minus the gift card portion. Don't expect it to equalorders.Total. - Tips: the orders export has no tip column.
Total − Subtotal − Shipping − Taxes − Dutiesapproximates tips. - Test orders and exchanges: filter them out of both files before summing.
- Payment ID is not in the transactions export, so you cannot join on it even though the orders CSV has a
Payment IDcolumn.
The payout statement tool at Shopify payout statements applies these rules in the browser (forward-fill, strip #, decimal arithmetic, the three assertions) and lists non-matched orders by payment method on the last page of each statement.
FAQ
Why does my export have more columns than Shopify's documentation lists? The help page lists 11 columns; exports in 2026 contain 16 plus Payout ID. Shopify adds columns without updating the list. Read by header name.
What is the difference between Available On and Payout Date? Available On is the date settlement finished (2 to 7 business days after capture depending on country). Payout Date is the date the containing payout is sent, which depends on your daily, weekly or monthly schedule.
Is the Fee column the full cost of the transaction? Yes for Shopify Payments: card rate plus any currency-conversion fee plus, in some regions, tax on the fee. The export does not split these.
Can I get the exchange rate used? Not from this export. Divide Amount by Presentment Amount for an implied rate, keeping in mind the conversion fee is embedded.
Why does Σ Net for a date range not equal my bank deposits? A date-range export includes rows whose Payout Status is pending, scheduled or in_transit. Filter to paid and group by Payout Date before comparing to the bank.