CLI Tool

Command-line email verification for DevOps and automation. Pipe lists, export JSON/CSV/JSONL. Zero dependencies — just Python.

Installation

pip install email-validator-cli

Or download the standalone script:

Requirements: Python 3.8+. No external dependencies — uses only the standard library (urllib, json, csv, argparse). Works on Linux, macOS, Windows, and in Docker.

Setup

Get your API key from the Dashboard, then:

email-validator setup

Or configure non-interactively:

# Environment variable
export EV_API_KEY=ev_your_key_here

# Or config file (~/.email-validator.conf)
api_key=ev_your_key_here

# Or CLI flag
email-validator verify user@domain.com --api-key ev_your_key_here

Quick Start

Verify a single email

email-validator verify user@domain.com
#   ✓ user@domain.com           valid        conf:high mx:gmail-smtp-in.l.google.com 234ms

Pipe from stdin

cat emails.txt | email-validator verify --stdin
#   ✓ user1@domain.com          valid        234ms
#   ✗ user2@domain.com          invalid      Email does not exist
#   ⚠ user3@yahoo.com           risky        Verifly: 87% confidence

Export CSV

email-validator verify --file subscribers.txt --format csv --output results.csv

Line-delimited JSON (jq compatible)

cat leads.txt | email-validator verify --stdin --format jsonl | jq '.status'

Account & credits

email-validator account
# Account:  user@example.com
# Plan:     Basic
# Credits:  4500 remaining (of 5000)

email-validator credits
# ✓ 4500 credits

Verify Command Flags

Flag Description
--stdinRead emails from stdin (pipe)
--file, -f PATHRead emails from file (skip lines starting with #)
--format, -F fmtOutput: table, json, csv, jsonl
--output, -o PATHWrite output to file
--quiet, -qMinimal output (email<TAB>status)
--api-key, -k KEYOverride API key for this command

Auto-detection: When output is piped (e.g. | jq), the format automatically switches to jsonl. For interactive terminal use, it defaults to table.

Email Status Values

Status Meaning Credit Cost
validMailbox confirmed exists1 credit
invalidMailbox does not exist1 credit
riskyLow confidence result (Yahoo, AOL, etc.)Free
catch_allDomain accepts all mail (can't confirm)Free
disposableTemporary/disposable email providerFree
unknownCould not determine (network/DNS error)Free

CI/CD & Automation Examples

GitHub Actions

# .github/workflows/validate.yml
- name: Validate email list
  run: |
    pip install email-validator-cli
    email-validator verify --file subscribers.txt --format csv --output validated.csv
  env:
    EV_API_KEY: ${{ secrets.EV_API_KEY }}

Bash: filter valid emails only

email-validator verify --stdin --format jsonl < leads.txt \
  | jq -r 'select(.status=="valid") | .email' \
  > clean_leads.txt

Docker

FROM python:3.12-slim
RUN pip install email-validator-cli
ENTRYPOINT ["email-validator"]

Cron: nightly validation

# crontab
0 2 * * * /usr/local/bin/email-validator verify --file /data/list.csv \
           --output /data/validated.jsonl --format jsonl

Requirements

  • Python 3.8 or later
  • An active Email Validator account with API key
  • Verified emails consume credits — free/risky/unknown statuses are free
  • Rate limit: 60 requests/minute per user