If a customer pays $29/month for your subscription product over 12 months, GA4 reports their total revenue as $29. Not $348. GA4 is wrong by 91%. The reason: every subscription renewal after the first purchase happens server-side—through WooCommerce cron jobs or payment gateway webhooks—with no browser session. No browser means no JavaScript. No JavaScript means GA4 never fires a purchase event. Your recurring revenue is invisible.
This isn’t a configuration error. It’s an architectural limitation. WooCommerce Subscriptions has over 100,000 active installations (WooCommerce Marketplace, 2025), and subscription ecommerce is growing more than 20% year over year (Recharge, 2025). Yet GA4 has no native mechanism to track the revenue that makes subscription businesses valuable: the renewals.
Why GA4 Can’t See Renewal Payments
Here’s the thing. When a customer first subscribes on your WooCommerce store, they’re on your website. Their browser loads the page, JavaScript executes, and GA4’s tracking script fires a purchase event. That first transaction gets recorded.
Every renewal after that follows a completely different path. WooCommerce Subscriptions processes renewals through server-side mechanisms—either WordPress cron jobs that run on a schedule, or payment gateway webhooks triggered by Stripe, PayPal, or your processor. There is no browser open. There is no page loaded. There is no JavaScript executing. GA4’s tracking code sits idle because there’s nothing to trigger it.
This is not unique to GA4. Every client-side tracking tool—Google Analytics, Facebook Pixel, Google Ads conversion tag—fails here for the same reason. Browser-based tracking requires a browser. Renewals don’t have one.
The only existing plugin that attempted to bridge this gap, the MasterNs WooCommerce Subscriptions GA Analytics addon, explicitly states it does not support GA4 (MasterNs Studio, 2024). That leaves WooCommerce subscription stores with no off-the-shelf solution.
The Downstream Corruption: LTV, ROAS, and Ad Optimization
Missing renewal revenue doesn’t just create a reporting gap. It corrupts every metric and algorithm that depends on accurate revenue data.
Your GA4 Lifetime Value reports are fiction. GA4 calculates LTV based on tracked revenue per user. If a subscriber pays $49/month for 8 months, GA4 shows $49 lifetime value. The real number is $392. Multiply that error across your entire subscriber base, and your LTV calculations are off by a factor of 8x or more.
Your ROAS calculations only include first-purchase revenue. If you spent $50 to acquire a subscriber whose first payment is $29, GA4 shows a 0.58x ROAS—a loss. But that customer’s actual 12-month value is $348, making the real ROAS 6.96x. You might be killing profitable campaigns because GA4 is reporting losses on your best customers.
GA4 already underreports ecommerce revenue by 15-50% due to ad blockers and browser restrictions (Seresa, 2025). For subscription stores, the gap is dramatically wider because every renewal compounds the undercount.
Facebook and Google Ads Can’t Optimize for Retention
Here’s where the invisible revenue problem gets expensive. Facebook’s algorithm and Google Ads’ Smart Bidding both optimize based on conversion data you send them. When renewals are invisible, these platforms only see first-purchase conversions.
That means Facebook optimizes for people who buy once—not people who stay subscribed for 12 months. The algorithm has no signal for customer retention because you’re not sending it renewal events. It can’t distinguish a one-month churn from a loyal annual subscriber. Both look identical: a single $29 purchase.
Churn is equally invisible. When a subscriber cancels, GA4 has no event for that either. You can’t calculate churn rate in GA4, you can’t segment retained vs. churned customers in your ad platforms, and you can’t build lookalike audiences based on your highest-LTV subscribers. Bad data costs organizations an average of $12.9 million annually (Gartner, 2024)—and for subscription businesses, invisible renewals are one of the largest contributors.
You may be interested in: Your WooCommerce Refunds Are Breaking GA4 Revenue
The Fix: Server-Side Tracking via Measurement Protocol
The solution is straightforward in concept: send purchase events from your server to GA4 every time a renewal completes. Google’s own Measurement Protocol documentation confirms this is the intended approach for server-to-server event tracking.
The GA4 Measurement Protocol is a server-to-server API that sends events directly to GA4 without requiring browser JavaScript. For subscription renewals, each event needs:
- A unique
transaction_idfor each renewal payment (prevents duplicate counting) - A consistent
client_idoruser_idthat ties the renewal back to the original subscriber - Full ecommerce parameters: revenue, currency, item details, subscription period
The same principle applies to Facebook Conversions API and Google Ads Enhanced Conversions. Every platform that needs revenue data requires a server-side event for every renewal—not just the first purchase.
OptimizeSmart’s GA4 tracking guide confirms it: subscription renewals beyond the first payment must be tracked server-side using the Measurement Protocol because they’re not triggered by direct user actions on the website.
Making the Full Subscription Lifecycle Visible
A complete subscription tracking implementation captures four event types that GA4 misses entirely:
- Renewal payments:
purchaseevent with unique transaction ID for every recurring charge - Subscription upgrades/downgrades: plan changes that affect revenue forecasting
- Failed payment retries: signals that a subscriber is at risk of involuntary churn
- Cancellations: the event GA4 never captures, making churn rate invisible
When every renewal reaches GA4, your Lifetime Value report finally reflects reality. When every renewal reaches Facebook, the algorithm learns which audiences retain—not just which audiences convert once.
You may be interested in: Why Your GA4 Purchase Events Are Missing WooCommerce Conversions
How Transmute Engine Makes Renewals Visible
Transmute Engine™ hooks directly into WooCommerce Subscription renewal actions at the server level. When woocommerce_subscription_renewal_payment_complete fires, the inPIPE plugin captures the event and sends it via API to the Transmute Engine server running on your subdomain. From there, a purchase event with a unique transaction ID and consistent user identification routes simultaneously to GA4, Facebook Conversions API, Google Ads, and BigQuery—making the full subscription lifecycle visible to every platform from a single pipeline.
Key Takeaways
- GA4 only captures the first subscription purchase because renewals fire server-side with no browser session—making LTV calculations wrong by up to 91%.
- ROAS reporting only includes first-purchase revenue, potentially showing losses on your most profitable subscriber acquisition campaigns.
- Facebook and Google Ads algorithms can’t optimize for retention because they never receive renewal events—they only see first purchases.
- The GA4 Measurement Protocol is the only fix—server-to-server event tracking that sends purchase events for each renewal with unique transaction IDs.
- A complete solution tracks renewals, upgrades, failed payments, and cancellations—not just the initial subscription purchase.
GA4 relies on JavaScript running in a visitor’s browser to capture purchase events. WooCommerce Subscription renewals fire server-side through cron jobs or payment gateway webhooks—there is no browser session, so GA4’s tracking script never executes. The only way to capture renewals is through the GA4 Measurement Protocol, which sends events directly from your server to GA4 without requiring a browser.
You need server-side tracking using the GA4 Measurement Protocol. This means sending a purchase event from your server to GA4 every time a renewal payment completes, including a unique transaction_id and consistent client_id or user_id to tie the renewal back to the original subscriber. Browser-based tracking plugins cannot capture renewals because no browser is involved in renewal processing.
GA4’s Lifetime Value report only includes revenue from events it captures. Since renewal payments happen server-side without a browser, GA4 only sees the initial subscription purchase. A customer paying $29/month for 12 months shows $29 lifetime value in GA4 instead of $348. Every renewal that fires without a browser widens the gap between GA4’s reported LTV and your actual customer value.
Your subscription revenue deserves to be counted—all of it. See how Seresa makes every renewal visible →



