A production-ready Python script for bulk domain availability checking using WHOIS, DNS, and HTTP fallback methods.
pip install -r requirements.txtpython domain_checker.py -i domains.txt -o results.csv# Check domains from text file
python domain_checker.py -i domains.txt -o results.csv
# Check with higher concurrency
python domain_checker.py -i domains.txt -o results.csv -c 10
# Enable HTTP fallback for better accuracy
python domain_checker.py -i domains.txt -o results.csv --http-fallback
# Verbose output for debugging
python domain_checker.py -i domains.txt -o results.csv -v
# Quiet mode (minimal output)
python domain_checker.py -i domains.txt -o results.csv -q# Full configuration
python domain_checker.py \
-i domains.csv \
-o availability_report.csv \
-c 8 \
--whois-timeout 45 \
--dns-timeout 15 \
--retries 5 \
--rate-limit-delay 2.0 \
--http-fallback \
--verbosedomain-12345.com
google.com
github.com
============================================================
DOMAIN AVAILABILITY CHECKER
============================================================
Input file: domains.txt
Output file: results.csv
Domains to check: 7
Concurrency: 5
WHOIS timeout: 30s
DNS fallback: Enabled
HTTP fallback: Disabled
Rate limiting: Enabled
============================================================
Checking domains: 100%|████████████████| 7/7 [00:15<00:00, 2.14s/domain]
============================================================
DOMAIN AVAILABILITY CHECK SUMMARY
============================================================
Total domains checked: 7
✅ Available: 2 (28.6%)
❌ Registered: 5 (71.4%)
❓ Unknown: 0 (0.0%)
⚠️ Errors: 0 (0.0%)
============================================================
✅ AVAILABLE DOMAINS:
✓ example-test-domain-12345.com
✓ this-domain-is-probably-available-xyz123.net
Time elapsed: 15.23 seconds
Average: 2.18 seconds per domain| domain | status | registrar | expiry_date | creation_date | notes | check_method | checked_at |
|---|---|---|---|---|---|---|---|
| domain-12345.com | Available | Domain is available | WHOIS | 2025-12-13T22:56:02.624428+00:00 | |||
| google.com | Registered | MarkMonitor Inc. | 2028-09-14 | 1997-09-15 | Domain is registered | WHOIS | 2025-12-13T22:56:02.624942+00:00 |
| github.com | Registered | MarkMonitor Inc. | 2026-10-09 | 2007-10-09 | Domain is registered | WHOIS | 2025-12-13T22:56:02.624982+00:00 |
┌────────────────────────────────────────────────────────────────┐
│ DomainChecker (Orchestrator) │
├────────────────────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Semaphore │ │ Rate Limiter │ │Thread Pool │ │
│ │ (Concurrency)│ │ (Per TLD) │ │ Executor │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
├────────────────────────────────────────────────────────────────┤
│ Check Pipeline │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ WHOIS │──▶│ DNS │──▶│ HTTP │ │
│ │ Checker │ │ Fallback │ │ Fallback │ │
│ │ (Primary) │ │ (Secondary) │ │ (Tertiary) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────┐
│ DomainResult │
│ - domain │
│ - status │
│ - registrar │
│ - expiry_date │
│ - notes │
└──────────────────┘
| Feature | Description |
|---|---|
| Async I/O | Uses asyncio for concurrent domain checking |
| Rate Limiting | Per-TLD rate limiting to avoid WHOIS blocking |
| Retry Logic | Automatic retries with exponential backoff |
| Multiple TLDs | Supports .com, .net, .org, ccTLDs, new gTLDs |
| Fallback Methods | DNS and HTTP checks when WHOIS fails |
| Pattern Matching | Robust detection of "available" vs "registered" |
| Progress Display | Real-time progress with tqdm (optional) |
| CSV Export | Detailed results for further analysis |
python-whois>=0.8.0
aiohttp>=3.9.0
dnspython>=2.4.0
tqdm>=4.66.0 # Optional, for progress bar