PRC-17Recommended
Give one trial per person and payment card
Grant a free trial only when no earlier trial used the same verified email, payment card fingerprint or organisation domain. Record each trial with these keys, and refuse a second one before it starts.
How to do it
Repeat trials cost you the plan's model calls and support, and they cut paid conversion. A new account per trial is cheap, so key trials to the person and the card, not the account. Payment providers give a fingerprint per card number, the same across customers, so a card used for one trial is known on the next. Normalise emails before you compare them, such as lower case and no plus tags for providers that ignore them. Offer a paid plan at once when a trial is refused, not an error alone. Free tiers without a card follow Limit the free tier per person instead of per account.
Examples
TypeScript example
export async function mayStartTrial(db, signup: { email: string; cardFingerprint: string }) {
const email = normaliseEmail(signup.email)
const earlier = await db.query(
'SELECT 1 FROM trials WHERE email_normalised = $1 OR card_fingerprint = $2 LIMIT 1',
[email, signup.cardFingerprint],
)
return earlier.rowCount === 0
}
Python example
def may_start_trial(db, email: str, card_fingerprint: str) -> bool:
earlier = db.execute(
"SELECT 1 FROM trials WHERE email_normalised = %s OR card_fingerprint = %s LIMIT 1",
(normalise_email(email), card_fingerprint),
).fetchone()
return earlier is None
How to check
A test starts a trial, then signs up a second account with the same card and a new email. The second trial is refused. A third account with the same email in upper case and a plus tag is refused too.
Sources
Related rules
- PRC-6 Limit the free tier per person instead of per account in Pricing, plans and entitlements
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/pricing/plan-changes-trials-and-free-tiers/one-trial-per-person">Agent Wranglers pricing, plans and entitlements playbook</a>. In code you write, add a comment next to it with the same link.