10
11 Comments

How to find the trial users most likely to convert

If you run a SaaS with free trials, not every signup deserves the same attention. Some trial users are showing signs that they may convert. Others look like valuable accounts but are getting stuck before they reach the point where they can see the product’s value.

Here’s a workflow that checks trial users at key points during the trial, scores their behavior, and helps you decide who may need sales attention, onboarding help, or no action yet.

The tools

  • Supabase: Stores the data for each trial user.
  • n8n: Runs the workflow, calculates the scores, and sends each user down the right path.
  • OpenAI: Looks at the trial data and writes a short explanation and email.
  • Gmail: Creates the email as a draft for you to review.

The workflow assumes your product already sends basic usage data to Supabase. If your data is stored somewhere else, use that system instead of Supabase in these steps.

Step 1 — Decide what behavior matters

First, decide which actions show that a user is getting value from your product. For a reporting tool, you could track:

  • Import data
  • Create a report
  • Connect an integration
  • Invite a teammate

Next, choose actions that can show buying interest:

  • Viewed pricing
  • Started checkout
  • Invited teammates
  • Asked a billing or plan-limit question

Don't rely on weak signals such as logins. Someone who logs in five times may be very engaged. It might also mean the user cannot work out what to do. Focus on actions that give you useful info.

Step 2 — Create one row for every trial user

In Supabase:

  • Open: Table Editor
  • Click: New table
  • Enter: Name → trial_watch

Add these columns (or customize them based on the signals you want to track):

  • user_id
  • email
  • trial_started_at
  • trial_ends_at
  • sessions_7d
  • core_actions_7d
  • key_feature_used
  • activation_events_completed
  • teammate_invited
  • pricing_viewed
  • Checkout_started
  • support_activity
  • account_fit
  • last_active_at
  • converted
  • last_agent_action
  • activation_score
  • intent_score
  • route
  • last_checked_at
  • outcome

Use Boolean for true/false fields, integers for numbers, timestamps for dates and times, and text for labels. activation_events_completed can be a text array.

Make sure your product sends the events you want to track to Supabase. The workflow cannot know about an event that your product doesn't record.

The sessions_7d and core_actions_7d fields should cover the last seven days only. For account_fit, use high, medium, or low based on info collected at signup. Don't use AI to guess this from an email address.

Now, all the trial data the workflow needs is in one place.

Step 3 — Make n8n check the trials every morning

Create a workflow in n8n.

Add: Schedule Trigger

Set:

  • Trigger Interval → Days
  • Days Between Triggers → 1
  • Trigger at Hour → your preferred hour
  • Set: Trigger at Minute → 0

Make sure the workflow timezone is correct, since n8n uses the workflow timezone — or the instance timezone if one is not set — to determine when the trigger runs.

The Schedule Trigger runs workflows at fixed times. Scheduled workflows must be saved and published to run automatically.

Next:

  • Add: Supabase
  • Select: Row
  • Select: Get all rows
  • Choose your trial_watch table
  • Turn on: Return All

Now, every morning, n8n receives the latest trial data it needs for the rest of the workflow.

Step 4 — Give each trial a simple score

Give each trial two scores before bringing in AI:

  • activation_score
  • intent_score

In n8n:

  • Add: Code
  • Select: Run Once for Each Item

Calculate:

  • activation_score
  • intent_score

Use simple rules to start:

  • Core feature used → +2 activation
  • Teammate invited → +1 activation
  • Pricing viewed → +1 intent
  • Checkout started → +3 intent

Treat these as high scores for now:

  • Activation score of 3 or more
  • Intent score of 2 or more

Then set the route:

  • High activation + high intent → sales
  • High-fit account + low activation → onboarding
  • Everything else → ignore

Also calculate _trial\day in this Code node. Then create _should\check and set it to true only for users who are on day 3, 5, or 7, have not converted, and have not reached the end of the trial.

You can change these rules later as you see which behaviors lead to conversions.

Step 5 — Only inspect users who need attention

Only send users to OpenAI if the user:

  • Is on trial day 3, 5, or 7
  • Has not converted
  • Still has time left in the trial

In your Code node, create a _should\check field that returns true only when all three conditions are met.

Then:

  • Add: Filter
  • Select: should_check
  • Choose: is true

Only those users continue to OpenAI.

Step 6 — Let AI explain what is happening

Now, let AI look at the trial data and explain what is going on.

Add: OpenAI

Select:

  • Resource → Text
  • Operation → Generate a Model Response
  • Model → gpt-5.6-luna
  • Output Format → JSON Schema

Create four string fields:

  • summary
  • missing_activation_event
  • email_subject
  • email_body

Use this prompt (or something similar):

You are reviewing a SaaS trial.

Use ONLY the supplied data. Never EVER invent activity.

The route has already been decided. Don’t change it.

In a single sentence, explain why this user received this route:

If route = sales, focus the message on helping them make a buying decision.

If route = onboarding, identify the most important activation step they haven't completed.

Return:
Summary
Missing_activation_event
Email_subject
Email_body

Pass in the user's trial data, including _activation\_events\completed, the scores, and route.

That's it. AI interprets the data and writes the message. Your scoring rules still control the route.

Step 7 — Split the trials by route

Next, separate the trials based on the route from your Code node.

  • Add: Switch
  • Select: Rules

