How the Pixel Manager tracks WooCommerce Subscriptions
Tracking subscriptions is harder than tracking one-off purchases, and not because of the code. It is hard because the ad platforms themselves disagree about what a subscription even is. Meta has a full lifecycle event model. Google Ads has nothing. GA4 sits somewhere in the middle. A real WooCommerce store that runs subscriptions needs an implementation that respects what each platform actually accepts, and reports value in a way that reflects the customer lifetime value (CLV), not just the first month's charge.
This post explains exactly how the Pixel Manager for WooCommerce handles WooCommerce Subscriptions, what fires where, and which knobs you can turn.
TL;DR
- Initial subscription orders fire as normal purchase events on every connected pixel (browser + server-side), just like any other order.
- Meta (Facebook) CAPI additionally fires Meta's official subscription lifecycle events:
Subscribeon the first charge,RecurringSubscriptionPaymenton each renewal,CancelSubscriptionwhen a subscription is cancelled. - GA4 Measurement Protocol sends a server-side
purchaseevent on each renewal so renewals show up in Google Analytics 4 even though the customer's browser is not involved. - Google Ads and other ad platforms do not have a subscription-specific event, so renewals are not reported to them by default; the Subscription Value Multiplier (premium) lets you inflate the initial conversion value to approximate the CLV, which is what those platforms actually need for optimisation.
- Full customisation is available via the
pmw_marketing_conversion_value_filter(overwrite the conversion value entirely) and a set of toggle filters to disable renewal tracking globally or per platform.
What fires when
Initial subscription order
When a customer buys a subscription product for the first time, WooCommerce creates a parent order exactly as it would for any other purchase. The Pixel Manager treats this as a normal purchase: the browser-side conversion pixels fire on the thank-you page, and the server-side pipelines (Meta CAPI, TikTok Events API, Pinterest Conversions API, Snapchat CAPI, Reddit Conversions API, GA4 Measurement Protocol) send their Purchase events.
This is the part most store owners are actually asking about when they say "is my subscription showing up?" The answer is yes, the initial order shows up in every ad platform's reporting as a regular purchase. Once those events land, Google Ads, Meta, TikTok and the rest have everything they need to attribute the conversion and feed their optimisers.
On top of that, Meta gets an extra event: Subscribe. The Pixel Manager hooks into WooCommerce Subscriptions' woocommerce_subscription_payment_complete action, checks that this is the first payment for the subscription, and fires Meta's official Subscribe lifecycle event server-side. This is the event Meta's documentation specifies for subscription lifecycle tracking.
Renewals
Renewals are where most plugins stop. The Pixel Manager handles them in two places:
Meta CAPI. On woocommerce_subscription_renewal_payment_complete, the plugin sends Meta a RecurringSubscriptionPayment event tied to the original subscription ID, the renewal order, and the original customer identifiers persisted on the parent order. This means Meta can attribute the renewal back to the ad that originally acquired the customer, even though the customer's browser is nowhere near the transaction at renewal time.
GA4 Measurement Protocol. The plugin also sends a server-side GA4 purchase event for each renewal using GA4's Measurement Protocol, with the original client ID restored from the parent order. Renewals show up in GA4's reports without the customer ever loading a page.
For the other ad platforms (Google Ads, TikTok, Pinterest, Snapchat, Reddit), renewal events are intentionally not sent. Those platforms either do not have a subscription-renewal event in their conversion APIs (Google Ads, in particular, does not differentiate), or sending arbitrary renewal events to them just inflates the conversion count without giving the optimiser anything useful to optimise. The right answer there is value inflation at acquisition time, which is exactly what the Subscription Value Multiplier does (see below).
Cancellations
When a subscription is cancelled (woocommerce_subscription_status_cancelled), Meta CAPI receives a CancelSubscription event. This lets Meta's lifecycle reporting reflect churn alongside acquisition and renewal.
Cancellations are deliberately not fired on subscription status flips to on-hold and back. WooCommerce flips subscriptions on-hold every time a payment is pending; treating that as a cancellation would generate a flood of false negatives in Meta's reporting.
The Google Ads problem: there is no "subscription" event
Google Ads is the most common ad platform store owners run, and Google Ads does not have a server-side subscription lifecycle event. It has purchase and that is it. If you only report the first month's 19.99 to Google Ads, the optimiser will bid for traffic that converts at 19.99. That is not how a subscription business makes money.
The classic fix is to inflate the conversion value at acquisition time so the number Google Ads sees matches the customer's actual lifetime value. The Pixel Manager ships this fix as a setting: the Subscription Value Multiplier (premium).
The multiplier works proportionally and only on the subscription portion of the order:
- The plugin walks the line items of the order.
- For each line item whose product is a subscription, the value is multiplied by the multiplier.
- Non-subscription line items in the same order are left alone.
- The resulting total replaces the original order total for marketing-pixel reporting.
So if a customer buys a 19.99/month subscription plus a one-off 5 accessory, and the multiplier is set to 12 (representing a one-year expected lifetime), the value reported to Google Ads is 19.99 × 12 + 5 = 244.88, not a naive (19.99 + 5) × 12 = 299.88. The non-subscription part is untouched.
This applies to every marketing conversion pixel: Google Ads, Meta, TikTok, Pinterest, Snapchat, Reddit, Bing/Microsoft, and so on. It deliberately does not affect statistics-only pixels like Google Analytics 4 statistics events; GA4 should reflect what actually happened in the shop.
The multiplier is off by default (set to 1), and the plugin shows an opportunity card in the admin if it detects WooCommerce Subscriptions is active but the multiplier has not been raised.
When the multiplier is not enough: full control via filter
Sometimes you need more than a single global multiplier. A common case: you have multiple subscription tiers with very different expected lifetimes, or you want to attribute the value based on a CLV calculation you do yourself.
The Pixel Manager exposes the final conversion value for every marketing pixel through a single filter:
add_filter( 'pmw_marketing_conversion_value_filter', function ( $value, $order ) {
// $value is the value that would otherwise be sent to ad platforms
// (after the Subscription Value Multiplier, if any).
// Return whatever you want here.
return your_custom_clv_calculation( $order );
}, 10, 2 );
This filter is the single source of truth for the value sent to every marketing pixel. It runs after the Subscription Value Multiplier, so you can either replace the value entirely or build on top of the multiplier's output.
Filters to disable renewal tracking
Some stores prefer to keep their reporting tied strictly to acquisition events and not flood their analytics with renewals. The Pixel Manager provides three escape hatches:
// Disable subscription renewal tracking everywhere (Meta CAPI + GA4 MP).
add_filter( 'pmw_subscription_renewal_tracking', '__return_false' );
// Disable just the Meta CAPI renewal events.
add_filter( 'pmw_facebook_subscription_renewal_tracking', '__return_false' );
// Disable just the GA4 Measurement Protocol renewal events.
add_filter( 'pmw_google_analytics_subscription_renewal_tracking', '__return_false' );
Initial subscription orders are unaffected by these filters and continue to fire as normal purchases on every active pixel.
Why is nothing showing up?
The most common reasons a store owner reports "I do not see any subscription data":
- You are looking at Google Ads. Google Ads reports the initial order as a regular conversion; there is no separate "subscription" report to look at. If the initial conversion is showing up in Google Ads, subscription tracking is working. To make subscriptions visible as subscriptions in Google Ads, you need to raise the Subscription Value Multiplier so the conversion value reflects CLV.
- You are looking at Meta but Meta CAPI is not active. The subscription lifecycle events (
Subscribe,RecurringSubscriptionPayment,CancelSubscription) only fire when the Meta Conversions API is configured (premium). They never fire from the browser-side pixel. - You are looking at GA4 renewals and the premium tier is not active. The server-side renewal
purchaseevents to GA4 require the Measurement Protocol integration, which is premium. - You disabled renewal tracking with a filter. Re-check your
functions.php/snippets plugin for the filters above.
