Private betaMailbeam is in private beta — the public API isn't live yet.Join the waitlist

Migrate from Clearout

This guide shows how to replace Clearout's verification calls with Mailbeam. The integration shape does not change: you still send an address and branch on what comes back, so the call site usually stays exactly where it is.

Why developers switch

  • EU data residency: Clearout processes outside the EU, which leaves an international-transfer question to answer; Mailbeam processes in Frankfurt with a DPA on every plan
  • Built for forms: Clearout's real-time latency is region-dependent and often around 300ms, which is slow for inline signup validation
  • Graded catch-all: Clearout flags accept-all domains without a confidence score; Mailbeam returns a 0–100 score plus a reason you can threshold on
  • Sandbox mode: Clearout has none, so CI has to call the paid production API; Mailbeam ships a deterministic test mode
  • Focus: verification is one product line at Clearout alongside an email finder and phone validation

Two things genuinely favour Clearout, and they are worth checking before you move: its pay-as-you-go credits do not expire, which suits spiky or infrequent usage better than a monthly subscription, and it offers email finding and phone validation that Mailbeam does not.

Endpoint mapping

ClearoutMailbeamNotes
POST /v2/email_verify/instantPOST /v1/verifySingle verification
Bulk upload via dashboardPOST /v1/verify/batchUp to 500,000 addresses per job

Authentication

Clearout sends the token as Bearer:<token> — with a colon and no space. Mailbeam uses the standard Bearer <token> form, so this is one of the few places where a copy-paste will fail silently if you are not looking for it.

Clearout (old):

curl -X POST https://api.clearout.io/v2/email_verify/instant \
  -H "Authorization: Bearer:$CLEAROUT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com"}'

Mailbeam (new):

curl -X POST https://api.mailbeam.dev/v1/verify \
  -H "Authorization: Bearer $MAILBEAM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com"}'

Response mapping

Clearout nests its result under a data object. Mailbeam returns the result directly, with no envelope.

Clearout fieldMailbeam equivalent
data.status: "valid"valid: true
data.status: "invalid"valid: false
data.status: "catch_all"catchAll: true plus a graded score
data.status: "unknown"status: "unknown"
data.sub_statusreason (machine-readable code)
data.disposabledisposable
data.rolerole

Migrating the call

Clearout (old):

const res = await fetch("https://api.clearout.io/v2/email_verify/instant", {
  method: "POST",
  headers: { Authorization: `Bearer:${apiToken}`, "Content-Type": "application/json" },
  body: JSON.stringify({ email }),
});
const { data } = await res.json();
if (data.status !== "valid") return 422;

Mailbeam (new):

// No SDK to install — see /docs/quickstart for this 12-line wrapper.
import { verifyEmail } from "./lib/mailbeam.js";

const { valid, score, reason } = await verifyEmail(email);
if (!valid || score < 60) return 422;

What to check first: catch-all domains

This is where the two products disagree most, and it is the value worth comparing before you cut over. Clearout returns catch_all as a status and leaves the interpretation to you, so most integrations end up treating it as a rejection. Mailbeam reports the accept-all behaviour and a confidence score, which lets you accept high-quality corporate catch-alls instead of discarding them:

const { valid, catchAll, score, reason } = await verifyEmail(email);

if (catchAll) {
  // A large share of B2B traffic sits behind accept-all domains.
  // Threshold instead of rejecting outright.
  if (score >= 70) return accept();
  return challenge({ reason });
}

Run both providers side by side over a sample of real signups before switching this branch — it is the one place where the migration changes behaviour rather than just field names.

Next steps