Skip to main content
Card class: HeroCategory: Ecommerce Platform
Excludes failed/cancelled. Pairs with revenue to spot AOV-vs-volume issues at a glance.

At a glance

The count of WooCommerce orders placed in the period whose status is completed or processing. The denominator behind AOV, refund rate, and most other ratio cards.
What it countsCOUNT(orders) WHERE status IN ('completed', 'processing'). Each order counts once regardless of its value.
REST API endpointGET /wp-json/wc/v3/orders?per_page=100&status=completed,processing&after=...&before=.... The total comes from the X-WP-Total response header (or pagination through the result set).
Status filterIncludes completed and processing. EXCLUDES pending, on-hold, failed, cancelled, refunded, trash. Mirrors the WC Admin “Sales by date” report definition.
Tax / shipping / discountsNot applicable, this is a count metric.
RefundsA fully refunded order has its status flipped to refunded and is therefore excluded from this count. Partial refunds leave the order in completed and are still counted.
Cancelled / failed ordersExcluded. cancelled (merchant or customer cancelled) and failed (gateway declined) drop out.
On-hold ordersExcluded. Track separately via On-Hold Orders. On Woo, on-hold is the BACS / bank-transfer / manual-payment-pending state, not zero-revenue customer intent.
CurrencyCurrency-agnostic, this is a count. Multi-currency stores get one valid number.
Channels / sourcesNot filtered. Web checkout, REST API created orders, marketplace plugin orders (Amazon Connector, eBay Connector), and POS plugins (WooCommerce Point of Sale, Hike) all contribute. Slice via created_via or marketplace plugin meta if needed.
Self-hosted vs managed-WooSame definition either way. Managed-Woo hosts have steadier sync; self-hosted on shared hosting can show periodic gaps.
Time windowT/7D/30D vsP
Alert triggerdrop >20% vsP, driven by sentiment_key: order_count_trend
Rolesowner, marketing, operations

Calculation

Calculated automatically from your WooCommerce data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A US homewares brand on managed-Woo (Pressable). Two warehouses, multi-DC fulfilment. The 30-day window covers 14 Mar 26 to 12 Apr 26.
StatusCountCounts here?Note
completed2,140YesFulfilled, paid
processing384YesPaid, awaiting fulfilment in DC
on-hold142NoBACS / bank transfer pending
pending421NoCart-skeleton, never paid
failed88NoGateway declined
cancelled42NoCustomer or merchant cancelled
refunded31NoFull refunds, status flipped
Total Orders (this card)2,524
Four things to notice:
  1. The “phantom orders” are large on Woo. pending (421), failed (88), and cancelled (42) together represent 551 customer attempts that did not produce revenue. WC indexes them all (they are real wp_posts rows), but this card excludes them. To see the conversion-failure picture watch Failed Order Rate.
  2. on-hold is 5.6% of attempts. That is high. On managed-Woo the BACS workflow tends to leak: customers pick BACS at checkout, never actually transfer the funds, and the order sits in on-hold forever. Healthy stores run < 2% on-hold. The merchant should consider hiding BACS from the checkout in [WooCommerce → Settings → Payments].
  3. Multi-DC routing does not affect count. The brand uses a fulfilment-routing plugin to split orders between East and West coast DCs. Each customer order is still one order; the routing happens after status reaches processing. This card is unaffected by fulfilment topology.
  4. 30-day prior was 2,610 orders. Down 3.3% vsP, well within normal weekly noise, no alert. The merchant should check Revenue Trend and AOV together to see whether the small dip is a basket-size shift or a true volume softness.

Sibling cards merchants should reference together

CardWhy pair it with Total Orders
WC Total RevenueRevenue divided by Orders is AOV. Read together to know whether revenue moved on volume or basket size.
WC Average Order ValueSame equation, the inverse perspective. Rising orders + flat AOV = volume win.
WC On-Hold OrdersOrders excluded from this card. A persistent on-hold pile means BACS / payment friction is hiding intent.
WC Failed Order RateThe denominator-friendly view of conversion failure. Pair with Total Orders to size the leak in absolute terms.
WC Conversion RateOrders per session. If orders fall but sessions are flat, the funnel broke.
BC Order CountCross-platform peer for agencies running multi-platform book.
Shopify Order CountSaaS-platform peer; same status-filter discipline.

Reconciling against the vendor’s own dashboard

Where to look in WooCommerce Admin: WP Admin → WooCommerce → Reports → Orders → Sales by date shows the Number of orders column for the same period. That should match this card to within 1 to 2 orders (timezone boundary). Other WP Admin views that look like the same number but are not:
  • WP Admin → WooCommerce → Orders (list view): defaults to “all statuses”. Use the status filter dropdown to restrict to completed + processing for an apples-to-apples comparison.
  • WP Admin → Analytics → Orders (WC 4.0+): a separate engine. Usually matches this card but its default filter set differs by WC version.
  • Stats overview widget: today only, in WP-site timezone.
