Stop free-trial abuse at sign-up
A free tier invites a second account, and a third. Look up the address at sign-up, ask VPNs, proxies and hosting servers for a card first, and let everyone else straight in.
- ISPOffice networkTrial starteddev@acme.example198.51.100.44
- VPNMullvadCard requiredk9x2@mail.example203.0.113.19
- HostingHetznerBlockedbot-7731@mail.example192.0.2.55
- RelayiCloud Private RelayTrial startedsam@studio.example203.0.113.140
What it stops
Trial farming
One person starting a new trial each week, each from a new VPN exit.
Caught byis_vpnis_resproxyFake sign-ups
Accounts made by scripts on hosting servers to spam, scrape or resell.
Caught byis_hostingis_dcproxyAPI key farming
Free keys collected across accounts to multiply a free quota.
Caught byis_resproxyis_vpnAI credit abuse
Free AI credits farmed across accounts, and sign-ups through a VPN from countries your model provider doesn't serve.
Caught byis_vpnlocation.country
The fields that decide it
The four a rule here reads most, each marked with the plan that answers it.
is_vpnA commercial VPN. A paid plan names which one.Unlimitedis_relayiCloud Private Relay or a company gateway such as Zscaler: let these through.Unlimitedis_hostingA hosting server: a script, unless it's also a relay.Paid plansis_resproxyA home connection resold as a proxy, which makes one farm look like many people.Paid plans
Where to check
- 01
At sign-up
Look up the address before the trial starts. Ask a VPN, a proxy or a hosting server for a card or a work email, and let everyone else straight in.
- 02
When a key is made
Check again when a free API key is created, where one person farms quotas across accounts. Several keys made from proxy addresses in a day are usually one person, whatever the emails say.
- 03
At checkout
Look up the address before a card is charged, since card testers like a free-trial checkout too. Hold a payment from a datacenter proxy or Tor until it clears.
Start free, then add every field
The same rule runs with no key and with one. Without a key the paid fields are left out of the answer, so the second check waits for your upgrade.
- 1
Call it with no key
UnlimitedThe snippet runs as it is: the VPN, Tor and relay flags, the location and the network, with no daily or monthly cap.
- 2
Sign up for a key
No cardYour account's first 100 lookups each day answer every field, so you can try the paid half of the rule on real traffic.
- 3
Upgrade for every lookup
From $19 a monthEvery paid plan answers every field on every lookup, proxies, hosting and the operator behind each flag, and up to 1,000 addresses a batch.
import { VPNDetection } from "vpndetection";// No key needed. With one, every field answers.const client = new VPNDetection({ apiKey: process.env.VPNDETECTION_API_KEY });export async function startTrial(account) {const r = await client.lookup(account.ip);// Proxies and hosting answer on a paid plan.if ((r.isHosting && !r.isRelay) || r.isDcproxy) {return refuse(account);}if (r.isVpn || r.isTor) {return requireCard(account);}}
Common questions
Will it block people on a company VPN?
Company web gateways such as Zscaler come back as is_relay, not is_vpn, and most are on hosting networks too, so let is_relay through before a hosting check. Commercial VPNs are named on every paid plan, so a rule can single one out.
Can I call it from the browser at sign-up?
Yes, from any origin, but make the calls you act on from your server: a key in a page is readable by anyone who loads it.
What if the API doesn't answer?
The official clients retry a server error for you. Decide whether a sign-up waits or goes through when it still doesn't answer; letting it through keeps real users moving, and you can check the account afterwards.
Is there a quota?
Unlimited has no daily or monthly cap. A paid plan has a monthly quota, and lookups past it are billed at its overage rate unless you set a cap in Billing.
What does a free account add?
An API key and a daily trial: your first 100 lookups each UTC day answer every field, proxies and hosting included, and the rest answer as Unlimited.
Unlimited lookups, no sign-up.
Paste it into a terminal. Any address answers its VPN, Tor and relay flags, where it is and which network announces it, with no daily or monthly cap.
{"ip": "146.70.116.130","is_vpn": true,"is_relay": false,"is_tor": false,"location": {"country": "AT", ...},"asn": { "asn": 9009, ... }}