Disposable Email Lookup API: Build Real-Time Checks
Use a disposable email lookup API to block burner domains in real time, reduce fake signups, and keep clean addresses flowing into your stack.

A disposable email lookup API lets you reject throwaway addresses before they enter your product, CRM, or sending list. The best implementation runs server-side, combines disposable-domain intelligence with real deliverability checks, and returns a simple verdict your app can act on.
When to use a disposable email lookup API
Use a disposable email lookup API anywhere a bad address can create cost, abuse, or poor sending data.
You do not need to block every risky address everywhere. You need to match the control to the workflow. A newsletter signup and a free SaaS trial have different risk profiles.
Signup forms exposed to free trials or abuse
Free trials attract throwaway addresses. That is normal. Some users want privacy. Others want to avoid limits, create repeated trials, or abuse referral credits.
Real-time disposable email detection helps you stop the obvious cases before account creation.
Good places to check:
- Trial signup forms
- Invite acceptance flows
- Referral program entries
- Coupon or credit redemption forms
- Community or marketplace account creation
- API key generation flows
For high-risk flows, check the email before you create the account. If the address is disposable, show a clear correction path.
Example message:
Please use a permanent email address so we can secure your account and send important service updates.
Do not say “fake email” unless you want support tickets.
Lead capture forms where fake emails waste sales effort
A fake email can pollute your CRM for months. It wastes enrichment credits, SDR time, routing logic, and reporting.
A verify disposable email API can help before the lead hits Salesforce, HubSpot, or your marketing automation platform.
For lead forms, you usually want softer handling than hard blocking. For example:
- Accept deliverable business emails.
- Accept common free providers if your offer targets individuals.
- Flag role accounts like
info@orsales@. - Suppress disposable domains from sales routing.
- Send risky leads to a nurture queue instead of an SDR queue.
This keeps your funnel open without treating every form fill as equally valuable.
Product-led growth flows with one-account-per-user rules
If your product relies on one account per person, disposable addresses break the model.
They can let users:
- Reset free usage limits.
- Evade bans.
- Claim multiple promotions.
- Create spam workspaces.
- Distort activation metrics.
A burner email API is only one control here. Pair it with device, payment, IP, identity, and behavior signals where appropriate. Email alone should not carry your entire abuse strategy.
Cold email and lifecycle programs that need clean addresses
Disposable addresses also show up in imported lists, scraped data, event scans, and old product databases.
Before you send cold outreach or lifecycle campaigns, check the list. You want to remove:
- Disposable domains
- Invalid domains
- Nonexistent mailboxes
- Obvious typos
- High-risk catch-all addresses
- Role accounts when the campaign targets individuals
Keep validation close to the point of collection. The earlier you catch bad addresses, the less cleanup you need later.
What the API should check
A good email verification endpoint should check more than whether a domain appears on a blocklist.
Disposable-email vendors change domains constantly. Some domains live for days. Some accept mail but never reach a human. Some look normal in DNS but fail at the mailbox level.
Known disposable and burner domains
Start with disposable-domain detection.
The API should compare the email domain against a maintained database of known disposable, throwaway, temporary, and burner providers. This is the core of a block disposable domains API.
Look for coverage that updates continuously, not a GitHub list last touched months ago.
You want flags like:
{
"email": "user@temporary-example.test",
"normalized_email": "user@temporary-example.test",
"is_disposable": true,
"verdict": "risky"
}
The exact field names will vary by provider. Your application should map them into your own internal decision model.
MX and DNS validity
Next, the API should check whether the domain can receive mail.
Important DNS checks include:
- Does the domain exist?
- Does it have MX records?
- If no MX exists, does the domain have an A record that can accept mail?
- Are the DNS responses temporary failures or permanent failures?
A domain with no valid mail routing should usually be treated as undeliverable.
This catches typos and dead domains that are not disposable, such as:
gmail.concompany.coimold-startup-domain.example
Mailbox-level SMTP verification
Domain checks are not enough. gmail.com can receive mail, but not-a-real-user-928381@gmail.com may not exist.
Mailbox-level SMTP verification checks whether the remote mail server appears willing to accept mail for that specific address. A strong API does this carefully to avoid sending a message.
The result is not always perfect. Some mail servers throttle probes. Some hide user existence. Some accept all recipients. But SMTP verification gives you much better signal than regex and DNS alone.
Catch-all domains
A catch-all domain accepts mail for any local part.
For example, all of these may appear valid:
alice@example.comasdf123@example.comnotarealperson@example.com
Catch-all does not mean bad. Many businesses use catch-all routing intentionally. But it does mean mailbox verification cannot prove that the person exists.
Treat catch-all as a risk signal, not an automatic block.
A good API should return something like:
{
"is_catch_all": true,
"smtp_check": "accepted",
"verdict": "risky",
"risk_score": 62
}
Then your app can decide what to do.
Free provider, role account, typo, and risk signals
Disposable status is only one part of signup form email validation.
Useful additional signals include:
| Signal | What it tells you | Common action |
|---|---|---|
| Disposable domain | User used a temporary mailbox | Block, require permanent email, or suppress from sales |
| Invalid MX/DNS | Domain cannot receive mail | Ask for correction |
| SMTP failure | Mailbox likely does not exist | Ask for correction |
| Catch-all | Mailbox cannot be proven | Accept with confirmation or score as risky |
| Free provider | Gmail, Outlook, Yahoo, etc. | Usually accept unless B2B-only flow |
| Role account | info@, admin@, support@ | Accept for support use cases, flag for sales |
| Typo suggestion | Likely misspelling | Offer one-click correction |
| Risk score | Combined deliverability estimate | Route by threshold |
Do not confuse free providers with disposable providers. Blocking all Gmail or Outlook addresses will hurt many legitimate products.
Example signup flow architecture
A clean signup flow validates syntax in the browser, verifies deliverability on your server, then creates the account only after you have a usable verdict.
Keep the browser fast. Keep secrets and decisions on the backend.
Validate syntax client-side for fast feedback
Client-side validation should catch obvious mistakes before a network call.
Use it for:
- Missing
@ - Empty local part
- Spaces
- Clearly invalid format
- Copy/paste mistakes
Do not make the regex too clever. Email syntax is more complex than most frontend regex patterns. Let the API handle real validation.
Example:
function looksLikeEmail(value) {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
}
This is a usability check, not a deliverability check.
Call the API server-side before account creation or enrichment
Your server should call the verification provider. This protects your API key and keeps your business rules private.
A typical flow:
- User submits email.
- Frontend sends email to your backend.
- Backend normalizes the email.
- Backend calls the email verification API.
- Backend maps the response to your decision.
- Backend creates, blocks, or routes the signup.
Illustrative backend request:
curl -X POST "https://your-app.example.com/api/validate-email" \
-H "Content-Type: application/json" \
-d '{"email":"alex@gmial.com"}'
Your backend response to the frontend might look like this:
{
"status": "needs_correction",
"message": "Did you mean alex@gmail.com?",
"suggestion": "alex@gmail.com"
}
The frontend does not need the full verification payload. It needs an action and a user-safe message.
Store only the verdict and normalized email where possible
Email addresses are personal data in many contexts. Store the minimum you need.
Good fields to keep:
- Normalized email
- Verification verdict
- Disposable flag
- Risk score or bucket
- Provider response timestamp
- Typo suggestion if used
- Reason code for audit/debugging
Avoid storing raw SMTP transcripts, excessive provider metadata, or repeated validation payloads unless you have a clear need.
Also set a recheck policy. Verification results age. A domain can expire. A mailbox can be closed. A disposable provider can rotate domains.
For active users, you may only need to verify once at signup. For outbound lists, recheck before major sends or after long inactivity.
Route risky addresses to confirmation or manual review
Risky does not always mean reject.
Use progressive friction:
- Show typo correction for likely mistakes.
- Require email confirmation for risky or catch-all addresses.
- Delay CRM routing until confirmation.
- Suppress risky leads from high-cost enrichment.
- Send suspicious signups to manual review if abuse cost is high.
This gives legitimate users a path forward while protecting your systems.
Decision rules for API responses
Map API responses into four outcomes: deliverable, risky, undeliverable, and unknown.
This keeps product logic simple. It also makes monitoring easier.
Deliverable: accept and continue
Deliverable means the address passed the checks your provider can perform.
Common action:
- Create the account.
- Add the lead to the normal workflow.
- Send confirmation or onboarding email.
- Mark the record as verified.
Still send a confirmation email when account security matters. Verification proves deliverability. It does not prove ownership.
Risky: add friction or require confirmation
Risky means the address may work, but there is a reason to slow down.
Examples:
- Disposable domain
- Catch-all domain
- Role account
- Temporary SMTP uncertainty
- High-risk score
- Free provider in a strict B2B flow
Possible actions:
- Require email confirmation before activation.
- Block disposable addresses in trial flows.
- Allow but exclude from sales routing.
- Allow but reduce lead score.
- Ask for a work email if the product requires one.
Use clear reason codes internally. Your support team should know why a user got blocked.
Undeliverable: block or ask for correction
Undeliverable means the address is very unlikely to receive mail.
Examples:
- Invalid syntax after normalization
- Domain does not exist
- No usable mail exchange
- Mailbox rejected by SMTP
- Known invalid address pattern
User-facing copy should be specific and calm:
- “That email domain does not appear to receive mail.”
- “That mailbox could not be verified. Check for typos.”
- “Did you mean
name@gmail.com?”
Do not expose low-level SMTP messages. They confuse users and can leak implementation details.
Unknown: allow, quarantine, or recheck based on business risk
Unknown means the API could not reach a confident result.
Causes include:
- DNS timeout
- SMTP timeout
- Greylisting
- Provider rate limits
- Mail server privacy behavior
- Temporary network failure
Decide based on risk.
| Flow | Suggested unknown handling |
|---|---|
| Low-risk newsletter | Allow, then confirm by email |
| B2B demo request | Allow, but do not auto-route to SDR until confirmed |
| Free trial with abuse history | Require confirmation before activation |
| Paid checkout | Allow if payment succeeds, recheck later |
| Bulk list import | Quarantine and retry before sending |
Unknown rates deserve monitoring. A sudden spike can mean your verification provider is having trouble, a major mailbox provider changed behavior, or your integration is timing out.
Developer pitfalls to avoid
Most bad implementations fail because they overtrust one signal or put the check in the wrong place.
Relying only on static disposable-domain lists
Static lists age quickly.
Disposable providers rotate domains. New domains appear. Old domains disappear. Some services use subdomains or shared infrastructure. A list checked into your repo will miss too much after a while.
A maintained API gives you:
- Fresher disposable-domain coverage
- DNS checks
- SMTP-level checks
- Risk scoring
- Catch-all handling
- Typo suggestions
- Better observability
Static lists can still help in edge environments. Do not make them your only defense.
Blocking all free providers
Free provider does not mean low quality.
Many legitimate users sign up with Gmail, Outlook, iCloud, Yahoo, and Proton Mail. Founders, consultants, students, buyers, and developers often use personal addresses.
Block free providers only when the business rule is explicit. For example, “work email required for enterprise demo routing.”
Even then, consider allowing the signup and changing the follow-up path.
Running SMTP checks from the browser
Never run SMTP verification from the browser.
Problems:
- You expose API keys.
- You leak validation rules.
- You invite abuse against your verification account.
- Browsers cannot perform proper SMTP checks directly.
- Attackers can bypass frontend logic.
Do syntax checks client-side. Do disposable, DNS, SMTP, and risk checks server-side.
Creating privacy issues by exposing exact user emails
Do not send full verification details to analytics tools, logs, or client-side error trackers by default.
Watch for accidental leaks in:
- Request logs
- APM traces
- Browser console errors
- Product analytics events
- CRM notes
- Support chat metadata
If you need observability, log structured fields:
{
"verification_verdict": "risky",
"is_disposable": true,
"is_catch_all": false,
"reason": "disposable_domain"
}
You can usually debug the integration without spreading raw email addresses across your stack.
Failing open without monitoring risky verdict rates
Every verification system needs a failure policy.
Failing open means you accept the signup if the API times out. That can protect conversion, but it can also let abuse through during outages.
Failing closed means you block the signup if verification fails. That can protect your system, but it can also block good users.
A practical middle ground:
- Set short timeouts.
- Retry once on transient failures.
- Allow low-risk flows on timeout.
- Require confirmation for high-risk flows on timeout.
- Track unknown, risky, disposable, and timeout rates.
- Alert on large deviations from baseline.
Do not let “unknown” silently become “good.” Treat unknown as its own state and review the rate over time.
Implementing with Bounceable
Bounceable gives you a real-time email verification API that combines disposable detection, deliverability checks, and risk signals behind one REST API flow.
You send an email address from your backend. Bounceable returns a verdict such as deliverable, risky, undeliverable, or unknown, along with signals your app can use for routing.
REST API flow at a high level
A typical implementation looks like this:
async function validateEmailForSignup(email) {
const result = await verifyEmailWithProvider(email);
if (result.suggestion) {
return {
action: "correct",
suggestion: result.suggestion
};
}
if (result.verdict === "deliverable") {
return { action: "accept" };
}
if (result.verdict === "risky") {
return {
action: result.is_disposable ? "block" : "confirm",
reason: result.is_disposable ? "disposable_email" : "risky_email"
};
}
if (result.verdict === "undeliverable") {
return { action: "reject", reason: "undeliverable_email" };
}
return { action: "confirm", reason: "unknown_verification_result" };
}
Keep this mapping in your backend. Your frontend should receive only the action it needs to render.
Disposable-domain database and real-time checks
Bounceable maintains a disposable and burner-domain database with tens of thousands of domains. That matters because throwaway email detection gets worse when the source list goes stale.
For signup forms, you can use the disposable flag to:
- Block temporary addresses.
- Ask for a permanent email.
- Prevent repeated trial abuse.
- Exclude disposable leads from enrichment.
- Segment reporting by email quality.
For lower-risk flows, you can allow the address but suppress sending until the user confirms ownership.
Catch-all probing and deliverability verdicts
Bounceable also flags catch-all domains and probes mailboxes over SMTP where possible.
That lets you separate:
- A normal deliverable mailbox
- A disposable domain
- A domain that cannot receive mail
- A catch-all business domain
- A mailbox that cannot be verified confidently
- A typo that likely has a correction
Those distinctions matter. A catch-all domain and a disposable domain should not receive the same treatment.
Zapier, Pipedream, and Apify options for no-code workflows
You do not always need a custom integration.
If your workflow starts in a form tool, spreadsheet, CRM, or enrichment process, use automation where it fits:
- Zapier for common SaaS handoffs
- Pipedream for lightweight workflow logic
- Apify for scraping and data-processing pipelines
The same decision model still applies. Verify the email, map the verdict, and route the record.
Start with the free tier
Start by adding verification to one high-impact point: signup, demo requests, or list import. Measure the disposable, risky, undeliverable, and unknown rates before you tighten rules.
Then tune decisions by business cost:
- If abuse is expensive, block disposable addresses early.
- If conversion matters more, require confirmation instead.
- If sales time is the cost, suppress risky leads from rep queues.
- If sender reputation is the cost, clean lists before sending.


