> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Total Revenue (30d), WooCommerce

> Total Revenue (30d). Sum of order.total where status in [completed, processing]. The morning question every WP merchant opens with. How to read it, why it matters, and how to act on it.

**Metrics type:** [Key Metrics](/nerve-centre/overview#metrics-types-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

> 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 counts**             | `SUM(order.total) WHERE status IN ('completed', 'processing')`. Each order contributes its post-tax, post-shipping, post-discount customer-billed total.                                                                                                                                                                                                                                 |
| **REST API endpoint**          | `GET /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 treatment**        | **Always 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 filter**              | **Includes `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](/nerve-centre/kpi-cards/woocommerce/on-hold-orders) for that view.                                        |
| **Shipping**                   | **Included.** `order.total` already contains `total_shipping`.                                                                                                                                                                                                                                                                                                                           |
| **Discounts**                  | Already deducted. `order.total` is the post-discount, customer-billed figure. `discount_total` and `discount_tax` are stored separately.                                                                                                                                                                                                                                                 |
| **Refunds**                    | **NOT 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 $100 order still contributes $100 here. For the post-refund view watch [Refund Value Trend](/nerve-centre/kpi-cards/woocommerce/refund-value-trend).                                              |
| **Cancelled / failed orders**  | Excluded (see status filter). `cancelled` and `failed` are not summed.                                                                                                                                                                                                                                                                                                                   |
| **Currency**                   | **Multi-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-Woo** | This 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 window**                | `T/7D/30D vsP` (default 30D vs the prior 30D)                                                                                                                                                                                                                                                                                                                                            |
| **Alert trigger**              | `drop >15% vsP`, driven by `sentiment_key: revenue_trend`                                                                                                                                                                                                                                                                                                                                |
| **Roles**                      | owner, 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.

| Status                                       | Order count | Sum of `order.total` | Counts in this card? |
| -------------------------------------------- | ----------- | -------------------- | -------------------- |
| `completed`                                  | 1,840       | £172,420             | Yes                  |
| `processing` (paid, awaiting fulfilment)     | 312         | £29,760              | Yes                  |
| `on-hold` (payment pending, BACS / cheque)   | 88          | £8,140               | No                   |
| `pending` (cart abandonment skeleton)        | 240         | £21,800              | No                   |
| `failed` (gateway declined)                  | 71          | £6,720               | No                   |
| `cancelled` (merchant or customer cancelled) | 34          | £3,160               | No                   |
| `refunded` (status flipped post-refund)      | 19          | £1,810               | No                   |
| **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](/nerve-centre/kpi-cards/woocommerce/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](/nerve-centre/kpi-cards/woocommerce/marketplace-listing-drift-vs-catalog), 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](/nerve-centre/kpi-cards/woocommerce/revenue-trend) for the daily curve.

## Sibling cards merchants should reference together

| Card                                                                              | Why pair it with Total Revenue                                                                                                                                                      |
| --------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [WC Average Order Value](/nerve-centre/kpi-cards/woocommerce/average-order-value) | Total Revenue divided by Order Count. Tells you whether revenue moved on volume or basket size.                                                                                     |
| [WC Total Orders](/nerve-centre/kpi-cards/woocommerce/total-orders)               | The other half of the equation. Flat orders with rising revenue means basket size grew.                                                                                             |
| [WC On-Hold Orders](/nerve-centre/kpi-cards/woocommerce/on-hold-orders)           | The 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 Trend](/nerve-centre/kpi-cards/woocommerce/refund-value-trend)   | This card is gross of refunds (refunds are stored as separate objects). Pair to see post-refund leakage.                                                                            |
| [WC Failed Order Rate](/nerve-centre/kpi-cards/woocommerce/failed-order-rate)     | Orders 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 Revenue](/nerve-centre/kpi-cards/bigcommerce/total-revenue)             | Same tax-inclusive `total_inc_tax` semantics as Woo's `total`. Useful for agencies running multi-platform book.                                                                     |
| [Shopify Total Revenue](/nerve-centre/kpi-cards/shopify/total-revenue)            | SaaS-platform peer for cross-platform agencies.                                                                                                                                     |
| [Stripe Total Revenue](/nerve-centre/kpi-cards/stripe/total-charge-volume)        | When 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](/wp-admin/admin.php?page=wc-reports\&tab=orders\&report=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:**

| Reason                                                                                                                                                                                                                                                                                                         | Direction 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.

| Card                                                                                          | Expected relationship                             | What causes legitimate divergence                                                                                                                                                                                                                    |
| --------------------------------------------------------------------------------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`stripe.stripe_total_revenue`](/nerve-centre/kpi-cards/stripe/total-charge-volume)           | Stripe \<= WC Total Revenue                       | Stripe 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_volume`](/nerve-centre/paypal/pp_total_volume)                              | PayPal \<= WC Total Revenue                       | PayPal sees only PayPal-checkout orders. Subset by definition.                                                                                                                                                                                       |
| [`google_analytics.ga_revenue_trend`](/nerve-centre/kpi-cards/google-analytics/revenue-trend) | GA4 \~= 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.

***

<details>
  <summary><em>Same-metric documentation cross-reference (for agencies running multiple platforms)</em></summary>

  The same definition of Total Revenue lives on other commerce platforms. This is **not a reconciliation**, your WooCommerce store does not have a parallel store on Shopify or BigCommerce to compare numbers against. These cross-links exist so agencies running multi-platform client books can navigate between identical metrics across the docs.

  * [`shopify.total_revenue`](/nerve-centre/kpi-cards/shopify/total-revenue)
  * [`bigcommerce.total_revenue`](/nerve-centre/kpi-cards/bigcommerce/total-revenue)
  * [`adobe_commerce.total_revenue`](/nerve-centre/kpi-cards/adobe-commerce/total-revenue)
</details>

## 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](/nerve-centre/kpi-cards/woocommerce/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](/nerve-centre/kpi-cards/woocommerce/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](/nerve-centre/kpi-cards/woocommerce/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](mailto: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](/nerve-centre/kpi-cards/woocommerce/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](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
