Qualified trials
Send a trial start to ad networks only after the user has kept it for a while, so the networks learn from trials that are likely to pay.
Why
Ad networks optimise toward the events you send them. Many people start a trial and cancel within minutes. If every trial start is sent, the network learns to find more of those people. Holding the event back until the trial has survived a short window gives the network a cleaner signal of purchase intent.
How it works
| Step | What happens |
|---|---|
| 1. Trial starts | A store notification (AppRefer Billing) or a RevenueCat webhook reports a new trial for an install attributed to an ad network. Instead of sending it, AppRefer holds it. |
| 2. Hold | The trial waits for the delay you set (2 hours by default, 1 to 24 hours). |
| 3a. Still active | When the delay ends, AppRefer sends it as qualified_trial to the network that drove the install. |
| 3b. Cancelled | If the user cancels during the hold, the trial is disqualified and never sent. |
| 3c. Paid early | If a renewal or plan change arrives during the hold, the hold ends. The paid event is sent on its own, so no separate trial event is needed. |
Trials from organic installs and test-key (sandbox) purchases are never held. The hold applies to installs attributed to Meta, Google, TikTok and ChatGPT Ads.
How cancellations are matched
A cancellation has to find the right held trial even when the user changed identity in between, and even when the store reports events out of order. AppRefer handles both:
- Across user IDs. Apps often start a trial under an anonymous ID and log the user in before they cancel. A cancellation is matched to held trials by the install's attribution and by every ID the purchase knows about: the current app user ID, the original app user ID and all aliases.
- Cancellation before the trial. A cancellation can arrive a second before the trial start it belongs to, when nothing is held yet. Every cancellation therefore also stamps the install's attribution with the time it happened (
lastCancellationAt). When a held trial is due, AppRefer disqualifies it if that install has a cancellation from 10 minutes before the trial start onwards.
What is sent
| Network | Event |
|---|---|
| Meta | StartTrial |
| TikTok | StartTrial |
| Google Ads | The conversion action you mapped to qualified_trial (nothing is sent without one) |
| ChatGPT Ads | trial_started |
You can change the Meta and TikTok event in Settings → Event mapping. The original trial time is kept, and the qualified trial also appears as a qualified_trial event in your analytics. If the install is still waiting for the user's tracking answer, the event waits too (see Tracking consent); if tracking was denied, it is recorded but not sent.
Setup
- Open Settings → App settings for your app (admin role needed).
- Turn on Qualified Trial.
- Set the delay in hours, from 1 to 24. Most apps use 2 to 4 hours.
The same card shows how many trials qualified, were disqualified or are still pending, and the qualification rate.
Choosing the delay
A longer delay filters out more quick cancellations but gives the ad network its signal later. Look at when most cancellations happen in your app and pick a delay just after that.