Skip to main content
Card class: HeroCategory: Ecommerce Platform
Sum of order.total where status in [completed, processing]. The morning question every WP merchant opens with.

At a glance

Headline gross revenue across every WooCommerce order placed in the period. The arithmetic sum of order.total for orders whose status is completed or processing, fetched from GET /wp-json/wc/v3/orders and indexed nightly.
What it countsSUM(order.total) WHERE status IN ('completed', 'processing'). Each order contributes its post-tax, post-shipping, post-discount customer-billed total.
REST API endpointGET /wp-json/wc/v3/orders (or wc/v3/reports/sales for the merchant-side dashboard view). Field used: total (string-typed decimal, currency in currency field).
VAT / tax treatmentAlways tax-inclusive on the wire. WooCommerce stores total as the post-tax customer-billed figure regardless of how the WC tax setting (woocommerce_prices_include_tax) is configured. The separate total_tax field gives the breakdown. The card sums total blindly.
Status filterIncludes completed and processing. EXCLUDES pending, on-hold, failed, cancelled, refunded, trash. This matches the standard WC reports definition. on-hold (payment-pending) is the most common exclusion that surprises merchants, see On-Hold Orders for that view.
ShippingIncluded. order.total already contains total_shipping.
DiscountsAlready deducted. order.total is the post-discount, customer-billed figure. discount_total and discount_tax are stored separately.
RefundsNOT deducted. WC stores refunds as separate refund objects under /wp-json/wc/v3/orders/{id}/refunds; order.total does NOT change after a refund is processed. A fully refunded 100orderstillcontributes100 order still contributes 100 here. For the post-refund view watch Refund Value Trend.
Cancelled / failed ordersExcluded (see status filter). cancelled and failed are not summed.
CurrencyMulti-currency depends on the WC plugin configuration. Out-of-the-box WC is single-currency. Plugins like WooCommerce Multi-Currency, CURCY, or Aelia Currency Switcher store an alternate currency on each order; this card sums total arithmetically without FX, so a multi-currency store will get a mixed-units number. Filter by currency for accurate per-currency totals.
Self-hosted vs managed-WooThis card works the same whether the store runs on a self-hosted LAMP stack, WordPress.com Business plan, or a managed-Woo host (Woo.com Cloud, WP Engine, Pressable, Kinsta). Self-hosted servers introduce a sync-lag risk if the host falls over (see Reconcile section); managed hosts have stable uptime.
Time windowT/7D/30D vsP (default 30D vs the prior 30D)
Alert triggerdrop >15% vsP, driven by sentiment_key: revenue_trend
Rolesowner, marketing, finance

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 UK fashion brand running on self-hosted WooCommerce 8.6 with the Stripe Gateway plugin and a small marketplace integration via WooCommerce Amazon Connector. The 30-day window covers 14 Mar 26 to 12 Apr 26.
StatusOrder countSum of order.totalCounts in this card?
completed1,840£172,420Yes
processing (paid, awaiting fulfilment)312£29,760Yes
on-hold (payment pending, BACS / cheque)88£8,140No
pending (cart abandonment skeleton)240£21,800No
failed (gateway declined)71£6,720No
cancelled (merchant or customer cancelled)34£3,160No
refunded (status flipped post-refund)19£1,810No
Total Revenue (this card)2,152£202,180
Five things to notice:
  1. The order.total column for refunded is non-zero. WC does not zero out the order total when a refund is processed. The original total stays in place; refund objects are stored separately under /orders/{id}/refunds. This card excludes refunded orders from the sum (because of the status filter), but if the merchant changes the status filter to “all paid” they will inadvertently include refunded order totals at their original gross value. This is the most common Woo accounting confusion.
  2. on-hold is £8,140 of revenue limbo. On-hold typically means BACS / direct-bank-transfer or a manual gateway awaiting confirmation. It is the Woo equivalent of BigCommerce’s Incomplete status. If the merchant ships before the bank transfer clears, that £8,140 is risk. The card does not include it; track it via On-Hold Orders.
  3. Self-hosted server uptime matters. This brand’s host had a 4-hour outage on 2 Apr 26 between 03:00 and 07:00 UTC. The Vortex IQ indexer could not reach the WC REST API during that window, so 14 orders worth £1,820 only appeared in the index 6 hours late. For a 30-day window this is noise, but for a daily figure the gap is visible. Managed-Woo hosts (Woo.com Cloud, WP Engine) rarely show this pattern.
  4. The Amazon Connector adds 92 orders worth £6,440. These orders enter WC with created_via = "amazon" (custom plugin meta). They are summed here without distinction. To slice marketplace from web revenue, use Marketplace Drift, which compares Woo-stored marketplace revenue against the marketplace’s own dashboard.
  5. The 30-day prior window was £208,540. Total Revenue is down 3.05% vsP, well below the drop >15% vsP alert threshold. Vortex IQ Nerve Centre stays quiet, but the card itself shows the trend and the merchant can drill into Revenue Trend for the daily curve.

