Bulk Email Validation
Validate up to 100 email addresses per API call. Clean your mailing list, reduce bounces, and protect your sender reputation — without sending a single message.
How Bulk Validation Works
Send your list
POST an array of up to 100 email addresses to /v1/email. Include "smtp": true if you want SMTP verification on top of DNS checks.
Get results for every address
Each address gets its own result: valid (boolean), reason (deliverable / undeliverable / risky / unknown), score (0–100), and individual signal flags (syntax, MX, SMTP, catch-all, disposable, role).
Review the summary
The response includes a summary object counting total, deliverable, undeliverable, risky, and unknown addresses. Use it to decide whether your list is clean enough to send.
Example: Validate a Batch
curl -X POST "https://api.novacheck.io/v1/email" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer nc_live_..." \
-d '{
"emails": [
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]"
],
"smtp": true
}'{
"results": [
{
"email": "[email protected]",
"valid": true,
"reason": "deliverable",
"sub_reason": null,
"syntax_valid": true,
"score": 95
},
{
"email": "[email protected]",
"valid": false,
"reason": "undeliverable",
"sub_reason": "no_mx",
"syntax_valid": true,
"score": 25
},
{
"email": "[email protected]",
"valid": false,
"reason": "undeliverable",
"sub_reason": "no_mx",
"syntax_valid": true,
"score": 20
},
{
"email": "[email protected]",
"valid": false,
"reason": "disposable",
"sub_reason": null,
"syntax_valid": true,
"score": 10
}
],
"summary": {
"total": 4,
"deliverable": 1,
"undeliverable": 2,
"risky": 0,
"unknown": 1
}
}Why Validate Your Email List
Reduce Bounces
Invalid addresses generate hard bounces. ISPs track bounce rates — exceed their thresholds and your messages land in spam. Validating before you send catches undeliverable addresses before they hurt your reputation.
Protect Sender Reputation
Your sender reputation determines whether your email reaches the inbox or the spam folder. Bounces and spam complaints damage it. List hygiene is the single most effective way to maintain a good reputation.
Block Disposable Addresses
Temporary email providers (Mailinator, Guerrilla Mail, etc.) let users sign up with throwaway addresses. These never convert, inflate your list, and tank your engagement metrics. Bulk validation flags them all.
Stop Paying for Dead Addresses
ESPs charge per subscriber, not per active reader. A list of 100,000 addresses where 30% are invalid is 30,000 wasted contacts every billing cycle. Clean first, pay less.
Processing Large Lists
The API accepts up to 100 addresses per request. For lists larger than that, send sequential batches. Here's a pattern that handles it cleanly:
import requests
API_KEY = "nc_live_..."
BATCH_SIZE = 100
emails = [...] # your full list
results = []
for i in range(0, len(emails), BATCH_SIZE):
batch = emails[i:i + BATCH_SIZE]
response = requests.post(
"https://api.novacheck.io/v1/email",
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}",
},
json={"emails": batch, "smtp": True},
)
data = response.json()
results.extend(data["results"])
# Filter out undeliverable and disposable
clean = [
r for r in results
if r["valid"] and r["reason"] not in ("disposable", "catch_all")
]
print(f"Clean list: {len(clean)} of {len(emails)}")Tip: Respect rate limits when batching. The X-RateLimit-Remainingheader tells you how many requests you have left in the current window. Back off when you're close to the limit.
What Gets Flagged in Bulk
| Flag | Reason Code | What It Means |
|---|---|---|
| Deliverable | deliverable | Syntax valid, domain has MX, SMTP accepted. Safe to send. |
| Undeliverable | undeliverable | Domain has no MX records or SMTP hard-rejected. Remove from list. |
| Risky | catch_all | Domain accepts all addresses. Individual mailbox status unknown. |
| Disposable | disposable | Temporary email domain. Remove from list — these never convert. |
| Free Provider | free_provider | Gmail, Yahoo, etc. Not invalid, but useful for segmentation. |
| Unknown | unverifiable | DNS timed out or SMTP probe inconclusive. Try again later. |
Bulk Validation FAQ
How many emails can I validate at once?
Each API call accepts up to 100 email addresses. For larger lists, send sequential batches of 100. The response includes a summary so you can track progress across batches.
Does bulk validation count against my monthly quota?
Yes. Each unique (non-cached) email address in a batch counts as one validation. If an address was validated recently and is still cached, it doesn't count again. This means re-validating the same list costs less over time.
Should I use SMTP verification for bulk lists?
For a one-time list cleaning, yes — it gives you the most complete picture. For periodic checks where you're mainly catching syntax errors and dead domains, DNS-only validation (omit "smtp": true) is faster and uses fewer resources.
Can I download the results as CSV?
The API returns JSON. You can pipe the results into a script to generate CSV for import into your CRM or ESP. See the Python example above — it's straightforward to add CSV output.
Clean your email list today
500 free validations per month. No credit card required.