Migrate from Snov.io

Snov.io is an all-in-one sales platform — email finding, verification, drip campaigns, and a CRM. This guide covers moving just the verification step to Mailbeam, which is usually the part developers want as a fast, dedicated API. You can keep using Snov.io for prospecting and outreach if you rely on those.

Why developers switch the verification step

  • Synchronous and fast: Snov.io verification runs through an async queue; Mailbeam returns a verdict in a single call, under 100ms (p95)
  • Dedicated pricing: Snov.io credits are shared with email finding; Mailbeam charges one unit per verification with a 1,000/month free tier
  • AI catch-all scoring: Mailbeam returns a 0–100 score plus an explainable reason for catch-all domains
  • Developer experience: official SDKs for 6 languages, Bearer-key auth, OpenAPI spec, and a sandbox mode
  • EU data residency: all data processed in Frankfurt, with a DPA included on every plan

Authentication

Snov.io uses an OAuth client-credentials flow to obtain an access token, which you then pass to each request. Mailbeam uses a single Bearer API key.

Snov.io (old):

// 1. Exchange client credentials for an access token
const tokenRes = await fetch("https://api.snov.io/v1/oauth/access_token", {
  method: "POST",
  body: new URLSearchParams({
    grant_type: "client_credentials",
    client_id: process.env.SNOV_CLIENT_ID,
    client_secret: process.env.SNOV_CLIENT_SECRET,
  }),
});
const { access_token } = await tokenRes.json();

Mailbeam (new):

# No token exchange — just send your API key as a Bearer header
curl -X POST https://api.mailbeam.dev/v1/verify \
  -H "Authorization: Bearer $MAILBEAM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com"}'

Endpoint mapping

Snov.ioMailbeamNotes
POST /v1/get-emails-verification-statusPOST /v1/verifySingle verification (sync)
Add-to-queue + poll for statusSingle synchronous responseNo polling needed
POST /v1/oauth/access_tokenNo token exchange in Mailbeam

Response mapping

Snov.io resultMailbeam equivalent
result: "valid"valid: true, score >= 60
result: "not valid"valid: false
result: "unknown" / "greylisted"status: "unknown"
result: "catch-all"catchAll: true + score
is_disposable: truedisposable: true
is_role_account: truerole: true

Code migration

Snov.io's flow is asynchronous: you submit an address, then poll for its status. Mailbeam returns the verdict in one call.

Snov.io (old):

// After obtaining access_token above:
const res = await fetch(
  "https://api.snov.io/v1/get-emails-verification-status",
  {
    method: "POST",
    body: new URLSearchParams({ access_token, email }),
  }
);
const { data } = await res.json();
// data.result may still be pending — Snov.io often requires polling
if (data?.result !== "valid") return res.status(422).end();

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 res.status(422).json({ error: "Invalid email", code: reason });
}

Using the score and reason fields

Snov.io returns a status string. Mailbeam adds a numeric score and a machine-readable reason, so you can handle catch-all and low-quality addresses with a threshold instead of an all-or-nothing decision:

const result = await mb.verify(email);

if (result.catchAll && result.score >= 75) {
  // High-confidence corporate catch-all — accept
} else if (!result.valid || result.score < 60) {
  const messages = {
    invalid_syntax:    "Please check your email format.",
    no_mx_records:     "That email domain does not exist.",
    smtp_rejected:     "This email address does not exist.",
    disposable_domain: "Temporary email addresses are not allowed.",
  };
  return res.status(422).json({ error: messages[result.reason] ?? "Email could not be verified." });
}

What to keep in Snov.io

Mailbeam only replaces verification. If you use Snov.io's email finder, drip campaigns, or CRM, keep those — point only your verification calls at Mailbeam.

Next steps