Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

Disposable Email Domains

Domains tracked Updated API License: MIT

57,402 disposable email domains, tracked and updated daily. Detect throwaway addresses used for fake signups, trial abuse, and spam — via a simple API call.

This is the disposable detection engine behind EmailKind, the email classification API. It goes beyond static blocklists: EmailKind combines MX record analysis, domain age signals, and pattern matching to catch disposable domains that static lists miss — including auto-generated subdomains and newly registered throwaway services.

The problem

Disposable email services let anyone create a temporary inbox in seconds. They're used to:

  • Abuse free trials — sign up, use the trial, discard the address, repeat
  • Create fake accounts — inflate metrics, manipulate reviews, spam other users
  • Bypass email verification — disposable addresses pass syntax and deliverability checks
  • Pollute mailing lists — addresses that bounce after 24 hours degrade sender reputation

Static blocklists catch known services, but new disposable domains appear daily. A list that was complete last month is already outdated.

How it works

EmailKind maintains a database of 57,402+ disposable domains, updated daily from:

  • Public threat intelligence feeds
  • Community reports
  • EmailKind's own detection engine (MX pattern analysis, domain lifecycle tracking, behavioral signals)

The database is exposed through a real-time API that returns structured classification data — not just "disposable or not", but provider name, email type, confidence score, and company enrichment.

Detect disposable emails in one API call

curl -H "Authorization: Bearer sk_live_xxx" \
  "https://emailkind.com/v1/classify?email=test@mailinator.com"
{
  "provider": {
    "id": "mailinator",
    "name": "Mailinator",
    "type": "disposable"
  },
  "classification": {
    "is_disposable": true,
    "is_business": false,
    "is_free": false
  },
  "confidence": 0.99
}

Free tier: 100 calls/month, no credit card required. Get an API key

Code examples

Python

pip install emailkind
from emailkind import EmailKind

client = EmailKind("sk_live_xxx")

result = client.classify(email="test@tempmail.com")

if result.classification.is_disposable:
    print(f"Blocked: {result.provider.name} is a disposable service")

Node.js

npm install emailkind
import { EmailKind } from "emailkind";

const client = new EmailKind("sk_live_xxx");
const result = await client.classify({ email: "test@tempmail.com" });

if (result.classification.is_disposable) {
  console.log(`Blocked: ${result.provider.name} is a disposable service`);
}

Go

go get github.com/gastonmedia/emailkind-go
client := emailkind.NewClient("sk_live_xxx")
result, _ := client.Classify(ctx, &emailkind.ClassifyParams{
    Email: "test@tempmail.com",
})
if result.Classification.IsDisposable {
    fmt.Printf("Blocked: %s is a disposable service\n", result.Provider.Name)
}

FastAPI middleware

from fastapi import FastAPI, HTTPException
from emailkind import EmailKind

app = FastAPI()
ek = EmailKind()  # reads EMAILKIND_API_KEY from env

@app.post("/signup")
def signup(email: str):
    result = ek.classify(email=email)
    if result.classification.is_disposable:
        raise HTTPException(400, "Please use a permanent email address")
    # proceed with registration...

Express.js middleware

import { EmailKind } from "emailkind";

const ek = new EmailKind(process.env.EMAILKIND_API_KEY);

app.post("/signup", async (req, res) => {
  const result = await ek.classify({ email: req.body.email });
  if (result.classification.is_disposable) {
    return res.status(400).json({ error: "Disposable emails are not allowed" });
  }
  // proceed with registration...
});

More than a blocklist

EmailKind isn't just a disposable email checker. A single API call returns:

Signal Example Use case
provider.name "Google Workspace" Distinguish paid vs free Google accounts
provider.type "business" Route B2B signups to sales
classification.is_business true Qualify leads automatically
classification.is_disposable true Block throwaway addresses
classification.is_free true Detect Gmail, Yahoo, Outlook.com
classification.is_education true Identify .edu and academic domains
company.name "Stripe, Inc." Enrich CRM records with company data
confidence 0.98 Gate automation on detection certainty

150+ email providers detected. Company enrichment from SSL, OG meta, and RDAP.

See full API documentation

Why an API instead of a static list?

Static list EmailKind API
Coverage 3,000-10,000 domains (typical) 57,402+ domains
Freshness Updated manually, sporadically Updated daily, automatically
New domains Missed until someone adds them Caught by pattern analysis
Auto-generated subdomains Not covered Detected via MX patterns
Additional signals None — binary yes/no Provider, type, company, confidence
Latency Local lookup (fast) < 50ms p99 (cached)
Maintenance You maintain the list We maintain the list

Batch and bulk

For large datasets, use batch classification (up to 100 per request) or bulk CSV upload (up to 10,000 emails, processed async):

# Batch — 100 emails in one call
batch = client.classify_batch(
    emails=["a@mailinator.com", "b@stripe.com", "c@guerrillamail.com"]
)
for item in batch.results:
    if item.classification.is_disposable:
        print(f"Disposable: {item.input} ({item.provider.name})")

# Bulk — upload a CSV
job = client.bulk_upload("signups.csv")

AI agents (MCP)

EmailKind exposes a native Model Context Protocol server. Claude Desktop, Cursor, and Windsurf can classify emails and detect disposable addresses without code.

{
  "mcpServers": {
    "emailkind": {
      "url": "https://emailkind.com/v1/mcp",
      "headers": { "Authorization": "Bearer sk_live_xxx" }
    }
  }
}

MCP documentation

Performance

Metric Value
Response time < 50ms (p99)
Uptime 99.9% (last 90 days)
Disposable domains 57,402+ (updated daily)
Providers detected 150+
Infrastructure EU (Germany)

SDKs

Language Package Install
Python emailkind pip install emailkind
Node.js emailkind npm install emailkind
Go emailkind-go go get github.com/gastonmedia/emailkind-go
Any REST API cURL, Fetch, any HTTP client

FAQ

How is this different from other disposable email lists on GitHub? Most public lists contain 3,000-10,000 domains and are updated when someone opens a PR. EmailKind tracks 57,402+ domains, updated daily via automated feeds and pattern detection — including auto-generated subdomains that static lists can't cover.

What about free email providers like Gmail? Gmail, Yahoo, and Outlook.com are not disposable — they're legitimate personal email providers used by billions of people. EmailKind distinguishes between free (Gmail), disposable (Mailinator), and business (Google Workspace) with separate classification flags.

Does it catch new disposable services? Yes. Beyond the domain list, EmailKind analyzes MX records and domain patterns to detect previously unseen disposable services. A brand-new throwaway domain using known disposable MX infrastructure gets flagged automatically.

Can I use it without an API key for testing? Yes. Use sandbox keys (sk_test_xxx) for development — same classification results, no quota usage. Create a free account to get your keys.

Links

License

MIT

Releases

Packages

Contributors