If you run ads for a SaaS, Google Ads should learn from the customers who pay and stay, not the ones who sign up and leave. You do that by sending Stripe events to Google as offline conversions, then updating them as the subscription changes. The first paid invoice goes in with the click ID and the dollar amount. An upgrade restates that conversion to a higher value. A downgrade restates it lower. A refund or an early cancellation retracts it. Most tools send the first payment and stop, so Google keeps optimizing for signups that churn. The rest of the lifecycle is what actually moves your cost per customer.
Here is the trap that is specific to SaaS. Ecommerce tools were built around a single purchase: fire one conversion, done. A subscription moves, trial, first charge, upgrade, downgrade, refund, churn. Report only the first charge and Google optimizes for whatever looks like an ecommerce sale, with no idea whether that customer was worth keeping.
Which Stripe events map to which Google Ads actions
This table is the whole idea. Each Stripe subscription event has a matching Google Ads action that keeps the value honest.
| Stripe event | What it means for SaaS | Google Ads action | What it teaches the algorithm |
|---|---|---|---|
| First invoice paid | New paying customer | Offline conversion import (click ID + value) | Who actually becomes a customer |
| Subscription updated, MRR up | Upgrade or expansion | Restatement to a higher value | Find more customers who grow |
| Subscription updated, MRR down | Downgrade | Restatement to a lower value | Stop overpaying for shrinking accounts |
| Charge refunded | Refund | Retraction, or restatement for a partial | Drop revenue that came back |
| Subscription canceled early | Churn inside the window | Retraction | Stop finding look-alikes who leave |
Two real Google Ads operations do the work. A restatement changes a conversion's value without changing the count, which is an upgrade or a downgrade. A retraction sets the value to zero and removes it from the count, which is a refund or a cancellation. Both are part of the Google Ads conversion adjustment API, and both are keyed to the original transaction ID. That ID is the anchor.
How the Stripe payment gets back to Google Ads
The chain starts at the ad click. Google attaches a gclid to the landing URL (plus gbraid and wbraid on app and iOS traffic). You capture it, store it against the visitor, and carry it onto the Stripe customer when they pay. That link is the join key. Everything hangs off it.
The gclid is valid for 90 days, so capture it on the first click and keep it. When the first invoice is paid, that click ID and the real amount go to Google as an offline conversion. If the click ID is missing, you fall back to enhanced conversions, which match on hashed email, phone, and name. The cleaner those fields, the higher the match rate, so Attributely enriches them server-side before the event reaches Google. From then on, every subscription change is an adjustment against that same conversion, so the value Google sees tracks the value you collected.
How to handle upgrades, downgrades, refunds, and churn
This is where SaaS gets its own playbook.
An upgrade is a restatement that raises the conversion value. Say a customer on a $49 plan moves to $199: the conversion Google scores becomes worth $199, so your bidding pulls toward accounts that expand. A downgrade is the same move in reverse, so you stop paying premium prices for revenue that shrank.
A refund is a retraction when it is full, or a restatement to the lower amount when it is partial. A cancellation inside the adjustment window is a retraction: the customer left, so the conversion that taught Google to find more of them gets pulled. No customer, no conversion. Skip this step and the campaign that looks like your best on paper can be your worst one in the bank.
What are Google Ads' conversion and adjustment windows?
These windows decide whether any of this counts, straight from Google's offline-import rules. Miss one and the event silently does nothing, with no error.
| Window | Limit | Why it matters |
|---|---|---|
| Click-through conversion window | 1 to 90 days (default 30) | a conversion counts only if it lands within this window of the click |
| GCLID validity | 90 days | the click ID expires, so capture it early |
| Offline import deadline | within 90 days of the last click | an upload past 90 days is dropped, not flagged |
| Conversion adjustment window | about 55 days after the conversion | the last day you can restate or retract |
| Smart Bidding pickup | a few days | the lag before an adjustment changes how Google bids |
So the lifecycle you can act on is the early one: the first 8 weeks of refunds, fast churn, and upgrades. That is the window that matters. The early distortion is the worst kind anyway, because it is where Google is still deciding who to chase. After 90 days you cannot adjust, so you send the right value up front and let Google learn from the pattern. Any tool that promises to retract a customer who churns six months later is selling something Google will not accept.
Why subscription tracking is different from ecommerce
Triple Whale is built for Shopify stores. Hyros is built for high-ticket and call funnels. Both fire a clean purchase event and move on. A subscription is not a one-time sale: that single event counts the trial-to-paid moment and ignores the refund, the expansion, and the churn that decide whether the customer was profitable. Attributely captures the click ID, ties it to the Stripe customer, and sends each lifecycle event to Google as the right action, inside these windows, so your campaigns optimize for customers who stick.
FAQ
How do I send Stripe conversions to Google Ads?
Capture the Google click ID (gclid) on the ad click, store it with the visitor, and attach it to the Stripe customer. When they pay, send that click ID and the amount to Google as an offline conversion. Attributely does this server-side, so you do not build the pipeline.
Can Google Ads track subscription revenue, not just the first payment?
Yes, but not by default. The first payment goes in as an offline conversion, and later changes are sent as adjustments: a restatement when the plan value changes, a retraction when a charge is refunded or a subscription is canceled. That keeps the value Google optimizes toward in line with real revenue.
How do refunds and cancellations work in Google Ads?
A full refund or an early cancellation is a retraction, which sets the conversion value to zero and removes it from the count. A partial refund is a restatement to the lower amount. Both must be sent within Google's adjustment window, which is about 55 days after the conversion was first recorded.
What is the Google Ads conversion window for offline conversions?
The click-through window can be set from 1 to 90 days, with a 30-day default. An offline conversion uploaded more than 90 days after its last ad click will not import, so the click has to reach a payment inside that window to count.
Do I need a GCLID to send Stripe conversions to Google Ads?
The gclid is the most reliable match, with gbraid and wbraid covering app traffic. If it is missing, enhanced conversions can match on a hashed email instead, at a lower rate. Capture the click ID early and keep it.
Send the first payment and you know which ads find signups. Send the whole lifecycle and you know which ads find customers. For a SaaS, that is the only number worth bidding on.
Make Google bid for revenue, not signups. Attributely forwards every payment, upgrade, and refund to Google as the right conversion, so it chases customers who pay and stay, and your cost per customer falls. Free to start. Connect your stack →
