Mailbeam
API · Batch

Bulk Email Verification API

Submit up to 500,000 addresses in a single API call. Get back per-address scores, status classifications and delivery flags — without a connection timeout.

What Mailbeam checks

Every verification runs 7 checks in parallel and returns a structured result in under 100ms.

500K addresses per batch job

A single POST to /v1/verify/batch accepts up to 500,000 email addresses. Jobs are queued and processed asynchronously — no HTTP timeout, no partial results.

Signed webhook on completion

Register an endpoint once in the dashboard. When a job finishes, Mailbeam POSTs a batch.completed event carrying the totals and a download URL, signed with HMAC-SHA256 so you can verify it came from us.

Per-address scoring

Every address in the batch receives the same treatment as the single verify endpoint: syntax, MX, SMTP, disposable, role, catch-all detection and the quality score.

Deliverable / Risky / Undeliverable segmentation

Results include a status field for each address. Filter the JSON output by status to create send-ready, review, and suppression segments.

Progress polling

Poll /v1/jobs/{jobId} at any time for the number of addresses processed so far. Or just wait for the webhook — whichever fits your workflow.

One connection per destination domain

Addresses are grouped by domain and each domain is probed one at a time, while different domains run in parallel. It is slower than hammering a mail server, and it is what keeps our IPs — and therefore your results — off blocklists.

How it works

1

POST the email array

Send a JSON body with an `emails` array — up to 500,000 strings — to /v1/verify/batch. The response returns a `job_id` immediately, with a 202.

2

Async processing begins

Mailbeam processes each address independently: syntax check, DNS/MX lookup, SMTP probe, disposable database check, role detection, and catch-all scoring.

3

Webhook fires (or poll)

When every address has been processed, your endpoint receives a signed `batch.completed` event. Alternatively, poll /v1/jobs/{jobId} for progress.

4

Retrieve and segment results

Download /v1/jobs/{jobId}/results as CSV, or add ?format=json for rows carrying `index`, `email`, `status`, `score` and `reason`. Filter by status to build your segments. Results are kept for 72 hours, then deleted.

Integrate in minutes

Batch APITypeScript
const auth = { Authorization: `Bearer ${process.env.MAILBEAM_KEY}` };

// Submit a batch job — returns 202 immediately
const job = await fetch("https://api.mailbeam.dev/v1/verify/batch", {
  method: "POST",
  headers: { ...auth, "Content-Type": "application/json" },
  body: JSON.stringify({
    emails: ["alice@example.com", "bob@company.io" /* up to 500,000 */],
  }),
}).then((r) => r.json());

console.log(`Job ${job.job_id} queued — ${job.total} addresses`);

// Wait for the batch.completed webhook, or poll:
const status = await fetch(
  `https://api.mailbeam.dev/v1/jobs/${job.job_id}`,
  { headers: auth }
).then((r) => r.json());

// Then download the cleaned list (CSV by default)
const csv = await fetch(status.download_url, { headers: auth }).then((r) =>
  r.text()
);

When to use it

Pre-campaign list cleaning

Run every email list through the batch API before sending a campaign. Suppress Undeliverable addresses to keep bounce rates below the 2% ISP threshold.

CRM import validation

Verify contacts before importing them from trade show exports, spreadsheets, or third-party lead sources. Clean data enters your CRM; invalid data never does.

Quarterly database re-verification

B2B email addresses decay at ~25% annually. Schedule a quarterly batch job against your full user or contact database to identify addresses that have lapsed.

Re-engagement campaign prep

Inactive segments have the highest decay rate. Verify before any win-back send to suppress invalid addresses and avoid the bounce-triggered deliverability damage.

Frequently asked questions

How long does a batch job take?

It depends heavily on how many distinct domains your list contains, because we probe one address at a time per destination domain to protect our sending reputation. A list spread across many domains finishes far faster than the same number of addresses at a handful of hosts. Poll the job for real progress rather than working from an estimate.

What is the maximum batch size?

The batch endpoint accepts up to 500,000 addresses per job. For larger lists, submit multiple jobs. Every address counts as one verification against your monthly quota.

Can I import a CSV file directly?

Yes — the dashboard takes a CSV, TSV or plain text file, finds the column holding the addresses, removes duplicates and gives you the cleaned list back. The API itself accepts a JSON array of strings.

How should I handle 'Risky' results?

Risky includes role-based addresses, catch-all domains, and free-provider addresses. For cold outreach: suppress role-based. For marketing: include free providers (Gmail, Yahoo). For catch-all, use the quality score threshold — score ≥ 60 is generally safe.

Ready to integrate?

Free tier includes 1,000 verifications/month. No credit card required.