A high bounce rate is one of the fastest ways to destroy your email sender reputation. Once Gmail or Yahoo marks you as a spam sender, your emails go straight to junk — even for your most engaged subscribers.
The good news: with proper list cleaning using an email verification API, you can get your bounce rate under 2% and keep it there.
Export your subscriber list as a CSV or plain text file with one email per line. Most email marketing platforms (Mailchimp, Klaviyo, SendGrid) have an export button in the audience settings.
Use the CheckMail1 batch API to verify up to 10 emails per request. Here's a Python script to process a full list:
import requests, csv, time
API_KEY = "mvp_your_api_key"
INPUT_FILE = "subscribers.csv"
OUTPUT_FILE = "cleaned_subscribers.csv"
def verify_batch(emails):
resp = requests.post(
"https://checkmail1.com/api/verify/batch",
json={"emails": emails},
headers={"X-API-Key": API_KEY}
)
return resp.json().get("results", [])
# Read emails
with open(INPUT_FILE) as f:
all_emails = [row[0].strip() for row in csv.reader(f) if row]
valid_emails = []
invalid_emails = []
# Process in batches of 10
for i in range(0, len(all_emails), 10):
batch = all_emails[i:i+10]
results = verify_batch(batch)
for r in results:
if r["status"] == "valid":
valid_emails.append(r["email"])
else:
invalid_emails.append(r["email"])
print(f"Progress: {min(i+10, len(all_emails))}/{len(all_emails)}")
time.sleep(0.5) # Be respectful to the API
# Save clean list
with open(OUTPUT_FILE, "w") as f:
for email in valid_emails:
f.write(email + "\n")
print(f"Done! Valid: {len(valid_emails)}, Removed: {len(invalid_emails)}")
For each email you'll get one of these statuses:
Once your list is clean, keep it clean by verifying emails at the point of signup. Add this to your registration form backend:
// Node.js example — verify on signup
async function validateEmailOnSignup(email) {
const res = await fetch(
`https://checkmail1.com/api/verify?email=${encodeURIComponent(email)}`,
{ headers: { 'X-API-Key': 'mvp_your_key' } }
);
const data = await res.json();
if (data.status === 'invalid' || data.score < 30) {
throw new Error('Invalid email address');
}
return true;
}
100 free verifications to start. $9 for 1,000 — the cheapest way to protect your sender reputation.
Get Free Credits →