> ## 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.

# Top-Velocity SKUs vs Ad Spend, WooCommerce

> Top-Velocity SKUs vs Ad Spend. Whether your fastest-selling WooCommerce products receive ad spend in proportion to the revenue they earn. How to read it, why it matters, and how to act on it.

**Card class:** [Hero](/nerve-centre/overview#card-classes-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

> Top-selling SKUs deserve proportional ad spend. Misalignment = under-amplified winners.

## At a glance

> Whether your fastest-selling WooCommerce SKUs are getting ad spend in proportion to the revenue they drive. The card joins Woo SKU sales velocity against an ads connector (Google Ads, Meta Ads) spend per product and flags top sellers that receive a disproportionately small share of the budget. Under-amplified winners are the highest-confidence growth lever you have: products already proven to convert, starved of reach.

|                                  |                                                                                                                                                                                                                                                                                                            |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What it counts**               | Per top-velocity SKU: `revenue_share = sku_revenue / total_sku_revenue` versus `spend_share = sku_ad_spend / total_ad_spend`. A SKU is flagged when its spend share is far below its revenue share (the default flag fires for top sellers receiving `<10%` of ad spend relative to their revenue weight). |
| **Data sources (BOTH required)** | **WooCommerce side:** order line items from `GET /wp-json/wc/v3/orders` carrying `product_id` / `variation_id` / `sku`, aggregated to per-SKU units and revenue. **Ads side:** Google Ads `shopping_performance_view` (spend per product/item id) and/or Meta Marketing API ad-spend by catalogue product. |
| **How the join works**           | By **SKU / product id**. The Woo SKU is matched to the ad platform's item id (the value pushed to Google Merchant Center / Meta catalogue, typically the Woo SKU or product id via the Google Listings & Ads / Meta for WooCommerce plugin). A SKU must exist on both sides to be compared.                |
| **VAT / tax treatment**          | Woo revenue is tax-inclusive line-item revenue. Ad spend is in ad-account currency, typically pre-tax. The comparison is on *shares*, so absolute tax treatment does not distort the ratio.                                                                                                                |
| **Status filter**                | Velocity from `completed + processing` orders only. Ad spend from `enabled` campaigns/ad groups.                                                                                                                                                                                                           |
| **Refunds**                      | Velocity is gross of refunds; a high-velocity-high-refund SKU is worth investigating before pouring spend in (cross-check refund cards).                                                                                                                                                                   |
| **Currency**                     | Ad spend in ad-account currency, Woo revenue in store currency. The join is by SKU and the comparison is share-vs-share, so it is currency-agnostic; only the displayed spend figure needs FX.                                                                                                             |
| **Channels / sources**           | Web-channel ads only. Marketplace ad spend (Amazon Ads) is out of scope for this card; see the Amazon Ads cards for that.                                                                                                                                                                                  |
| **Self-hosted vs managed-Woo**   | Velocity computation is identical on any host. Self-hosted sync lag can briefly understate today's velocity; the ad side is unaffected by Woo host type.                                                                                                                                                   |
| **Time window**                  | `30D`                                                                                                                                                                                                                                                                                                      |
| **Alert trigger**                | `top sellers receiving <10% of ad spend` (relative to their revenue weight), driven by `sentiment_key: wc_xc_top_skus_vs_ad_spend`                                                                                                                                                                         |
| **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 US homewares brand on managed-Woo running Google Shopping (via Google Listings & Ads) and Meta Advantage+. 30-day window 14 Mar 26 to 12 Apr 26. Total tracked SKU revenue $467,200; total product ad spend $61,000. Here are five SKUs.

| SKU          | 30D revenue | Revenue share | Ad spend | Spend share | Flag                   |
| ------------ | ----------- | ------------- | -------- | ----------- | ---------------------- |
| MUG-MUSH-01  | \$52,400    | 11.2%         | \$1,900  | 3.1%        | Under-amplified winner |
| TWL-WAFL-02  | \$38,100    | 8.2%          | \$1,200  | 2.0%        | Under-amplified winner |
| LMP-BRASS-04 | \$21,600    | 4.6%          | \$9,400  | 15.4%       | Over-spent vs velocity |
| VAS-GLS-03   | \$14,900    | 3.2%          | \$8,800  | 14.4%       | Over-spent vs velocity |
| PLT-CERA-07  | \$12,300    | 2.6%          | \$700    | 1.1%        | Under-amplified winner |

Four things to notice:

1. **MUG-MUSH-01 is the textbook under-amplified winner.** It earns 11.2% of revenue on 3.1% of spend, a proven converter starved of budget. Shifting spend toward it is lower-risk than launching new ads, the product has already demonstrated demand. It and the other two flagged rows are why the alert fires.
2. **LMP-BRASS-04 and VAS-GLS-03 are the mirror image.** They absorb 15.4% and 14.4% of spend for 4.6% and 3.2% of revenue. The card surfaces both ends of the misalignment; the budget freed from over-spent SKUs is exactly what funds the under-amplified winners.
3. **The join is by SKU / item id.** Each Woo SKU is matched to its Google / Meta item id through the feed plugin. A SKU with a blank or mismatched id cannot be compared and silently drops out of the analysis, fix [Products Missing SKU](/nerve-centre/kpi-cards/woocommerce/products-missing-sku) so the picture is complete.
4. **Check refunds before reallocating.** Velocity here is gross of refunds. If MUG-MUSH-01 had a 25% return rate its true net velocity would be lower, and pouring spend in would amplify the returns too. Cross-reference [Top Refunded Products](/nerve-centre/kpi-cards/woocommerce/top-refunded-products) before acting.

## Sibling cards merchants should reference together

| Card                                                                                        | Why pair it with this card                                                                               |
| ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| [WC Top Products by Revenue](/nerve-centre/kpi-cards/woocommerce/top-products-by-revenue)   | The revenue ranking this card weighs spend against. Your top sellers are the rows that matter most here. |
| [WC Ad Spend on OOS Products](/nerve-centre/kpi-cards/woocommerce/ad-spend-on-oos-products) | The other ad-waste angle: spend on products that cannot convert. Pair to clean spend at both ends.       |
| [WC Top Refunded Products](/nerve-centre/kpi-cards/woocommerce/top-refunded-products)       | A high-velocity SKU with a high refund rate is a false winner; check before reallocating budget into it. |
| [WC Out of Stock Products](/nerve-centre/kpi-cards/woocommerce/out-of-stock-products)       | Do not amplify a winner that is about to sell out; pair to confirm stock can support the spend.          |
| [WC Gross Margin](/nerve-centre/kpi-cards/woocommerce/gross-margin)                         | Velocity is not the same as profit. Weigh ad spend by margin, not just revenue, before reallocating.     |
| [WC Conversion Rate](/nerve-centre/kpi-cards/woocommerce/conversion-rate)                   | High velocity plus high conversion is the safest place to add budget.                                    |

## Reconciling against WooCommerce

**This is a cross-channel card. It requires BOTH connectors.**

For this card to populate you must have **both** the WooCommerce connector **and** an ads connector (Google Ads, Meta / Facebook Ads) connected in the same Vortex IQ workspace. WooCommerce supplies the per-SKU sales velocity; the ads connector supplies the per-product spend. With only one side connected the card cannot run the join and renders empty.

**How the two sides are joined:**

| Join key          | WooCommerce side                                       | Ads side                                                                                                         |
| ----------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
| **SKU / item id** | `sku` on order line items / product                    | Item id in Google Merchant Center / Meta catalogue (usually the Woo SKU or product id pushed by the feed plugin) |
| **Revenue**       | line-item revenue from `completed + processing` orders | not used (Woo is source of truth for revenue)                                                                    |
| **Spend**         | not present on Woo                                     | spend per product from the ad platform                                                                           |

**Where to verify each side:**

* **WooCommerce velocity:** [WP Admin → WooCommerce → Reports → Orders → Sales by product](/wp-admin/admin.php?page=wc-reports\&tab=orders\&report=sales_by_product), or the Analytics → Products report for per-SKU revenue and units.
* **Ad spend per product:** Google Ads → Reports → Shopping → Item id (spend column); Meta Ads Manager → breakdown by product / catalogue.
* **Feed mapping:** WP Admin → the Google Listings & Ads or Meta for WooCommerce plugin shows how Woo SKUs map to item ids.

**Why rows may be missing or differ from a manual comparison:**

| Reason                                                                                                                                                                                   | Effect                                          |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| **One connector not connected.** Only Woo or only the ads connector connected.                                                                                                           | Card empty                                      |
| **SKU / item-id mismatch.** Woo SKU differs from the feed item id, or the SKU is blank.                                                                                                  | SKU drops out of the comparison (under-reports) |
| **Attribution model.** Ad platforms attribute revenue differently (last-click, data-driven). This card uses Woo velocity as the revenue truth, not the ad platform's attributed revenue. | Per-SKU revenue differs from the ad console's   |
| **Currency / FX.** Spend in ad-account currency, revenue in store currency. Shares are currency-agnostic; the displayed spend uses end-of-day FX.                                        | Display only                                    |
| **Refund timing.** Velocity is gross of refunds; a refund landing in-window does not reduce velocity here.                                                                               | Velocity can overstate net demand               |
| **Timezone.** Woo on WP-site timezone, ads on account timezone, Vortex IQ on UTC. Boundary orders/spend shift a day.                                                                     | Boundary effects                                |
| **Sync lag.** Self-hosted Woo can briefly understate recent velocity.                                                                                                                    | Brief, self-resolving                           |

**Cross-connector reconciliation:** the revenue side should match [Top Products by Revenue](/nerve-centre/kpi-cards/woocommerce/top-products-by-revenue) for the same SKUs and window. The spend side should match the ad platform's per-item spend (allow for FX and attribution-window differences). If a known top seller is missing entirely, suspect a SKU / item-id mismatch in the feed.

## Known limitations / merchant FAQs

**Why is this card empty?**
Because it joins two connectors. You need **both** the WooCommerce connector and an ads connector (Google Ads or Meta / Facebook Ads) connected in the same Vortex IQ workspace. With only one side the card cannot compare velocity to spend. The second common cause is a SKU / item-id mismatch in your product feed, so the join finds nothing to align.

**What does "under-amplified winner" actually mean?**
A SKU whose share of revenue is much larger than its share of ad spend, for example earning 11% of revenue on 3% of budget. It is a product that already converts well but is not getting proportional reach, usually the safest place to add spend.

**Should I just move all my budget to the flagged winners?**
No. Weigh three things first: stock (do not amplify a SKU about to go out of stock, see [Out of Stock Products](/nerve-centre/kpi-cards/woocommerce/out-of-stock-products)), refunds (a high-return SKU is a false winner, see [Top Refunded Products](/nerve-centre/kpi-cards/woocommerce/top-refunded-products)), and margin (a high-revenue low-margin SKU may not deserve more spend, see [Gross Margin](/nerve-centre/kpi-cards/woocommerce/gross-margin)).

**Why does my ad console show different per-SKU revenue?**
Ad platforms report their own attributed revenue (last-click or data-driven), which can differ substantially from actual store revenue. This card uses WooCommerce velocity as the revenue truth and the ad platform only for spend, so the two will not match by design.

**Does this include Amazon Ads spend?**
No. This card covers web-channel ads (Google Ads, Meta Ads). Marketplace ad spend is handled by the Amazon Ads cards. A SKU can be under-amplified on web ads while well-funded on Amazon, or vice versa.

**A top seller is missing from the analysis, why?**
Almost always a SKU / item-id mismatch. If the Woo SKU is blank or differs from the value in your Google Merchant Center / Meta catalogue feed, the SKU cannot be matched to its spend and drops out. Fix [Products Missing SKU](/nerve-centre/kpi-cards/woocommerce/products-missing-sku) and verify the feed mapping.

**Can I change the 10% threshold?**
Yes, the flag threshold is configurable per profile in the Sensitivity tab. Tune it to how aggressively you want to surface spend/velocity misalignment for your catalogue size and budget.

***

### Tracked live in Vortex IQ Nerve Centre

*Top-Velocity SKUs vs Ad Spend* 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.
