Python Library — pip Install

pip install email-validator-client

Type-safe Python client for email-validaton.com. Sync + async, Pandas ready.

Installation

pip install email-validator-client

# With async (httpx):
pip install email-validator-client[async]

# With Pandas:
pip install email-validator-client[pandas]

# Everything:
pip install email-validator-client[all]

Requirements: Python 3.10+, pydantic>=2.0, requests>=2.28.

Quick Start

from email_validator_client import Client

client = Client('ev_your_api_key')

result = client.verify('user@gmail.com')

if result.is_valid:
    print(f'Valid — confidence: {result.confidence}')
elif result.is_disposable:
    print('Disposable email — reject!')
elif result.is_catch_all:
    print('Catch-all — caution')

Async (httpx)

import asyncio
from email_validator_client import Client

async def main():
    client = Client('ev_...')

    result = await client.verify_async('user@gmail.com')
    print(result.status)

    # Bulk async with concurrency control
    emails = ['a@b.com', 'c@d.com', 'e@f.com']
    results = await client.verify_bulk_async(emails, concurrency=10)

asyncio.run(main())

Pandas Integration

import pandas as pd
from email_validator_client import Client
from email_validator_client.pandas import verify_dataframe

client = Client('ev_...')

# Load CSV, verify emails, export
df = pd.read_csv('subscribers.csv')
enriched = verify_dataframe(client, df, email_column='email')
enriched.to_csv('verified.csv', index=False)

# Filter deliverable only
deliverable = enriched[enriched['is_deliverable']]

Type-Safe Models (Pydantic v2)

ClassKey Properties
VerificationResult email, status, reason, confidence, mx_server, mx_list, smtp_response, source_ip, duration_ms, remaining_credits, is_yahoo
AccountInfo email, plan, plan_name, credits_remaining, credits_used, credits_limit, plan_type, subscription_active, free_remaining, total_remaining
CreditInfo has_credits, credits_remaining

Convenience Properties

PropertyReturnsCondition
is_validboolstatus == 'valid'
is_invalidboolstatus == 'invalid'
is_riskyboolstatus == 'risky'
is_catch_allboolstatus == 'catch_all'
is_disposableboolstatus == 'disposable'
is_deliverableboolvalid || risky || catch_all
costs_creditboolvalid || invalid

Error Handling

ExceptionWhen
AuthenticationErrorBad or missing API key (HTTP 401/403)
RateLimitError60 req/min or hourly cap. e.retry_after_seconds
NoCreditsErrorCredits exhausted
ApiErrorNetwork error, timeout, unexpected response
from email_validator_client import (
    AuthenticationError, RateLimitError, NoCreditsError, ApiError
)

try:
    result = client.verify('user@example.com')
except RateLimitError as e:
    sleep(e.retry_after_seconds)  # wait & retry
except NoCreditsError:
    print('Upgrade your plan')

CI/CD Integration

# validate_deploy_emails.py
from email_validator_client import Client
import sys

client = Client('ev_...')
for path in sys.argv[1:]:
    with open(path) as f:
        for line in f:
            if '@' in line:
                r = client.verify(line.strip())
                if r.is_invalid:
                    print(f'INVALID: {line.strip()}')
                    sys.exit(1)
print('All emails valid')
Download email-validator-python.zip Back to Add-ons

v1.0.0 · MIT license · Python 3.10+ · Pydantic v2 · requests | httpx | pandas