NovaCheck
Docs

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

1

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.

2

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).

3

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

Request
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
  }'
Response
{
  "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:

Python batch example
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

FlagReason CodeWhat It Means
DeliverabledeliverableSyntax valid, domain has MX, SMTP accepted. Safe to send.
UndeliverableundeliverableDomain has no MX records or SMTP hard-rejected. Remove from list.
Riskycatch_allDomain accepts all addresses. Individual mailbox status unknown.
DisposabledisposableTemporary email domain. Remove from list — these never convert.
Free Providerfree_providerGmail, Yahoo, etc. Not invalid, but useful for segmentation.
UnknownunverifiableDNS 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.