1. Home
  2. Signup protection

For developers

Block fake and disposable signups with one API call

Check each new address with the SimpleVerifier API before the account is created. Block disposable, invalid and misspelled emails with a clear message, flag role and catch-all addresses, and let every unfinished check through. Drop-in recipes for Supabase, Clerk, Firebase, Next.js, Express, Cloudflare Workers, Zapier, n8n, Webflow and Framer.

Why fake signups cost you

Free credits farmed with throwaway inboxes

A temporary inbox takes seconds to open. If your app gives AI tokens, trial seats or credits on signup, each one is a cost.

Welcome emails that bounce

Invented and misspelled addresses bounce your onboarding mail, and bounces count against the sender reputation your real users depend on.

Metrics you can't trust

Fake accounts inflate signups, waitlists and activation funnels, and make every conversion rate look worse than it is.

The whole idea in four lines

Run it on your server where the account is created. action is do_not_send only for addresses that can't receive mail or are throwaway. The recipes wrap this with a timeout, dry-run mode and fail-open handling.

signup.ts
const r = await fetch("https://simpleverifier.com/api/v1/verify", { method: "POST",
  headers: { Authorization: `Bearer ${process.env.SIMPLEVERIFIER_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ email }) }).then((res) => res.json());
if (r.action === "do_not_send") throw new Error("Please use a real, permanent email address.");

What every check looks at

Format

Catches addresses that can't exist, before any network call.

Domain and MX

Confirms the domain is real and has a mail server that accepts mail.

Disposable domains

Matched against a list of 9,913 temporary and throwaway email domains.

Typo domains

gmial.com, hotmial.com and friends, with the suggested fix in reason.

Role inboxes

info@, sales@, admin@: flagged with reason_code role so you can warn instead of block.

Invented-looking addresses

likely_invented flags test@, john.doe@ and template domains. Never set for a confirmed mailbox.

Live mailbox check

Asks the mail server whether the mailbox exists, without sending a message.

Fails open

Any timeout or error answer lets the person sign up. A slow mail server never blocks a real user.

What to block and what to warn on

Branch on the decision fields, never on the reason sentence: action, reason_code and likely_invented have a fixed shape and are documented here.

AddressFieldsDoWhy
Disposable or temporary inboxreason_code "disposable" (action "do_not_send")BlockThe address stops working within minutes or hours. It is the main tool for farming free trials and credits.
Invalid: bad format, no mail server, mailbox not foundaction "do_not_send" (reason_code "syntax", "no_mx", "mailbox_not_found", "domain_not_hosted")BlockMail to it bounces. Ask the person to fix it instead of creating an account nobody can reach.
Misspelled domain (gmial.com, hotmial.com)reason_code "typo_domain" (action "do_not_send")BlockShow the suggested domain from reason so a real person can correct it in one go.
Role inbox (info@, sales@, admin@)reason_code "role"WarnOften a real team inbox. Let it in, flag the account, and require email confirmation before credits.
Catch-all domainreason_code "catch_all"WarnThe server accepts every address, so the mailbox can't be confirmed. Many real company domains work this way.
Looks invented (test@, john.doe@, example.com)likely_invented trueWarnA strong abuse signal on an unconfirmed address. Hold free credits until the email is confirmed.
Valid, or the check could not finishaction "send", "send_with_care", "retry_later", or any non-2xx answer or timeoutAllowFail open: a slow mail server or a brief outage must never stop a real person signing up.

Drop-in recipes

Each one is complete, copy-paste code against the public API, with the timeout set under the platform's own limit.

Pricing

Signup checks use the API included in the existing plans. Each address you check is one call. Calls past the included ones are billed per 1,000 on monthly billing.

PlanPer monthAPI calls includedAfter that
Pro$29.9910,000$1.50 per 1,000
Business$99100,000$1.00 per 1,000
Agency$249300,000$1.00 per 1,000

Every key allows 120 calls a minute. Full plan details are on the pricing page.

Common questions

Will this block real people?
Block only what the table says: disposable, invalid and misspelled addresses. Role inboxes, catch-all domains and invented-looking addresses get a warn flag instead, and anything the check couldn't finish is allowed. Start with dry-run mode, which logs what would be blocked and blocks nothing.
How fast is a check?
Format, disposable, typo and no-mail-server answers come back quickly. A live mailbox check can take several seconds when a mail server is slow, so every recipe sets a timeout under its platform's limit and lets the signup through when it runs out.
Can I call the API from the browser?
No. Keep the key on your server, in your auth hook or in a Worker. Anyone who can read the key from your page can use your plan.
Is there an npm package?
Not yet. Client drafts for Node.js and other languages can be downloaded, but none is on npm. The recipes use plain fetch, so there is nothing to install. See the SDKs page.
Which plan do I need?
Any plan with API access: Pro, Business or Agency. Each signup you check is one API call. Starter and Growth cover CSV uploads only.

Put the check in front of your next signup

Create a key, paste a recipe, run it in dry-run mode for a few days, then switch blocking on.

Clean your next list before it bounces

100 free email checks when you sign in with Google, no card. Then monthly plans from $9, or one flat price with fair use, never cut off.

100 free checks, no card Cancel anytime Secure payment by Stripe