← All field notes
Subscriptions April 8, 2026 8 min read

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.

— What PMAX sees when subscriptions fire as standard purchases.

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:

  1. Initial subscription order → fire Purchase normally. this is the conversion you want PMAX to learn from. send the full order value (initial charge, not annualized).
  2. Recurring subscription orders → fire a separate event (we use SubscriptionRecharge) that is not mapped to Purchase in any ad platform. attach order value for analytics, but don’t let it back-attribute.
  3. Subscription cancellations → fire SubscriptionCancel. use it as a negative signal for value-based bidding (covered below).
Day 0 Purchase ($48) attributed to ad click
Day 30 SubscriptionRecharge ($48) analytics only, not in PMAX
Day 60 SubscriptionRecharge ($48) analytics only
Day 75 SubscriptionCancel negative signal in value-based bidding

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:

!
Don't do this without value-based bidding

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:

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.