Fixed schedules ignore actual trial usage
Sending a "your trial ends in 3 days" email to a highly active user and an inactive one with the same copy is a missed opportunity.
Send the right trial reminder at the right moment: when the trial starts, when it is about to end, when it expires and when it converts — each from a domain event.
Sending a "your trial ends in 3 days" email to a highly active user and an inactive one with the same copy is a missed opportunity.
Free-to-Pro conversion copy differs from Pro-to-Enterprise. Marketing automation journeys make this brittle.
Sending an expired trial email hours or days late because of sync delays means losing the conversion window.
Marketing tools do not know what the user actually did during the trial without complex tracking integrations.
trial.started, trial.ending_soon, trial.expired, trial.converted — each fires from your backend when the state actually changes.
Include the current plan and available upgrade options in the payload. Rules and templates render the right upgrade path.
No sync delay. The moment your backend marks a trial as expired, the event fires and the email sends.
See which trial reminder emails were sent to which users, and correlate with conversion events in your analytics.
trial.started Welcome to the trial. What to do first, what is included, how to get help.
trial.ending_soon Personalised reminder with days remaining, plan features and upgrade CTA.
trial.expired Clear, non-aggressive expiry notice with a win-back upgrade offer.
trial.converted Confirmation of upgrade with plan details, next billing date and what is now available.
{{ user.name }} Recipient display name {{ data.plan }} Current trial plan tier {{ data.days_remaining }} Days left in the trial {{ data.trial_ends_at }} Trial expiry date {{ data.upgrade_url }} Personalised upgrade or reactivation link {{ data.features_on_upgrade }} List of features unlocked on upgrade — for conversion copy Trial state changes in your backend fire the right email automatically. No marketing platform required.