Free tools

VPN, proxy and datacenter IP checker

Check if an IP address is a Tor exit node, a known VPN provider or a datacenter instead of a home or mobile connection. Free, no account needed.

Examples:

Free · nothing is stored · 10 checks per minute

Enter an IP address or pick an example to see the result and the reasons.

Why check the IP of a signup?

Real users sign up from home broadband or a mobile network. Scripts that farm free trials and credits mostly run on cloud servers, or hide behind Tor and VPNs to look like many different people. The IP address of a signup is one of the cheapest and most useful signals you have.

What this checker looks at

  • Tor exit nodes, from the Tor Project's public list. tor_exit_node
  • Known VPN providers, from public lists of VPN networks. proxy_or_vpn_suspected
  • Datacenter and cloud networks such as hosting and cloud providers, instead of a home or mobile connection. ip_datacenter_asn
  • Private or reserved addresses, which usually mean your server sent its own IP instead of the user's. ip_private_or_reserved
  • Country and network of the address.

What it cannot tell you

Residential proxies route traffic through real home connections and look like normal users. VPN lists are never complete either. That is why a clean IP is a good sign, not a guarantee, and why it helps to combine it with the email and with how many signups come from the same network.

Check the IP in your signup handler

The checker above runs the same IP check as the SignupVet API. Pass the IP of the request (behind a proxy, the first address in X-Forwarded-For):

signup.tsNode, Next.js, any backend
const res = await fetch("https://www.signupvet.com/verify/ip", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.SIGNUPVET_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ ip: req.ip }),
});
const { recommendation, reason_codes } = await res.json();

if (recommendation === "block") return reject("Signups from this network are not allowed.");
if (recommendation === "review") await flagForReview(user, reason_codes);

With /score you can send email, phone and IP together. It also catches waves: 3 or more signups from the same IP, or 10 or more from the same network, within 10 minutes. See the docs.

Questions

Is this checker free?
Yes. It runs in your browser without an account. It is limited to 10 checks per minute, and nothing you enter is stored.
Should I block every VPN?
Not always. Some real users use a VPN for privacy. A common approach is to block Tor and datacenter IPs and only review VPN signups.
Where does the location data come from?
IP geolocation by DB-IP.

Check every signup automatically

SignupVet checks the IP, email and phone of every new signup and returns allow, review or block, with the reasons. Free for 250 checks a month, no card needed.

Get 250 free checks   Read the docs