Sales reports

From gross to net to total, by product, variant, vendor, channel, location or time — every sales report here aggregates across all your connected stores in one currency, and the core reports are verified against Shopify's own analytics statistic by statistic.

26 built-in reports — every one opens in the report editor, runs across all connected stores in one currency, and can be saved, exported or scheduled. The query under each report is the whole report — readable, and yours to change.

Total sales over time

Gross sales, discounts, sales reversals, net sales, shipping, duties, additional fees and taxes rolled up to total sales per day.

FROM sales
  SHOW orders, gross_sales, discounts, sales_reversals, net_sales, shipping_charges, duties, additional_fees, taxes, total_sales
  SINCE startOfDay(-30d) UNTIL today
  TIMESERIES day WITH TOTALS, PERCENT_CHANGE
  COMPARE TO previous_period
  ORDER BY timeseries ASC
  VISUALIZE total_sales TYPE line

Gross sales over time

Gross sales per day — product value before discounts, reversals, taxes and shipping.

FROM sales
  SHOW gross_sales
  SINCE startOfDay(-30d) UNTIL today
  TIMESERIES day WITH TOTALS
  ORDER BY timeseries ASC
  LIMIT 1000
  VISUALIZE gross_sales TYPE line

Net sales over time

Net sales per day — gross sales minus discounts and sales reversals.

FROM sales
  SHOW net_sales
  SINCE startOfDay(-30d) UNTIL today
  TIMESERIES day WITH TOTALS, PERCENT_CHANGE
  COMPARE TO previous_period
  ORDER BY timeseries ASC
  LIMIT 1000
  VISUALIZE net_sales TYPE line

Sales reversals over time

Money returned to customers per day — returns, refunds and order-edit reversals, shown as negative values.

FROM sales
  SHOW sales_reversals
  SINCE startOfDay(-30d) UNTIL today
  TIMESERIES day WITH TOTALS, PERCENT_CHANGE
  COMPARE TO previous_period
  ORDER BY timeseries ASC
  LIMIT 1000
  VISUALIZE sales_reversals TYPE line

Average order quantity over time

Average number of items per order, tracked daily.

FROM sales
  SHOW quantity_ordered_per_order
  SINCE startOfDay(-30d) UNTIL today
  TIMESERIES day WITH TOTALS, PERCENT_CHANGE
  COMPARE TO previous_period
  ORDER BY timeseries ASC
  LIMIT 1000
  VISUALIZE quantity_ordered_per_order TYPE line

Top products by units sold

Your best-selling products by units sold, rather than by revenue.

FROM sales
  SHOW net_quantity, total_sales
  WHERE sale_item_type = 'product'
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY product_title WITH TOTALS
  ORDER BY net_quantity DESC
  LIMIT 1000
  VISUALIZE net_quantity TYPE horizontal_bar

Total sales by sales channel

The full sales breakdown per sales channel — where your revenue actually comes from.

FROM sales
  SHOW orders, gross_sales, discounts, sales_reversals, net_sales, shipping_charges, taxes, total_sales
  WHERE sales_channel IS NOT NULL
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY sales_channel WITH TOTALS
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE donut

Gross sales by sales channel

Gross sales per sales channel — pre-discount revenue by where it was sold.

FROM sales
  SHOW gross_sales
  WHERE sales_channel IS NOT NULL
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY sales_channel WITH TOTALS
  ORDER BY gross_sales DESC
  LIMIT 1000
  VISUALIZE gross_sales TYPE horizontal_bar

Net sales by sales channel

Net sales per sales channel — post-discount, post-reversal revenue by where it was sold.

FROM sales
  SHOW net_sales
  WHERE sales_channel IS NOT NULL
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY sales_channel WITH TOTALS
  ORDER BY net_sales DESC
  LIMIT 1000
  VISUALIZE net_sales TYPE horizontal_bar

Total sales by billing location

The full sales breakdown per billing country.

FROM sales
  SHOW orders, gross_sales, discounts, sales_reversals, net_sales, shipping_charges, taxes, total_sales
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY billing_country WITH TOTALS
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE donut

Total sales by currency

Sales split by the currency your customers actually checked out in.

FROM sales
  SHOW orders, total_sales
  WHERE order_checkout_currency IS NOT NULL
  GROUP BY order_checkout_currency
  SINCE startOfDay(-30d) UNTIL today
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE donut

Sales by customer name

Your top customers of the last week by total sales.

FROM sales
  SHOW orders, gross_sales, net_sales, total_sales
  WHERE customer_display_name IS NOT NULL
  SINCE startOfDay(-7d) UNTIL today
  GROUP BY customer_display_name, customer_email WITH TOTALS, PERCENT_CHANGE
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE horizontal_bar

New vs returning customers over time

Customer counts, orders and total sales per month, split between new and returning customers over the last year.

FROM sales
  SHOW customers, orders, total_sales
  WHERE new_or_returning_customer IS NOT NULL AND sale_item_type = 'product' AND order_or_sales_reversal = 'order'
  SINCE startOfDay(-365d) UNTIL today
  GROUP BY new_or_returning_customer, month WITH TOTALS, GROUP_TOTALS, PERCENT_CHANGE
  TIMESERIES month
  COMPARE TO previous_period
  ORDER BY month ASC, new_or_returning_customer ASC
  LIMIT 1000
  VISUALIZE customers TYPE stacked_area

