Skip to content

mpge/DomainGen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DomainGen

A small, dependency-free Python script for bulk domain availability checking over any TLD with a published RDAP service (.com, .ai, .dev, .app, .io, .org, …), using authoritative registry data rather than scraping registrar websites or trusting search results.

Built for brand-naming sprints: feed it a list of candidate names, get back a JSON Lines ledger of verified availability you can filter, score, and iterate on.

Want to find a domain without running this?

Why RDAP?

RDAP is the registries' own machine-readable successor to WHOIS. Querying it means:

  • Every TLD's endpoint is discovered at runtime from the IANA RDAP bootstrap file.com resolves to Verisign, .ai to the .ai registry, .dev to Google Registry, and so on. The script keeps working if a registry migrates providers. HTTP 404 = unregistered, 200 = registered. No API key, no rate-limit games at sane volumes.
  • Supplemental endpoints for TLDs the bootstrap doesn't list (ccTLD participation is opt-in): .io, .sh, .me (Identity Digital) and .us are pinned in SUPPLEMENTAL_RDAP, verified against registered/gibberish controls.
  • WHOIS fallback — if a TLD has no RDAP service or RDAP is unreachable, the script asks whois.iana.org for the TLD's WHOIS server, queries it on TCP/43, and matches conservative "not found" / "domain name:" patterns.
  • WHOIS cross-verification of "available" — an RDAP 404 is not sufficient proof a name can be registered: some registries (CIRA/.ca, for example) serve 404 for registry-restricted names that are actually unregistrable (CIRA WHOIS error 01044 "usage restrictions"). By default every RDAP-available result is therefore double-checked against WHOIS: only a WHOIS "not found" yields a confirmed available; a restriction response yields restricted; an unreachable WHOIS yields available(rdap-only). Skip the cross-check with --no-whois-verify if you want raw RDAP speed.
  • Anything ambiguous (timeouts, odd status codes, unparseable WHOIS) is recorded as unverified — the script never guesses.

Usage

Requires Python 3.8+. No third-party packages.

python check_domains.py names.txt results.jsonl              # defaults to --tlds=com,ai
python check_domains.py names.txt results.jsonl --tlds=com,ai,dev,io
python check_domains.py names.txt results.jsonl --tlds=ca    # ccTLDs work too (.ca via CIRA)
  • names.txt — one bare candidate per line (no TLD). # comments allowed.
  • results.jsonl — appended, one JSON object per candidate:
{"candidate": "examplename", "checked_at": "2026-07-23T18:04:11+00:00",
 "com": "available", "com_source": "rdap.verisign.com",
 "ai": "registered", "ai_source": "https://rdap.identitydigital.services/rdap/domain/"}

Candidates already present in the output file are skipped, so you can run many iterations against one ledger and it doubles as your dedup list.

Sanity-check a run

Before trusting results, validate against controls:

printf 'google\nxqzvkwplormtj\n' > control.txt
python check_domains.py control.txt control_results.jsonl

Expect google → registered on both TLDs and the gibberish → available on both. If not, a registry endpoint changed.

Tested TLDs

python test_tlds.py validates any TLD list against control domains (a known-registered name must report registered, gibberish must report available). All 25 currently pass:

com net org ai ca io co dev app me xyz sh gg us uk de tv cc info biz shop store tech online site

.co, .gg, and .de have no public RDAP and are served by the WHOIS fallback. Any other TLD in the IANA bootstrap works without code changes — run test_tlds.py your,tlds first to confirm its registry behaves.

Caveats

  • Availability is a point-in-time snapshot. Always re-verify at your registrar immediately before purchase.
  • "Available" means unregistered at the registry and not flagged restricted by WHOIS — it still says nothing about trademarks or premium registry pricing. The final word is always an actual registrar checkout.
  • ccTLD WHOIS servers can rate-limit aggressively (CIRA especially); the script retries once after a 10s backoff, and anything still unconfirmed is labeled available(rdap-only) rather than guessed.
  • Be polite: the script sleeps between queries. Don't strip the delays and hammer registry endpoints.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages