Bulk Email Validation
Validate up to 100 email addresses in one call: format, mail servers, disposable domains and role addresses for each, plus a summary. No email is sent.
email-validate-bulk Example
{
"total": 2,
"results": [
{
"email": "test@google.com",
"valid": true,
"domain": "google.com",
"mx_records": [
"smtp.google.com"
],
"format_valid": true,
"is_disposable": false,
"has_mx_records": true,
"is_role_address": false,
"is_free_provider": false
},
{
"email": "not-an-email",
"valid": false,
"reason": "Invalid email format.",
"format_valid": false
}
],
"summary": {
"by_domain": {
"google.com": {
"total": 1,
"valid": 1
}
},
"disposable_count": 0,
"role_address_count": 0,
"free_provider_count": 0
},
"valid_count": 1,
"invalid_count": 1
} Inputs
| Field | Type | Required | What it is |
|---|---|---|---|
text | string | No | Newline- or comma-separated string of email addresses (alias for 'emails') |
emails | array | No | Array of email addresses to validate (max 100, deduplicated) |
email_addresses | array | No | Alias for 'emails' |
Output fields
How reliably each field appears in a successful answer.
| Field | Type | Appears |
|---|---|---|
total | number | Always (present in every successful answer) |
results | array | Always (present in every successful answer) |
summary | object | Always (present in every successful answer) |
valid_count | number | Always (present in every successful answer) |
invalid_count | number | Always (present in every successful answer) |
How to call it
The same tool through each route. MCP clients reach it through Strale’s server at https://api.strale.io/mcp; the call below is what the agent sends.
# Needs an API key. max_price_cents caps what this call may cost.
curl -X POST https://api.strale.io/v1/do \
-H "Authorization: Bearer $STRALE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"capability_slug": "email-validate-bulk",
"inputs": {
"emails": [
"test@google.com",
"clearly-invalid"
]
},
"max_price_cents": 15
}' {
"tool": "strale_execute",
"arguments": {
"slug": "email-validate-bulk",
"inputs": {
"emails": [
"test@google.com",
"clearly-invalid"
]
},
"max_price_cents": 15
}
} import { Strale } from "straleio";
const strale = new Strale({ apiKey: process.env.STRALE_API_KEY! });
const result = await strale.do({
capability_slug: "email-validate-bulk",
inputs: {
"emails": [
"test@google.com",
"clearly-invalid"
]
},
max_price_cents: 15,
}); import os
from straleio import Strale, DoRequest
strale = Strale(api_key=os.environ["STRALE_API_KEY"])
result = strale.do(DoRequest(
capability_slug="email-validate-bulk",
inputs={
"emails": [
"test@google.com",
"clearly-invalid",
],
},
max_price_cents=15,
)) # No account. The first request answers 402 with the price in USDC;
# an x402 client pays it from your wallet and repeats the request.
curl -i -X POST https://api.strale.io/x402/v2/email-validate-bulk \
-H 'Content-Type: application/json' \
-d '{
"emails": [
"test@google.com",
"clearly-invalid"
]
}' Limitations
Batch size capped at 100 addresses per call
A single call accepts at most 100 unique email addresses (after deduplication). Larger lists must be split into multiple calls.
What to do instead: Split lists over 100 addresses into batches of 100 or fewer and issue multiple calls.
MX-record existence is not proof of mailbox existence
A domain having valid MX records means the domain accepts mail — it does not confirm the specific mailbox exists. Catch-all domains will show as valid even for non-existent addresses at that domain.
What to do instead: For high-stakes sends, follow up with a verification email/click-through on addresses marked valid.
Disposable domain list covers major providers only
Disposable/temporary email domain detection covers well-known providers; newly registered throwaway domains may not be flagged.
What to do instead: Supplement with a domain age check for suspicious traffic.
Related tools
- Address Validation €0.03
- Age Check €0.02
- Bank BIC Lookup €0.05
- Business Day Check €0.02
- Company ID Detection €0.05
- Czech Bank Account Validation €0.02