revenue / orders. AOV slipping while orders climb usually = overly aggressive coupon stack, pair with discount_pct.
At a glance
Average value of an order placed in the period. The arithmetic mean oforder.totalfor orders whose status iscompletedorprocessing.
| What it counts | SUM(order.total) / COUNT(orders) WHERE status IN ('completed', 'processing'). Each qualifying order contributes equally, weighted by its customer-billed total. |
| REST API endpoint | GET /wp-json/wc/v3/orders (orders list, filter by status + date). Field: total. |
| VAT / tax treatment | Always tax-inclusive on the wire. order.total is the post-tax customer-billed figure. Stores configured with woocommerce_prices_include_tax = no (US-style) still see total populated as the tax-inclusive grand total. |
| Status filter | Includes completed + processing. Excludes pending, on-hold, failed, cancelled, refunded. Same as Total Revenue. |
| Shipping | Included. order.total already contains total_shipping. |
| Discounts | Already deducted. order.total is the post-discount figure. |
| Refunds | NOT deducted. Refund objects are separate; order.total does not change after a refund. To see post-refund AOV, divide [Net Revenue] by [Total Orders]. |
| Cancelled / failed orders | Excluded (status filter). |
| Currency | Multi-currency arithmetic mean WITHOUT FX conversion. Stores using CURCY / Aelia / WMC will mix currencies into a meaningless single number. Filter by currency for accuracy. |
| Channels / sources | Not filtered. Web checkout, marketplace plugin orders, REST-API-created orders, and POS plugin orders all contribute. POS orders typically pull AOV down (impulse buys); B2B plugin orders pull it up. |
| Self-hosted vs managed-Woo | No difference in definition; managed hosts produce steadier sync. |
| Time window | 30D vsP |
| Alert trigger | drop >10% vsP, driven by sentiment_key: aov_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 B2B-leaning Woo store on managed-Woo (WP Engine), running WooCommerce Wholesale Prices plugin alongside DTC. The 30-day window covers 14 Mar 26 to 12 Apr 26.| Customer segment | Orders | Sum of order.total | Segment AOV |
|---|---|---|---|
| DTC web checkout | 1,420 | $128,400 | $90 |
Wholesale (wholesale_customer role) | 84 | $84,720 | $1,008 |
| POS plugin orders (in-person trade shows) | 36 | $1,440 | $40 |
| Marketplace (Amazon Connector) | 92 | $6,440 | $70 |
| Blended AOV (this card) | 1,632 | $221,000 | $135 |
- Wholesale dominates AOV without dominating volume. 84 wholesale orders (5.1% of count) contribute 135 is meaningless to either segment, the DTC merchant cares about 1,008. Use Top Customers to spot the segments.
- Plugin-induced data shape variance. Wholesale Prices plugin stores wholesale-specific totals in custom meta (
_wholesale_priced_total) and updatesorder.totalto the wholesale figure. The Vortex IQ Woo engine readsorder.totalas-is, no normalisation needed. But if the merchant later swaps to a different B2B plugin (e.g. WooCommerce B2B), the meta key changes and historical comparisons may shift. - POS pulls AOV down. $40 average from in-person trade-show sales is structurally lower than DTC. A heavy POS month compresses blended AOV without anyone “doing anything wrong”. This is a Woo-specific gotcha because POS plugins are bolt-ons, not a first-class Woo channel.
Sibling cards merchants should reference together
| Card | Why pair it with AOV |
|---|---|
| WC Total Revenue | AOV times Orders is Revenue. Without revenue context AOV is misleading. |
| WC Total Orders | The denominator. Rising AOV with falling orders means you are selling more to fewer people. |
| WC Conversion Rate | Trades off with AOV. Free-shipping thresholds raise AOV but slightly hurt conversion. |
| WC Top Customers | B2B / wholesale customers pull AOV up. Pair to see segment-driven AOV moves. |
| BC AOV | Same tax-inclusive total semantics. Useful peer for agencies. |
| Shopify AOV | SaaS-platform peer. |
Reconciling against the vendor’s own dashboard
Where to look in WooCommerce Admin: WP Admin → WooCommerce → Reports → Orders → Sales by date shows Average gross daily sales and Average net daily sales. For order-level AOV, compute Gross sales / Number of orders manually for the same period; that should match this card to within 1-2%. Other WP Admin views that look like AOV but are not:- Analytics → Revenue → Average order value (WC 4.0+): this is post-refund (net) AOV. Reads lower than this card.
- Stats overview widget: today only, in WP-site timezone.
| Reason | Direction of divergence |
|---|---|
| Time-zone. WC reports run on WP-site timezone; Vortex IQ on UTC. | Boundary-day effects |
| Self-hosted server uptime. Sync gaps push AOV either direction depending on which orders are missed. | Either |
Plugin-version compatibility. B2B plugins overload order.total; subscription plugins create renewal orders at recurring price. | Material on subscription / wholesale stores |
| Refund-object aggregation. WC’s “Net AOV” subtracts refunds; this card does not. | This card higher than WC Net AOV |
| Currency plugin behaviour. Multi-currency stores see arithmetic mean across currencies; meaningless without filtering. | Material for international stores |
| Card | Expected relationship |
|---|---|
stripe.stripe_aov | Stripe AOV ~= WC AOV for stores using only the WC Stripe Gateway. Gap grows with PayPal / BACS share. |
google_analytics.ga_aov | Within ~5% on healthy tagging. Larger gaps mean ad-blocker / cookie-rejection erosion. |
Known limitations / merchant FAQs
Hosted-vs-self-hosted, does it affect AOV? The number is the same definition. Self-hosted Woo on flaky shared hosting may produce slightly noisier daily AOVs because some boundary-day orders sync late. Why does WC Analytics show a lower AOV than this card? WC Analytics → Revenue uses post-refund (net) AOV. This card is gross. The two should converge as refunds settle. Refund-object accounting, what does it mean for AOV? Refunds do not changeorder.total, so a partially refunded 200 to AOV here. WC’s Analytics module subtracts refunds from a separate Net AOV figure. Use whichever matches your accounting view.
Plugin-induced data shape variance, how does it affect AOV?
Subscriptions plugins create renewal orders at recurring (often lower) totals, this pulls AOV down on subscription-heavy stores. B2B / Wholesale plugins push AOV up via large basket sizes. Neither is wrong; they reflect the channel mix.
Multi-currency, how should I read AOV?
If your store sells in more than one currency, this card’s blended AOV is a mathematical average without FX conversion, treat it as a coarse signal only. Filter by currency for per-currency AOV (per-currency cards on the roadmap).
Why does Woo and Stripe disagree on AOV?
Stripe-routed payments only. PayPal and BACS orders bypass Stripe. Stripe AOV will track Stripe-paying customer behaviour, this card tracks all paying customers.
Today is jumpy, why?
Small samples are noisy. A single $1,500 wholesale order on a 50-order day moves AOV by 30%+ on its own. Use rolling 7D / 30D for stable reads.
Self-hosted server slowness, will I see weird AOVs?
If the indexer caught only half a day’s orders before an outage, the AOV for that half-day skews toward whichever orders did sync. Self-resolves at the next clean poll.
My WP Admin shows a different AOV, debug:
- Match the date range exactly.
- Match the status filter (
completed + processing). - Distinguish Gross AOV vs Net AOV (this card is Gross).
- If the gap remains, check whether a B2B / subscription plugin overloads
order.totalshape.