Bulk email verifier
Bulk email verification through the API
Check the addresses in an existing list with one API request per address. Save each result beside the original row to see what the check found and what Emvero recommends doing.
Your script or application reads the list, sends the requests and saves the results. Emvero does not provide a CSV uploader, a bulk dashboard or a separate batch endpoint.
One request per address · No verification email · Results saved in your own system
| Outcome | Rows | Share |
|---|---|---|
| Deliverable | 104,852 | 83.6% |
| Risky | 9,112 | 7.3% |
| Undeliverable | 9,804 | 7.8% |
| Unknown | 1,652 | 1.3% |
Illustrative figures for a fictional list. Your results will depend on the addresses you check.
What you send and what you get back
Bulk verification uses the same endpoint as a single address check. Your script, scheduled job or application repeats the request for each address in the list.
Read your own list
Take addresses from a CSV file, CRM export or database. Each request sends one address to Emvero. Your system keeps the source file and its row identifiers.
Choose what to check
A full check may ask the receiving mail server about the address through SMTP, the protocol used to transfer email. A domain check examines the address format and domain configuration without contacting the mail server. It cannot establish that a particular mailbox exists.
Save the result for each row
Each completed check returns a status, a recommended action, individual check findings and reason codes. Save these fields together so you can see why an address received its result.
How to work through a list
Confirm your account and create an API credential before starting. Keep the credential on your server, where your script or application sends the requests.
- Read an address and keep its row identifier so you can match the result to the source.
- Send the address to
POST /v1/verificationswith your API credential and chosen check depth. - If the response is
pending, the check is still running. Wait forretry_after_ms, then retrieve the result by its identifier. Continue polling as instructed until it finishes or reaches your workflow’s deadline. - Save the completed result beside the original row and continue through the list.
Your system controls how many requests run at once, how long to wait and what to retry. Keep service errors and unfinished checks separate from completed address results. The email verification API page explains authentication, requests and how to retrieve pending results.
How to use the results
Each completed check has one of four statuses:
deliverable: the evidence supports that mail can be accepted for the address. It does not guarantee delivery of a future message.risky: the result includes a signal that needs attention, such as catch-all behaviour, a disposable domain or a mailbox problem. Read the action and reasons before deciding how to handle it.undeliverable: the check established a permanent technical problem, such as an invalid address format or a domain that does not exist.unknown: the available evidence could not establish whether the address can receive mail. Keep it unresolved for review or a later check.
The examples below show why addresses with the same risky status can have different actions.
| Address | Status | Action | Reason codes |
|---|---|---|---|
| k.novak@catchall.example | Risky | allow_with_email_confirmation | SMTP_RCPT_ACCEPTED - Recipient acceptedACCEPT_ALL_DOMAIN - Domain accepts every recipient |
| a.dvorak@corp.example | Risky | allow_with_email_confirmation | SMTP_MAILBOX_DISABLED - Mailbox disabled |
| p.ruiz@corp.example | Risky | allow_with_email_confirmation | SMTP_MAILBOX_STATUS_ERROR - Mailbox reported a problem |
| test@mailinator.example | Risky | allow | SMTP_RCPT_ACCEPTED - Recipient acceptedDISPOSABLE_DOMAIN - Disposable address provider |
Fictional addresses using reserved .example domains. These rows illustrate different reasons and actions for the same status.
The action field recommends allowing the address, allowing it with email confirmation, or rejecting it. Read reason_codes to understand the recommendation. A catch-all domain accepts arbitrary recipient names, so an accepted recipient does not confirm that the mailbox exists. A disposable address may receive mail while it remains active. A role-account flag, such as an address beginning with info@, does not by itself change the status or action.
An unknown result may come from a timeout, a request limit or a server that withholds recipient information. Keeping these rows separate from undeliverable addresses prevents an inconclusive check from becoming a rejection.
What list verification costs
A full check costs at most 10 credits. A domain check costs 2 credits. Both use the same balance and are available to every account, including with the credits granted when you confirm a new account.
Choose full checks when you need the receiving server’s response about a recipient, where available. Choose domain checks when address format and domain evidence are enough for your task. The lower cost of a domain check comes with a narrower answer about the address.
What verification can tell you before sending
An address that worked when you collected it may no longer receive mail. People leave companies, mailboxes close and domains change their configuration. Checking shortly before you send can identify technical problems that have become apparent since the last check.
Delivery also depends on your sending reputation, authentication, message content, recipient behaviour and the receiving server’s policy at the time. Verification cannot guarantee placement in the inbox or a zero bounce rate. The verification versus list hygiene comparison explains which decisions require more than an address check.
When to use bulk or real-time verification
| Bulk | Real time |
|---|---|
| Checks addresses already stored | Checks an address as it is submitted |
| Runs in your script or background job | Runs during signup, checkout or lead capture |
| Saves results beside existing rows | Helps your form decide what to do next |
Can retrieve a pending result later |
Needs a deadline and a fallback while work is pending |
Use real-time email verification when someone is submitting an address and can still correct it. Use bulk verification to review addresses already in your system. Both use the same server-side API, result fields and credit balance.
How verification data is handled
Mail-server checks and stored results
Verification sends no email to the addresses you check. A repeat request may reuse a cached result while it remains current, without another mailbox check. You receive stable reason codes rather than the mail server's raw reply text.
Storage and deletion
Verification records use AES-256 encryption at rest and are retained for 30 days. Deletion on request completes within 72 hours. Processing stays in the EEA. Record retention is separate from how long the evidence remains current.
Acceptable use
Use verification for addresses you already hold.
Emvero checks addresses you submit. It does not supply contacts or establish permission to send messages.
No address discovery
Emvero does not find, guess, enrich, sell or suggest email addresses. Submit addresses you have already collected.
Permission to send
A deliverable result describes technical findings about the address. Permission to contact its owner depends on how you obtained the address and what the recipient agreed to.
Prohibited uses
Mailbox enumeration, verification of purchased, scraped or harvested lists, and uses that support unsolicited messaging are prohibited. Patterns consistent with enumeration are treated as abuse at any volume and lead to credential suspension. See the terms.
No verification email
A full check may contact the receiving mail server. The SMTP session stops before any message data is submitted, so the check sends no email to the address.
Questions
Frequently asked.
What is a bulk email verifier?
It checks the email addresses in an existing list so you can identify technical problems before sending. With Emvero, your script or application sends one API request per address and saves the result beside that row. You manage the list and the job; Emvero provides the checks.
Can I verify a CSV file?
Yes, using your own script or application. Read the email column, send each address to the API and save the results in your output file. If a check is still pending, retrieve it after the returned retry interval. You need an account and an API credential; there is no CSV upload on the site.
Does bulk verification send email to the list?
No. A full check may ask the receiving mail server about an address using SMTP, but the connection stops before the DATA stage. No subject or message body is sent, and no email is delivered to the address.
What should I do with unknown results?
Keep them separate for review or a later check. unknown means the evidence did not establish whether the address can receive mail, for example because a server timed out, limited requests or withheld recipient information. It is not a reason to mark the address undeliverable. If you need to establish who controls it, use a separate email-confirmation step.
Can bulk verification guarantee zero bounces?
No. Verification can identify technical problems that are already evident, but a mailbox can close or fill afterwards. A receiving server can also refuse a message because of your sending reputation, authentication or content. A verification result does not guarantee delivery or placement in the inbox.
Compared side by side
Real-time vs. bulk verification
The same checks and the same four verdicts, in two shapes. Real-time answers one address while somebody waits; bulk works through a list you already have.
Verification vs. list hygiene
Verification is a fact about an address at a moment. List hygiene is a practice about engagement over time. Neither substitutes for the other.
Catch-all domain
A domain that accepts arbitrary recipient names, so an accepted address may have no individual mailbox.
Try the API with your own list
Start with a few addresses
Confirm a new account to receive 1,000 credits without a card. That covers 100 full checks or up to 500 domain checks. Create an API credential and test how your workflow saves and handles the results before checking the whole list.