Sales reporting

How to see WooCommerce sales by category

To see sales by category in WooCommerce, go to Analytics › Categories in WordPress admin and pick a date range. The table lists each product category with Items sold, Net sales, Products and Orders. Use Show › Comparison to chart two or more categories against each other, or Compare to to see the change against an earlier period.

Below: step by step, how to read the numbers without double counting, a SQL query, and what to do with the results.

The free way: Analytics › Categories

  1. In WordPress admin, go to Analytics › Categories.
  2. Click the date range at the top and choose a period. Optionally set Compare to › Previous period or Previous year, then click Update.
  3. The figures at the top show Items sold, Net sales and Orders across the selection. Click one to chart it.
  4. The table lists each category with sales in the period. It's sorted by items sold; click Net sales to rank by revenue.
  5. Click Download to export the table as a CSV.

The Analytics › Overview page also has a Top categories leaderboard, ranked by items sold, for a quick look.

What each column means

Column What it counts
Category The product category
Items sold Units sold from products in that category
Net sales Revenue from those products after refunds and coupon discounts, excluding tax and shipping
Products How many products in the category sold in the period
Orders Orders that contained at least one product from the category

Comparing categories side by side

The Show menu above the chart has three options:

  • All categories: every category with sales in the period.
  • Single category: type a category name and select it to chart just that one and list its products in the table.
  • Comparison: type two or more category names to chart them on the same graph. You can also tick rows in the table and click Compare.

Comparison is useful for questions like "is our new range catching up with the old one?" Combine it with a long date range and a weekly or monthly interval to see the trend.

Why category totals don't add up

This is the main catch with the Categories report. According to WooCommerce's documentation:

  • A product in more than one category counts in each. A "Linen apron" in both Kitchen and Gifts adds its sales to both rows.
  • Child categories roll up into their parents. Sales in Kitchen › Aprons also count in Kitchen.

So the category rows usually add up to more than your store's net sales. That's by design: each row answers "how much did this category sell?" But don't add rows together, and don't calculate "share of sales" by dividing a category by the sum of all categories.

If you want clean, non-overlapping totals, give each product one main category, and compare categories at the same level (all top-level, or all children of one parent).

Other limits to know

  • Categories, not tags or brands. There's no Tags report in Analytics. If you group products with tags or attributes, you'll need an export or SQL.
  • Current categories, not historical ones. The report uses each product's categories as they are now. If you moved a product into a new category last month, its older sales show under the new category too.
  • Same rules as other reports. Excluded statuses, refund dates and the date type apply here as everywhere else in Analytics. See why WooCommerce Analytics numbers don't match your orders.

Best sellers inside one category

To see which products drive a category, stay in Analytics › Categories, choose Show › Single category and pick the category. The table switches to the products in that category, which you can sort by Items sold or Net sales. Clicking the number in a category's Products column does the same. The best-selling products guide covers reading that list.

For clothing and other variable products, a category's numbers hide which sizes and colors sold. Sales by variation shows how to split them out, and Analytics › Variations can also filter by category.

For developers: sales by category in SQL

The Analytics table wp_wc_order_product_lookup has one row per order line (and negative rows for refunded items). Joining it to the category taxonomy gives net sales by category for October 2026. Variations are stored with their parent product in product_id, so they pick up the parent's categories:

SELECT t.name AS category,
       SUM(l.product_qty) AS items_sold,
       ROUND(SUM(l.product_net_revenue), 2) AS net_sales,
       COUNT(DISTINCT l.order_id) AS orders
FROM wp_wc_order_product_lookup l
JOIN wp_term_relationships tr ON tr.object_id = l.product_id
JOIN wp_term_taxonomy tt ON tt.term_taxonomy_id = tr.term_taxonomy_id AND tt.taxonomy = 'product_cat'
JOIN wp_terms t ON t.term_id = tt.term_id
WHERE l.date_created >= '2026-10-01' AND l.date_created < '2026-11-01'
  AND l.product_qty > 0
GROUP BY t.term_id, t.name
ORDER BY net_sales DESC;

This counts only each product's directly assigned categories (no roll-up into parents), and leaves out refund rows. Like the report, a product in two categories appears in both. It doesn't apply your excluded statuses, so totals can differ slightly from Analytics. Change wp_ if your table prefix differs.

What Askshelf can and can't tell you

Askshelf can break orders and net sales down by product category for any date range, and compare with the previous period or the same period last year. Like the Categories report, a product that sits in several categories counts in each of them, so category totals can add up to more than your store total. It can't split by tag, and the Analytics › Categories report is still the place for a full table or a CSV.

Askshelfexample answer

Which categories brought in the most net sales last month, compared with the month before?

Kitchen led with $3,920 net from 71 orders, up 18% on September. Textiles came second with $2,640 (down 6%), and Serveware third with $1,980.Sales breakdown by category, 1–31 October, compared with the previous period
An example on a demo store. In your store, the numbers come from your own orders.

If you want to see which individual products are behind a category's movement, ask for the top products by revenue for the same dates.

Askshelf adds Analytics › Askshelf to WordPress admin and reads the same Analytics data. See the AI sales reports page for what it covers, and the WooCommerce sales reports guide for every built-in report.

Common questions

Why do my WooCommerce category sales add up to more than my total sales?

Because a product in two categories counts its sales in both, and a child category's sales also count toward its parent. The Categories report shows each category's full sales, so the rows overlap.

Can I see sales by product tag in WooCommerce?

Not in core Analytics. There's a Categories report but no Tags report. You can filter the Products report export by tag in a spreadsheet, or query the database.

Can I see which products sold best within one category?

Yes. In Analytics › Categories, choose Show › Single category and pick the category. The table then lists the products in it, which you can sort by Items sold or Net sales. Clicking a category's Products count does the same.

See how Askshelf handles this: AI sales reports for WooCommerce