Bulk Email Verification Guide

Learn how to verify thousands of email addresses at once using the VerifyEmail.io dashboard or API. Upload CSV files, monitor progress in real time, and download clean results ready for your next campaign.

1. File Format Requirements

Before uploading, make sure your file meets these requirements so the system can parse your email addresses correctly.

Supported File Types

VerifyEmail.io accepts .csv, .xls, and .xlsx files. CSV files should use UTF-8 encoding with comma delimiters. Excel files can contain multiple sheets, but only the first sheet will be processed.

Column Requirements

Your file must include a column containing email addresses. The system auto-detects columns named email, Email, EMAIL, or email_address. If no header matches, the first column is used by default.

File Size Limits

Files can contain up to 1,000,000 rows. The maximum file size is 50 MB. For lists larger than one million addresses, split your file into multiple uploads and process them sequentially.

Sample CSV Format

A minimal CSV file needs only one column. Additional columns (name, company, etc.) are preserved in the output so you can re-import the cleaned list directly into your email platform.

Sample CSV
email,first_name,last_name
john@example.com,John,Smith
jane@company.org,Jane,Doe
bob@invalid-domain.xyz,Bob,Wilson

2. Uploading Your CSV File

Follow these steps to upload your email list through the VerifyEmail.io dashboard. The entire process takes under a minute for most files.

1

Log In to Your Account

Sign in at verifyemail.io/app/login. If you do not have an account yet, create one for free -- it takes less than 30 seconds.

2

Click the Upload Button

From your dashboard, click the Upload button. A file picker dialog will appear where you can drag and drop your file or browse to select it from your computer.

3

Map the Email Column

After upload, the system displays a preview of your data. Confirm or select which column contains the email addresses. If the column was auto-detected, you will see it highlighted automatically.

4

Start Verification

Navigate to the newly imported list and click Verify List. The system begins processing immediately. Each email costs one verification credit.

3. Monitoring Import Progress

Once verification starts, you can track its progress in real time from your dashboard.

Real-Time Progress Bar

The list detail page shows a progress bar with the number of emails verified out of the total. Processing speed averages over 1,000 emails per second, so a 50,000-address list typically completes in under a minute.

Status Indicators

Each list displays one of these statuses: Pending (queued for processing), Processing (actively verifying), Complete (all emails verified), or Error (an issue occurred). You can navigate away and return later -- processing continues in the background.

Summary Statistics

After completion, you will see a breakdown showing how many addresses are Valid, Invalid, Unknown, and Duplicate. Use these numbers to gauge the quality of your list at a glance.

Email Notifications

For large lists, you will receive an email notification when verification is complete. This way you do not need to keep the browser tab open while waiting for results.

4. Downloading Verification Results

Once verification completes, download your results in a format ready to import into your email marketing platform or CRM.

1

Open the Completed List

Click on the list name in your dashboard to view the verification results. Each email address is shown with its verdict, score, and risk flags.

2

Filter by Verdict

Use the filter options to view only Valid, Invalid, or Unknown addresses. This helps you quickly isolate the emails you want to keep or remove before exporting.

3

Export Results

Click the Export button to download a CSV file. The export includes all original columns from your upload plus the verification results (verdict, score, domain verdict, bounce flags, disposable flags, and role address flags). Import this file directly into Mailchimp, SendGrid, HubSpot, or any other email platform.

5. API-Based Bulk Workflow

For automated pipelines, you can verify emails in bulk programmatically using the VerifyEmail.io API. This workflow involves uploading your list, polling for status, and downloading results when complete.

Step 1: Upload Your List via API

Send a POST request with your CSV file to the bulk upload endpoint. The API returns a list_id that you use to check the status of the verification job.

cURL
curl -X POST "https://verifyemail.io/api/email?method=upload" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -F "file=@emails.csv"
JSON Response
{
    "SUCCESS": true,
    "LIST_ID": "abc123",
    "TOTAL_EMAILS": 5000,
    "MESSAGE": "List uploaded successfully. Verification will begin shortly."
}