Top product variants by units sold

Your best-selling variants by units sold, product and SKU side by side.

FROM sales
  SHOW net_quantity
  WHERE sale_item_type = 'product'
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY product_title, sku WITH TOTALS
  ORDER BY net_quantity DESC
  LIMIT 1000
  VISUALIZE net_quantity TYPE horizontal_bar

Items sold by referrer

Units sold by the traffic source that referred the order — search, social, direct.

FROM sales
  SHOW net_quantity
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY order_referrer_source WITH TOTALS
  ORDER BY net_quantity DESC
  LIMIT 1000
  VISUALIZE net_quantity TYPE horizontal_bar

Total sales by referrer

Sales split by the source and site that referred each order.

FROM sales
  SHOW orders, total_sales, gross_sales, net_sales
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY order_referrer_source, order_referrer_name WITH TOTALS
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE horizontal_bar

Total sales by referrer name

Sales by the site that referred each order, with subdomains and URL variants folded into one row per referrer.

FROM sales
  SHOW orders, total_sales, gross_sales, net_sales
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY order_referrer_name_normalized WITH TOTALS
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE horizontal_bar

Total sales by social referrer

Sales from social referrers, split by the site each order came from.

FROM sales
  SHOW total_sales
  WHERE order_referrer_source_class = 'social'
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY order_referrer_name_normalized WITH TOTALS
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE horizontal_bar

Weekly sales patterns

Net sales by hour of day and day of week over the last 30 days — when your store actually sells.

FROM sales
  SHOW net_sales
  SINCE startOfDay(-30d) UNTIL yesterday
  GROUP BY hour_of_day, day_of_week WITH TOTALS, GROUP_TOTALS
  ORDER BY hour_of_day ASC, day_of_week ASC
  VISUALIZE net_sales TYPE heatmap

Total sales by product

Your best-selling products by total sales, with quantities and the full sales breakdown.

FROM sales
  SHOW net_quantity, gross_sales, discounts, sales_reversals, net_sales, taxes, total_sales
  WHERE product_title IS NOT NULL AND product_id IS NOT NULL
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY product_title, vendor, product_type WITH TOTALS
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE horizontal_bar

Total sales by product variant

Your best-selling variants by total sales — product, variant and SKU side by side with the full breakdown.

FROM sales
  SHOW net_quantity, gross_sales, discounts, sales_reversals, net_sales, taxes, total_sales
  WHERE sale_item_type = 'product'
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY product_title, variant_title, sku WITH TOTALS
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE horizontal_bar

Total sales by vendor

Sales per product vendor — which brands or suppliers earn the most.

FROM sales
  SHOW net_quantity, gross_sales, discounts, sales_reversals, net_sales, taxes, total_sales
  WHERE vendor IS NOT NULL
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY vendor WITH TOTALS
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE bar

Average order value over time

How much customers spend per order, tracked daily.

FROM sales
  SHOW gross_sales, discounts, orders, average_order_value
  WHERE reason != 'ORDER_EDIT'
  SINCE startOfDay(-30d) UNTIL today
  TIMESERIES day WITH TOTALS, PERCENT_CHANGE
  COMPARE TO previous_period
  ORDER BY timeseries ASC
  LIMIT 1000
  VISUALIZE average_order_value TYPE line

Total sales reversals over time

Total value reversed per day — returns, refunds and cancellations including their taxes and shipping.

FROM sales
  SHOW total_sales_reversals
  SINCE startOfDay(-30d) UNTIL today
  TIMESERIES day WITH TOTALS, PERCENT_CHANGE
  COMPARE TO previous_period
  ORDER BY timeseries ASC
  LIMIT 1000
  VISUALIZE total_sales_reversals TYPE line

New vs returning customer sales

Sales, orders and customers per month, split between new and returning customers over the last year.

FROM sales
  SHOW customers, orders, total_sales
  WHERE new_or_returning_customer IS NOT NULL
  SINCE startOfDay(-365d) UNTIL today
  GROUP BY new_or_returning_customer, month WITH TOTALS, GROUP_TOTALS, PERCENT_CHANGE
  TIMESERIES month
  COMPARE TO previous_period
  ORDER BY month ASC, new_or_returning_customer ASC
  LIMIT 1000
  VISUALIZE total_sales TYPE stacked_area

Sales by discount codes

Sales broken down by the discount applied, with what each discount took off.

FROM sales_discounts
  SHOW applied_discounts, discounted_orders, gross_sales, sales_reversals, net_sales, shipping_charges, taxes, total_sales
  WHERE discount_name IS NOT NULL
  SINCE startOfDay(-30d) UNTIL today
  GROUP BY discount_name, discount_method, discount_type, discount_class WITH TOTALS
  ORDER BY total_sales DESC
  LIMIT 1000
  VISUALIZE total_sales TYPE horizontal_bar

FAQ

Do these sales reports cover all my Shopify stores? Yes — every report on this page aggregates across all connected stores and converts to one currency. Group by store inside any of them for the per-store split.

Can I change what a report shows? Yes — every report opens in the report editor, where metrics, groupings, filters, date ranges and the chart are all editable, and your version saves to your own library.

Can I get these reports automatically? Yes — any report can be downloaded as CSV or Excel, or scheduled to arrive by email or FTP on the cadence you choose.