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.

Pay by wallet (x402) email-validate-bulk

Example

Example answer
{
  "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

FieldTypeRequiredWhat it is
textstringNoNewline- or comma-separated string of email addresses (alias for 'emails')
emailsarrayNoArray of email addresses to validate (max 100, deduplicated)
email_addressesarrayNoAlias for 'emails'

Output fields

How reliably each field appears in a successful answer.

FieldTypeAppears
totalnumberAlways (present in every successful answer)
resultsarrayAlways (present in every successful answer)
summaryobjectAlways (present in every successful answer)
valid_countnumberAlways (present in every successful answer)
invalid_countnumberAlways (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
  }'

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.