How to track free trial to paid for Meta Ads
The moment that matters is a card being charged in a billing system days or weeks after the click, with no page, no tag and no session anywhere near it. Browser-side tracking cannot see it by construction, so the chain runs through the account record: identifier captured at signup, stored, and referenced when the first invoice clears. On Meta Ads the specifics that matter are the click identifier (fbclid, which becomes the _fbc cookie), the import mechanism (the Conversions API), and deduplication is on event_name and event_id together, so both paths must send the same ID and the identically-cased name. The chain only works end to end if the identifier is captured on landing and stored on the account record in your product database — no cookie survives the gap between ad click and payment sent back.
Free30 minutesNo obligation
Specific to Meta × Free trial → paid
Meta trial-to-paid: StartTrial for bidding, Subscribe for reporting
On Meta, send StartTrial at signup with a modelled value and Subscribe from your billing webhook when the first invoice clears, both through the Conversions API with the fbc saved on the account plus hashed email. With Meta's 7-day click window, the payment from a 14- or 30-day trial usually lands outside attribution.
Meta's standard events already split this funnel: StartTrial for the signup and Subscribe for the first charge. The arithmetic decides which one bids. A 14-day trial puts the payment on day 14 at the earliest, a week past Meta's default 7-day click window, so Meta will receive the Subscribe and usually be unable to credit it to the ad. Optimize delivery on StartTrial, and send Subscribe anyway so the value comparison and your audiences reflect paying customers.
Make the StartTrial value honest. Meta documents a predicted_ltv parameter for StartTrial and Subscribe; fill it from your own trial-to-paid rate by plan rather than the list price, and confirm the current parameter list before building. If one plan converts at twice the rate of another, that difference belongs in the value, because it is the only way Meta learns which trials are worth buying.
The quiet failure is the billing email. The person who starts the trial signs up with a personal address, then a colleague pays with the company card under an accounts@ address. Matching the Subscribe on the billing customer's email finds nobody. Send the email and the fbc stored on the account record, not whatever the payment processor holds, so the payment matches the same person Meta saw click.
Meta · Free trial → paid · what breaks
Where this funnel usually breaks — Meta · Free trial → paid
- 01
The identifier lives in a cookie
Which is long gone by the time the card is charged. It has to be a column on the account, not browser storage.
- 02
Trial start valued as a full subscription
Reporting revenue that may never arrive, and teaching bidding to buy trials that never convert.
- 03
Trial length pushes the payment outside the window
A 30-day trial plus a slow start eats a third of the import window before the payment even happens.
Meta · Free trial → paid · the fix
What working looks like — Meta · Free trial → paid
Payment sent back attributed to the click
Weeks later if necessary, because the identifier lives on the account record in your product database rather than in a cookie.
Meta bidding fed the real outcome
Via the Conversions API, so it optimizes toward paying customers rather than toward trial signups.
A reconciliation that closes
Your billing system's record of first successful payment matched per record against what Meta Ads reports, over a fully closed window.
Meta · Free trial → paid · architecture
The exact event sequence — Meta · Free trial → paid
Nothing between stages two and four involves a browser, which is why cookie-based approaches cannot work here regardless of configuration.
- 1
Ad click
Identifier captured on landing, before the signup flow begins.
- 2
Signup
Written to the account record as a permanent field. This is the only durable place it can live.
- 3
Trial start
Sent as its own event with a modelled value, not the full plan price — it's volume for bidding to learn from, not revenue.
- 4
First payment clears
From the billing webhook. The conversion that actually matters.
- 5
Payment sent back
Referencing the click from weeks earlier, if it's inside the import window.
Meta · Free trial → paid · diagnose
What's specific to Meta Ads
- 01
Click identifier: fbclid, which becomes the _fbc cookie
fbclid arrives on the landing URL and is normally written into the _fbc cookie. If it isn't captured on landing, _fbc never exists — and _fbc is the strongest click signal Meta has, so its absence caps your match quality regardless of what else you send. Forward _fbp too, from the browser rather than regenerating it server-side.
- 02
Import mechanism: the Conversions API
Server events go through CAPI with an action_source describing where the conversion happened. Offline outcomes flow through the same API rather than a separate product. Verify current field names against Meta's documentation before building — this surface changes.
- 03
Deduplication
This is the mechanism that decides whether adding CAPI helps or doubles your conversions. Both the Pixel and the server event must carry the same event_id — the order or booking reference works best, because both sides can produce it without coordinating. A case difference in the event name alone produces two events even with a matching ID. Read the Deduplicated indicator in Events Manager over a full week, not one session.
- 04
Window and timing
Meta's default attribution is a 7-day click and 1-day view. View-through is included by default, which is a large part of why Meta claims more conversions than your other platforms — that overlap is expected rather than a fault.
- 05
The Meta gotcha
Match quality is where most Meta accounts lose attribution, and it's almost always normalization rather than coverage. An email hashed with a capital letter, or a phone hashed with brackets, produces a perfectly valid hash that matches nobody and errors nowhere. Normalize first, then hash, and read the score per event rather than overall.
Meta · Free trial → paid · prove
How to prove the chain works — Meta · Free trial → paid
Source of truth
your billing system's record of first successful payment
- The same identifier confirmed on the account record in your product database after a full real journey through every step.
- Payment sent back confirmed arriving at Meta Ads, verified by the Deduplicated indicator and the per-event match quality score, both read over seven days.
- Your billing system's record of first successful payment reconciled against Meta Ads per record over a fully closed window.
Meta · Free trial → paid · free audit
What we check in the free audit
- Click identifier: fbclid, which becomes the _fbc cookie
- Import mechanism: the Conversions API
- Deduplication
- Window and timing
- The Meta gotcha
Checked against
your billing system's record of first successful payment
Free30 minutesNo obligation
Meta · Free trial → paid · when not to buy
When this doesn't apply to you — Meta · Free trial → paid
- If your trial converts within the same session — a paid trial with an immediate charge, say — this is just a purchase event and none of the complexity below applies.
- If you're advertising a business type Meta restricts data collection for — health being the obvious one — the parameters you can legitimately send are narrower, and that constraint should shape the build rather than be worked around.
- If your cycle from click to payment sent back regularly exceeds the import window, the final event can't drive bidding whatever you build. Optimize toward an activation milestone inside the trial instead and use the later data for budget decisions rather than for bidding.
- If almost none of your accounts carry a click identifier today, that's the whole project.
Meta · Free trial → paid · what we deliver
The implementation, on Meta Ads
Capture fbclid and _fbc on landing
fbclid is appended automatically on ad clicks. Capture it on landing and persist it — if you only ever read the _fbc cookie later, you're depending on a cookie that Safari caps at seven days when it's set through JavaScript.
Persist it to the account record in your product database
Write it to the account record at signup as a permanent field, alongside the customer ID, so every later billing event can reference it.
Send payment sent back from the record
The billing webhook fires on the first successful invoice and sends the amount actually charged. Dispatched to Meta Ads through the Conversions API.
Deduplicate and reverse
Deduplication is on event_name and event_id together, so both paths must send the same id and the identically-cased name. Refunds and first-month cancellations should reverse, or reported revenue only ever climbs while the cohort shrinks.
FAQ
Meta · Free trial → paid questions, answered
StartTrial in most cases, because the first payment on a 14-day or longer trial falls outside Meta's default 7-day click window and arrives too late to steer delivery. Send Subscribe anyway for reporting and value checks.
A parameter Meta documents for StartTrial and Subscribe that passes an expected lifetime value. Fill it from your own trial-to-paid rates by plan, not the list price, and confirm the current parameter list in Meta's documentation.
Because trial-to-paid rates differ sharply by channel, and signup-optimized bidding reliably finds the channels producing the most trials, which are usually the ones producing the fewest customers.
It doesn't, as a cookie — the gap is too long. It has to be written onto the account record in your product database at the point of ad click, where it lives as a field rather than as browser storage.
event_name from the standard set with exact casing, event_time in seconds, a shared event_id, an action_source, and hashed user_data that was normalized before hashing. Purchase additionally requires value and currency.
Two to four days for the implementation, plus a closed reconciliation window before we'd call it verified. Capture and persistence are the fiddly parts; the import itself is usually an afternoon.
Yes, and the reference pages on this site cover the mechanics. The part that's genuinely tedious rather than clever is keeping fbclid and _fbc alive through multi-step forms and a signup flow that spans several steps or an OAuth bounce, which fails silently at every stage.
More on Meta · Free trial → paid
- Google Ads · Free trial → paidHow to track free trial to paid for Google Ads
- TikTok · Free trial → paidHow to track free trial to paid for TikTok Ads
- Microsoft · Free trial → paidHow to track free trial to paid for Microsoft Ads
RELATED GUIDES
Funnels next to free trial to paid, and the checks that close it
- Meta · Freemium → paidHow to track freemium signup to paid upgrade for Meta Ads
- Meta · PQL → closed wonHow to track product-qualified lead to closed won for Meta Ads
- Meta × SubscriptionsHow to reconcile Meta Ads against your billing system
- Meta · SaaSMeta Ads conversion tracking for SaaS companies
- Meta · Yoga and pilatesMeta Ads conversion tracking for yoga and pilates studios
- Stripe Billing → MetaConnecting Stripe Billing to Meta Conversions API
- Square → MetaConnecting Square to Meta Conversions API
- Meta · Free tool → paid planHow to track free tool to paid plan for Meta Ads
Free · 30 min
Get free trial to paid tracked properly on Meta Ads
Free30 minutesNo obligation
