Back to Blog

Once per user or once every 90 days? Setting trial eligibility

How to set free trial eligibility rules in SaaS. One trial per customer, re-trials after 90 days, monthly free credits and daily limits, and how to enforce each one.

"One free trial per customer" sounds like a rule. In most products it's a hope. The rule lives in a line on the pricing page, the enforcement lives nowhere, and the first time anyone checks is when the bill arrives. Free trial eligibility is the policy that decides how often someone may claim a benefit. Get it right and enforce it, and your offers do what you designed them to do. Leave it vague, and every new email address quietly resets the clock.

This guide covers the eligibility rules SaaS teams actually need, from "once ever" to "once a day", and how to enforce each one on every claim.

Why eligibility rules matter more than they look

A benefit without an enforced eligibility rule isn't limited. It's unlimited for anyone willing to create another account.

  • A "14-day trial" becomes a permanent free plan, 14 days at a time.
  • "500 free credits" becomes 500 credits per email address someone can create, and scripts can create thousands of them overnight.
  • "Free tier: 1,000 calls a month" becomes 1,000 calls a month per account, with no upper limit on accounts.

The damage rarely builds slowly. A single post on a deal forum or a shared script can turn a quiet benefit into a stampede within hours, and the first signal is usually a spend alert, an overloaded queue or a signup chart that looks like growth and isn't. The math is in the real cost of free trial abuse.

From our early beta

After a launch went viral on X, one team gained 6,400 new users in a month. 2,700 of them were duplicate accounts. About 32 became paying customers. Every duplicate was someone the rule should have counted once.

The four eligibility rules you need

AbuseZero supports four kinds of eligibility, set per benefit:

RuleSettingUse it for
Once ever{ "kind": "once" }Signup credits, a first free trial, a free-forever plan, a launch promotion
Once per calendar day{ "kind": "calendar", "period": "day", "timezone": "UTC" }Daily free generations or daily allowances
Once per calendar week or month{ "kind": "calendar", "period": "month", "timezone": "UTC" }Monthly free credits or a weekly bonus
Once per rolling window{ "kind": "rolling", "days": 90 }Re-trials and win-back offers, from 1 to 365 days

Calendar periods use the IANA time zone you choose, and weeks start on Monday. See eligibility.

YesNoDailyWeekly or monthlyNoYesNoWhat does the benefit give?One-time welcome?Once everResets on a schedule?Once per calendar dayOnce per calendar week ormonthShould returning users getit again later?Once per rolling window,such as 90 or 180 days
YesNoDailyWeekly or monthlyNoYesNoWhat does the benefit give?One-time welcome?Once everResets on a schedule?Once per calendar dayOnce per calendar week ormonthShould returning users getit again later?Once per rolling window,such as 90 or 180 days

Rules for common offers

One free trial per customer

The classic. Set eligibility to once ever and evaluate the claim before you start the trial, or in the background if you can end the trial cleanly. See zero-wait free trials.

Re-trials and win-back offers

Someone who tried your product a year ago and comes back isn't abusing anything. They're exactly who you want. A rolling window of 180 or 365 days lets them start a fresh trial, while a repeat claim inside the window is evaluated as one.

Monthly free credits

A free plan that refills every month is a calendar benefit: once per calendar month. Each month's claim is evaluated, so one person can't multiply the monthly allowance with extra accounts. The API free tier playbook uses this pattern for monthly top-ups. The freemium playbook covers the whole free plan.

Daily free generations

Use once per calendar day. Before you protect a daily grant, check that the grant costs more to deliver than an evaluation costs to run. The break-even formula is in the cost guide. See also how to protect signup credits in an AI app.

Enforcing a rule is the hard part

Writing "once per customer" in code usually means checking whether this account already claimed. That's the easy part, and it's the part abusers don't care about, because they're not using the same account. The real question is whether this person already claimed, through any of their accounts.

That's what an AbuseZero evaluation answers. Every claim is checked against your workspace's full claim history across every identifier you send: user, email, device, network, phone, payment method and your own custom identifiers. The AbuseZero AI Risk Engine reads them together, with a proprietary algorithm built on 140,000+ risk signal combinations. The result comes back as allow or deny with a readable reason.

Make your rules real

Set the eligibility once, and every claim is checked against it, across new accounts and new emails. Start with Builder or see pricing.

Setting eligibility in AbuseZero

scripts/create-benefits.ts
await abusezero.createBenefit({
  name: "Pro trial",
  key: "pro_trial",
  policy_key: "balanced",
  protection_mode: "observe",
  config: { eligibility: { kind: "rolling", days: 180 } },
}, "create-benefit-pro-trial");

await abusezero.createBenefit({
  name: "Monthly free credits",
  key: "monthly_credits",
  policy_key: "strict",
  protection_mode: "observe",
  config: { eligibility: { kind: "calendar", period: "month", timezone: "UTC" } },
}, "create-benefit-monthly-credits");

Eligibility is fixed when a benefit is created. To change it, create a new benefit. The old one keeps its protection and history. Start new benefits in observe mode to see the effect before anyone is denied.

Frequently asked questions

How do I limit a free trial to one per customer?

Set the benefit's eligibility to once ever and evaluate every trial claim. AbuseZero checks the claim against every earlier claim across emails, devices, networks and payment methods, not only the current account.

Can a returning customer get a second free trial?

Yes, if you want them to. Use a rolling window, such as 180 or 365 days, so a fair return is allowed while a repeat claim inside the window is evaluated as one.

How do I stop people multiplying a monthly free allowance?

Make the monthly allowance a benefit with an eligibility of once per calendar month, and evaluate each month's claim before you grant it.

Can I change a benefit's eligibility later?

Create a new benefit with the new eligibility. The existing benefit keeps its protection and history.

Put your rules to work

Keep reading