{"id":51707170,"url":"https://github.com/james-sib/disposable-email-domains","last_synced_at":"2026-08-04T23:00:27.622Z","repository":{"id":367738375,"uuid":"1282111378","full_name":"james-sib/disposable-email-domains","owner":"james-sib","description":"Daily-refreshed open dataset of disposable, role-based, and dead-MX email domains. Multiple formats (txt/json). Kept fresh by Verifly.","archived":false,"fork":false,"pushed_at":"2026-07-26T08:37:57.000Z","size":2176,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-26T10:09:01.772Z","etag":null,"topics":["dataset","deliverability","disposable","disposable-email","email","email-verification","mcp","open-data"],"latest_commit_sha":null,"homepage":"https://verifly.email","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/james-sib.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-27T10:38:42.000Z","updated_at":"2026-07-26T08:38:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/james-sib/disposable-email-domains","commit_stats":null,"previous_names":["james-sib/disposable-email-domains"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/james-sib/disposable-email-domains","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/james-sib%2Fdisposable-email-domains","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/james-sib%2Fdisposable-email-domains/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/james-sib%2Fdisposable-email-domains/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/james-sib%2Fdisposable-email-domains/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/james-sib","download_url":"https://codeload.github.com/james-sib/disposable-email-domains/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/james-sib%2Fdisposable-email-domains/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36291062,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-04T02:00:06.901Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dataset","deliverability","disposable","disposable-email","email","email-verification","mcp","open-data"],"created_at":"2026-07-16T17:00:29.849Z","updated_at":"2026-08-04T23:00:27.612Z","avatar_url":"https://github.com/james-sib.png","language":"Python","funding_links":[],"categories":["Security"],"sub_categories":["Disposable emails domain list"],"readme":"# disposable-email-domains\n\n## Free email tools \u0026 API\n\n- [Catch-all email verifier](https://verifly.email/tools/catch-all-checker) — check if a domain is accept-all\n- [Disposable email checker](https://verifly.email/tools/disposable-email-checker)\n- [Bulk email verification API](https://verifly.email/bulk-email-verification-api) — clean CSV lists\n- [Email verification API for developers](https://verifly.email/email-verification-api-for-developers) — pay-as-you-go, 100 free credits, no monthly fee\n\n**An open, daily-refreshed dataset of disposable, role-based, and dead-MX email domains.**\n\nIf you run signups, newsletters, free trials, or AI agents that send mail, you\neventually need to answer one question: *is this address worth keeping?* This\nrepo gives you the raw material to answer it — a clean, deduplicated, sorted\nmaster list of throwaway / temporary email domains, plus curated role-account\nlocal-parts and a verified dead-MX list — in formats you can import in one line.\n\nIt is **automatically rebuilt every day** from the major public blocklists, so\nyou are never importing a list that went stale two years ago. That freshness is\nthe whole point.\n\n[![daily refresh](https://github.com/james-sib/disposable-email-domains/actions/workflows/refresh.yml/badge.svg)](https://github.com/james-sib/disposable-email-domains/actions/workflows/refresh.yml)\n[![license: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\n\n---\n\n## What's in the box\n\n| File | What it is |\n|------|------------|\n| [`data/disposable_domains.txt`](data/disposable_domains.txt) | The master list — one disposable domain per line, lowercase, sorted. |\n| [`data/disposable_domains.json`](data/disposable_domains.json) | The same list as a JSON array of strings. |\n| [`data/index.json`](data/index.json) | Metadata: total count, `generated_at` timestamp, and per-source attribution. |\n| [`data/roles.txt`](data/roles.txt) | Role-account **local-parts** (`info`, `support`, `admin`, `sales`, …) — the part before the `@` that means \"not a real person\". |\n| [`data/dead_mx_domains.txt`](data/dead_mx_domains.txt) | Domains that resolve but publish **no MX record**, so all mail to them bounces (mostly parked typo-squats like `gmial.com`). Each one was verified live. |\n\nCurrent size: **~162,000** disposable domains. See [`data/index.json`](data/index.json) for the exact, always-current count.\n\n---\n\n## Quick start\n\n### Python\n\n```python\nimport urllib.request\n\nURL = \"https://raw.githubusercontent.com/james-sib/disposable-email-domains/main/data/disposable_domains.txt\"\ndisposable = set(urllib.request.urlopen(URL).read().decode().split())\n\ndef is_disposable(email: str) -\u003e bool:\n    return email.rsplit(\"@\", 1)[-1].lower() in disposable\n\nprint(is_disposable(\"user@mailinator.com\"))  # True\nprint(is_disposable(\"user@gmail.com\"))        # False\n```\n\n### Node.js\n\n```js\nconst res = await fetch(\n  \"https://raw.githubusercontent.com/james-sib/disposable-email-domains/main/data/disposable_domains.json\"\n);\nconst disposable = new Set(await res.json());\n\nconst isDisposable = (email) =\u003e\n  disposable.has(email.split(\"@\").pop().toLowerCase());\n\nconsole.log(isDisposable(\"user@mailinator.com\")); // true\n```\n\n### CLI\n\n```bash\n# Is one domain disposable?\ncurl -s https://raw.githubusercontent.com/james-sib/disposable-email-domains/main/data/disposable_domains.txt \\\n  | grep -qxF \"mailinator.com\" \u0026\u0026 echo \"disposable\" || echo \"ok\"\n\n# Filter a column of addresses\ngrep -F -f \u003c(curl -s .../data/disposable_domains.txt) addresses.txt\n```\n\n\u003e A static list tells you a domain *was* throwaway when the list was built. It\n\u003e can't tell you whether a specific mailbox actually exists, is a catch-all, or\n\u003e is currently accepting mail. For that, do a live check (next section).\n\n---\n\n## Live checks — Powered by / kept fresh by Verifly\n\nThis dataset is built and refreshed by **[Verifly](https://verifly.email)** — the\nemail-verification API built for **AI agents**. The static list here is the free,\nopen layer; when you need a real-time verdict on an individual address (does the\nmailbox exist? is it a catch-all? disposable? role? full SMTP + MX check), call\nthe API.\n\n- **Self-serve in seconds** — instant API key + **100 free credits**, no sales call: \u003chttps://verifly.email\u003e\n- **Hosted MCP server** for AI agents (Claude, Cursor, etc.): \u003chttps://verifly.email/mcp\u003e\n- **Free, no-credit domain-health endpoint** (MX/SPF/DMARC), the same one that\n  builds `dead_mx_domains.txt`:\n  `GET https://verifly.email/api/tools/domain-health?domain=\u003cdomain\u003e`\n\nThe official SDKs live at \u003chttps://github.com/james-sib/verifly-sdks\u003e (published\nname will be `verifly-email-sdk` for both languages). They are not on PyPI/npm\nyet — install from the repo. Note: the `verifly-sdk`/`@verifly/sdk`/`verifly`\npackages on PyPI and npm are an **unrelated company**, not this project.\n\n```bash\n# Python — live single-address verification\npip install \"git+https://github.com/james-sib/verifly-sdks.git#subdirectory=python\"\n```\n\n```python\nfrom verifly_sdk import VeriflyClient\nvf = VeriflyClient(\"vf_...\")            # 100 free credits at verifly.email\nr = vf.verify(\"user@example.com\")\nprint(r[\"details\"][\"is_disposable\"], r[\"details\"][\"is_catch_all\"], r[\"details\"][\"mx_records\"])\n```\n\n```bash\n# Node — live single-address verification (clone + build, see the SDK repo)\ngit clone https://github.com/james-sib/verifly-sdks.git\ncd verifly-sdks/node \u0026\u0026 npm install \u0026\u0026 npm run build\n```\n\n```js\nimport { VeriflyClient } from \"verifly-email-sdk\";\nconst vf = new VeriflyClient(\"vf_...\");\nconst r = await vf.verify(\"user@example.com\");\nconsole.log(r.details.is_disposable, r.details.is_catch_all, r.details.mx_records);\n```\n\n```bash\n# Or just curl the REST API\ncurl \"https://verifly.email/api/v1/verify?email=user@example.com\" \\\n  -H \"Authorization: Bearer vf_...\"\n```\n\nUse the open list for cheap, offline pre-filtering; use Verifly when a wrong\nanswer costs you a bounce, a fake signup, or a wasted send.\n\n---\n\n## How the daily refresh works\n\nA GitHub Action ([`.github/workflows/refresh.yml`](.github/workflows/refresh.yml))\nruns every day on a cron. It executes\n[`scripts/aggregate.py`](scripts/aggregate.py) (Python standard library only — no\ndependencies), which:\n\n1. Fetches each upstream source feed.\n2. Normalises every entry (lowercase, strips `@`/wildcards/quotes, validates the\n   hostname shape, extracts the domain from any stray full email addresses).\n3. Merges everything into one deduplicated, sorted set.\n4. Regenerates all output files and the `generated_at` / `count` metadata.\n5. Commits **only if something actually changed** (`git diff --quiet || commit`)\n   and tags a dated snapshot.\n\nThe dead-MX list is curated separately by\n[`scripts/build_dead_mx.py`](scripts/build_dead_mx.py), which verifies typo-squat\ncandidates against Verifly's free domain-health endpoint and keeps only those\nthat resolve but have no MX.\n\nRun it yourself:\n\n```bash\npython3 scripts/aggregate.py      # rebuild the disposable list + metadata\npython3 scripts/build_dead_mx.py  # re-verify the dead-MX list (uses the free API)\n```\n\n---\n\n## Sources \u0026 attribution\n\nThis is an **aggregation**. All credit to the upstream maintainers; their lists\nare merged here under their respective permissive licenses. Live, machine-readable\nattribution with per-source counts is in [`data/index.json`](data/index.json).\n\n| Source | License |\n|--------|---------|\n| [disposable-email-domains/disposable-email-domains](https://github.com/disposable-email-domains/disposable-email-domains) | CC0-1.0 |\n| [ivolo/disposable-email-domains](https://github.com/ivolo/disposable-email-domains) | MIT |\n| [disposable/disposable-email-domains](https://github.com/disposable/disposable-email-domains) | MIT |\n| [wesbos/burner-email-providers](https://github.com/wesbos/burner-email-providers) | MIT |\n| [7c/fakefilter](https://github.com/7c/fakefilter) | MIT |\n\nFound a domain that's wrong (a false positive, or a missing burner provider)?\nOpen an issue or PR — but the durable fix usually belongs upstream, so consider\nreporting it to the relevant source list too.\n\n---\n\n## Cite this dataset\n\n\u003e Verifly. *disposable-email-domains: an open, daily-refreshed dataset of\n\u003e disposable, role-based, and dead-MX email domains.* GitHub.\n\u003e https://github.com/james-sib/disposable-email-domains\n\n```bibtex\n@misc{verifly_disposable_email_domains,\n  title        = {disposable-email-domains: an open, daily-refreshed dataset of\n                  disposable, role-based, and dead-MX email domains},\n  author       = {Verifly},\n  howpublished = {\\url{https://github.com/james-sib/disposable-email-domains}},\n  note         = {Aggregated from public blocklists; rebuilt daily},\n  year         = {2026}\n}\n```\n\n---\n\n## License\n\nThe aggregation, scripts, and metadata in this repo are released under the\n[MIT License](LICENSE). Upstream source lists retain their own licenses (see the\ntable above and `data/index.json`). The dataset is provided **as-is**; a domain's\npresence is not a statement about any individual or organisation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjames-sib%2Fdisposable-email-domains","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjames-sib%2Fdisposable-email-domains","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjames-sib%2Fdisposable-email-domains/lists"}