How to stop free trial abuse without hurting conversions.
How to stop free trial abuse and freemium abuse: limit trials per device instead of per email, pick the right moment to check, and keep real customers moving.

To stop free trial abuse, limit the trial to something a person cannot reset for free. A trial tied to an email address is restarted by a new email address, which takes seconds. A trial tied to a device is far harder to restart, so a device check at the moment a trial starts is the most reliable fix for SaaS free trial abuse, freemium abuse and the repeat trials that eat subscription revenue.
This guide covers where the abuse comes from, where in the lifecycle to check, a starting policy, and how to keep honest users from being caught in it.
What does free trial abuse look like?
The classic pattern is a person who signs up for a trial, uses it until it ends, then signs up again with a new email. At scale it is a script that creates trial accounts in bulk, or a reseller who spins up trials to use a paid feature for free, or a user who pushes a freemium allowance past its limit by opening extra accounts.
Trial abuse is especially common in subscription apps, streaming, AI and developer tools, and anything where the free tier has real cost behind it, such as compute, storage or sent messages. The abuser spends your money while your numbers show a healthy stream of new signups, so it can hide inside growth.
Why do email limits and cookies not work?
Because both are free to reset. A new address, a plus-sign alias or a throwaway domain gives a fresh email, and clearing cookies or opening a private window gives a fresh browser. Counting trials per email or per cookie gives abusers an infinite supply of new identities, and puts the cost of the trial on you.
The thing an operator cannot create without limit is a device. A device identifier that survives cleared cookies and private windows gives you a number to count that costs the abuser real effort to change.
How does a device check fit into a trial flow?
Run the identification when the trial starts, and store the visitor ID with the account. With Fingerly, every identification returns a visitor ID that stays the same across visits and when cookies are cleared, whether the device is new to your organisation, a confidence from 0 to 100, and a suspect score with a level of low, medium or high. In a browser the SDK writes nothing for the visitor to clear. In a native app the identity is a random ID created for the installation.
Read the event on your server with a secret key and enforce the limit in your own database. Fingerly does not keep your counters, so keep the visitor ID beside every trial, plan and redemption, and add a unique constraint where you want one trial per device.
Where in the lifecycle should you check?
At every step where the abuser gains something, tagging each identification with the action it protects.
- Signup, before the account exists, with a tag such as signup.
- Trial activation, if it is a separate step from signup, with a tag such as trial_start.
- Allowance increases and upgrades to a free tier, so a freemium limit applies per device and not per account.
- Card entry, when you collect a payment method for the trial.
- First paid conversion, to compare the device with the trial history.
What policy should you start with?
Start with graduated responses, because a hard refusal at signup is the most expensive mistake you can make. A starting point you can adapt:
- New device, low suspect level: start the trial normally.
- The device already used a trial: offer a paid plan or a shorter, limited demo instead, and say why.
- The device created several accounts in the last 30 days: withhold the trial, or start it only after a verification step such as a phone number or a card.
- Automation, virtual machine or tampering findings, or a high suspect level: create the account on hold, or send it to review.
- The device could not be identified: ask for verification, because it cannot be counted.
- Otherwise: allow.
Choose the limit from your own data, not from a guess. A product with lab computers or shared family tablets needs more tolerance than a single-user developer tool. Pair the device count with a requirement that fits your cost: a card on file for expensive trials, no card for cheap ones.
How do you protect real customers?
Assume most people who trip a rule are honest, and design the failure path accordingly. A customer who lets a trial lapse and returns six months later is not abusing anything. A user who upgraded their phone is a new device with no history. A team on one shared computer will produce several accounts legitimately.
- Use a window, such as one trial per device per year, instead of forever.
- Prefer verification and a limited offer over a refusal.
- Tell the customer why, for example in your trial terms, so a refused person knows the limit is per device.
- Give a way to ask for a second look, and measure how many of those requests succeed.
- Run the policy in monitoring mode first, logging what it would have done beside what happened, then turn on friction before refusals.
You can build and test the whole flow with a development key, which runs the same detection as production and is free, so no real customer sees an experiment.
How do you measure whether it is working?
Track three numbers over time: the share of trials started by devices that had a trial before, the conversion rate of trials to paid for new devices compared with repeat ones, and the support tickets that mention being refused. If the first falls, the second rises and the third stays small, the rule is helping. If tickets climb, loosen it or add a verification step.
