Extras Emporium Email Verifier

Email Verification API: How to Verify Emails in Node.js and Python

· 7 min

Two ways to verify: real-time and bulk

There are two patterns for verifying emails with an API. Real-time verification checks one address at the moment it matters, for example when a user signs up, so you can block a typo before it enters your database. Bulk verification processes a whole list at once, which is what you want before a campaign. A good API supports both, and Extras Emporium Email Verifier exposes a public real-time endpoint and an authenticated bulk endpoint.

Authentication and your API key

Bulk verification is tied to your account and credits, so it needs an API key. You create a key in your dashboard and send it on every request in an Authorization header as a Bearer token. The real-time single-address endpoint is public and needs no key, but it is rate-limited per IP to prevent abuse, so it is meant for occasional checks rather than cleaning a whole list.

The bulk flow: upload, poll, download

The bulk flow has three steps. First, POST your CSV to /api/checks/upload with your Bearer token; the response gives you a check id. Second, poll GET /api/checks/{id} until its status becomes completed. Third, download each result bucket, for example GET /api/checks/{id}/download/send_safe, which returns a CSV of the safe-to-send addresses; the risky and invalid buckets work the same way.

Node.js and Python in practice

In Node.js you upload the file with fetch and FormData, then poll the status endpoint on a short interval until it reports completed, then stream each bucket to disk. In Python the same flow uses the requests library: a multipart POST to upload, a loop around a GET to poll, and a final GET per bucket. Copy-paste examples for cURL, Node.js, Python and PHP are on the API page of the site, so you do not have to write the boilerplate yourself.

Rate limits, cost and best practices

Each verified address costs one credit, the same whether you use the API or a CSV upload, and credits never expire. For large jobs, send one big CSV rather than thousands of single real-time calls: it is faster and avoids rate limits. Verify at signup to keep bad addresses out from the start, and re-verify older lists before each major send. Never send a real email just to test whether an address exists; that is exactly what verification avoids.