Sum of failed orders + suspended-listing potential + abandoned-checkout estimated value.
At a glance
A single live number that rolls up the money your store is currently at risk of losing. WooCommerce revenue leaks in three places at once: orders that hit failed at the gateway, products whose listings are suspended or at risk (out-of-stock with ad spend behind them, marketplace drift), and the estimated value of carts abandoned at checkout. This card sums those three components into one figure so the merchant has a single “how much is bleeding right now” pulse instead of three separate reads.
| What it counts | The live sum of three components: (1) the value of orders currently in failed status, (2) the potential revenue tied to at-risk or suspended listings, and (3) the estimated value of abandoned checkouts. Components are added arithmetically into one currency figure. |
| REST API endpoint | Composite. Failed-order value is read from GET /wp-json/wc/v3/orders filtered to status=failed. At-risk listing value is derived from product and stock data (wc/v3/products) combined with any connected ad-spend or marketplace signals. Abandoned-checkout value is estimated from checkout / session data; WooCommerce does not store a first-party “abandoned cart” object out of the box, so this component depends on a cart-recovery plugin or estimation, described generally. |
| How the value is computed | The three component values are summed. Failed-order value uses each failed order’s order.total. At-risk listing value estimates lost sales from products that cannot sell. Abandoned-checkout value is an estimate, not a booked figure, and is the softest of the three. The card is a directional risk signal, not an accounting total. |
| Status / scope treatment | Failed-order component counts failed only, not pending, on-hold, cancelled, or refunded. The card is live (real-time), so it reflects the current at-risk position, not a windowed historical total. |
| Self-hosted vs managed-Woo | The composite works on self-hosted, WordPress.com, and managed-Woo (Woo.com Cloud, WP Engine, Pressable, Kinsta). The abandoned-checkout component is the most environment-sensitive: its quality depends on which cart-recovery or analytics plugin the store runs, since WC has no native abandoned-cart store. |
| Time window | RT (real-time, reflects the current at-risk position) |
| Alert trigger | >$0, driven by sentiment_key: wc_revenue_at_risk |
| Roles | owner, 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 self-hosted WooCommerce store on WC 9.0 running the Stripe Gateway, a Google Ads integration, and a cart-recovery plugin. Snapshot taken live at 11:00 on 14 Jun 26.| Component | Source | Value at risk |
|---|---|---|
Failed orders (current failed status) | 38 orders x avg £74 | £2,812 |
| At-risk / suspended listings | 12 out-of-stock SKUs with live ad spend behind them | £4,300 |
| Abandoned-checkout estimate | 210 abandoned carts x est. £19 recoverable | £3,990 |
| Revenue at Risk (this card) | £11,102 |
- The three components sum to £11,102. No single card tells this story: £2,812 from gateway failures, £4,300 from products that cannot sell while ads still spend on them, and £3,990 of estimated cart recovery. The card’s job is to put one number on the merchant’s combined exposure right now.
- The failed-order slice is the most actionable. £2,812 across 38
failedorders points at a gateway or payment-friction problem. Drill into Failed Orders (Last 24h) and Checkout Error Rate (24h) to see whether a recent change caused it, and check Plugin Updates (Last 24h) for a culprit. - The at-risk listing slice is real lost margin plus wasted ad spend. £4,300 of out-of-stock SKUs with live ads is a double loss: the sale you cannot make and the ad budget you are still spending. See Ad Spend on OOS Products to stop the bleed at source.
- The abandoned-checkout component is an estimate, not a booked number. £3,990 is “recoverable if recovery emails convert”, not money you have lost for certain. It is the softest of the three and depends on your cart-recovery plugin’s data. Read the total as a directional risk signal, not an accounting figure, the alert fires at
>$0precisely because any non-zero exposure is worth a look.
Sibling cards merchants should reference together
| Card | Why pair it with Revenue at Risk (live) |
|---|---|
| WC Failed Orders (Last 24h) | The failed-order component, broken out. The fastest-acting slice of the total and usually the first to investigate. |
| WC Failed Order Rate | Puts the failed-order slice in context as a percentage of all orders, so you can tell a spike from a steady baseline. |
| WC Ad Spend on OOS Products | The double-loss inside the at-risk listing component: budget spent on products that cannot sell. |
| WC Out of Stock Products | The inventory side of at-risk listings. Restocking these directly reduces the figure. |
| WC Pagespeed-Caused Cart Abandonment Loss | Isolates how much of the abandoned-checkout component is driven by site speed rather than price or intent. |
| WC Checkout Error Rate (24h) | A rising checkout error rate feeds both the failed-order and abandoned-checkout components at once. |
| WC Total Revenue | The denominator for sizing the risk. Revenue at Risk as a percentage of Total Revenue tells you how serious the exposure is. |
Reconciling against WooCommerce
Where to look in WooCommerce Admin: There is no single WP Admin screen that shows this composite, because the card combines three different leaks. Reconcile each component separately:- Failed orders: WP Admin → WooCommerce → Orders filtered to
Failed. Summing the totals of these orders gives the failed-order component. - At-risk listings: WP Admin → Products filtered to out-of-stock, cross-referenced against your ad platform’s active campaigns for the spend-behind-them figure.
- Abandoned checkouts: your cart-recovery plugin’s own dashboard (CartFlows, Abandoned Cart Lite, FunnelKit). WooCommerce core does not store abandoned carts, so this number lives in the plugin, not WP Admin.
| Reason | Direction of divergence |
|---|---|
| Abandoned-checkout component is an estimate. WC has no native abandoned-cart object. The estimate depends on your recovery plugin’s definition of “abandoned” and its recoverable-value assumption, which will rarely match a manual tally. | Variable; this is the softest component |
| Time-zone. The failed-order component is read in UTC; WP Admin filters orders in the WP site timezone (Settings → General → Timezone). Orders near midnight can land on different sides of “today”. | Marginal at day boundaries |
| Self-hosted uptime / sync lag. A live card depends on fresh data. If the host was unreachable, the most recent failed orders or stock changes may not yet be reflected, so the figure can lag the true live position. | Ours temporarily lower; self-resolves at next sync |
| At-risk listing valuation method. Estimating lost sales from an out-of-stock SKU requires a sales-velocity assumption. A manual reconciliation using a different velocity assumption will land on a different number. | Variable; both are estimates |
| HPOS vs legacy storage. On High-Performance Order Storage the failed-order data lives in the orders table; a store mid-migration can have orders split across stores. Reconcile against the live WooCommerce → Orders screen. | Either; investigate per-merchant |
Known limitations / merchant FAQs
Is this an accounting figure I can put in a report? No. Revenue at Risk is a directional risk signal, not a booked total. The failed-order slice is concrete (real orders that failed), but the at-risk listing and abandoned-checkout slices are estimates of money you might lose, not money you have lost. Use it to prioritise where to act, not to reconcile your books. Why does the abandoned-checkout part change so much? WooCommerce does not store abandoned carts natively, so that component comes from your cart-recovery plugin and its definition of “abandoned” and “recoverable value”. Different plugins use different windows and assumptions, so the number moves with the plugin’s logic. If you do not run a cart-recovery plugin, this component may be absent or estimated more coarsely. **The card says 0`, a genuine zero is the quiet state you want. Confirm the underlying components are actually reporting (for example that your cart-recovery plugin is connected) before treating a flat zero as all-clear. How is this different from just looking at failed orders? Failed orders are one of three components. A store can have low failed orders but high at-risk listing value (out-of-stock SKUs still drawing ad spend) or a large abandoned-checkout estimate. Revenue at Risk exists to combine all three so a single number reflects total live exposure rather than just the gateway slice. How current is the figure? It is a live (real-time) card, refreshed on the standard sync, typically hourly on a self-hosted store. The failed-order and stock components are as fresh as the last sync; the abandoned-checkout estimate is as fresh as your recovery plugin’s data. On a self-hosted store, host downtime can briefly understate the live position until the next clean poll. Why did it jump after a plugin update? A plugin update that breaks checkout pushes orders intofailed and increases abandoned checkouts at the same time, which inflates two components at once. If the figure spikes right after an update, check Plugin Updates (Last 24h) and roll back the suspect plugin on staging.