Sales reporting · complete guide
WooCommerce sales reports: the complete guide
WooCommerce sales reports live under Analytics in WordPress admin. Start with Analytics › Revenue for gross sales, returns, coupons, net sales, tax, shipping and total sales by day, week or month. Then use Analytics › Orders, Products, Variations and Categories to see which orders and products made up those sales.
This guide is the map. It covers where each report is, what every number means, how to compare periods, why the totals sometimes disagree with your Orders list, what WooCommerce can't report on at all, and how to get answers faster. Each section links to a deeper guide.
Where are the sales reports in WooCommerce?
Everything sits under the Analytics menu in WordPress admin. Each item is a separate report:
| Report | What it's for |
|---|---|
| Overview | A dashboard of headline figures (performance indicators), charts and leaderboards for the selected dates |
| Revenue | Sales totals by interval: gross sales, returns, coupons, net sales, taxes, shipping, total sales |
| Orders | Order count, net sales, average order value and average items per order, plus a list of the orders themselves |
| Products | Units sold, net sales and orders for each product |
| Variations | The same, for each variation (a size, a color) of your variable products |
| Categories | Units sold, net sales and orders for each product category |
| Coupons | How often each coupon was used and how much it discounted |
| Taxes | Tax collected by tax rate |
| Downloads | Downloads of downloadable products |
| Stock | Products by stock status |
| Settings | Which order statuses count, the date type, and importing historical data |
Customer reports are a separate menu item, WooCommerce › Customers.
If you've used WooCommerce for a long time, you may remember the old WooCommerce › Reports screen. Analytics replaced it, and it's where all current reporting lives. The WooCommerce Analytics glossary entry explains how it fits together.
How to see your sales in Analytics › Revenue
The Revenue report is the one to open when someone asks "how much did we sell?"
- In WordPress admin, go to Analytics › Revenue.
- Click the date range at the top. Pick a preset (Today, Yesterday, Week to date, Last week, Month to date, Last month, Quarter to date, Last quarter, Year to date, Last year) or set custom dates.
- Optionally choose Compare to › Previous period or Previous year, then click Update.
- Read the row of figures at the top (the performance indicators). With a comparison set, each one shows the percentage change.
- Click any indicator to chart it. Change the interval (day, week, month and so on, depending on the length of the range) to group the chart and table.
- Click Download to export the table as a CSV.
The table has one row per interval, including days with no orders. Clicking an order count in the table opens the Orders report for that interval.
What do gross sales, net sales and total sales mean?
These three numbers cause more confusion than anything else in WooCommerce. Here's how the Revenue report builds them:
| Figure | How it's calculated |
|---|---|
| Gross sales | The value of the products sold, before refunds and coupons, excluding tax and shipping |
| Returns | Money refunded in the period |
| Coupons | Coupon discounts given |
| Net sales | Gross sales − returns − coupons (still excluding tax and shipping) |
| Taxes | Tax collected |
| Shipping | Shipping charged |
| Total sales | Net sales + taxes + shipping |
A quick example. Say last week you sold $2,000 of products, refunded $150, and gave $100 in coupon discounts. You also charged $180 in tax and $120 in shipping. Gross sales are $2,000, net sales are $1,750, and total sales are $2,050.
Which one should you track? For most decisions, net sales. It's the revenue your products actually earned, with refunds and discounts taken out and with tax (which isn't yours) and shipping (which mostly covers a cost) left out. The full breakdown, with more examples, is in net sales vs gross sales vs total sales.
Average order value and other order metrics
Analytics › Orders gives four headline figures: orders, net sales, average order value and average items per order. Average order value (AOV) is net sales divided by the number of orders, so it excludes tax and shipping too.
Below the chart, the Orders table lists each order with its date, order number, status, customer, customer type (new or returning), products, items sold, coupons and net sales. The advanced filters let you narrow the list, for example to one order status, a product, a coupon code, new or returning customers, or orders with refunds.
AOV is one of the few levers you can pull without finding new customers. How it's calculated, why it moves and how to raise it are covered in the WooCommerce average order value guide.
Product, variation and category reports
Totals tell you how much you sold. These reports tell you what.
Products
Analytics › Products lists each product with items sold, net sales and orders. Sort by Items sold for units or Net sales for revenue. The step-by-step version, and which ranking to trust, is in how to see your best-selling products.
Variations
A variable product's row in the Products report adds up all its sizes and colors. Analytics › Variations splits them out, with items sold, net sales, orders, stock status and stock for each variation. Its advanced filters can narrow the list by product, attribute or category. See how to see sales by variation for how to use it and what it can't do.
Categories
Analytics › Categories shows items sold, net sales, products and orders for each product category. A product in two categories counts in both, and child-category sales also count toward the parent, so the rows can add up to more than your store total. The guide to WooCommerce sales by category explains how to read it without double counting.
How to compare periods: month over month and year over year
A sales figure on its own says little. "We made $8,400 in October" only means something next to September, or next to last October.
Every Analytics report has the same Compare to setting in the date picker:
- Previous period compares with the same number of days immediately before. October against September. This week against last week.
- Previous year compares with the same dates a year earlier. October 2026 against October 2025.
Use previous period to spot sudden changes, such as a campaign that worked or a product that ran out. Use previous year for anything seasonal, because December will always beat November in most shops. The details, including how to compare two custom ranges, are in how to compare two date ranges in WooCommerce.
For the longer view (this year against last, month by month), see how to compare WooCommerce sales year over year. It covers the traps, like comparing a year-to-date figure with a full year, or comparing weeks that start on different weekdays.
Refunds and returns in your sales reports
WooCommerce Analytics calls refunds Returns. Two things about them trip people up.
First, a refund is dated on the day you issue it, not the day of the original order. Refund a September order in October and October's net sales go down, while September's stay the same. That keeps past months stable, but it means a month with lots of refunds for earlier orders can look worse than it was.
Second, Analytics shows the refunded money but not why it was refunded. You can type a reason when you issue a refund, but no report groups or totals those reasons.
To see how big a problem refunds are, divide returns by gross sales for the same period. That's your refund rate by value. The WooCommerce refund rate guide shows how to work it out by value and by order count, and how to find which products get refunded most. The glossary has more on how returns are counted.
Why don't Analytics numbers match my orders?
This is the most common complaint about WooCommerce reporting. The Orders list (WooCommerce › Orders) and Analytics often show different totals for the same dates. Usually nothing is broken. They count differently:
- Excluded statuses. Analytics leaves out orders with any status listed under Analytics › Settings › Excluded statuses. The Orders list shows every status. See excluded statuses.
- Refund dates. Analytics puts refunds on the refund date. The Orders list shows each order on its order date.
- Date type. Analytics can date orders by when they were created, paid or completed (Analytics › Settings › Date type). The Orders list uses the creation date.
- What's included. Net sales excludes tax and shipping, while the order totals in your Orders list include them.
- Import and delay. Analytics reads its own lookup tables, which Action Scheduler fills in the background. New orders can take a little while to show up, and older orders are missing until you run Import historical data.
The full checklist, with fixes for each cause, is in why WooCommerce Analytics numbers don't match your orders.
What WooCommerce sales reports can't show you
Core WooCommerce Analytics covers a lot, but some common questions have no built-in report.
Sales by day of week or hour
There's no report that shows which weekday or hour brings the most orders. For a single day, the chart can group by hour, but you can't see "every Monday" or "8pm across the month" in one view. How to find your busiest days and hours shows the export and SQL methods.
Sales by country
Analytics has no sales-by-country report. The Customers report shows each customer's country and can filter by it, which gets you part of the way. The WooCommerce sales by country guide covers that, plus exporting orders and a SQL query.
Profit and margin
Revenue reports show sales, not profit. WooCommerce 10.3 added a core cost of goods feature (off by default), but Analytics doesn't turn sales into a profit report on its own. The WooCommerce profit reporting guide explains what you need.
Sales by channel
WooCommerce records where each order came from (order attribution) and shows it on the Orders list, but Analytics has no report that totals sales by channel. See how to see which channels bring the most orders.
Other gaps: no repeat purchase rate, no cohort or lifetime value report, and no scheduled email summaries.
Exporting sales data to a spreadsheet
When a report doesn't exist, the usual workaround is a CSV export.
- Open the report closest to what you need (Revenue, Orders, Products and so on).
- Set the date range and any filters.
- Click Download. Small exports download straight away. Larger ones are processed in the background and emailed to you as a link.
- Open the file in a spreadsheet and build the view you want with a pivot table.
The Orders report export is the most flexible starting point, because it has one row per order with a date, status, customer type, products and net sales.
For developers, the Analytics lookup tables are the cleanest source. wp_wc_order_stats has one row per order (and one per refund), with the same columns whether your store uses HPOS or the older posts storage. This gives monthly net sales and order counts for 2026:
SELECT DATE_FORMAT(date_created, '%Y-%m') AS month,
SUM(CASE WHEN parent_id = 0 THEN 1 ELSE 0 END) AS orders,
ROUND(SUM(net_total), 2) AS net_sales
FROM wp_wc_order_stats
WHERE date_created >= '2026-01-01' AND date_created < '2027-01-01'
AND status NOT IN ('wc-pending', 'wc-failed', 'wc-cancelled')
GROUP BY month
ORDER BY month;
Refund rows have a parent_id (the original order) and a negative net_total, so summing every row takes refunds out on the refund date, just like Analytics. The status list here is a stand-in: edit it to match your Excluded statuses setting, because the query doesn't read that setting. Change wp_ if your table prefix differs.
The quick way: ask Askshelf
Askshelf adds Analytics › Askshelf to WordPress admin. You type a question in plain words and get a short answer with the numbers behind it, a chart where one helps, and the lookups it made. It reads the same Analytics data, so it counts the same order statuses, takes refunds out and uses your store's time zone.
How did October go compared with September?
For sales, it can give a full sales summary for any dates (net, gross and total sales, orders, AOV, items sold, refunds, coupons, shipping and tax, with a trend), compared with the previous period or the same period last year. It can also rank your top products by units or revenue, break orders and net sales down by category, customer country, weekday, hour or payment method, show them by attribution channel, report gross profit and margin, and give coupon performance and today's live orders.
It can't split sales by tag or region, export a table, or include shipping costs and payment fees in profit, and it's read-only, so it can't change anything in your store. See AI sales reports for WooCommerce for more examples, or pricing: it's free for 10 questions a month.
A simple weekly sales routine
Reports only help if you look at them. A ten-minute weekly habit covers most stores:
- Revenue, last week vs the week before. Net sales, orders and AOV. Anything more than a normal wobble needs a reason.
- Products, last week. Which products led, and did any regular best seller drop away? Check stock first.
- Refunds. Glance at the Returns figure. A jump usually points to one product or one batch.
- Month to date vs the same dates last year. The honest view of whether you're growing.
For a fuller list, see the weekly WooCommerce reporting checklist or the questions to ask your store every Monday.
Common questions
Where are sales reports in WooCommerce?
In WordPress admin under the Analytics menu. Analytics › Revenue shows sales totals by day, week or month, and Analytics › Orders, Products, Variations and Categories break those sales down further. Older stores may remember WooCommerce › Reports, which has been replaced by Analytics.
Can I email myself a WooCommerce sales report?
Core WooCommerce doesn't send scheduled sales report emails. You can download any Analytics report as a CSV, and large exports are emailed to you as a link, but a regular weekly summary needs an extension or a tool that reads your data.
Does WooCommerce include tax and shipping in sales?
It depends on the figure. Gross sales and net sales exclude tax and shipping. Total sales adds tax and shipping back on top of net sales, so it's the closest number to what customers actually paid.
Why are my WooCommerce sales reports empty?
Usually because Analytics hasn't imported your orders yet, or because your orders have statuses that Analytics excludes. Run Import historical data under Analytics › Settings, and check the Excluded statuses list on the same screen.
See how Askshelf handles this: AI sales reports for WooCommerce