Meta is optimizing for trials. You sell subscriptions.
Datalyr ties every ad click to the paid subscription it produced. The signup, the trial, the upgrade, the rebill three months later. Then it feeds Meta, Google, and TikTok your real revenue. One line in Stripe Checkout. You're live in 10 minutes.
Datalyr isn't for everyone. Skip it if…
- You spend under $10K/mo on paid ads. The lift won't pay for the swap.
- You run zero paid traffic and grow on content and word of mouth.
- You don't bill on Stripe. We handle other processors, but this page is about Stripe.
- You don't care what a paid subscriber actually costs you.
Meta sees the signup. It never sees the sale.
You spend $10K, $30K, $50K a month on Meta.
The dashboard says “cost per signup is down.”
Your MRR says nothing changed.
And you’re stuck in the middle.
Not knowing which ads bring buyers.
Not knowing which ones bring tire-kickers who never pay.
Not knowing why your CAC keeps climbing while signups look cheap.
Here’s what nobody’s telling you.
Stripe can confirm a trial in seconds. So that’s the event you hand Meta.
The paid conversion lands 7 to 14 days later. Different device. Different IP.
Meta never connects it back. So it optimizes on the trial.
And it floods you with trial-takers who never convert. Every. Single. Day.
On a default Stripe install, Meta sees the trial and goes quiet. The paid subscription, the upgrade, the rebill in month six, all of it arrives after Meta has stopped watching. So Meta scales the cheapest signup it can find, not the customer who pays you for a year.

A pixel that optimizes on trials keeps buying you people who cancel.
And you keep paying for it.
Identity Bridge. Every Stripe payment carries its ad click.
Datalyr tags the click the second it lands.
You pass that tag into Stripe Checkout as the client_reference_id.
The payment reattaches to it. 14 days later, different device, doesn’t matter.
Then the whole event goes to Meta, Google, and TikTok. Server-side. In real time.
Every paid subscription phones home to the ad that started it.
Every rebill and every upgrade too.
Your pixel finally optimizes on revenue instead of signups.
And a pixel that can see your buyers is a pixel that stops chasing browsers.
{click,customer,location,plan value,MRR}


Live in 10 minutes. Here's the whole setup.
Drop in the web SDK
Connect Stripe
Pass the visitor ID into Checkout
Switch Meta onto payment_succeeded
- payment_succeededjust now
- checkout_completed11s
- trial_started9 days
- signup9 days
- page_view9 days
You've tried to fix this. It didn't work. Here's why.
Optimizing on trial_started
It's the only event Stripe sends back fast enough, so you use it. Then Meta scales trial-takers who never pay. You're optimizing for the wrong finish line.
Another attribution dashboard
It shows you which ad got the signup, after the fact. It doesn't put the paid conversion back in front of Meta. Reporting isn't optimization.
Email-matching your conversions
The buyer signs up on mobile and pays on desktop two weeks later. Different email casing, a work address, a typo, and the match breaks. Stitching identity on email alone leaks most of your paid subs.
GA4 and the native Meta Pixel
They read the client-side trial event and lose the trail at the 14-day window. Same blind spot Stripe hands everyone. Prettier charts.
What your funnel looks like before and after Datalyr.
A $20K/mo Meta-spend B2C SaaS, 30 days post-install.
Before.Same product, same ceiling. Meta optimizes on trial_started, because that’s the only signal it gets in time. You pour $20K into it. Trials look cheap, paid conversions stay flat, and ROAS sits at 1.1x while nobody can say why.
After. Same product, different outcome. Datalyr shows Meta which subscriptions came from which ad, rebills included. Meta stops chasing cheap trials and starts chasing buyers. ROAS climbs to 2.8x. Same spend, same creative, same everything.
“We switched off trial_started and watched Meta find actual buyers. CAC dropped 38% in a month.”
- 2.6x
- ROAS lift
- −38%
- Lower CAC
- 1 month
- To full payback
A B2C SaaS at $20K/mo on Meta, optimizing on trial_started because that’s what Stripe sent fast enough.
They installed Datalyr. Every paid subscription and every rebill started phoning home to its ad.
Meta stopped scaling trial-takers and started scaling buyers.
Most tools report. Datalyr fixes the signal.
“Do I have to change my Stripe integration?”
One line. Pass client_reference_id set to datalyr.getVisitorId() into your Checkout Session. For PaymentIntents and Subscriptions, drop datalyr_id into metadata. That’s the whole change.
“What if my trial-to-paid window is 30 days?”
No problem. The Identity Bridge holds the click context indefinitely. A day-30 conversion credits the original ad exactly like a day-1 conversion does.
“Will this work with my existing Meta Pixel?”
Yes. Datalyr runs alongside whatever you have. You just turn off the Pixel Purchase events for what we forward, so nothing double-counts. We show you how.
“Does this work for B2B with a sales-led motion?”
Yes. The visitor ID flows into Salesforce or HubSpot through identify(). MQL to SQL to closed-won attributes back to the original ad, even months later.
Two choices from here.
Keep optimizing on trials.
Close this tab. Keep running your ads the same way.
Keep letting Meta optimize on a trial it can confirm in seconds.
Keep scaling whatever signup is cheapest instead of whoever pays.
Every dollar you spend without knowing which ad made the subscription is a dollar lit on fire.
Install Datalyr.
10 minutes. One line in Checkout. Nothing about your app changes.
Meta starts learning from every paid subscription. Rebills included.
Then you watch payment after payment land with the ad attached.
CAC drops. ROAS climbs. And you didn’t rip out a thing.
Stop optimizing on signups.
Drop in the web SDK, connect Stripe, pass the visitor ID into Checkout. Your first attributed subscription lands the day a buyer pays.
Live in 10 minutes · Cancel anytime
P.S. You won’t rip out your Stripe code or your ads. You just stop optimizing on trials. If your CAC hasn’t moved by day 7, walk away. No contract, nothing to undo.