A fast, lightweight, and modern bulk domain availability search tool and WHOIS/RDAP inspector built with PHP and JavaScript. Designed for domain investors, developers, and naming strategists to check thousands of domain variations with zero database requirements.
Bulk Domain Availability provides an all-in-one domain research workspace. It combines traditional RFC 3912 WHOIS socket querying with modern ICANN RDAP (Registration Data Access Protocol) over HTTPS, giving your tool universal coverage across classic TLDs, multi-level ccTLDs, modern gTLDs, and non-Latin Internationalized Domain Names (IDNs).
Important
Our tool comes preloaded with direct resolution rules for 2,088 domain extensions, making it one of the most comprehensive self-hosted bulk search tools available:
- Classic & Global TLDs (gTLDs):
.com,.net,.org,.xyz,.io,.co,.ai, etc. - Country Code TLDs & Multi-Level SLDs:
.id,.co.id,.ai.id,.co.uk,.com.au,.ca,.de, etc. - Modern HTTPS-Native Registries (RDAP): Google Registry domains (
.app,.dev,.page,.how) and other modern TLDs without legacy port 43 servers. - 150+ Internationalized Domain Names (IDN): Full native Unicode rendering for non-Latin scripts such as
.한국(Korea),.ไทย(Thailand),.рф(Russia),.在线(Online),.みんな(Everyone), and many more.
-
Extensive Extension Database (2,088+ TLDs & SLDs): Preconfigured support for over 2,088 top-level and second-level domain extensions, including
.com,.net,.org, country-code extensions, and multi-level ccTLDs like.ai.id,.co.id,.co.uk, and.com.au. -
Hybrid Resolver Architecture (WHOIS + RDAP):
- WHOIS Socket (Port 43): Direct, lightweight TCP socket queries with strict connection timeouts.
- RDAP over HTTPS: Native support for modern registries without standard port 43 servers (such as Google Registry's
.app,.dev,.page,.how) and automatic global fallback via RFC 7483/9083.
-
Internationalized Domain Names (IDN) & Native Unicode: Full support for international extensions in their native scripts (e.g.,
.한국,.ไทย,.рф,.在线,.みんな). The user interface displays readable Unicode characters on selection chips and accepts both native Unicode and Punycode (xn--...) inputs. -
Automated Name Combinator & Permutations: Generate dozens or hundreds of target domains on the fly using prefixes, suffixes, minimum/maximum character length limits, and word-pairing combinations (with or without hyphens).
-
Asynchronous Execution & Queue Control: Non-blocking batch queries powered by the browser
fetchAPI andAbortController. Control your scan lifecycle at any point using Pause, Resume, Stop, or individual/bulk Retry for failed requests. -
Client-Side Caching: Built-in
localStoragecaching ensures previously checked domains return instantly during exploratory sessions, saving bandwidth and preventing registry rate limiting. -
Integrated WHOIS & RDAP Viewer: Inspect registration status, registrars, creation dates, expiration dates, and nameservers in an expandable drawer without leaving your search results.
-
Clean CSV Export: Export availability tables, character lengths, execution times, and WHOIS sources directly into a standard CSV file with a single click.
-
Zero Database Requirement: Runs immediately out of the box without MySQL, PostgreSQL, or Redis.
+----------------------------+
| User Domain Input / Batch |
+--------------+-------------+
|
v
+----------------------------+
| IDN & Unicode Normalizer |
| (Punycode / Suffix Resolve)|
+--------------+-------------+
|
v
/--------------------------------\
/ Is Extension WHOIS or RDAP? \
+------------------+-----------------+
\ | /
\ RDAP | WHOIS /
v | v
+--------------------+ | +--------------------+
| RDAP Query (HTTPS) | | | WHOIS Socket (:43) |
| RFC 7483 / 9083 | | | Timeout: 4 seconds |
+---------+----------+ | +---------+----------+
| | |
| | (If socket fails or times out)
| +------------->| (RDAP Fallback)
| |
v v
+--------------------+ +--------------------+
| HTTP 404: Free | | Pattern Matching |
| HTTP 200: Taken | | "NOT FOUND" Check |
+---------+----------+ +---------+----------+
\ /
\ /
v v
+---------------------------+
| JSON API Response to UI |
+---------------------------+
- Normalization: The incoming domain name is parsed using the Public Suffix List (PDP) and hierarchical matching. Non-ASCII international characters are converted to Punycode using PHP
intl. - Resolver Resolution: The domain suffix is mapped against
misc/servers/servers.json. If an extension is flagged withprotocol: rdap, an HTTPS request is dispatched directly. - Execution & Fallback: If configured for WHOIS, a port 43 TCP socket is opened. If the socket connection fails, times out, or the registry does not operate a traditional WHOIS server, your resolver seamlessly falls back to RDAP.
- Availability Determination:
- RDAP: HTTP
404indicates the domain is available; HTTP200indicates it is registered. - WHOIS: Case-insensitive pattern matching evaluates registry responses against designated "not found" signatures.
- RDAP: HTTP
| Requirement | Minimum Version | Recommended Version |
|---|---|---|
| PHP | 7.4 | 8.2.35 |
| php-intl | Required for IDN/Punycode domain parsing | Enabled |
| php-curl | Required for RDAP HTTPS queries | Enabled |
| php-json | Built-in | Enabled |
git clone https://github.com/abaron/bulk-domain-availability.git
cd bulk-domain-availabilityEnsure that curl and intl are enabled in your PHP configuration:
php -m | grep -E "curl|intl"You can run your application immediately using PHP's built-in development server:
php -S localhost:8000Open your browser and navigate to http://localhost:8000.
server {
listen 80;
server_name your-domain.example;
root /path/to/bulk-domain-availability;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\. {
deny all;
}
}Standard PHP Apache setups will work out of the box with index.php as DirectoryIndex.
Extension definitions are maintained in misc/servers/servers.json.
"id": {
"server": "whois.id",
"not_found": "DOMAIN NOT FOUND"
}"app": {
"protocol": "rdap",
"server": "https://pubapi.registry.google/rdap/domain/",
"not_found": "not found"
}The application communicates via asynchronous AJAX POST requests to /index.php.
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
X-Requested-With: XMLHttpRequestPayload:
domain=example.com
Success Response:
{
"code": 200,
"status": "OK",
"message": "",
"data": {
"domain": "example.com",
"is_available": false,
"execute_time": "0.14",
"execute_time_unit": "s",
"whois_server": "whois.verisign-grs.com"
}
}Payload:
domain=example.com&whois=1
Success Response:
{
"code": 200,
"status": "OK",
"message": "",
"data": {
"domain": "example.com",
"whois_data": "Domain Name: EXAMPLE.COM\nRegistry Domain ID: ...",
"execute_time": "0.22",
"execute_time_unit": "s",
"whois_server": "whois.verisign-grs.com"
}
}This indicates the PHP intl extension is not enabled.
- Ubuntu / Debian:
sudo apt-get install php-intl && sudo systemctl restart php-fpm - macOS (Homebrew): Included by default in
brew install php. Ensure it is not commented out inphp.ini. - Windows: Uncomment
extension=intlin yourphp.inifile.
Certain cloud providers or hosting environments block outgoing TCP traffic on port 43.
- Our tool includes an automatic 4-second socket timeout protection.
- When port 43 is unreachable, your resolver automatically initiates an HTTPS RDAP query fallback, ensuring availability checks still complete successfully.
This project is open-source software licensed under the MIT License.
