Shopify orders export (Admin > Orders > Export CSV)
The order-line CSV a merchant downloads from the Orders page. People assume one row equals one order and that summing "Total" gives revenue; it is neither one-row-per-order nor net of refunds.
The shape, how the file is really laid out
One header row, then ONE ROW PER LINE ITEM. An order with three products is
three rows sharing the same "Name" (e.g. "#1001"). The order-level money
columns, Subtotal, Shipping, Taxes, Total, Discount Amount, Refunded Amount, are populated only on the FIRST row of each order and left blank on the
continuation rows; the per-item columns (Lineitem name, Lineitem quantity,
Lineitem price, Lineitem sku, Lineitem fulfillment status) vary row to row.
"Total" is in the shop's currency and already includes shipping and tax.
Timestamps ("Created at", "Paid at", "Fulfilled at", "Cancelled at") carry an
explicit UTC offset for the shop timezone, e.g. "2025-04-02 09:14:55 -0700".
"Financial Status" (paid / pending / refunded / partially_refunded / voided)
and "Fulfillment Status" describe state at export time. There is NO grand-total
row anywhere in the file.
The traps
Blank-continuation trap: summing "Total" is correct ONLY because it is blank on continuation rows, but summing "Lineitem price x quantity" will NOT equal "Total" because it omits shipping, tax, and order discounts, and a reader who "fixes" the blanks by forward-filling Total then sums it and double- or triple-counts every multi-item order.
- Every trap in this export, worked through
- The reconciliation anchor, the total the file asserts about itself
- The refusal cases, when to stop and ask instead of guess
Reference: Shopify Help Center, "Export orders" and orders CSV column reference (documentation)