Engineering14 min read

Verify Disposable Email with an API Before Signup Fraud

Use a verify disposable email API to catch burner addresses in real time, reduce fake signups, and protect sender reputation before sending.

B
The Bounceable Team
Disposable email blocked before signup database

A verify disposable email API checks whether an address belongs to a burner or throwaway service before you let it create an account, start a trial, or enter your CRM. You use it inline, at the point of collection, so bad addresses do not become downstream deliverability and fraud problems.

What a verify disposable email API does

A verify disposable email API tells you whether an email address is likely real, reachable, and safe enough to accept.

Disposable email verification means checking the domain and mailbox against signals that indicate short-lived or anonymous inboxes. These include known burner domains, temporary mailbox providers, mail forwarding patterns, suspicious MX infrastructure, and domain behavior seen across signup flows.

A good disposable email detection API does more than answer “is this a valid email string?” It helps you decide whether the address should enter your system at all.

Disposable verification vs. regex and MX checks

Regex validation catches obvious formatting errors. MX checks tell you whether a domain can receive mail. Neither one tells you whether the address belongs to a throwaway inbox.

Check typeWhat it catchesWhat it missesBest use
Regex validationBad syntax like alex@@exampleDisposable domains, dead mailboxes, catch-all domainsClient-side UX
MX lookupDomains with no mail serverBurner providers with valid MX recordsBasic server-side hygiene
SMTP probeSome invalid mailboxesProviders that hide mailbox statusDeliverability checks
Disposable email APIBurner domains and risky patternsSome brand-new domains until observedSignup fraud prevention
Full email validation APISyntax, domain, mailbox, risk, typo, role account signalsCases where providers block probingProduction trust decisions

A throwaway email checker matters because disposable providers usually have valid syntax and valid DNS. From a basic validator’s point of view, new-user@temporary-inbox.example may look fine. From a fraud and lifecycle marketing point of view, it is not fine.

Typical API outputs

Most real-time email verification API responses include a mix of verdicts and signals:

  • Disposable flag: whether the domain appears to be a burner or temporary email provider.
  • Deliverability verdict: deliverable, risky, undeliverable, or unknown.
  • Email risk scoring: a numeric or categorical risk score you can use in policy rules.
  • Typo suggestion: a corrected version for common mistakes like gmial.com to gmail.com.
  • Catch-all flag: whether the domain accepts mail for any local part.
  • Role account flag: whether the address looks like info@, sales@, or support@.
  • Mailbox or SMTP result: whether the mailbox appears reachable when probed.

Use disposable detection as one signal in a broader signup fraud prevention model. Combine it with IP reputation, velocity limits, device signals, CAPTCHA, and email confirmation.

Where to add disposable email verification

Add disposable email verification anywhere an address creates trust, access, cost, or future sending risk.

You do not need to verify every email field with the same strictness. A newsletter box and a trial signup form have different risk. Put the strongest checks where abuse has the highest cost.

Signup forms

Your main account signup form is the highest-value place to run burner email detection. If you accept disposable addresses here, you create accounts you cannot reliably contact.

Use real-time verification before account creation when:

  • Users get access immediately.
  • You offer free credits or usage.
  • You rely on email for security notices.
  • You use the email as a durable account identifier.

For low-risk communities or content products, you may choose to allow some privacy-focused addresses. For SaaS trials, marketplaces, and financial workflows, you usually want stricter rules.

Free trial creation

Free trials attract abuse because they create value before payment. Disposable addresses make it easier to farm trials, bypass limits, and avoid lifecycle emails.

At trial creation, check:

  • Disposable domain status.
  • Deliverability verdict.
  • Risk score.
  • IP or device velocity.
  • Existing accounts using related identifiers.

If the address is disposable or undeliverable, block the trial or require a stronger verification step.

Lead capture forms

Lead forms feed sales and marketing systems. Bad emails waste enrichment, routing, SDR time, and campaign sends.

For lead capture, you may not need to hard-block every risky result. You can:

  • Reject undeliverable addresses.
  • Ask users to fix typos.
  • Mark disposable addresses as low quality.
  • Route catch-all or unknown addresses to review.
  • Suppress risky leads from automated sequences.

