SaaS Trial Funnel
Track a SaaS registration funnel end to end – from the ad or organic click to the free sign-up, the started trial and the paid purchase. Connect your ad channels, tag your organic and email links, send sign-up and trial events from your app, and capture recurring revenue with Stripe.
A SaaS trial funnel turns a click into a free sign-up, a sign-up into an active trial, and a trial into a paying subscriber. This guide wires up tracking for every stage of that journey, so you can see which ad, post or email actually produced a sign-up, a trial and a purchase – not just a click. Complete the steps in the order they're given.
What you'll be able to see
For every channel → campaign → ad set → ad: sign-ups, trials started, paying customers and revenue / MRR – with cost per sign-up, CAC and ROAS – for your paid, organic and email traffic side by side. In short: which source brings trials that convert and stay, and which one quietly fills your funnel with churn.
This builds on the tracking foundation
A funnel guide assumes the basics are already live: a tracking domain and the tracking script installed on your marketing site and app. If you haven't done that yet, run the Advertiser playbook first – it covers workspace basics, the tracking domain and the script – then come back here for the SaaS-specific stages.
The chain you're building
A SaaS funnel is different from a webinar or sales-call funnel in one important way: the interesting moments are spread over days or weeks, and almost all of them happen inside your app, not on a marketing page. LeadJourney stitches them back into one journey, matched on a click ID (or the user's email):
Ad / organic click → free sign-up → trial started → trial converts → paying customer & revenue.
If you want the concept behind that chain first, read How attribution works. Otherwise, follow the steps below.
What you'll set up
| Step | Covers | Why it matters |
|---|---|---|
| 1. Ad channels | Connect Meta, Google, LinkedIn, Bing + tracking parameters | Pulls spend automatically and tags every paid click down to the ad. |
| 2. Organic & email | Google Organic, email, social, custom links | Tags the non-paid traffic that also brings sign-ups. |
| 3. Free sign-up | Capture the click ID at sign-up and send a FreeSignup event | Records the sign-up and ties the whole later journey to the click. |
| 4. In-product lifecycle | TrialStarted, TrialEnded sent from your app | Turns sign-ups into a real trial funnel per campaign. |
| 5. Purchase & revenue | Stripe (subscriptions) or a WonClient event | Unlocks ROAS, CAC payback and LTV per channel and ad. |
Recommended events for a SaaS trial funnel
Before you start sending data, decide which milestones you'll track. These are the stages most SaaS
trial funnels measure – create the ones that exist in your product under
Settings → Events. Each name is
just the type you'll send, so rename them to whatever your team already says.
| Event | When it fires | Sent from |
|---|---|---|
FreeSignup | Someone creates a free account. | Your app (step 3) |
TrialStarted (optional) | The trial actually begins (may equal sign-up). | Your app (step 4) |
TrialEnded (optional) | The trial expires without converting. | Your app / billing logic (step 4) |
WonClient | The trial converts to a paid plan – send a revenue value. | Stripe or your app (step 5) |
You don't need every stage on day one
Two well-chosen stages already give a usable funnel. Start with FreeSignup and WonClient,
then add TrialStarted and TrialEnded once those are flowing.
Set up your ad channels
Connect the platforms you spend on so cost data syncs automatically – that's the "spend" half of every cost-per-sign-up and CAC number. LeadJourney also tags each ad click down to the campaign, ad set and ad, so a sign-up can be traced back to the exact creative that drove it.
Connect your ad platforms
OAuth into Meta, Google, LinkedIn and Bing, then add the LeadJourney tracking parameters.
After connecting, each platform adds the lj_ tracking parameters to your ad URLs
automatically, so every paid click that lands on your site already carries its campaign, ad set and
ad. See How attribution works for what those
parameters carry.
B2B SaaS leans on LinkedIn
If LinkedIn is a core channel for you, connect it so its cost syncs and clicks are tagged the same way Meta and Google are. You connect each platform once and then turn on every ad account it can reach – see Connect multiple ad accounts.
Configure tracking for organic & email sources
Trials rarely come from paid ads alone – a lot of sign-ups start with Google organic, your email list, a LinkedIn post, a docs page or a partner. Paid platforms auto-tag their clicks, but these non-paid links have to be tagged by hand, or LeadJourney can only file the visit under Direct / Unknown.
Build a tracked link for each non-paid source with the UTM Builder and use it everywhere you share your site – your newsletter button, your bio link, the organic post.
UTM parameters & the UTM Builder
Tag organic, email and social links so they show up in your reports like paid ads.
One link per source
Use a consistent lj_channel per source – email, linkedin_organic, google_organic, a custom
key for partners – so every sign-up is grouped under the right channel. Building a separate link
per placement (newsletter vs. bio vs. post) lets you compare which one actually produces trials.
Track the free sign-up
This is the heart of a SaaS funnel – and the one stage with a twist. The sign-up happens in the browser, where the click ID is still available. But the later stages – trial started, trial ended, purchase – fire server-side, days later, long after the browser is gone. So you capture the click ID once and reuse it forever:
Capture the click ID once, store it on the user, replay it forever
At sign-up, read localStorage.getItem('clickId') and save it on the user record in your
own database (a column like lj_click_id). Every later lifecycle event – trial started, trial
ended, even the purchase – reads that stored value back and sends it along. One capture, reused for
the whole customer journey.
Then send a FreeSignup event from your app the moment the account is created. Because these are
in-product state changes only your app knows about, you send them yourself through LeadJourney's
Conversion API (a tiny server route that keeps your Postback Secret safe).
Track your full SaaS funnel (with code)
The capture-and-replay pattern, the server route, and each lifecycle event with copy-paste code.
Email is your safety net
Always send the user's email with every event. LeadJourney also matches on email, so even if a click ID was never captured (an organic or direct sign-up) the stages still stitch onto the same person – and can be attributed later if they clicked a tracked link before. The deep dive on the sign-up event, including Google / Microsoft SSO, is in Track sign-ups in your app.
Track the in-product lifecycle
After sign-up, the journey continues inside your product: the trial starts, runs, and either
converts or expires. These milestones don't happen on a marketing page, so your app sends each one to
LeadJourney as an event – the same Conversion API route as the sign-up, just a different type
and the stored click_id.
Mirror the stages that matter for your funnel – fire TrialStarted when the trial actually begins
(which may be at sign-up, or later when the user adds a card or picks a plan) and TrialEnded from
your billing logic or a nightly cron when a trial expires without converting.
Send your lifecycle events
Create TrialStarted and TrialEnded and grab the Conversion API credentials.
De-duplicate in-product events
Lifecycle events are often sent from retried webhooks or a cron that re-scans users, so the
same event can fire twice for one person. Set FreeSignup, TrialStarted and TrialEnded to
Ignore duplicate postbacks in the Events Manager to keep your funnel counts honest. See the
mode table in Events & the Events Manager.
Keep TrialEnded out of ad optimisation
TrialEnded is a drop-off signal, not a conversion – it's useful for spotting which campaigns
bring trials that never convert. Turn Send back to Ads off for it so your ad platforms don't
optimise toward people whose trial expired.
Track the purchase & revenue
The last link is the paid conversion – the trial turns into a subscription. You have two ways to capture it; pick whichever matches how you bill:
- From Stripe (native integration). If you bill through Stripe, connect it once and map payment
succeeded (or subscription created) →
WonClient. Payments, subscriptions and refunds then flow in automatically, attributed to the campaign and ad that earned them – no code. The tracking script even decorates your Stripe Payment Links with the click ID, so payments tie back on their own. - From your app (Conversion API). If you bill outside Stripe, fire a
WonClientevent from the same server route when the trial converts, and include arevenuevalue.
Connect Stripe
Auto-capture purchases, subscriptions and refunds as revenue, attributed to the right campaign.
Decide how recurring revenue shows up
A subscription pays every month. Set WonClient to Edit conversion with new data for current
MRR / plan value, or Keep original data, increment payout for total collected. Net out
cancellations with a negative revenue on a Stripe refund, or a Churned event. Full detail in
Events & the Events Manager and the
SaaS funnel guide.
Always send a revenue value
ROAS, CAC payback and LTV only appear when your conversions carry a revenue value. Whether the
sale comes from Stripe or your own billing, make sure the amount travels with it – otherwise
LeadJourney can show paying customers, but not the money.
See your results
Once data is flowing through all five stages, your SaaS funnel lives in the reports:
- Traffic Channel Report – every source side by side: clicks, cost, sign-ups, trials, paying customers, revenue and ROAS. Your "where should the budget go?" view.
- Campaign Report – drill campaign → ad set → ad and sort by trials or paying customers to find which creative brings buyers that stay.
- Lead Overview – the real accounts behind the numbers, each with their full journey from click to sign-up to paying customer.
- Report Builder & Dashboards – build CAC, payback and LTV views and pin them where the team will see them.
Just ask
Don't want to build a report? Ask in plain English with Ask Atlas – "Which campaign had the lowest cost per paying customer last quarter?"
Tips for clean SaaS trial data
- Store the click ID at sign-up – this is the whole game. Without it, trials and purchases that fire days later, server-side, can't attribute to the ad that earned them. Email is your backup, not your primary key.
- Send a test first. Open your app from a tracked link, walk a test account through sign-up → trial → purchase, and watch each event turn Active in the Events Manager before you trust the numbers. Inspect a single call in the API Postbacks log.
- Pick an attribution model that fits the cycle. SaaS journeys often span weeks – set your attribution window to cover the gap between sign-up and purchase (B2B SaaS often needs 60–90 days), and consider first click so the source that started the journey gets credit.
- Don't forget non-API spend. Add SEO, content and tooling costs under Channel Costs so blended CAC is honest.
Related articles
Track your full SaaS funnel (with code)
Every lifecycle event from sign-up to purchase, with copy-paste code.
LeadJourney for SaaS
The complete SaaS playbook: foundation, lifecycle, Stripe, CRM and reporting.
Connect Stripe
Auto-capture purchases and subscription revenue, attributed to the right campaign.
Events & the Events Manager
Create the events and Conversion API route every stage of the funnel sends.
Advertiser playbook
The full foundation: workspace, tracking domain and script.
Webinar Funnel
Track a webinar funnel end to end – from the ad or organic click to the registration, the booked sales call and the payment. Connect your ad channels, tag your organic and email links, send webinar registrations and CRM milestones via webhook, and capture revenue with your CRM or Stripe.
Sales Call Funnel
Track a sales call funnel end to end – from the ad or organic click to the booked call, the show-up and the closed deal. Full guide coming soon.