Sibling cards merchants should reference together

CardWhy pair it with Total Revenue
WC Average Order ValueTotal Revenue divided by Order Count. Tells you whether revenue moved on volume or basket size.
WC Total OrdersThe other half of the equation. Flat orders with rising revenue means basket size grew.
WC On-Hold OrdersThe biggest hidden gap on Woo. On-hold revenue is excluded here but represents real customer intent (BACS, bank transfer). Persistent on-hold piles signal payment-method friction.
WC Refund Value TrendThis card is gross of refunds (refunds are stored as separate objects). Pair to see post-refund leakage.
WC Failed Order RateOrders that hit failed status are excluded here but indicate gateway / payment friction. A rising failed rate caps growth even if Total Revenue looks healthy.
BC Total RevenueSame tax-inclusive total_inc_tax semantics as Woo’s total. Useful for agencies running multi-platform book.
Shopify Total RevenueSaaS-platform peer for cross-platform agencies.
Stripe Total RevenueWhen the WooCommerce Stripe Gateway plugin is connected, Stripe should match Woo Total Revenue minus PayPal minus manual payments. Cross-check for processor reconciliation.

Reconciling against the vendor’s own dashboard

Where to look in WooCommerce Admin: WP Admin → WooCommerce → Reports → Orders → Sales by date. Set the same window (default 30D), and look at Gross sales for the closest match to this card. WC’s “Net sales” column subtracts refunds so it reads lower. Other WP Admin views that look like the same number but are not:
  • WP Admin → WooCommerce → Home → Stats overview: shows a 7D / 30D figure but uses the WC Analytics module (a separate engine introduced in WC 4.0 with different status filtering). It typically matches this card on stores running WC 4.0+ but can diverge on legacy reports.
  • WP Admin → Analytics → Revenue (WC 4.0+): this matches Net revenue, post-refund. Lower than this card.
  • Stats widget on the WP Admin dashboard: today only, in WP site timezone (wp_timezone_string()).
  • Any WC reports plugin (WPDataTables, Metorik, Putler): each plugin defines status filters differently. Verify the filter set.
Why our number may legitimately differ from WooCommerce Admin:
ReasonDirection of divergence
Time-zone. WC reports run on WordPress site timezone (set in Settings → General → Timezone); Vortex IQ runs on UTC by default. Orders near midnight on the boundary days fall on different sides.+/- 1 day’s revenue at the boundary
Self-hosted server uptime. If the WP host suffered an outage during the indexer poll, the most recent orders may be missing for up to 24 hours. Self-hosted Woo on shared hosting (Bluehost, GoDaddy) shows this most often; managed hosts (Woo.com Cloud, WP Engine, Pressable, Kinsta) are far steadier.Ours temporarily lower; self-resolves at next sync
Plugin-version compatibility. WC core occasionally changes the meta keys for things like _order_total or discount_total. A merchant on WC 6.x with a legacy custom plugin may see odd field shapes. The Vortex IQ Woo engine targets WC REST API v3 (WC 3.5+), but custom-stored fields can drift.Either; investigate per-merchant if persistent
Refund-object aggregation. WC stores refunds as child posts under the parent order. Some third-party reports plugins net them out; this card does not.Ours higher than any “net” view
Currency plugin behaviour. CURCY / Aelia / WMC store the converted total in custom meta and the base-currency total in order.total. Vortex IQ reads order.total, the merchant’s report may show converted figures.Material for multi-currency stores
Cross-connector reconciliation (when the merchant has connected payment processors): When the WooCommerce Stripe Gateway plugin is in use, Stripe sees the same charges this card sees, minus on-hold orders (no Stripe charge) and minus any PayPal / manual / COD payments.
CardExpected relationshipWhat causes legitimate divergence
stripe.stripe_total_revenueStripe <= WC Total RevenueStripe sees only charges routed through the WC Stripe Gateway plugin. PayPal, BACS, cheque, COD, gift-card, and manual orders are invisible to Stripe. The right comparison: Stripe ~= this card minus PayPal volume minus on-hold awaiting BACS.
paypal.pp_total_volumePayPal <= WC Total RevenuePayPal sees only PayPal-checkout orders. Subset by definition.
google_analytics.ga_revenue_trendGA4 ~= WC Total Revenue x (1 minus tracking gap)GA4 typically misses 10 to 25% of orders due to ad-blockers, cookie rejection, and tag-fire failures. Treat WooCommerce as the source of truth for revenue.
Net of all processors: Stripe + PayPal + manual + COD should sit within 2% of this card. A persistent gap > 2% means a payment processor is missing from your Vortex IQ workspace, or one is double-counting refunds.

