subscriptions in PMAX: how to stop attributing recurring revenue to net-new acquisition .
if Recharge or Skio fires recurring orders the same way as initial purchases, your CPA looks better than it actually is — and PMAX optimizes against the wrong signal. here's how to fix it without breaking attribution.
Subscriptions are great for the business and bad for the attribution stack. they’re great because LTV is high, churn is forgiving, cash collection is predictable. they’re bad because every billing cycle generates a new order in Shopify, and most pixel/CAPI integrations treat that order identically to a new acquisition.
The result: PMAX (and Advantage+, and TikTok’s Smart+) sees a customer who clicked an ad once and then “purchased” four times. it back-attributes all four orders to that first click. CPA looks excellent. you scale spend. spend doesn’t perform like the historical numbers suggested it would. confusion ensues.
Why this is hard to spot
Most subscription apps — Recharge, Skio, Stay, Loop, Awtomic — use Shopify’s checkout for the initial order, then create subsequent orders via the Shopify admin API. those API-created orders pass through every webhook the same way a regular order would. if your tracking listens to the order/create webhook (most server-side trackers do), it’ll fire a Purchase event for the recharge with no way to distinguish it.
Some integrations try to filter on the source_name or tags field. that works for Recharge, mostly. it doesn’t work consistently for Skio. it definitely doesn’t work for stores that mix subscription and one-off orders, where the same customer has both.
What “right” looks like
Three rules we’ve settled on:
- Initial subscription order → fire
Purchasenormally. this is the conversion you want PMAX to learn from. send the full order value (initial charge, not annualized). - Recurring subscription orders → fire a separate event (we use
SubscriptionRecharge) that is not mapped toPurchasein any ad platform. attach order value for analytics, but don’t let it back-attribute. - Subscription cancellations → fire
SubscriptionCancel. use it as a negative signal for value-based bidding (covered below).
The advanced move: predicted LTV at the moment of conversion
Once you stop double-counting recharges, you can do the more interesting thing: send PMAX a richer value at the moment of the initial Purchase, reflecting predicted LTV, not just the first-order value.
If your average subscription customer stays 6.4 cycles at $48/cycle, the actual value of that initial conversion isn’t $48 — it’s roughly $307. send the higher number to PMAX (via enhanced conversions with adjusted value) and the algorithm will bid harder on subscription-prone audiences. send the $48 and it bids like every customer is a one-off.
Caveats matter:
- only predict per cohort. apparel customers and consumables customers have completely different LTV curves.
- discount the predicted value for risk. we send 60–70% of expected LTV — more than first-order, less than expected, leaving margin for prediction error.
- recompute monthly. LTVs drift. baking a 2024 number into 2026 spend will mislead the algorithm.
Sending higher conversion values only matters if your campaigns are bidding to ROAS or value, not target CPA. on a CPA-bid campaign, the value field is reported but not optimized against. switch to a value-based strategy first, then start tuning the value.
The Meta side
Meta’s catalog model is more forgiving here, because Meta separates the Subscribe event from Purchase at the schema level. but the same trap applies: most Shopify pixel/CAPI integrations don’t fire Subscribe; they fire Purchase on the initial order and silence the recharges. the loud failure mode (double-counting) is rarer than on Google, but the silent failure mode (Meta has no idea you’re a subscription business) is the default.
If you sell a subscription product, fire Subscribe on the initial conversion in addition to (or instead of) Purchase. Advantage+ uses subscription-specific signal in its targeting model, and not feeding it that signal leaves performance on the table.
How Maximo handles this
We treat subscription events as a first-class shape, not an edge case bolted onto the regular Purchase pipeline. specifically:
- auto-detect Recharge, Skio, Stay, Loop, and Awtomic at install — no manual setup;
- route initial orders to
Purchase/Subscribe, recharges toSubscriptionRecharge, cancels toSubscriptionCancel— across Meta, Google, TikTok, Pinterest; - compute per-cohort LTV from your last 18 months of order data and offer it as the conversion value, with a configurable discount factor;
- recompute LTV nightly so the value sent to ad platforms doesn’t drift from reality.
It’s not magic. it’s a careful pipeline that knows the difference between a new customer and a returning one. but most stacks don’t draw that distinction at all, and the cost of ignoring it scales with how successful your subscription program is.