This keeps your CRM useful without being unnecessarily hostile to prospects.

Waitlists and gated content

Waitlists and gated assets often get hit with throwaway addresses because users want access without follow-up.

Use disposable verification to decide whether to:

  • Accept the address.
  • Send a confirmation link.
  • Withhold the asset until confirmation.
  • Exclude the lead from nurture campaigns.
  • Deduplicate low-quality submissions.

For gated content, a softer approach often works well. Show the content after confirmation instead of blocking at the form.

Checkout and account recovery flows

Checkout forms and recovery flows need care. You do not want to block a legitimate customer because an API returns an unknown result.

At checkout, use verification to catch obvious typos and undeliverable emails before purchase receipts fail. For account recovery, do not reveal whether an email exists in your system. Run checks internally, but keep user-facing messages generic.

The best flow uses client-side validation for usability and server-side API verification for trust decisions.

Do not make fraud decisions in JavaScript. Browser checks are easy to bypass. Treat them as a way to reduce typos and improve form feedback.

1. Validate format on the client

Client-side checks should be fast and simple:

  • Trim whitespace.
  • Lowercase the domain.
  • Check basic email syntax.
  • Warn on obvious typos.
  • Disable submit only for clearly malformed input.

This improves user experience. It does not protect your database.

2. Verify on the server

Send the normalized email to your backend. Your backend calls the disposable email detection API and decides what to do.

Server-side verification lets you:

  • Keep API keys private.
  • Apply consistent policy.
  • Combine email risk with other fraud signals.
  • Log decisions safely.
  • Retry or degrade gracefully.

3. Store normalized email and metadata

Store the user’s normalized email plus the verification result you used at decision time.

Useful fields include:

  • Normalized email.
  • Domain.
  • Verification timestamp.
  • Deliverability verdict.
  • Disposable flag.
  • Catch-all flag.
  • Risk score.
  • Suggested correction.
  • Decision made by your system.
  • API error or timeout status, if any.

This metadata helps later when you analyze bounce rates, trial abuse, fake leads, and support issues.

4. Avoid relying on front-end checks alone

Anything in the browser can be skipped. A bot can post directly to your signup endpoint. A user can modify JavaScript. A headless client can ignore your form entirely.

Use the front end for guidance. Use the backend for enforcement.

Never expose your verification API key in client-side code. Put the API call behind your own server endpoint.

Decision logic: block, allow, or review

Your decision logic should map verification signals to one of three outcomes: block, allow, or review.

A binary allow/deny rule sounds simple, but email data is messy. Mail providers behave differently. Some domains hide mailbox status. Catch-all domains can be legitimate. Unknown does not always mean bad.

Block obvious disposable or undeliverable emails

Block when the address is clearly unsuitable for the flow.

Common block conditions:

  • disposable = true
  • deliverability = undeliverable
  • Invalid syntax after normalization
  • Domain has no usable mail infrastructure
  • Typo suggestion exists and the entered domain is likely wrong
  • Risk score exceeds your threshold for the specific flow

Use a clear message. Do not say “fraud detected.” Say something like:

Please use a permanent email address that you can access.

For typo cases, help the user fix it:

Did you mean name@gmail.com?

Allow deliverable low-risk addresses

Allow when signals are clean:

  • Deliverable verdict.
  • Disposable flag is false.
  • Risk score is low.
  • No high-risk domain behavior.
  • No suspicious velocity or abuse signals elsewhere.

You can still require normal email confirmation. Verification reduces bad signups. It does not replace proof that the user controls the inbox.

Flag catch-all, unknown, or risky addresses

Some addresses deserve more scrutiny without an immediate block.

Flag for review or softer handling when:

  • The domain is catch-all.
  • The SMTP probe is inconclusive.
  • The verdict is unknown.
  • The address is a role account.
  • The provider blocks mailbox-level verification.
  • The risk score is medium.

A catch-all business domain may accept any local part. That does not mean the address is fake. It means you should avoid assuming mailbox-level certainty.

Use step-up verification for ambiguous cases

Step-up verification gives legitimate users a path through without letting risky signups pass silently.