Step 2: Poll for Status

Check the status of your verification job by calling the status endpoint with your list_id. Poll every 10 to 30 seconds until the status changes to complete.

cURL
curl "https://verifyemail.io/api/email?method=liststatus&list_id=abc123" \
     -H "Authorization: Bearer YOUR_API_KEY"
JSON Response
{
    "LIST_ID": "abc123",
    "STATUS": "processing",
    "TOTAL": 5000,
    "VERIFIED": 3200,
    "PERCENT_COMPLETE": 64
}

Step 3: Download Results

Once the status is complete, retrieve the verification results. The response includes every email with its verdict and all associated data fields.

cURL
curl "https://verifyemail.io/api/email?method=listresults&list_id=abc123" \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -o verified_results.csv

Complete Python Example

Here is a full Python script that uploads a CSV, polls for completion, and downloads the results:

Python
import time
import requests

API_KEY = 'YOUR_API_KEY'
BASE_URL = 'https://verifyemail.io/api/email'

# Step 1: Upload the file
with open('emails.csv', 'rb') as f:
    response = requests.post(
        f'{BASE_URL}?method=upload',
        headers={'Authorization': f'Bearer {API_KEY}'},
        files={'file': f}
    )
    upload_data = response.json()
    list_id = upload_data['LIST_ID']
    print(f'Uploaded. List ID: {list_id}')

# Step 2: Poll for status
while True:
    status_response = requests.get(
        f'{BASE_URL}?method=liststatus&list_id={list_id}',
        headers={'Authorization': f'Bearer {API_KEY}'}
    )
    status_data = status_response.json()
    print(f'Progress: {status_data["PERCENT_COMPLETE"]}%')

    if status_data['STATUS'] == 'complete':
        break

    time.sleep(15)  # Wait 15 seconds between polls

# Step 3: Download results
results = requests.get(
    f'{BASE_URL}?method=listresults&list_id={list_id}',
    headers={'Authorization': f'Bearer {API_KEY}'}
)

with open('verified_results.csv', 'wb') as f:
    f.write(results.content)

print('Verification complete. Results saved to verified_results.csv')

6. Best Practices for Large Lists

Follow these recommendations to get the best results when verifying large email lists with tens of thousands or millions of addresses.

  • Deduplicate before uploading -- Remove duplicate email addresses from your file before uploading. Duplicates waste verification credits and slow down processing. Use a spreadsheet tool or a simple script to remove duplicates in advance.
  • Remove obviously invalid addresses first -- Strip out rows with blank email fields, addresses missing the @ symbol, or addresses with clearly invalid domains. This saves credits and speeds up your verification.
  • Split very large files -- For files with more than 500,000 addresses, consider splitting them into smaller batches. This reduces the risk of upload timeouts and makes it easier to track progress for each segment.
  • Verify regularly, not just once -- Email addresses decay at a rate of about 2-3% per month. For active mailing lists, verify every two weeks. For less active lists, verify at least once per month. Regular verification keeps your bounce rates low and your sender reputation strong.
  • Act on the results -- Remove all addresses with an Invalid verdict immediately. For Unknown verdicts, consider sending to them cautiously or re-verifying after 24 hours. Keep all Valid addresses and monitor their engagement metrics over time.
  • Use API bulk for automation -- If you run verification on a recurring schedule, use the API-based bulk workflow to fully automate the process. Set up a cron job or scheduled task to upload, poll, and process results without manual intervention.

Ready to Clean Your Email List?

Upload your CSV and get verification results in minutes. Free accounts include 100 verifications per month. No credit card required.

Related Guides

Continue improving your email deliverability

API Integration Guide

Complete developer guide with code examples for JavaScript, Python, PHP, and cURL.

Read the guide →

List Management Guide

Learn how to create, organize, deduplicate, and maintain healthy email lists.

Read the guide →

Clean Your List Before a Campaign

Step-by-step process for cleaning your list before sending an email campaign.

Read the guide →