Bulk email verification API
Bulk email verification API for lists, CSVs, and async jobs
Verifly handles single checks, batches, and larger async jobs so you can clean lists before sending. Keep your workflow API-first while avoiding manual spreadsheet cleanup.
curl -X POST "https://verifly.email/api/v1/verify/bulk" -H "Authorization: Bearer vf_your_api_key" -H "Content-Type: application/json" -d '{"emails":["one@example.com","two@example.com"]}'Real-time SMTP mailbox checks
Single, batch, and async bulk verification
Disposable, role account, and catch-all detection
Pay-as-you-go credits with no subscription lock-in
Search fit
Built for bulk email verification API searches
Use Verifly when you need a simple API, predictable pricing, and clean JSON results before emails hit your product, CRM, or campaign tool.
When you need bulk instead of one-at-a-time
A single GET /verify call is perfect for a signup form or a one-off lookup, but it falls apart the moment you have a spreadsheet with 40,000 rows. Firing forty thousand synchronous requests means forty thousand open connections, rate-limit backoff, and a script that dies halfway through because a laptop went to sleep. Bulk verification exists precisely so you hand the whole list over once and let the server do the queuing.
Verifly's async bulk pipeline accepts jobs up to 1,000,000 addresses in a single submission. You POST the list, get a job identifier back immediately, and then poll for status instead of holding a connection open for the minutes or hours a large SMTP sweep takes. Each address still gets a real mailbox check — bulk mode changes how the work is scheduled, not how thoroughly each email is verified.
Because credits are pay-as-you-go and never expire, a one-time 500k cleanup costs the same per address as a steady daily trickle. There is no bulk tier to unlock and no monthly minimum to hit before the async endpoint becomes available.
Submit a large list and poll for the result
- Register for a key at verifly.email/api/v1/autonomous/register (100 free credits, no card, no captcha).
- Read your CSV, pull the email column into an array, and de-duplicate it so you are not paying to verify the same address twice.
- POST the array to /verify/bulk. You get back a job id right away — do not wait on the request to finish the actual verification.
- Poll the job status endpoint on an interval until the job reports complete, then download the per-address results.
- Filter to result === "deliverable", and decide per use-case whether to keep risky / catch-all rows.
import fs from 'node:fs'
const raw = fs.readFileSync('list.csv', 'utf8')
.split('\n').slice(1).map(l => l.split(',')[0].trim()).filter(Boolean)
const emails = [...new Set(raw)] // dedupe before you spend credits
const start = await fetch('https://verifly.email/api/v1/verify/bulk', {
method: 'POST',
headers: { 'Authorization': 'Bearer vf_your_api_key', 'Content-Type': 'application/json' },
body: JSON.stringify({ emails }),
})
const { job_id } = await start.json()
console.log('submitted', emails.length, 'emails as job', job_id)
// then poll GET /api/v1/verify/bulk/{job_id} until status === 'complete'FAQ
Frequently asked questions
How many emails can one bulk job hold?
A single async submission accepts lists up to 1,000,000 addresses. For lists larger than that, split them into multiple jobs — each is billed and processed independently.
Why is bulk async instead of a blocking request?
A real SMTP mailbox check on hundreds of thousands of addresses takes far longer than any HTTP request should stay open. Async lets you submit once, get a job id, and poll for results rather than timing out.
Should I de-duplicate before submitting?
Yes. Verifly charges one credit per address checked, so removing duplicate rows before you POST the list is the single easiest way to cut cost. The example above de-dupes with a Set before submitting.
What does a bulk result row contain?
Each address comes back with a deliverable / undeliverable / risky verdict plus disposable, role, catch-all, and SMTP flags, so you can filter on more than a single pass/fail column.
Do bulk credits expire?
No. Credits are pay-as-you-go and never expire, so a one-time large cleanup and an occasional small job draw from the same balance with no monthly commitment.
What does bulk verification cost?
Pricing runs from $2 per 1,000 checks down to $0.60 per 1,000 at volume. There is no separate, more expensive bulk tier — the async endpoint uses the same credits as single checks.