Purlock
API Fake signup checker

Stop one person taking every free trial.

j.o.h.n@gmail.com and john+2@gmail.com reach the same inbox. One call when someone signs up tells you the real inbox, and whether to let them in.

One API call per signup checked.

What you get

What it does for you

  • The real inbox

    We remove Gmail's dots and the plus tags most providers ignore. Store the result, and look for repeats.

  • Throwaway addresses

    A list of over 100,000 disposable email domains, the usual way around signup limits.

  • Typos, with the fix

    me@gmial.com gets a suggestion of me@gmail.com, so you can ask rather than lose a real customer.

  • Addresses that can't work

    Bad formatting, and domains with no mail server, so anything you send would bounce.

  • Harmful domains

    Domains on threat lists, and ones pretending to be a well known brand.

  • Fair to real people

    A failed lookup never blocks anyone, and a new domain is reported but not held against them.

How it works

What it looks like in your code

Your request

POST /v1/shield/signup/check

{
  "email": "j.o.h.n+trial2@gmail.com"
}

The answer

{
  "email": "j.o.h.n+trial2@gmail.com",
  "normalized": "john@gmail.com",
  "action": "allow",
  "reasons": [],
  "suggestion": null,
  "disposable": false,
  "role": false,
  "free_provider": true,
  "mail_server": true,
  "domain_age_days": null,
  "checked_at": "2026-11-07T09:00:00.000Z"
}

Good to know

What it can't do

  • It can't tell you a mailbox exists. We never contact the mail server, because that gets senders blocklisted.
  • Spotting repeats is up to you: compare normalized with what you've stored.
  • It looks at the address only, not the person's device or location.

FAQ

Questions, answered

How do I stop repeat free trials?
Save normalized next to each account. When someone signs up, look for that value before you start a trial. If it's there, they've had one.
Should I email the normalized address?
No. Keep sending to what the person typed. Normalized is only for comparing.
Do you keep the addresses?
No. We read each one to answer that request, and don't save it.
What does review mean?
A likely typo, with the fix in suggestion, or a domain pretending to be a brand. Ask the person to confirm.