Migrate from MillionVerifier
This guide shows how to replace MillionVerifier with Mailbeam. The migration typically takes under 30 minutes.
Why developers switch
- Official SDKs: MillionVerifier has no official SDKs; Mailbeam ships Node.js, Python, PHP, Ruby, and Go libraries
- AI catch-all scoring: MillionVerifier returns a binary catch-all flag; Mailbeam's AI model scores catch-all addresses with an explainable reason field
- Real-time performance: MillionVerifier is designed for CSV bulk uploads; Mailbeam's p99 response time is under 100ms for inline signup validation
- Free tier: Mailbeam includes 1,000 verifications/month free — no purchase required to start
Endpoint mapping
| MillionVerifier | Mailbeam | Notes |
|---|---|---|
GET /api/v3/?api=KEY&email=EMAIL | POST /v1/verify | Single email check |
| CSV upload (dashboard) | POST /v1/verify/batch | Bulk verification |
Authentication
MillionVerifier passes the API key as a URL query parameter.
Mailbeam uses Bearer tokens in the Authorization header — the key is never exposed in the URL.
MillionVerifier (old):
curl "https://api.millionverifier.com/api/v3/?api=YOUR_KEY&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
MillionVerifier result | Mailbeam equivalent |
|---|---|
"ok" | valid: true |
"error" | valid: false |
"unknown" | status: "unknown", use score |
"disposable" | disposable: true |
"catchall" | catchAll: true, use score |
Code migration
MillionVerifier (old):
const res = await fetch(
`https://api.millionverifier.com/api/v3/?api=${apiKey}&email=${email}`
);
const { result } = await res.json();
if (result !== "ok") return 422;Mailbeam (new):
import Mailbeam from "@mailbeam/sdk";
const mb = new Mailbeam({ apiKey: process.env.MAILBEAM_KEY });
const { valid, score, disposable, reason } = await mb.verify(email);
if (!valid || disposable) return 422;
if (score < 30) return 422; // catch low-confidence addresses MillionVerifier passesUsing the quality score
MillionVerifier's binary result misses the nuance that Mailbeam's 0–100 score provides.
For catch-all domains especially, the score makes a significant difference:
const result = await mb.verify(email);
// MillionVerifier would accept or reject uniformly
// Mailbeam lets you apply thresholds
const threshold = isColdOutreach ? 70 : 40;
if (result.score < threshold) {
return res.status(422).json({ error: "Email address could not be verified." });
}