Orders API vs Sales Report

Topic summary

Reconciling Shopify Orders API totals with the Analytics Sales report shows persistent discrepancies (often 0.1%–5%), especially around refunds and multi-currency. Goal: match “Total sales” and “returns” per day.

Key guidance provided:

  • API versioning: Before 2019-10, financial_status=paid,pending defaults to “any”; 2019-10+ supports multiple statuses properly. This may affect inclusion/exclusion of refunded days.
  • Definitions: Total sales = gross sales − discounts − returns + taxes + shipping. Gift card sales are excluded from sales reports (appear in Gift Cards finance report).
  • Refunds: Use refund.created_at for timing and refund.transactions amounts for money returned (applies to partial refunds and voids).
  • Currency: presentment_currency is what the customer sees; staff states order.total_price is in shop currency. total_price_set contains both shop_money and presentment_money.

Open issues/contradictions:

  • A user’s examples show total_price/currency differing by order (e.g., EUR), challenging the claim that total_price is always in shop currency and raising how Sales reports aggregate across currencies.
  • GraphQL users cannot derive “total sales − returns” reliably from subtotalPriceSet, discounts, shipping, taxes, refunds; code fields listed but formulas still diverge.

Status: No confirmed formula or resolution shared; multiple users request updates and a precise API/GraphQL computation for “total sales” and “sales excluding returns,” plus clear multi-currency handling.

Summarized with AI on December 25. AI used: gpt-5.

Hi everyone,

I am also having a similar issue. I’m pulling the Orders through API and comparing it with the Total Sales in Analytics. I’m getting discrepancies with the total as well as per day.

Has anyone figured this out? Thanks