Options include:

  1. Send a confirmation link before account activation.
  2. Require SSO for business domains.
  3. Ask for a work email for B2B trials.
  4. Add CAPTCHA when velocity is high.
  5. Queue the signup for manual review.
  6. Limit access until the address is confirmed.

Here is a simple policy matrix:

ResultSuggested action
Disposable and undeliverableBlock
Disposable but deliverableBlock or step-up, depending on product risk
Deliverable and low riskAllow
Catch-all and low riskAllow with confirmation
Unknown and medium riskStep-up verification
Role accountAllow for teams, review for individual trials
Typo suggestion presentAsk user to correct

API response fields to look for

Choose an API that returns enough fields to support policy decisions, not just a single “valid” boolean.

A boolean result hides useful detail. You want to know why an address passed or failed.

Deliverability status

Deliverability status tells you whether the address appears reachable.

Look for verdicts like:

  • deliverable
  • risky
  • undeliverable
  • unknown

Treat undeliverable as a hard stop in most flows. Treat unknown as ambiguous, not automatically bad.

Disposable domain detection

The disposable flag is the core field for burner email detection. It should reflect a maintained dataset, not a stale list bundled into your app months ago.

Disposable providers appear and disappear constantly. New domains rotate in. Old domains get abandoned. Your detection source needs regular updates.

Catch-all detection

Catch-all domains accept mail for any local part. For example, both alex@company.com and random-string@company.com may appear valid.

Catch-all status matters because mailbox-level verification becomes less certain. You can still accept the address, but you should avoid treating it as strongly verified.

SMTP probe result

SMTP probing checks how the receiving mail server responds during a delivery-like conversation. It can identify some invalid mailboxes without sending an email.

SMTP results are useful, but not perfect. Some providers tarp it, rate-limit it, or intentionally avoid revealing mailbox existence. Your logic should account for that.

Role account detection

Role accounts include addresses like:

  • info@
  • admin@
  • sales@
  • support@
  • billing@

They are not always bad. For B2B workflows, they may be valid. For individual free trials, they may create ownership and attribution problems.

Free provider flag

Free providers like Gmail, Outlook, and Yahoo are legitimate, but they may not fit every flow.

For a consumer app, free provider addresses are normal. For a B2B enterprise trial, you may prefer a work email or require additional qualification.

Typo correction suggestion

Typo suggestions prevent avoidable bounces. Common examples include:

  • gmial.comgmail.com
  • hotnail.comhotmail.com
  • yaho.comyahoo.com

Do not silently rewrite the email. Show the suggestion and let the user confirm it.

Example implementation pattern

A safe implementation verifies email on the server, applies policy, stores the result, and handles API failures deliberately.

Here is a simplified signup endpoint pattern. The API call is represented as verifyEmail() so you can plug in your provider without exposing keys or relying on a specific endpoint.

app.post("/signup", async (req, res) => {
  const rawEmail = req.body.email;
  const email = normalizeEmail(rawEmail);

  if (!isValidEmailSyntax(email)) {
    return res.status(400).json({
      error: "Please enter a valid email address."
    });
  }

  let verification;

  try {
    verification = await verifyEmail(email, { timeoutMs: 1200 });
  } catch (err) {
    verification = {
      status: "verification_unavailable",
      decision: "defer",
      error: err.code || "unknown_error"
    };
  }

  const decision = decideSignupAccess(verification);

  await logEmailVerification({
    email,
    domain: email.split("@")[1],
    verification,
    decision,
    source: "signup"
  });

  if (decision === "block") {
    return res.status(400).json({
      error: "Please use a permanent email address that you can access."
    });
  }

  if (decision === "step_up") {
    await sendConfirmationEmail(email);
    return res.status(202).json({
      status: "confirmation_required"
    });
  }

  const user = await createUser({ email });
  return res.status(201).json({ userId: user.id });
});

Your decision function should be explicit:

function decideSignupAccess(v) {
  if (v.disposable === true) return "block";
  if (v.deliverability === "undeliverable") return "block";
  if (v.riskScore >= 80) return "block";

  if (v.deliverability === "unknown") return "step_up";
  if (v.catchAll === true) return "step_up";
  if (v.riskScore >= 50) return "step_up";

  return "allow";
}

Handle API timeouts gracefully

