Stop fake signups before they hit your product.
One API call checks the email, phone number and IP address of every new signup and gives you a single risk score with the reasons behind it.
250 checks a month free. No credit card. No $99 minimum.
// a new signup, checked in one call { "email": "jake.t4@mailinator.com", "phone": "+1 800 555 0199", "ip": "3.5.140.2" } // response { "risk_score": 100, "recommendation": "block", "reason_codes": [ "disposable_domain", "line_type_toll_free", "ip_datacenter_asn", "multiple_risk_signals", "phone_ip_country_mismatch" ] }
A free trial is an open door.
Fake trials
Bots and throwaway accounts farm your free tier and eat the compute, credits and support time you budgeted for real users.
Spam leads
Junk sign-ups flood your onboarding emails, hurt your sender reputation and waste sales time.
Polluted data
Fake accounts inflate your signup numbers and distort activation and conversion, so you optimise for the wrong thing.
Three lines in your signup handler.
Send the signup
Email, phone and IP, whatever you collect. One request.
Get one risk score
0 to 100, plus the reason codes that led to it.
Allow, review or block
// inside your signup handler const res = await fetch("https://www.signupvet.com/score", { method: "POST", headers: { Authorization: `Bearer ${process.env.API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ email, phone, ip: req.ip }), }); const { recommendation, reason_codes } = await res.json(); if (recommendation === "block") return reject("Please use a real email address."); if (recommendation === "review") await flagForReview(user, reason_codes);
Try it on a signup.
Real checks, right now. Nothing you enter here is stored.
Enter at least one field, or pick an example.
One API instead of three.
Email, phone and IP in one call
Disposable domains, dead mail servers, VoIP and premium numbers, datacenters, VPNs and Tor.
One score, clear reasons
Every answer says why: disposable_domain, ip_datacenter_asn, phone_ip_country_mismatch.
Catches bot waves
Five signups from one IP, or max1@, max2@, max3@ within minutes? We look at your recent signups, not just the current one.
Privacy by design
We never store your users' email, phone or IP in clear text. Logs keep masked values only.
One signup = one check
Checking email, phone and IP together counts once. No credit maths.
Start small
Free tier, then $15 packs or a monthly plan. Pay for what you use.
Wherever strangers can sign up.
Free-trial abuse
Stop people from opening a new trial every 14 days with a new throwaway address.
Marketplaces
Keep fake sellers and buyers out before they list or message anyone.
Lead quality
Filter junk from demo requests and lead forms before they reach your CRM.
Communities
Keep spam accounts out of forums, waitlists and invite-only products.
Start free. Pay when it works for you.
Every plan includes every check. Cancel any time.
Free
For side projects and trying it out. No credit card.
- 250 checks / month
- Email, phone and IP checks
- Bot-wave detection
- Dashboard and logs
Build
For a product with steady signups.
- 5,000 checks / month
- Email, phone and IP checks
- Bot-wave detection
- Dashboard and logs
Growth
For products with thousands of signups a month.
- 25,000 checks / month
- Email, phone and IP checks
- Bot-wave detection
- Dashboard and logs
Scale
High volume, invoicing and an agreed SLA.
- Custom volume
- Email, phone and IP checks
- Bot-wave detection
- Dashboard and logs
We are onboarding our first customers.
Tell us about your signup flow and get free usage in exchange for honest feedback.
A small API on purpose.
| Endpoint | Checks |
|---|---|
POST /score | Email, phone and IP combined, with bot-wave detection |
POST /verify/email | Syntax, domain, mail server, disposable, shared mailbox |
POST /verify/phone | Validity, country, line type |
POST /verify/ip | Location, network, datacenter, VPN, Tor |
Authenticate with Authorization: Bearer <key>. Keys are created in the dashboard.
{
"request_id": "req_…",
"status": "risky", // valid · invalid · risky · unknown
"risk_score": 45, // 0–100
"risk_level": "medium", // low · medium · high · critical
"recommendation": "review", // allow · review · block
"reason_codes": ["ip_datacenter_asn"],
"signals": { … }, // raw data per check
"confidence": 75,
"latency_ms": 4
}
Questions founders ask.
How accurate is it?
Checks like "does this domain exist", "is this a known disposable provider", "is this IP a datacenter or Tor" are facts, not guesses. What we cannot see: whether a Gmail inbox really exists, or a residential proxy. That is why there is a review band between allow and block, and every answer comes with its reasons, so you stay in control.
What data do you store?
For your dashboard we keep a masked copy of each check (for example m***@gmail.com, 178.197.224.x) and one-way fingerprints for bot-wave detection. Full email addresses, phone numbers and IPs are never stored.
Can I override decisions?
Always. We return a recommendation and the score; your code decides what happens. You can simply treat "review" as "allow" at first and tighten later.
Is it ready for production?
The API is small and stable, and a check usually answers in well under 50 milliseconds, so your signup form does not feel slower. We are in early access, so talk to us before you send large volumes.
Do you support webhooks?
Not yet. Webhooks for high-risk signups are on the roadmap. Today every check returns its result immediately.
What counts as a check, and do packs expire?
One API call is one check, even if it covers email, phone and IP together. Requests that fail validation are free. Pack checks never expire and are used after your monthly checks.
Your next signup could be a bot.
Create an account, grab an API key and check your first signup in under ten minutes.