WooCommerce Analytics Showing Zero Revenue? Causes & Fix
Orders are arriving, the money's in your gateway, and Analytics → Revenue insists on zero. Analytics doesn't read your orders directly — it reads a set of lookup tables that something has to fill in. Here's how to find out why they're empty.
Last updated: 16 Jul 2026 · ~6 min read
The most common cause is that the analytics lookup tables were never populated because the import jobs are stuck — sitting Pending or Failed in Action Scheduler. Go to WooCommerce → Status → Scheduled Actions and filter to Pending and Failed. If there's a past-due pile there, fix the queue first, then re-run the historical import from Analytics → Settings.
Why Analytics can read zero while orders exist
WooCommerce Analytics doesn't query your orders. For speed, it reads pre-computed lookup tables — wc_order_stats and friends — that get written as orders come in, and backfilled in batches by scheduled import jobs. Your orders can be perfectly healthy while those tables sit empty.
That's why this looks so alarming and usually isn't. Nothing has been lost: the orders are all in WooCommerce → Orders, the money is in your gateway, and the reports can be rebuilt from them. What's broken is the pipeline between the two — almost always the queue that runs it.
The most common causes (most likely first)
- The analytics import jobs are stuck Pending or FailedOpen
WooCommerce → Status → Scheduled Actionsand search forwc-admin. Past-due Pending actions, or a row of Failed ones, means the backfill never ran andwc_order_statswas never filled. This is the usual answer. - Action Scheduler isn't running at all, so nothing can processThe whole Scheduled Actions list is backlogged — not just the analytics jobs. Usually WP-Cron is disabled (
DISABLE_WP_CRONset true) with no real server cron replacing it, or the site gets too little traffic to trigger it. Fix this first, or a rebuild just queues up behind everything else. - HPOS is on with synchronisation off, or the store is mid-migrationOrders appear normally in
WooCommerce → Ordersbut never show up in Analytics, and only recent orders are affected. CheckWooCommerce → Settings → Advanced → Featuresfor the order-storage and compatibility-mode settings. - Your revenue is sitting in a status Analytics excludes
Analytics → Settingshas an excluded-statuses list — pending, cancelled and failed are excluded by default. If your paid orders live in a custom status, or you never move them past a status on that list, Analytics correctly reports nothing. Nothing is broken; the rules are. - The date range or the site timezoneWiden the range to Year to date and see if revenue appears. A store timezone that's hours out from where you are can push today's orders into a bucket you're not looking at. Check this before you rebuild anything — it costs ten seconds.
- The lookup tables don't existA failed or interrupted database update can leave the tables missing entirely.
WooCommerce → Statusflags missing database tables in its report — check there before assuming the queue is at fault.
Where to look first
- Widen the date range first. Set Analytics → Revenue to Year to date. If revenue appears, you were looking at an empty window or a timezone-shifted one (cause 5) — stop here.
- Open
WooCommerce → Status → Scheduled Actionsand filter to Pending and Failed. Search forwc-admin. A past-due pile is cause 1. - Is the whole list backlogged, or only the analytics jobs? Everything past-due means the scheduler itself isn't running (cause 2) — sort WP-Cron or a real server cron before anything else, or your rebuild will just sit in the same queue.
- Check
Analytics → Settingsagainst reality — are your paid orders in a status the excluded-statuses list is filtering out (cause 4)? - Queue healthy and statuses correct? Re-run the historical data import from
Analytics → Settingsand let it finish — on a large store this takes a while and needs the scheduler running throughout.
Not sure whether it's the queue or the data?
That's the awkward bit: an empty report and a stalled Action Scheduler look identical from the Analytics screen, and you can spend an afternoon rebuilding data that was never the problem. DiagnosticIQ's free dashboard reads the Action Scheduler queue and the HPOS storage state directly and tells you which one is broken — a scheduler that isn't running, or orders stranded between storage tables. It keeps watching too, so a queue that silently stalls again shows up before month-end does.
Get the free plugin →Made by Prima Digital — the team behind this guide. Free forever; no card to install.
How to know you fixed it
WooCommerce → Status → Scheduled Actions shows no past-due Pending or Failed wc-admin actions, and Analytics → Revenue for a date range you know has orders now matches what you see in WooCommerce → Orders.
Frequently asked
Have I lost my sales data?
No. Analytics reads a rebuildable cache of your orders. The orders themselves are intact in WooCommerce → Orders and in your gateway — the reports can be regenerated from them.
Is rebuilding the reports safe on a live store?
It doesn't touch orders — only the lookup tables Analytics reads. But it's database-heavy on large stores, so run it outside peak hours and expect it to take time.
Why does Analytics disagree with my gateway's totals?
Partly the excluded-statuses rules, partly refunds and taxes being counted differently. Some gap is normal. A gap of everything-to-zero is this bug.
Will new orders start counting once I fix the queue?
Yes — new orders are written to the lookup tables as they come in once the scheduler is running. The historical import is only needed to backfill the ones you missed.