# Trial ending

Source: https://kirora.io/docs/guides/journeys/recipes/trial-ending

Remind people a week before and the day before their free trial ends, starting from the Trial ending template.

A trial-ending journey reminds someone that their free trial is about to end, so they can choose a plan before they lose access. The **Trial ending** template sends two reminders, a week before and the day before the trial's end date, at 9:00, and stops once they pay.

## Who it's for

Software, apps, memberships and subscriptions with a free trial. For example, Tallyfox, a fictional project-planning app, offers a 14-day trial and reminds each trial user before it ends.

## What you need first

- A date attribute called `trial_ends_at` on each trial user, written `YYYY-MM-DD`. Your app usually sets it when the trial starts, through the API's [identify call](https://kirora.io/docs/api/reference/identifyContact). This works on every plan.
- Your purchase event, sent when someone pays, such as *Order Completed* from a connected payment provider or *Invoice Paid* from your app. The template uses the purchase event from your [key events](https://kirora.io/docs/guides/goals/key-events). Tracking your own events is on every plan, within its monthly allowance; connecting Stripe is available on Starter and above.
- A verified sending domain. See [Set up a sending domain](https://kirora.io/docs/guides/getting-started/set-up-a-sending-domain).

## 1. Start from the template

Go to **Journeys**, choose **New journey**, then under **Start from a template** and **Dates**, choose **Trial ending**.

## 2. Check what the template creates

| Part | As the template sets it |
| --- | --- |
| Trigger | **A date arrives**, **Date attribute** `trial_ends_at`, **Repeat** **Once**, **Days from the date** -7, **Time** 9:00 |
| Step 1 | **Send message**: *Your trial ends in a week*, with a *Choose a plan* button |
| Step 2 | **Wait** 6 days |
| Step 3 | **Send message**: *Your trial ends tomorrow* |
| Exit rules | Your purchase event: paying ends the journey at once, even during the wait |

9:00 is in each contact's time zone. See [Date triggers](https://kirora.io/docs/guides/journeys/how-journeys-work#date-triggers).

## 3. Change it for your business

- **The exit event.** If paying is marked by an event other than your purchase event, such as *Subscription Started*, change the exit rule's **Exit event** to it.
- **The timing.** For a 7-day trial, a week's notice is the whole trial: set **Days from the date** to `-3` and the **Wait** to 2 days instead.
- **Follow the end date, not a fixed wait.** If trials can be extended, replace the 6-day **Wait** with **Wait**, **Until a date**, reading `trial_ends_at` from **The contact**, **Days before** 1. The second reminder then follows the new date. A date without a time means midnight in the contact's time zone, so the reminder arrives early that morning. See [Wait until a date](https://kirora.io/docs/guides/journeys/build-a-journey#wait-until-a-date).
- **The emails.** Add your sender, give the *Choose a plan* button your pricing or billing page, and list what the person keeps by choosing a plan. See [Design an email](https://kirora.io/docs/guides/email-designer/design-an-email).

## 4. Measure it

- **Clicks** on the *Choose a plan* button, on the **Performance** tab under **Email outcomes by step**.
- **Trials that become paid**: add a conversion goal on the event that marks paying, with **Counts within** set to 7 days and a **Revenue property** if it carries the amount. Available on Starter and above. See [Conversion goals](https://kirora.io/docs/guides/journeys/journey-results#conversion-goals). To track the trial-to-paid rate across your whole workspace, set up a [Goal](https://kirora.io/docs/guides/goals/how-goals-work) as well.
- **Lift**: add a **Random split** before the first email with one empty path as a holdout, then compare conversion rates. See [Random split and holdout](https://kirora.io/docs/guides/journeys/journey-results#random-split-and-holdout).

## Common pitfalls

- **The date set too late.** The journey starts on the day 7 days before `trial_ends_at`. If your app sets the date after that day, for example for a 5-day trial, the contact never enters. Set it when the trial starts, and match **Days from the date** to your trial's length.
- **No paying event, no exit.** Without the event that marks paying, customers who have already paid still get *Your trial ends tomorrow*. Check it arrives before you turn the journey on.
- **A second trial.** With **Once**, each contact goes through the journey once ever, so a second trial for the same person gets no reminders.
- **Dates in the wrong format.** Store `trial_ends_at` as a date, `2026-11-30`, not as text such as `30 Nov`.

## Next steps

- [Journey recipes](https://kirora.io/docs/guides/journeys/recipes/overview) — every template and what it needs
- [Grow from sign-ups and trials](https://kirora.io/docs/guides/kiro-ai/tasks/sign-ups-and-trials) — have Kiro AI draft a trial journey from your events
- [How journeys work](https://kirora.io/docs/guides/journeys/how-journeys-work#date-triggers) — every date trigger setting