Orders -> Email Campaign Attribution, broken down by row. How much of your WooCommerce revenue email can claim, and how much leaks away unattributed while the programme runs.
At a glance
The breakdown of WooCommerce order revenue against the email campaigns and flows that drove it. The card joins Woo orders to your email connector’s attribution (Klaviyo, Dotdigital, Mailchimp) and shows, per campaign / flow, how much revenue is attributed, plus the share of total revenue that stays unattributed. A large unattributed slice while an email programme is clearly active points at broken tracking, not poor performance.
| What it counts | Per email campaign / flow: SUM(order.total) for orders attributed to that campaign. Plus an “unattributed” row = total_woo_revenue minus all email-attributed revenue. Revenue figures, not order counts, are the headline. |
| Data sources (BOTH required) | WooCommerce side: GET /wp-json/wc/v3/orders for order totals, timestamps, and customer email. Email side: the ESP’s attribution, Klaviyo /api/metric-aggregates (Placed Order attributed to campaign/flow), Mailchimp /reports (e-commerce revenue per campaign), Dotdigital /v3/campaigns revenue. |
| How the join works | The ESP attributes an order to a campaign using its own last-click model (a click within the attribution window, default 5-day in Klaviyo). The card matches the ESP-attributed order back to the Woo order by customer email + order timestamp, so the Woo order.total is the revenue figure shown rather than the ESP’s separately-tracked value. |
| VAT / tax treatment | Revenue is tax-inclusive order.total, consistent with Total Revenue. |
| Status filter | completed + processing orders only, the canonical Woo “real revenue” set. |
| Refunds | Gross of refunds, attribution happens at order time, before any refund. |
| Attribution window | Set by the ESP (Klaviyo default 5-day click; Mailchimp 7-day; Dotdigital 14-day). The card uses the ESP-defined window; longer windows attribute more. |
| Unattributed | Revenue with no email click in the window: organic, paid, direct, SMS, affiliate, POS, and any orders the tracking missed. A healthy figure depends on your channel mix; the alert fires when it is suspiciously high despite an active email programme. |
| Self-hosted vs managed-Woo | Same definition. Self-hosted sync lag can briefly mis-time an order against the click window; managed-Woo with reliable webhooks aligns more tightly. |
| Time window | 30D |
| Alert trigger | >30% revenue unattributed despite active email, driven by sentiment_key: wc_xc_orders_vs_email_attribution |
| 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 with Klaviyo connected. 30-day window 14 Mar 26 to 12 Apr 26. Total Woo revenue (completed + processing) is $467,200. Klaviyo ran 9 campaigns and 6 flows in the window.
| Email source | Type | Attributed revenue | Share of total |
|---|---|---|---|
| Welcome Flow | Flow | $38,400 | 8.2% |
| Abandoned Cart Flow | Flow | $51,900 | 11.1% |
| Spring Sale broadcast (22 Mar) | Campaign | $42,300 | 9.1% |
| Post-Purchase Flow | Flow | $14,700 | 3.1% |
| Back-in-Stock Flow | Flow | $9,800 | 2.1% |
| All other campaigns / flows | Mixed | $18,900 | 4.0% |
| Email attributed (subtotal) | $176,000 | 37.7% | |
| Unattributed | $291,200 | 62.3% |
- 62.3% unattributed is above the 30% alert line, so the card flags it. But before assuming broken tracking, check the channel mix. This brand also runs heavy Google Shopping and paid social; a large legitimately-non-email slice is expected. The alert is a prompt to investigate, not proof of a bug, the question is whether the unattributed share is higher than the channel mix can explain.
- Flows out-earn campaigns. Abandoned Cart and Welcome flows together drive $90,300, more than every broadcast combined. This is the normal healthy DTC pattern; if broadcasts dominate and flows are thin, the flow programme is under-built. Cross-reference Klaviyo Flow Revenue.
- The join uses the Woo order.total, not Klaviyo’s figure. Klaviyo tracks its own “Placed Order” revenue value, which can drift from the true Woo total (currency rounding, partial captures). By matching back to the Woo order by email + timestamp, the card reports the authoritative Woo revenue per campaign, so the subtotal reconciles cleanly against Total Revenue.
- A sudden jump in unattributed often means tracking broke. If this brand redeployed their theme and the Klaviyo
onsitesnippet stopped firing, attributed revenue would collapse and the unattributed row would spike, even though email is still sending. That pattern (email volume steady, attributed revenue down, unattributed up) is the signature this card is built to catch.
Sibling cards merchants should reference together
| Card | Why pair it with this card |
|---|---|
| WC Total Revenue | The denominator. The attributed subtotal plus the unattributed row must equal this. |
| WC Email Share of Total Store Revenue | The single-number version of this card. This card breaks that share down by campaign and flow. |
| WC Revenue by Payment Method | Another way to slice the same total revenue; pair to triangulate where unattributed revenue is really coming from. |
| WC Top Customers by LTV | Which customers the email-attributed orders come from; high-LTV customers should show strong flow attribution. |
| WC High-Value Customers Unengaged on Email | If attribution is falling, disengaged top spenders are often part of the cause. |
| Klaviyo Flow Revenue | The flow-level source on the ESP side. Should reconcile with the flow rows here. |
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 email connector (Klaviyo, Dotdigital, or Mailchimp) connected in the same Vortex IQ workspace. WooCommerce supplies the orders and their authoritative totals; the email connector supplies the campaign/flow attribution. With only one side connected the card cannot run the join and renders empty (or shows 100% unattributed). How the two sides are joined:| Join key | WooCommerce side | Email side |
|---|---|---|
| Customer email | Billing / account email on the order | Subscriber email the ESP attributed the order to |
| Order timestamp | date_created of the order | The ESP “Placed Order” event time within the attribution window |
| Revenue figure | order.total (authoritative) | ESP-tracked value (used only to confirm the match, not to report) |
| Campaign / flow | not present on Woo | ESP campaign or flow id the click belongs to |
- WooCommerce revenue: WP Admin → WooCommerce → Reports → Sales by date for the period total (the denominator).
- Email attribution: Klaviyo → Analytics → Campaigns / Flows → Attributed revenue; Mailchimp → Reports → Revenue per campaign; Dotdigital → Reports → Email revenue.
| Reason | Effect |
|---|---|
| One connector not connected. Only Woo or only the ESP connected. | Card empty or 100% unattributed |
| Email mismatch. Guest checkout under a different email from the subscriber record breaks the join; that revenue lands in “unattributed”. | Unattributed inflated |
| Attribution window. ESP windows differ (5 / 7 / 14-day); a longer window attributes more orders. | Attributed share shifts 2-5 ppt or more |
Tracking breakage. A broken onsite snippet or missing utm/click tracking means real email orders are not attributed. | Unattributed spikes while email volume is steady |
ESP revenue vs Woo revenue. The card reports Woo order.total, not the ESP’s tracked value, so a per-campaign figure may differ slightly from the ESP dashboard. | Small per-campaign differences |
| Timezone. Woo on WP-site timezone, ESP on its account timezone, Vortex IQ on UTC. Orders near the window edge can shift a day. | Boundary effects |
| Sync lag. Self-hosted Woo webhook delay can mis-time an order against the click window. | Brief, self-resolving |
Known limitations / merchant FAQs
Why is this card empty (or showing 100% unattributed)? Because it joins two connectors. You need both the WooCommerce connector and an email connector (Klaviyo, Dotdigital, or Mailchimp) connected in the same Vortex IQ workspace. With only WooCommerce connected there is no attribution data, so every order falls into “unattributed”. Connect the ESP and the breakdown populates. Is a high unattributed share always bad? No. Unattributed simply means “no email click in the window”, which legitimately covers organic, paid search, paid social, direct, SMS, affiliate, and POS. A brand with heavy paid acquisition will always have a large non-email slice. The alert fires when the unattributed share is high relative to your channel mix and despite an active email programme, which usually points at broken tracking. Why does a campaign’s revenue here differ slightly from my Klaviyo dashboard? This card reports the authoritative WooCommerceorder.total, matched back by email and timestamp, whereas the ESP shows its own separately-tracked “Placed Order” value. Currency rounding, partial captures, and tax handling cause small per-campaign differences. The totals reconcile against Woo Total Revenue.
How does the attribution window affect the numbers?
The card uses the ESP-defined window (Klaviyo 5-day click by default, Mailchimp 7-day, Dotdigital 14-day). A longer window credits more orders to email, lowering the unattributed share. If you change the window in your ESP, expect the split here to move.
Why did attributed revenue suddenly collapse?
The classic cause is a broken onsite tracking snippet, often after a theme update or plugin change, so clicks stop being recorded. Email keeps sending, but orders no longer attribute, and the unattributed row spikes. Check that the ESP’s onsite/tracking script still fires on the storefront.
Do refunds change the attribution?
No. Attribution is fixed at order time and the figures are gross of refunds, consistent with Total Revenue. A heavily-refunded campaign still shows its original attributed revenue here; check refund cards separately for net performance.
Guest orders are not attributing, why?
A guest who checks out with a different email from their newsletter subscription cannot be matched to their subscriber record, so that revenue lands in “unattributed”. Encouraging account creation or consistent email capture at checkout improves attribution coverage.