Migrate from NeverBounce
This guide shows how to replace NeverBounce with Mailbeam. Most migrations take under an hour.
Why developers switch
- EU hosting: NeverBounce is US-based (ZoomInfo-owned); Mailbeam processes data in Frankfurt, Germany — no GDPR cross-border transfer issues
- No expiring credits: NeverBounce credits expire after 6 months; Mailbeam uses a monthly subscription with no expiry
- Self-serve free tier: Mailbeam provides 1,000 verifications/month without a credit card; NeverBounce requires credit purchase to start
- AI catch-all scoring: NeverBounce returns a binary flag; Mailbeam's AI model scores catch-all addresses 0–100 with an explainable reason field
Endpoint mapping
| NeverBounce | Mailbeam | Notes |
|---|---|---|
POST /v4/single/check | POST /v1/verify | Single email verification |
POST /v4/jobs/create | POST /v1/verify/batch | Bulk list verification |
GET /v4/account/info | GET /v1/account/usage | Quota / usage info |
Authentication
NeverBounce uses HTTP Basic auth with the API key as username and no password.
Mailbeam uses Bearer tokens in the Authorization header.
NeverBounce (old):
curl -X POST https://api.neverbounce.com/v4/single/check \
-H "Authorization: Basic $(echo -n 'YOUR_KEY:' | base64)" \
-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
NeverBounce result | Mailbeam equivalent |
|---|---|
"valid" | valid: true, score >= 70 |
"invalid" | valid: false |
"catchall" | catchAll: true — use score to decide |
"disposable" | disposable: true |
"unknown" | status: "unknown", lower score |
Code migration
NeverBounce (old):
const res = await fetch("https://api.neverbounce.com/v4/single/check", {
method: "POST",
headers: { Authorization: `Basic ${btoa(apiKey + ":")}` },
body: JSON.stringify({ email }),
});
const { result } = await res.json();
if (result !== "valid") return 422;Mailbeam (new):
import Mailbeam from "@mailbeam/sdk";
const mb = new Mailbeam({ apiKey: process.env.MAILBEAM_KEY });
const { valid, score, reason } = await mb.verify(email);
if (!valid || score < 60) return 422;Handling catch-all addresses
NeverBounce returns result: "catchall" with no further signal.
Mailbeam returns catchAll: true alongside a 0–100 score and reason.
const result = await mb.verify(email);
if (result.catchAll) {
// NeverBounce would reject all catch-all — Mailbeam lets you be selective
if (result.score >= 70) return 200; // high-confidence corporate address
if (result.score >= 40) return 200; // accept but flag for review
return 422; // low-confidence, reject
}