DATALYR
For Stripe SaaS spending $10K+/mo on paid

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.
The real problem

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.
01
Ad click
02
Trial signup
03
Paid sub
only signal: trial signup
Meta Ads logo
~ 40%
matched
~ 60%
lost
What Meta actually sees from a default Stripe install.

A pixel that optimizes on trials keeps buying you people who cancel.

And you keep paying for it.

The solution

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.

01
Ad click
We tag the click
minutes later, signup
02
Stripe Checkout
Checkout carries the click
Identity Bridge
7–30 days later, trial to paid
03
Payment made
Sent back to Meta
Enriched identity
{click,customer,location,plan value,MRR}
Meta Ads logoGoogle Ads logoTikTok Ads logo
The Identity Bridge, ad click to paid MRR.
Here's exactly how it works

Live in 10 minutes. Here's the whole setup.

01

Drop in the web SDK

One script tag on your marketing site and your app. It captures fbclid, gclid, ttclid, and your UTMs at the first touch. No code to write.
02

Connect Stripe

Stripe Connect OAuth, one click. No webhook signing secrets to paste. We handle it. Your MRR pulls in automatically.
03

Pass the visitor ID into Checkout

One line in your Checkout Session: client_reference_id set to datalyr.getVisitorId(). For subscriptions, drop datalyr_id into metadata. That’s the whole change.
04

Switch Meta onto payment_succeeded

Turn off trial_started. Optimize on the paid event instead. Meta starts bidding for buyers, not browsers.
LiveEvents
  • payment_succeededjust now
  • checkout_completed11s
  • trial_started9 days
  • signup9 days
  • page_view9 days
payment_succeeded · attribution chain
utm_sourcefacebookgclidCj0KCQ…aAvDclient_reference_iddl_9f3a…plan$99/momrr$99.00
Your first attributed subscription, in the dashboard.
What doesn't work

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.

Before vs after

What your funnel looks like before and after Datalyr.

A $20K/mo Meta-spend B2C SaaS, 30 days post-install.

Before — Meta optimized on trial_startedAfter — DATALYR Identity Bridge
Reported Meta ROAS1.1x2.8x
Cost per paid subscription$94$58
Trial-to-paid conversion rate8%19%
Rebills credited to original adNoYes
Meta optimization signaltrial_startedpayment_succeeded

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.

Datalyr2.8xStripe default1.1x
W1W2W3W4W5W6W7W8
Same spend, same creative. Different signal.
Real results
“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.

Us vs them

Most tools report. Datalyr fixes the signal.

DatalyrThe rest
Stripe client_reference_id wiring
Rebills attributed to original ad
Trial → paid window stitching (7-30d)
Server-side Meta/Google/TikTok forwarding
Refunds + cancellations handled
No rip-and-replace of existing Stripe code
Web + mobile in one workspace
What you're probably thinking

“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.

Your move

Two choices from here.

Path 1

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.

Path 2

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.