Known limitations / merchant FAQs

Does it matter whether my Woo store is self-hosted or on WordPress.com / managed Woo? For the number itself, no, the REST API is the same and this card pulls order.total regardless. For data freshness, yes. Self-hosted Woo on shared hosting can suffer 99.5% uptime (~3.6 hours of downtime a month), and during those gaps the indexer cannot reach the API. Managed Woo (Woo.com Cloud, WP Engine, Pressable, Kinsta) typically runs 99.95%+ uptime. WordPress.com Business and Commerce plans are equally steady. If you see periodic gaps in Revenue Trend, check your host status page first. Why does this card exclude on-hold? On-hold means the customer has placed the order but the payment has not been captured: BACS, direct bank transfer, cheque, or a manual gateway awaiting confirmation. Including it would inflate revenue with money that may never arrive. The Woo standard for “real” revenue is completed + processing. Track on-hold separately via On-Hold Orders, it is the Woo equivalent of BC’s Incomplete status. A persistent on-hold pile above 5% of orders signals a payment-method UX problem (BACS friction, gateway timeout). My WooCommerce refunds page shows different numbers, why? Because Woo stores refunds as separate child posts under the parent order, not as a deduction from order.total. WC’s Refunds report sums refund objects; this card sums original order totals. To get a “post-refund” view, subtract Refund Value Trend from this card. The most common merchant accounting confusion is treating order.total as net of refunds, it is not, ever, on Woo. My Woo Analytics module shows a different total, what should I trust? WC 4.0+ ships with the Analytics module which uses a separate wc_order_stats table and can apply different status filters and date logic (it can also include on-hold in some report views). For the canonical “money the customer was billed” figure, this card is the reference. For a “money realised” figure, look at WC Analytics → Revenue, which is post-refund. A plugin is changing the data shape on my orders, what do I do? Woo’s plugin ecosystem is its biggest strength and biggest weakness for analytics. Subscriptions plugins, multi-currency plugins, points-and-rewards plugins, B2B plugins, and tax plugins all add custom meta and sometimes overload order.total semantics. The Vortex IQ Woo engine reads the canonical order.total field. If your store uses a plugin that stores the “true” total in custom meta (e.g. WooCommerce Subscriptions stores recurring totals in _subscription_recurring_total), reach out to support@vortexiq.ai so the engine can be extended for your shape. Why is my Stripe number different from this card? The WooCommerce Stripe Gateway plugin sees only Stripe-routed charges, not PayPal, not BACS, not COD, not manual offline payments, not gift cards. Stripe will always be <= WC Total Revenue. Typical splits: Stripe ~70-85%, PayPal ~10-20%, BACS / manual ~5-10%. If Stripe reads ~50% of WC, you have a substantial off-Stripe payment mix and should connect PayPal too. Why does today’s number jump up and down so much? Today is incomplete data. Orders add into the bucket as the day progresses, and as midnight rolls past some orders flip date because of WP-site-timezone-vs-UTC effects. Use the rolling 7-day or 30-day view for stable numbers, that is why the alert window is 30D vsP and not 1D. If you need a daily-only view, Revenue Trend gives the daily curve. Self-hosted server slowness made yesterday’s number lower, when does it catch up? The Vortex IQ Woo indexer polls hourly by default. If the WP host was slow or unreachable, missing orders are picked up on the next successful poll, usually within 1 to 3 hours. Persistent gaps (multi-day) suggest the indexer credentials have expired (consumer key/secret rotated by the merchant) or the host has IP-blocked the indexer. Check WooCommerce → Settings → Advanced → REST API and verify the Vortex IQ key is still listed. My WP Admin shows a different number from this card, debug playbook:
  1. Confirm the same date window in both views, WC reports default to “this month” while this card defaults to rolling 30D.
  2. Confirm the status filter, change WC reports to include only completed + processing to match this card.
  3. Confirm the timezone, this card runs on UTC, WC reports run on WP-site timezone. For a 30-day window the gap should be < 1%.
  4. Confirm the refund treatment, WC’s Net sales subtracts refunds, this card does not. Use Gross sales for the apples-to-apples view.
  5. If gap > 2% after all four checks, contact support, likely a plugin overloading order.total or a sync gap.

Tracked live in Vortex IQ Nerve Centre

Total Revenue 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.