WooCommerce analytics and reports: what each number counts
WooCommerce shows sales in several places and they do not count the same orders. The Dashboard widget and Analytics follow the date an order was paid and leave out pending, cancelled and failed orders, the old Reports screen follows the date it was created, and Analytics is refreshed only every 12 hours. Decide which statuses and which date mean a sale before you trust any of them.
Same shop, different numbers
- 4places WooCommerce keeps statistics, counting different ordersWidget, Stats overview, Analytics, old Reports
- 12 hhow far behind your orders Analytics can beScheduled import, or press Update now
- 56on-hold orders, €944,566, missing from Analytics until paidTest shop (sample data)
Where to find statistics in WooCommerce
WooCommerce keeps its numbers in four places: a widget on the WordPress Dashboard, the Stats overview on WooCommerce › Home, the Analytics menu, and an older Reports screen that is still there. They are not four views of one report, so they can disagree.
Where each WooCommerce statistics screen lives, from the source of WooCommerce 11.1.2.
Overview
- Where
- Dashboard › WooCommerce Status
- Where
- WooCommerce › Home
Reports
- Where
- Analytics
- Where
- WooCommerce › Customers
- Where
- WooCommerce › Reports
- Where
- WooCommerce › Status › Tools
What each WooCommerce number counts
Each screen picks its own statuses and its own date. Analytics, and the widget's Net sales that is built on it, count every order except the excluded statuses, and place it on the day it was paid.
Which orders each WooCommerce number counts and which date it uses, from the source of WooCommerce 11.1.2.
Dashboard widget
- Counts
- Analytics net sales for the month so far, with the excluded statuses left outThe widget asks Analytics, so it also waits for the import
- Counts
- Every order now in that status, with no date limit
- Counts
- Completed, processing and on-hold ordersNot the Analytics settings
Analytics and old reports
- Counts
- Every status except Pending payment, Cancelled and FailedA custom status counts unless you exclude it
- Counts
- Completed, processing, on-hold and refunded orders
The money columns in Analytics follow one set of definitions, and they add up: Net sales is Gross sales minus Returns minus Coupons, and Total sales is Net sales plus Taxes and Shipping.
What each Analytics Revenue figure means.
Revenue report
Tap a bar to see its total
Show as a table
| Definition | Total |
|---|---|
| Every order, any status | €19.3m |
| Analytics by created date | €16.6m |
| Analytics by paid date | €15.6m |
| Completed orders only | €13.5m |
A test shop with 1,280 orders and 40 refunds over twelve months: 1,280, 1,121, 1,065 and 904 orders. Analytics figures are net sales after refunds, with pending, cancelled and failed orders left out.
The three Analytics settings that change your numbers
Open Analytics › Settings and check three things: the excluded statuses, the actionable statuses and the date type. The defaults are a good start for a shop that takes card payments, and a poor fit for one that waits for bank transfers.
- Excluded statuses are a blacklist. Pending payment, Cancelled and Failed start ticked, and Refunded cannot be excluded. A custom status that a plugin adds is counted until you tick it.
- Actionable statuses, Processing and On hold by default, only decide which orders appear in the Orders task on WooCommerce › Home. They do not change any total.
- Date type decides which date puts an order in a day or a month: the date it was created, paid or completed. The default is Date paid.
WooCommerce says the same on the Revenue page: "Revenue is now reported from paid orders. We now collect orders in this table based on when the payment went through, rather than when they were placed. You can change this in settings."
If you take bank transfers or cash on delivery, switch Date type to Date created, so an order counts when it is placed and not when the money arrives.
Why Analytics is up to 12 hours behind your orders
Analytics does not read your order list. It reads its own copy, which a scheduled import refreshes every 12 hours, and the Revenue page says when that last happened and when the next update is due.
The settings page describes the two options itself. Scheduled "updates automatically every 12 hours. Lowest impact on your site", and Immediately "updates as soon as new data is available. May slow busy stores." With Immediately, Analytics is updated each time an order is created, changed or refunded. Update now is only offered in Scheduled mode, and it only starts the import: WordPress's background runner still has to pick it up, so the figures can take a few minutes to move. Whichever mode you use, the reports are cached and the cache is cleared after each import. Orders from before Analytics was switched on are only picked up by Import historical data on the settings page.
WooCommerce numbers not matching: causes and fixes
Common causes of wrong, late or missing WooCommerce statistics, from the source.
Behind or missing
- Cause
- Updates is on Scheduled, which refreshes every 12 hours
- Cause
- Orders from before Analytics was on were never imported
- Cause
- The imports run through Action Scheduler, and a stuck queue imports nothing
- Cause
- Reports are cached until the next import
Counted differently
- Cause
- The default Date type is Date paid, and an order with no paid date has no day
- Cause
- Excluded statuses are a blacklist, so a new status counts until you tick it
- Cause
- Analytics leaves out pending, cancelled and failed orders and subtracts refunds, and Net sales also leaves out tax and shipping
- Cause
- A refund is its own entry, dated the day it was made
- Cause
- Net sales uses the paid date, while Top seller uses the created date and its own statuses
Other
- Cause
- Analytics adds the order totals as stored, with no conversion
- Cause
- Analytics is switched off, so the widget falls back to the old report: completed, processing, on-hold and refunded orders by created date
What WooCommerce's reports cannot show
WooCommerce's reports read your own order tables, so they stop at the order. Apart from visitor counts that come from Jetpack, they have no traffic sources, no ad spend, no search data and no automatic comparison with last week or last year. Those questions belong to GA4, Google Ads and Search Console, and the answer to "why did sales change" needs all of them next to the orders.
ManteIQ reads your WooCommerce orders with a read-only REST API key and puts them next to GA4, Google Ads and Search Console in one morning briefing.
See the WooCommerce integration- Pick your own list of statuses once, so every figure counts the same orders.
- Read a count that excludes cancelled, failed and refunded orders, and show refunds on their own.
- Compare each week with the week before and with last year automatically.
Questions about WooCommerce statistics
- Where are the statistics in WooCommerce?
- The Dashboard has a WooCommerce Status widget, WooCommerce › Home has a Stats overview, and the Analytics menu has the full reports: Overview, Products, Revenue, Orders, Variations, Categories, Coupons, Taxes, Downloads, Stock and Settings. An older Reports screen is still under WooCommerce › Reports.
- Why are my WooCommerce Analytics numbers behind?
- Analytics reads its own copy of your orders, and the recommended Scheduled setting refreshes that copy every 12 hours. Press Update now on any Analytics report, or switch Updates to Immediately in Analytics › Settings.
- Which order statuses does WooCommerce Analytics count?
- All of them except the excluded statuses, which are Pending payment, Cancelled and Failed by default. The Refunded status cannot be excluded, and a custom status counts until you exclude it.
- Why are on-hold orders missing from Analytics?
- The default Date type is Date paid. An on-hold order that has not been paid has no paid date, so Analytics has no day to put it on. Change Date type to Date created in Analytics › Settings to count it when it is placed.
- What does Net sales mean in WooCommerce?
- Gross sales minus Returns minus Coupons. Total sales is Net sales plus Taxes and Shipping. In the Dashboard widget, Net sales this month is the Analytics figure for the month so far.
- How do I update WooCommerce Analytics for old orders?
- Use Import historical data on Analytics › Settings. It reads the orders from before Analytics was switched on. If figures still look wrong afterwards, use Clear analytics cache under WooCommerce › Status › Tools.
- Does WooCommerce track where my visitors come from?
- No. Its reports cover orders, products, customers and stock, plus visitor counts if Jetpack is connected. Use GA4, Google Ads and Search Console for traffic, ads and search.
Sources
We read the source code of WooCommerce 11.1.2 and checked the behaviour on a local test shop on 1 October 2026, with the same orders counted five ways straight from its database. The figures come from that shop's generated orders and are an example, not an average. Newer releases may differ.
- GitHub: WooCommerce 11.1.2 Analytics settings and defaults
- GitHub: WooCommerce 11.1.2 Dashboard status widget
- GitHub: WooCommerce 11.1.2 Analytics order import
- GitHub: WooCommerce 11.1.2 Revenue and Orders data store
- GitHub: WooCommerce 11.1.2 legacy Sales by date report
- WooCommerce documentation: Analytics
- WooCommerce documentation: legacy reports
About the author: Mantas Lukošius
Mantas has worked in ecommerce for more than 15 years, almost all of it on PrestaShop: from his own first shop to business stores and large clients. He builds ManteIQ and its PrestaShop module.
How we write and check these guides