Prevent fake signups before the row is written

A fake account costs you twice: once when it is created, and again every time you clean it out. The cheap place to stop it is before the INSERT.

How ZeroBot fits Fake signup

Most signup defences are reactive — email confirmation, CAPTCHA, a manual review queue. All of them let the account exist first. Screening before the write changes the economics: you never pay storage for the row, never send the confirmation email, and your user counts stay honest rather than inflated by accounts that will never be real users. The useful signal at signup is not the email domain alone — anyone can pass a valid one — but whether the client behind the request is a real browser with real behaviour.

Screening a signup before the write

php (registration handler)

$res = wp_remote_post('https://api.zerobot.info/v3/openapi', [ 'timeout' => 2, 'headers' => ['Authorization' => 'Bearer ' . ZEROBOT_KEY], 'body' => [ 'ip' => $_SERVER['REMOTE_ADDR'], 'domain' => $_SERVER['HTTP_HOST'], 'useragent' => $_SERVER['HTTP_USER_AGENT'] ?? '', ], ]); $v = is_wp_error($res) ? [] : json_decode(wp_remote_retrieve_body($res), true); if (($v['query'] ?? '') === 'failed') $v = []; // fail open // Reject before the INSERT — never write the row first. if (($v['risk_score'] ?? 0) >= 70) { // Prefer a generic message: do not tell an abuser which signal caught them. wp_die('We could not complete your signup. Please contact support.', 'Signup blocked', ['response' => 403]); } // Otherwise continue with the normal registration flow.

Full endpoint reference and an interactive tester are in the API docs. Get a key from the free tier — no card required.

Where fake accounts come from

Disposable email providers

Addresses that exist for minutes. Screening on the domain alone catches the common ones but misses the long tail, which is exactly where volume moves when you start blocking.

Scripted registration

Direct POSTs to your endpoint, no browser involved. Trivially scriptable and invisible in analytics because they never load your page.

Trial and free-tier abuse

The same person creating accounts to reset a trial, farm credits or produce referral bonuses. This is the one that costs real money.

Reputation poisoning

Bulk accounts used to seed fake reviews, votes or listings, which is a problem for your credibility rather than your infrastructure.

Frequently asked questions

The IP is null — your code falls through to an empty array?

Yes, deliberately. If ZeroBot cannot be reached, or returns an error envelope rather than a verdict, the score reads as 0 and the signup is allowed. Failing closed here would mean a ZeroBot outage stops every new user from signing up.

Should I tell the user why they were blocked?

No. A specific reason ("datacenter IP detected") tells an abuser exactly which signal to change. Show a generic message and put the detail in your logs.

What threshold should I use?

70 is a reasonable starting point for signup, which is a rarer action than a page view and can tolerate being more careful. Watch the blocked list for a week before tightening it.

Protect your Fake signup app this week.

Free tier, real verdicts, and documentation with a built-in tester.

Get started free →

Related problems ZeroBot solves

Stop scrapers Stop credential stuffing Block form bots Stop card testing