Timeouts happen. Your provider may be slow. A receiving mail server may not respond. Your network may fail.

Decide your failure mode per flow:

  • High-risk signup: fail closed or require confirmation.
  • Low-risk content form: accept but mark unverified.
  • Checkout: accept payment, but ask for confirmation if receipt delivery is uncertain.
  • Account recovery: do not expose details; handle internally.

Avoid a global “verification failed, allow everything” rule. That creates an easy bypass if attackers can trigger timeouts.

Cache domain-level results when safe

You can cache some domain-level signals to reduce latency and API calls.

Good cache candidates:

  • Disposable domain status.
  • Free provider flag.
  • Role local-part pattern.
  • MX existence for stable domains.

Be careful with mailbox-level results. A specific mailbox can change. A previously valid address can start bouncing. A catch-all configuration can change too.

Use short cache lifetimes for risk-sensitive data. Keep enough freshness for your fraud model.

Log decisions for analysis

Log the verification response and your decision. You will need it later.

Useful questions your logs can answer:

  • Which forms attract the most disposable addresses?
  • Which domains drive failed confirmations?
  • Which risk thresholds produce false positives?
  • Which lead sources send bad addresses?
  • How many blocked signups later retry with a permanent email?
  • Are old “deliverable” leads now bouncing?

This is where email verification becomes operational, not just a form check.

Common mistakes to avoid

Most disposable email verification failures come from oversimplified rules or checks in the wrong place.

You do not need a perfect system. You need one that blocks obvious abuse, treats uncertainty carefully, and keeps improving.

Only checking a static list

Static lists go stale. Disposable email providers rotate domains quickly. Attackers also use less obvious domains that do not look disposable at first glance.

A maintained API gives you fresher coverage and additional signals beyond the domain name.

Blocking all privacy-focused addresses

Not every privacy-focused email address is disposable. Some users use aliases, forwarding services, custom domains, or privacy relays as permanent inboxes.

Decide what you actually care about:

  • Temporary mailbox with no durable user relationship? Usually block.
  • Stable alias that forwards to a real inbox? Maybe allow.
  • Privacy relay from a major platform? Treat based on your product risk.

Blocking too broadly can hurt legitimate users.

Treating unknown as automatically bad

Unknown means the verifier could not establish a strong result. It does not mean the email is fake.

Use step-up verification for unknown results. Confirmation email is usually enough for moderate-risk flows.

Not re-verifying old leads before campaigns

Lead quality decays. Domains expire. Mailboxes close. People leave companies. Catch-all settings change.

Before you send a campaign to an old segment, re-run verification. Suppress undeliverable and high-risk addresses. This protects sender reputation and keeps bounce rates down.

<2%common bounce-rate target for healthy outbound sending

Failing open on obviously risky signups

Failing open means you allow signups when verification fails or returns high-risk signals. That may be acceptable for low-risk content access. It is a bad default for free trials, promo credits, and abuse-prone products.

At minimum, use step-up verification when the API is unavailable.

Using Bounceable for real-time disposable email checks

Bounceable is a REST API for disposable detection, deliverability verdicts, and email risk signals you can use before an address enters your database.

You send an email address to the API from your backend. Bounceable checks whether it is deliverable, flags disposable and burner domains, detects catch-all behavior, probes mailbox status over SMTP where possible, and returns a verdict such as deliverable, risky, undeliverable, or unknown.

It also returns practical fields for production decisions:

  • Disposable domain detection.
  • Catch-all detection.
  • Email risk scoring.
  • Role account detection.
  • Free provider flag.
  • Typo suggestions.
  • Deliverability verdicts.

That makes it useful for signup forms, lead capture, cold outreach prep, trial abuse controls, and list cleanup. If you do not want to wire code immediately, you can also use integrations through Zapier, Pipedream, and Apify.

Start with a conservative policy:

  1. Block disposable and undeliverable addresses.
  2. Allow deliverable low-risk addresses.
  3. Step up unknown, catch-all, or medium-risk addresses.
  4. Store the metadata.
  5. Revisit your thresholds after you review real outcomes.
Catch bad addresses before they bounce.
Verify your list free

Frequently asked questions

Keep reading