Why our number may legitimately differ from WooCommerce Admin:
ReasonDirection of divergence
Time-zone. WC reports run on WP-site timezone; Vortex IQ runs on UTC.+/- 1 day’s orders at the boundary
Self-hosted server uptime. Indexer cannot poll during host outage.Ours temporarily lower; self-resolves
Plugin-version compatibility. Custom WC builds (B2B plugins, subscription plugins) sometimes create order rows that the standard wc/v3 endpoint hides.Either; investigate per-merchant
Refund-object aggregation. WC creates a child refund post per refund. Some plugins miscount these as separate “orders”. This card uses parent posts only.Some plugins higher than this card
Currency plugin behaviour. Multi-currency plugins do not affect order count, but mis-configured ones can produce duplicate test orders during currency switches.Rare; investigate if persistent
Cross-connector reconciliation:
CardExpected relationshipWhat causes legitimate divergence
stripe.stripe_charge_countStripe <= WC Total OrdersStripe sees only WC Stripe Gateway charges. PayPal, BACS, manual, COD orders are invisible to Stripe. A typical Woo store sees Stripe at ~70 to 85% of order count.
paypal.pp_transaction_countPayPal <= WC Total OrdersSubset by definition.
google_analytics.ga_transactionsGA4 ~= WC Total Orders x (1 minus tracking gap)GA4 misses 10 to 25% of purchase events. Treat WC as truth.

Known limitations / merchant FAQs

Self-hosted vs managed-Woo, does it change this number? The definition is identical, but data freshness varies. Self-hosted Woo on shared hosting (Bluehost, GoDaddy) can drop offline for minutes to hours during traffic spikes, the indexer misses orders during the outage. Managed Woo (Woo.com Cloud, WP Engine, Pressable, Kinsta) typically runs steady. WordPress.com Business / Commerce is similarly steady. Why does this card exclude on-hold? On Woo, on-hold is BACS / direct-bank-transfer / cheque / manual gateway pending. The customer placed the order but no payment is captured yet. Including it would inflate volume. The standard Woo “real orders” definition (and what WC Admin reports show) is completed + processing. Track on-hold separately via On-Hold Orders. Why does this card exclude pending? pending is the cart-skeleton WC creates when a customer hits the checkout page but has not completed payment. It is essentially abandoned cart data. Including it as orders would massively overstate volume. Refund-object accounting, what does it mean for the count? A WC refund creates a child post (post_type = shop_order_refund) under the parent order. The parent order’s status flips to refunded if it was a full refund, or stays completed if partial. This card excludes refunded parents. So a fully refunded order drops out of the count; a partially refunded one stays in. This is the merchant-friendly definition (refunded means “did not happen”). Plugin-induced data shape variance, how does Vortex IQ handle it? The Woo engine targets WC REST API v3 fields (status, total, date_created, currency). Plugins that overload these fields (e.g. WooCommerce Subscriptions creates renewal orders that look like normal orders), are counted normally, each renewal is a separate order. If your store uses a plugin that creates orders outside the standard shop_order post type, contact support@vortexiq.ai. Multi-currency, does it change the count? No. Currency does not affect order count. CURCY / Aelia / WMC will not change this number. Only the per-currency Total Revenue is affected. Why does Stripe show fewer transactions than this card? The WC Stripe Gateway only sees Stripe-routed payments. PayPal, BACS, COD, gift-card, and manual orders are invisible to Stripe. Typical split: Stripe ~70 to 85% of WC order count. Today is jumpy, why? Today is incomplete data. Use rolling 7D or 30D for stable comparisons. The alert window is 30D vsP for that reason. Self-hosted server slowness, how do I tell if I am missing orders? Compare this card to WC Admin → Reports → Orders for the same window. If the gap is > 2% and your host had a known outage, the indexer caught up at the next poll. If the gap persists for > 24 hours, contact support, the REST API key may have been rotated or IP-blocked. My WP Admin shows a different count, debug playbook:
  1. Match the date range exactly.
  2. Match the status filter to completed + processing.
  3. Account for timezone (WP-site vs UTC).
  4. Confirm no plugin is filtering the order list (B2B plugins sometimes hide wholesale orders from the default view).
  5. If gap remains > 2%, contact support.

Tracked live in Vortex IQ Nerve Centre

Total Orders is one of hundreds of KPI pulses Vortex IQ tracks across WooCommerce and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.