Set the Switch rules using the route created in your Code node, not a new route generated by OpenAI.

Create three outputs:

  • route = sales
  • route = onboarding
  • route = ignore

The Switch node supports multiple conditional routes. For ignore, stop there. For sales and onboarding, continue to Gmail.

Step 8 — Create drafts before you automate sending

Start with drafts, not automatic emails.

Add: Gmail

Select:

  • Resource → Draft
  • Operation → Create

Map:

  • To Email → trial user's email
  • Subject → AI's email\_subject
  • Message → AI's email\_body

For the first few weeks, review the drafts before sending them. Look for wrong recommendations, awkward emails, and incorrect routes. Once you're happy with the results, automate the sending.

Step 9 — Close the loop

The last step is to feed the results back into the system.

After the Gmail step, add another Supabase node:

  • Select: Row
  • Select: Update a row

Update the record using _user\id. If a user can start more than one trial, use a unique trial ID instead.

Save:

  • activation_score
  • intent_score
  • route
  • last_checked_at

When a user converts, or their trial expires, have your app or a separate n8n workflow update outcome. This workflow only checks users at specific trial checkpoints, so let the app or separate workflow track the final outcome.

Then review your results every 20–30 completed trials:

  • Are users with high activation actually converting?
  • Are certain features showing up often among converters?
  • Are high-fit inactive users responding to onboarding?

Don't start with a smarter AI. Start with better signals.

on October 1, 2026
  1. 1

    One thing I'd add to Step 1: weight the setup action that unlocks everything else above the usage events that come after it. For an analytics or SEO product, that's usually connecting the data source. With UtilitySEO, nothing in the paid product means much until someone connects their own Search Console and GA4, so a trial that never does that is idle, not slow.

    The trial type changes the reading too. Ours is 30 days with no card, which tends to bring in more low-intent signups than a card-up-front trial. That makes the "no action yet" bucket bigger, and the threshold for sales attention matters more.

    Honest caveat: we don't have enough trials yet to tell you which threshold works, so treat this as a hypothesis.

    In your data, does the first setup action predict conversion better than total usage?

  2. 1

    One signal the loop misses is replies to these emails. A trial user who writes back "how do I connect X?" is telling you more than any score, but the workflow ends at the draft, so that reply sits in Gmail and never reaches the table. I'd log replies back to the same row and treat any reply as high intent until a human looks at it. Also, once sending is automated, keep it plain text from a real person's address that someone actually reads, since that is what gets these emails delivered and answered.

  3. 1

    Strong framing on better signals over smarter AI. I’d calibrate the score thresholds against actual conversions by cohort and review a small holdout each week—checkout_started can be noisy, and account_fit labels can encode bias. Logging the outcome of each intervention will show whether onboarding actually helps, while starting with drafts keeps the workflow safe.

  4. 1

    The distinction between activation and intent is useful. I’ve found it helps to keep the scoring model explainable, then use support questions and failed setup steps as signals rather than treating repeated logins as interest. Reviewing outcomes after a few dozen trials should make it easier to tune thresholds without overfitting.

  5. 1

    I like the emphasis on behavioral signals rather than login counts. I’ve found it useful to pair the score with time-to-value and the last meaningful action, then tailor the next touch to the missing step instead of sending a generic “just checking in” message.

  6. 1

    The activation-versus-intent split is a useful way to avoid treating every signup as equally valuable. I especially like starting with explicit rules before adding AI. For an early product, I would also track time-to-first-value and the exact action that made the user return, since those signals often reveal the best onboarding change.

  7. 1

    Nice framing of separating activation from intent and using simple rules before AI. I’d add a small holdout check: after 20–30 trials, compare each signal’s conversion rate against a baseline and look for confounders like plan type or company size. For the onboarding route, sending one concrete next step tied to the missing activation event may outperform a multi-paragraph AI email. Also track time-to-first-value alongside conversion so you see where friction starts, not just who eventually pays.

  8. 1

    Agree on logins. In my case the only signal I trust is finishing the first block of tasks, that's the moment the product makes sense to someone or it doesn't. I show the trial offer right after that and not before.

    Too early to say if it works, I have no real users yet.

  9. 1

    The 'no action yet' bucket is the most interesting one. Timing matters as much as the score itself - a high-scoring user on day 2 of a 14-day trial is a very different situation than the same score on day 12.

    The AI-drafted email is the right call. Sales outreach bottlenecks on writing, not on knowing who to contact. Taking that off the plate means teams actually send the email instead of putting it in a backlog.

    Question: are the scoring thresholds static once you set them, or do you have a feedback loop where actual conversion data adjusts what counts as a 'high intent' signal over time? The first version of those thresholds is usually a guess that gets a lot better after a few cohorts.

  10. 1

    Separating "looks valuable" from "actually reached the aha moment" is the part most trial dashboards skip. A big company name on the signup form is not the same as completing the first real workflow.

    We learned a similar split on a Discord discovery side project: vanity joins vs people who came back in seven days and did one meaningful action. The second group is tiny, and they are the only ones worth a personal note.

    Do you weight product-usage signals higher than firmographic ones once someone is past day two, or still mix them?

  11. 1

    skip staring at the screen and wondering, haha. thanks again!