CSV email verification

Clean CSV email lists before import or outreach

Use Verifly to verify CSV exports from CRMs, lead tools, spreadsheets, and campaign platforms before they cause bounces or pollute your database.

Bulk CSV cleanup endpointAPI
curl -X POST "https://verifly.email/api/v1/verify/bulk" \
  -H "Authorization: Bearer vf_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"emails":["row1@example.com","row2@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 CSV email verification searches

Use Verifly when you need a simple API, predictable pricing, and clean JSON results before emails hit your product, CRM, or campaign tool.

Clean exported CRM or lead-source CSV files
Verify one-off lists without a monthly contract
Run batch and async checks for larger files
Remove risky emails before importing contacts elsewhere

The CSV is where dirty data hides

A CSV export is the messiest artifact in any pipeline. It carries whatever the source tool guessed, whatever a human typed with a fat finger, duplicate rows from two overlapping saved searches, and a header row that may or may not be where you expect it. Before that file becomes a CRM import or a campaign audience, every bad row in it is a future bounce, a duplicate contact, or a support ticket.

CSV email verification is the step that turns an untrusted export into a trusted list. Verifly reads the email column, runs a live SMTP mailbox check on each address, and hands back a per-row verdict you can join straight back onto the original file — keeping every other column intact so names, companies, and tags travel with the clean addresses.

There is no upload UI to learn and no file-size negotiation. You parse the column, POST it to the bulk endpoint, and get structured JSON back. For genuinely large exports the async pipeline handles up to 1,000,000 rows in a single job.

Parse, verify, and rejoin a CSV

  1. Open the CSV and identify the email column (it is not always the first one).
  2. Extract that column into an array and de-duplicate it so you do not pay to check the same address twice.
  3. Register for 100 free credits at verifly.email/api/v1/autonomous/register.
  4. POST the array to /verify/bulk (async) or /verify/batch (smaller lists).
  5. Join the verdicts back onto the original rows by email, keep result === 'deliverable', and write out a clean CSV that still has all your other columns.
Extract the column, verify, keep clean rows (Node)
import fs from 'node:fs'

const rows = fs.readFileSync('contacts.csv', 'utf8').trim().split('\n')
const header = rows.shift().split(',')
const emailIdx = header.findIndex(h => /email/i.test(h))

const emails = [...new Set(rows.map(r => r.split(',')[emailIdx].trim()))]

const res = await fetch('https://verifly.email/api/v1/verify/batch', {
  method: 'POST',
  headers: { 'Authorization': 'Bearer vf_your_api_key', 'Content-Type': 'application/json' },
  body: JSON.stringify({ emails }),
})
const { results } = await res.json()
const verdict = new Map(results.map(r => [r.email, r.result]))

const clean = rows.filter(r => verdict.get(r.split(',')[emailIdx].trim()) === 'deliverable')
fs.writeFileSync('contacts_clean.csv', [header.join(','), ...clean].join('\n'))

FAQ

Frequently asked questions

Does Verifly keep my other CSV columns?

Verifly verifies the email column and returns a verdict per address. You join those verdicts back onto your original rows by email, so names, companies, tags, and every other column stay intact on the clean file.

How large a CSV can I verify?

The async bulk pipeline handles single jobs up to 1,000,000 addresses. Split anything larger into multiple jobs.

Should I de-duplicate the CSV first?

Yes. Exports often contain repeated rows, and Verifly charges one credit per address. De-duping the email column before submitting is the easiest way to cut cost, as shown in the example.

What if the email column is not first?

Detect it by header name rather than position. The snippet finds the column whose header matches /email/i, so it works regardless of column order.

What verdicts come back per row?

Each address returns deliverable / undeliverable / risky plus disposable, role, and catch-all flags, so you can filter on more than a single pass/fail column.

Is there a monthly plan to verify CSVs?

No. It is pay-as-you-go from $2 per 1,000 checks down to $0.60 per 1,000, credits never expire, so an occasional CSV cleanup does not require a subscription.