DEV Community

james-sib
james-sib

Posted on • Originally published at verifly.email

Stop Sending Emails to Dead Inboxes: Email Verification with the Verifly API

If you're building anything that collects email addresses — signups, newsletters, lead forms — you already know the pain: bounced emails tank your sender reputation, fake signups waste your resources, and deliverability drops like a rock.

Email verification solves this. Here's how to add it to your app in 5 minutes using the Verifly API.

Why Verify Emails?

Quick reality check:

  • ~22% of email lists decay every year (people change jobs, abandon accounts)
  • Bounce rates above 2% can get your domain flagged by Gmail/Outlook
  • Disposable emails (Guerrilla Mail, Mailinator) are signup spam magnets

Verification catches these before they become your problem.

Getting Started

  1. Sign up at verifly.email
  2. Grab your API key from the dashboard
  3. Start verifying

Base URL: https://verifly.email/api/v1

All requests need your API key in the Authorization header:

Authorization: Bearer vf_your_api_key
Enter fullscreen mode Exit fullscreen mode

Single Email Verification

The simplest call — verify one email in real-time:

cURL

curl -X GET "https://verifly.email/api/v1/verify?email=john@company.com" \
  -H "Authorization: Bearer vf_your_api_key"
Enter fullscreen mode Exit fullscreen mode

Python

import requests

API_KEY = "vf_your_api_key"
email = "john@company.com"

response = requests.get(
    f"https://verifly.email/api/v1/verify?email={email}",
    headers={"Authorization": f"Bearer {API_KEY}"}
)

result = response.json()
print(f"Email: {result['email']}")
print(f"Status: {result['result']}")  # ok, catch_all, unknown, invalid, disposable
print(f"Quality Score: {result['quality_score']}")
Enter fullscreen mode Exit fullscreen mode

Node.js

const response = await fetch(
  `https://verifly.email/api/v1/verify?email=john@company.com`,
  { headers: { Authorization: `Bearer ${API_KEY}` } }
);

const result = await response.json();
console.log(result);
Enter fullscreen mode Exit fullscreen mode

Response

{
  "success": true,
  "email": "john@company.com",
  "result": "ok",
  "quality_score": 0.95,
  "free_email": false,
  "disposable": false,
  "did_you_mean": null,
  "credits": { "used": 1, "remaining": 4999 }
}
Enter fullscreen mode Exit fullscreen mode

The result field gives you a clear verdict:

  • ok — valid, safe to send
  • catch_all — domain accepts everything (proceed with caution)
  • unknown — couldn't determine (temporary issue, retry later)
  • invalid — bad address, don't send
  • disposable — throwaway email (Mailinator, Guerrilla, etc.)

Batch Verification (up to 100 emails)

Got a list? Verify up to 100 emails in one request:

import requests

emails = ["alice@company.com", "bob@startup.io", "fake@mailinator.com"]

response = requests.post(
    "https://verifly.email/api/v1/verify/batch",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    },
    json={"emails": emails}
)

results = response.json()
for r in results["results"]:
    print(f"{r['email']}: {r['result']} (score: {r['quality_score']})")
Enter fullscreen mode Exit fullscreen mode

Bulk Verification (up to 1M emails)

For large lists, use async bulk processing:

import requests
import time

# Start a bulk job
response = requests.post(
    "https://verifly.email/api/v1/verify/bulk",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    },
    json={"emails": big_email_list}  # up to 1,000,000
)

job = response.json()
job_id = job["job_id"]

# Poll for completion
while True:
    status = requests.get(
        f"https://verifly.email/api/v1/jobs/{job_id}",
        headers={"Authorization": f"Bearer {API_KEY}"}
    ).json()

    if status["status"] == "completed":
        break
    print(f"Progress: {status['progress']}%")
    time.sleep(10)

# Download results
results = requests.get(
    f"https://verifly.email/api/v1/jobs/{job_id}/results",
    headers={"Authorization": f"Bearer {API_KEY}"}
).json()
Enter fullscreen mode Exit fullscreen mode

Practical Integration: Verify on Signup

Here's a real-world pattern — validate emails during user registration:

// Next.js API route example
export async function POST(request) {
  const { email } = await request.json();

  const verification = await fetch(
    `https://verifly.email/api/v1/verify?email=${encodeURIComponent(email)}`,
    { headers: { Authorization: `Bearer ${process.env.VERIFLY_API_KEY}` } }
  ).then(r => r.json());

  if (verification.result === 'invalid' || verification.disposable) {
    return Response.json(
      { error: 'Please use a valid email address' },
      { status: 400 }
    );
  }

  // Proceed with registration...
  return Response.json({ success: true });
}
Enter fullscreen mode Exit fullscreen mode

Pricing

This is where Verifly stands out. Most email verification services charge $25-50+ per 10,000 verifications. Verifly starts at $5 for 5,000 credits — roughly half the price of alternatives like ZeroBounce or NeverBounce.

Plan Credits Price
Starter 5,000 $10
Pro 25,000 $40
Business 100,000 $120

No monthly fees. Credits never expire. Pay for what you use.

Wrapping Up

Clean email lists = better deliverability = more revenue. It's that simple.

If you're sending emails without verifying them first, you're burning money on bounces and risking your sender reputation.

Links:


Questions? Drop a comment below or reach out through the Verifly support chat.

Top comments (0)