Signup Gate
One script tag on your signup form, one check on your server. Bots, throwaway inboxes, dead domains and Tor or VPN signups get caught. Typos like gmial.com get a fix.
Create your account
Safari 18 · iPhonePassword
Account created
What it checks
The network and the browser come with the token. The email comes with your server's verify call.
Tor, VPN, residential proxy and hosting addresses, named by class.
Headless browsers and scripted clients that fill in forms for bots.
Bad syntax, domains that take no mail, throwaway inboxes, typos and role addresses.
How it works
The same Form Gate you would put on any form, with the address added to the check.
gate.js tagOne script tag on your signup page, with your site key.
<script
src="https://ipscanner.io/gate.js"
data-sitekey="site_4fQ8nZ2kLm7xR1vT9cBw"
async></script>gate.js adds a hidden ipscanner-token field. No cookies, no browser storage.
<form method="post" action="/signup">
<input name="email" type="email">
<input name="password" type="password">
<!-- added by gate.js -->
<input type="hidden"
name="ipscanner-token"
value="c2l0ZV80ZlE4fDE3…">
</form>Your server sends the token and the address to /v1/gate/verify and gets one answer back.
{
"success": true,
"class": "human",
"action": "flag",
"mode": "enforce",
"email": {
"status": "risky",
"reason": "typo",
"suggestion": "jane@gmail.com",
"domain": "gmial.com",
"action": "flag"
}
}Throwaway and invalid addresses are blocked by default. Typos are flagged, so you can offer the fix.
The check
Send email with the token. Refuse the signup when action is block in enforce mode, and show email.suggestion when there is one.
// token = the form's "ipscanner-token" field, ip = the visitor's address
// email = the address the form submitted
const res = await fetch('https://ipscanner.io/v1/gate/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ secret: process.env.IPSCANNER_GATE_SECRET, token, remote_ip: ip, email })
});
const v = await res.json();
if (!v.success || (v.action === 'block' && v.mode === 'enforce')) {
// reject the signup; v.email.suggestion holds "did you mean" when there is one
}Monitor first, then block
In monitor mode nothing is refused. The Sites dashboard shows each signup with its class, its email outcome and what would have happened.
FAQ
Create a gate with signup emails on, paste one script tag, add the check. Free runs in monitor mode; Starter blocks, from $19/mo.