Documentation
nameCrawl API
nameCrawl helps you check domain availability, compare registrar prices, monitor expiring domains, and browse dropped and newly registered domains. Use our REST API directly, the CLI tool for quick terminal lookups, or the web dashboard.
Build with an LLM
Use this pre-built prompt with your favorite AI assistant to integrate the nameCrawl API faster.
Domain Search
Check availability across 1,000+ TLDs with real-time RDAP data, WHOIS intelligence, and pricing
Price Comparison
Compare registration and renewal prices from Porkbun, Namecheap, GoDaddy, NameSilo, Dynadot, and Cloudflare
Expiry Monitoring
Watch domains and get webhook alerts before they expire (Pro plan)
Drops & New Registrations
Daily feeds of dropped and newly registered domains across 100+ gTLDs, sourced from ICANN zone files
Base URL
https://api.namecrawl.devAll API requests use this base URL. Responses are JSON. HTTPS is required.
Quick Start
Start checking domains in under 30 seconds. No account required for basic searches.
Search a domain (no account needed)
The public endpoint checks your domain across 15 popular TLDs automatically. You can pass just a name like myproject or a full domain like myproject.com (the specified TLD will appear first in results).
curl -X POST https://api.namecrawl.dev/v1/public/check \
-H "Content-Type: application/json" \
-d '{"domain": "myproject"}'Get results for 15 TLDs with pricing
Each result tells you if the domain is available or registered, and includes pricing from multiple registrars for available domains.
{
"success": true,
"data": {
"domain": "myproject",
"results": [
{
"tld": ".com",
"fqdn": "myproject.com",
"available": true,
"status": "available",
"pricing": [
{ "registrar": "cloudflare", "registration_price": 9.77, "renewal_price": 9.77, "currency": "USD" },
{ "registrar": "porkbun", "registration_price": 8.56, "renewal_price": 9.73, "currency": "USD" },
{ "registrar": "dynadot", "registration_price": 10.88, "renewal_price": 10.88, "currency": "USD" }
],
"registration_links": [
{ "registrar": "porkbun", "url": "https://porkbun.com/...", "price": 8.56 }
]
},
{
"tld": ".io",
"fqdn": "myproject.io",
"available": false,
"status": "registered",
"registrar": "NameCheap, Inc.",
"expiry_date": "2027-03-15T00:00:00Z"
}
]
},
"meta": {
"timestamp": "2026-03-19T12:00:00Z",
"tlds_checked": 15,
"available_count": 8,
"taken_count": 7
}
}Want more? Sign up for an API key
Free accounts get 3,000 lookups/month (300/day) with custom TLD selection, WHOIS data (Pro), bulk checks (Starter+), and domain monitoring (Pro).
# Sign up at namecrawl.dev, then create an API key in the dashboard.
# Use your API key for authenticated requests:
curl -X POST https://api.namecrawl.dev/v1/check \
-H "Authorization: Bearer nc_live_your_key" \
-H "Content-Type: application/json" \
-d '{"domain": "myproject.com"}'Tip: You can pass a full domain like myproject.com and the API will extract the TLD automatically. If you don't provide a tlds array, it defaults to checking all 15 popular TLDs with your specified TLD first.
CLI Tool
The easiest way to use nameCrawl. Search domains, check trends, and manage your account from the terminal. The CLI runs in interactive mode — just type commands directly without any prefix.
Install
# Install globally
npm install -g namecrawl
# Or run without installing
npx namecrawlOnce launched, the CLI enters interactive mode. Type commands directly at the nameCrawl > prompt.
Search domains
Search by name to check all default TLDs, or pass a full domain to prioritize that TLD.
# Search across all default TLDs
search coolstartup
# Search a specific domain (checks .com first, then the rest)
search coolstartup.com
# Search specific TLDs only
search coolstartup --tlds com,io,dev
# Output as JSON (useful for scripting and piping)
search coolstartup --jsonAuthentication
The CLI supports two login methods: browser-based (opens your browser for Google, GitHub, etc. via device code flow) or email & password. You can also create an account directly from the CLI.
# Log in (choose browser or email/password)
login
# Create a new account
signup
# Check your account status and remaining quota
status
# Log out (clears stored credentials)
logoutCredentials are stored in ~/.namecrawl/config.json. Never share this file.
Domain watching (Pro)
Monitor domains for expiry and get webhook notifications.
# Watch a domain for expiry alerts
watch example.com
# Watch with a webhook URL for notifications
watch example.com --webhook https://myapp.com/hooks/domain
# List all watched domains
watch list
# Remove a watch
watch remove <id>All commands
| Command | Description |
|---|---|
| search <domain> | Search domain availability across TLDs |
| search <domain> --tlds com,io | Search specific TLDs only |
| search <domain> --json | Output results as JSON |
| login | Log in via browser or email/password |
| signup | Create a new account |
| logout | Clear stored credentials |
| status | View account info, tier, and quota |
| keys list | List your API keys |
| keys create | Create a new API key |
| bulk <domains> --tlds com,io | Bulk check multiple domains (Starter+) |
| bulk --file domains.txt | Bulk check from a file (one domain per line) |
| watch <domain> | Watch a domain for expiry (Pro+) |
| watch <domain> --webhook <url> | Watch with webhook notifications |
| watch list | List watched domains |
| watch remove <id> | Stop watching a domain |
| keys delete <id> | Revoke an API key |
| update | Update nameCrawl to the latest version |
Authentication
nameCrawl offers three ways to interact with the API. Public endpoints require no authentication at all. For higher limits and more features, sign up and use an API key.
| Method | Best for | How it works |
|---|---|---|
| No auth | Quick one-off lookups | Use /v1/public/* endpoints. Rate limited by IP. |
| API Key | Servers, scripts, CLI | Header: Authorization: Bearer nc_... |
| Widget Token | Embedded widgets on other sites | Header: X-Widget-Token: ncw_... Domain-restricted, safe for client-side. |
| JWT (Dashboard) | Web dashboard only | Automatic via Clerk. Not for API integrations. |
Getting an API key: Sign up at namecrawl.dev/sign-up, go to Dashboard → API Keys, and create one. Or use the CLI: run login then keys create. Your key is shown once at creation and cannot be retrieved later, so save it somewhere safe.
/v1/checkAuthCheck domain availability across 1,000+ TLDs. Returns availability status, RDAP registration data, registrar pricing, and affiliate registration links. Pro tier gets raw WHOIS/RDAP intelligence data.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | Yes | Domain name (e.g. 'mybrand') or full domain (e.g. 'mybrand.com'). If a TLD is included, it will be extracted and checked first. |
| tlds | string[] | No | TLDs to check (e.g. [".com", ".io"]). If omitted, checks 15 default TLDs. Max per tier: Free 15, Starter 50, Pro 200. |
| tld_count | integer | No | Number of default TLDs to check. Ignored if tlds is provided. Capped by tier: Free 15, Starter 50, Pro 200. (e.g. 25) |
| include_pricing | boolean | No | Include registrar pricing for available domains (default: true) |
| include_whois | boolean | No | Include raw WHOIS/RDAP data: domain_statuses, whois_raw (full WHOIS text), and rdap_raw (full RDAP JSON). Pro tier only. (default: false) |
| include_pagerank | boolean | No | Include Open PageRank score (0-10) for each domain. Adds latency for large requests. (default: false) |
| skip_cache | boolean | No | Force a fresh RDAP lookup, bypassing cache. Costs 2x credits. (Pro+ only, default: false) |
Request body
{
"domain": "mybrand.com",
"tlds": [".com", ".io", ".dev", ".ai"],
"tld_count": 25,
"include_pricing": true,
"include_whois": true,
"include_pagerank": true,
"skip_cache": false
}Response
{
"success": true,
"data": {
"domain": "mybrand",
"results": [
{
"tld": ".com",
"fqdn": "mybrand.com",
"available": false,
"status": "registered",
"registrar": "Cloudflare, Inc.",
"registration_date": "2020-05-12T00:00:00Z",
"expiry_date": "2027-01-15T00:00:00Z",
"nameservers": ["ns1.cloudflare.com", "ns2.cloudflare.com"],
"domain_statuses": ["clientTransferProhibited"],
"whois_raw": "Domain Name: MYBRAND.COM\nRegistrar: Cloudflare, Inc.\n...",
"rdap_raw": { "objectClassName": "domain", "..." : "..." },
"page_rank": 6.97,
"cached": true,
"cache_age_seconds": 3600
},
{
"tld": ".dev",
"fqdn": "mybrand.dev",
"available": true,
"status": "available",
"pricing": [
{ "registrar": "cloudflare", "registration_price": 10.18, "renewal_price": 10.18, "currency": "USD" },
{ "registrar": "porkbun", "registration_price": 9.73, "renewal_price": 10.41, "currency": "USD" },
{ "registrar": "dynadot", "registration_price": 10.88, "renewal_price": 10.88, "currency": "USD" }
],
"registration_links": [
{ "registrar": "porkbun", "url": "https://porkbun.com/...", "price": 9.73 }
]
}
]
},
"meta": { "query_cost": 4, "queries_remaining": 9996 }
}How domain input works
"domain": "mybrand"— checks all 15 default TLDs"domain": "mybrand.com"— extracts .com, checks it first, then the other 14 TLDs"domain": "mybrand.edu"— extracts .edu (not in defaults), checks it first plus 14 defaults"domain": "mybrand", "tlds": [".com", ".io"]— checks only the specified TLDs"domain": "mybrand.com"— checks only .com (TLD extracted from domain)"domain": "mybrand", "tld_count": 25— checks the first 25 default TLDs
What is PageRank?
PageRank is a score from 0 to 10 that measures how authoritative a domain is based on the quality and quantity of other websites linking to it. It was originally developed by Google as the foundation of their search ranking algorithm. A higher score means the domain has more high-quality backlinks pointing to it from trusted sources.
For example, a major news site might have a PageRank of 8 or 9, a well-known company blog might score 5 or 6, and a brand new website with no backlinks would score 0. The scale is logarithmic, meaning the difference between a 5 and a 6 is much larger than the difference between a 1 and a 2.
PageRank is useful for evaluating domain value. When checking if a domain is available, the score tells you whether it previously had authority and backlinks. A dropped domain with a PageRank of 4 or above is likely worth registering for its SEO value alone. When checking registered domains, it helps you understand how established they are.
0— No authority. New or unlinked domain.1-3— Low authority. Small sites, personal blogs, new businesses.4-5— Moderate authority. Established businesses, popular blogs, niche leaders.6-7— High authority. Major brands, large publications, well-known organizations.8-10— Very high authority. Top-tier sites like Google, Wikipedia, major government sites.
PageRank is off by default because the lookup adds latency to your request (up to a few seconds for large queries). Set include_pagerank: true when you need it.
Public endpoint (no auth needed)
For quick lookups without an account. Automatically checks 15 TLDs. Rate limited to 5 requests/minute per IP. Also supports full domain input.
# Search by name (checks 15 TLDs)
curl -X POST https://api.namecrawl.dev/v1/public/check \
-H "Content-Type: application/json" \
-d '{"domain": "mybrand"}'
# Search by full domain (.com appears first in results)
curl -X POST https://api.namecrawl.dev/v1/public/check \
-H "Content-Type: application/json" \
-d '{"domain": "mybrand.com"}'/v1/check/bulkAuthstarter+Check multiple domains at once across multiple TLDs. Each domain+TLD combination counts as one query credit. Requires Starter tier or above.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| domains | string[] | Yes | Domain names to check. Max 10 (Starter) or 20 (Pro+). |
| tlds | string[] | No | TLDs to check for each domain. Max 20 (Starter) or 50 (Pro+). Defaults to [".com"]. |
| include_pricing | boolean | No | Include registrar pricing (default: true) |
| include_whois | boolean | No | Include raw WHOIS/RDAP intelligence data (Pro+ only, default: false) |
Request body
{
"domains": ["mybrand", "mycompany", "myproject"],
"tlds": [".com", ".io"],
"include_pricing": true,
"include_whois": false
}Response
{
"success": true,
"data": {
"results": {
"mybrand": [
{ "tld": ".com", "fqdn": "mybrand.com", "available": true, "status": "available", ... },
{ "tld": ".io", "fqdn": "mybrand.io", "available": false, "status": "registered", ... }
],
"mycompany": [ ... ],
"myproject": [ ... ]
}
},
"meta": { "query_cost": 6, "queries_remaining": 9994 }
}Query cost: domains × TLDs. Checking 3 domains across 2 TLDs = 6 queries deducted from your monthly quota.
/v1/suggestAuthstarter+Find available domain names containing a keyword. Generates variations by combining your keyword with common prefixes (get, my, pro, ...) and suffixes (hub, lab, app, ...) then checks availability across your selected TLDs. Only available results are returned, with pricing. Requires Starter tier or above.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| keyword | string | Yes | 1-30 characters. Letters, numbers, and hyphens only. |
| tlds | string[] | No | TLDs to check. Defaults to 15 popular TLDs (.com, .net, .org, .io, etc.). |
| limit | number | No | Max results to return (default: 20, max: 100). Only available domains are returned. |
| include_pricing | boolean | No | Include registrar pricing and registration links (default: true) |
Request body
{
"keyword": "claw",
"tlds": [".com", ".net", ".io"],
"limit": 20,
"include_pricing": true
}Response
{
"success": true,
"data": {
"keyword": "claw",
"results": [
{ "tld": ".com", "fqdn": "getclaw.com", "available": true, "status": "available", "pricing": [...] },
{ "tld": ".io", "fqdn": "clawlab.io", "available": true, "status": "available", "pricing": [...] },
{ "tld": ".net", "fqdn": "clawforge.net", "available": true, "status": "available", "pricing": [...] }
],
"candidates_checked": 720
},
"meta": { "query_cost": 3, "queries_remaining": 9997 }
}Query cost: You are only charged for available results returned, not total candidates checked. If 8 domains come back available, the cost is 8 queries.
curl -X POST https://api.namecrawl.dev/v1/suggest \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword": "claw", "tlds": [".com", ".io"], "limit": 10}'/v1/dropsAuthstarter+Browse domains that were recently dropped (deleted from the registry and available for anyone to register). Data is sourced from daily ICANN zone file diffs across 100+ gTLDs. Updated once per day. Requires Starter tier or above.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| tld | string | No | Filter by TLD (e.g. '.xyz', '.net'). If omitted, returns drops across all tracked TLDs. |
| keyword | string | No | Search for domains containing this keyword (e.g. 'shop', 'crypto', 'ai'). Case-insensitive. 1-63 chars, alphanumeric and hyphens only. |
| date | string | No | Exact date to query (e.g. '2026-03-20'). Returns only drops detected on this date. |
| from | string | No | Start of date range (e.g. '2026-03-15'). Use with 'to' for a range query. |
| to | string | No | End of date range (e.g. '2026-03-21'). Use with 'from' for a range query. |
| limit | integer | No | Results per page, between 1 and 200 (default: 50) |
| page | integer | No | Page number for pagination (default: 1) |
Response
{
"success": true,
"data": {
"change_type": "dropped",
"domains": [
{
"fqdn": "coolstartup.xyz",
"domain_name": "coolstartup",
"tld": ".xyz",
"detected_date": "2026-03-21"
},
{
"fqdn": "oldproject.dev",
"domain_name": "oldproject",
"tld": ".dev",
"detected_date": "2026-03-21"
}
]
},
"pagination": { "page": 1, "limit": 50, "has_more": true }
}Example requests
# Get all dropped domains from today
curl https://api.namecrawl.dev/v1/drops \
-H "Authorization: Bearer nc_live_your_key"
# Get dropped .xyz domains only
curl "https://api.namecrawl.dev/v1/drops?tld=.xyz" \
-H "Authorization: Bearer nc_live_your_key"
# Search for dropped domains containing "shop"
curl "https://api.namecrawl.dev/v1/drops?keyword=shop" \
-H "Authorization: Bearer nc_live_your_key"
# Combine keyword search with TLD filter
curl "https://api.namecrawl.dev/v1/drops?keyword=crypto&tld=.net" \
-H "Authorization: Bearer nc_live_your_key"
# Get drops from a specific date
curl "https://api.namecrawl.dev/v1/drops?date=2026-03-20" \
-H "Authorization: Bearer nc_live_your_key"
# Get drops from the last week, page 2
curl "https://api.namecrawl.dev/v1/drops?from=2026-03-14&to=2026-03-21&page=2" \
-H "Authorization: Bearer nc_live_your_key"
# Limit to 10 results
curl "https://api.namecrawl.dev/v1/drops?tld=.net&limit=10" \
-H "Authorization: Bearer nc_live_your_key"Drops summary
/v1/drops/summaryAuthstarter+Get a summary of how many domains were dropped per TLD per day. Useful for dashboards, charts, and understanding drop volume trends.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | No | Number of days to look back, between 1 and 90 (default: 7) |
Response
{
"success": true,
"data": {
"change_type": "dropped",
"days": 7,
"entries": [
{ "tld": ".xyz", "detected_date": "2026-03-21", "count": 12450 },
{ "tld": ".net", "detected_date": "2026-03-21", "count": 8320 },
{ "tld": ".org", "detected_date": "2026-03-21", "count": 5100 },
{ "tld": ".xyz", "detected_date": "2026-03-20", "count": 11890 }
]
}
}What is a dropped domain?
A dropped domain is one that was previously registered by someone, but they let it expire and it went through the full expiration lifecycle without being renewed. Once dropped, the domain is deleted from the registry and becomes available for anyone to register again.
The domain expiration lifecycle
Registered— Domain is active and owned by someoneExpired— Owner didn't renew; registrar may auto-renew or park itRedemption Period— ~30 days where the owner can still reclaim it (usually for an extra fee)Pending Delete— Final ~5-day countdown; no one can touch itDropped— Deleted from the registry, open for new registration by anyone
Why are dropped domains valuable?
- SEO value — Dropped domains may carry existing backlinks, domain authority, and search rankings from their previous owner
- Brand names — Short, memorable, or keyword-rich domain names become available again
- Domain investing — Investors monitor drop lists to acquire high-value domains at registration price
- Brand protection — Companies watch for domains similar to their brand being dropped and re-registered
Supported TLDs (100+ gTLDs)
Dropped and registered domain data covers 100+ gTLDs. Data is sourced from ICANN CZDS (Centralized Zone Data Service) zone files. Country-code TLDs like .com, .io, .ai, .co, and .me are not included.
.net .org .xyz .info .online .top .site .store .app .dev .tech .club .shop .pro .live .vip .icu .buzz .blog .space .fun .cloud .digital .world .design .agency .network .solutions .media .email .biz .life .today .work .link .website .art .one .group .studio .services .company .ltd .games .global .page .llc .social .health .zone .news .guru .rocks .best .team .bio .quest .academy .fyi .wiki .love .homes .center .care .support .business .plus .systems .events .works .photography .city .family .technology .marketing .expert .tools .coffee .education .ink .run .cam .chat .monster .casa .uno .yoga .earth .consulting .finance .foundation .pet .photo .farm .community .international .energy .coach .bar .africa .baby
/v1/registrationsAuthstarter+Browse domains that were newly registered today or on a specific date. Detected from daily ICANN zone file diffs -- a domain that appears in today's zone file but wasn't in yesterday's is a new registration. Requires Starter tier or above.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| tld | string | No | Filter by TLD (e.g. '.app', '.dev'). If omitted, returns registrations across all tracked TLDs. |
| keyword | string | No | Search for domains containing this keyword (e.g. 'cloud', 'robot', 'pay'). Case-insensitive. 1-63 chars, alphanumeric and hyphens only. |
| date | string | No | Exact date to query (e.g. '2026-03-20'). Returns only registrations detected on this date. |
| from | string | No | Start of date range (e.g. '2026-03-15'). Use with 'to' for a range query. |
| to | string | No | End of date range (e.g. '2026-03-21'). Use with 'from' for a range query. |
| limit | integer | No | Results per page, between 1 and 200 (default: 50) |
| page | integer | No | Page number for pagination (default: 1) |
Response
{
"success": true,
"data": {
"change_type": "registered",
"domains": [
{
"fqdn": "nextstartup.app",
"domain_name": "nextstartup",
"tld": ".app",
"detected_date": "2026-03-21",
"nameservers": ["ns1.cloudflare.com", "ns2.cloudflare.com"]
},
{
"fqdn": "brandnew.dev",
"domain_name": "brandnew",
"tld": ".dev",
"detected_date": "2026-03-21",
"nameservers": ["dns1.registrar-servers.com", "dns2.registrar-servers.com"]
}
]
},
"pagination": { "page": 1, "limit": 50, "has_more": true }
}Example requests
# Get all newly registered domains from today
curl https://api.namecrawl.dev/v1/registrations \
-H "Authorization: Bearer nc_live_your_key"
# Get new .dev registrations only
curl "https://api.namecrawl.dev/v1/registrations?tld=.dev" \
-H "Authorization: Bearer nc_live_your_key"
# Search for newly registered domains containing "cloud"
curl "https://api.namecrawl.dev/v1/registrations?keyword=cloud" \
-H "Authorization: Bearer nc_live_your_key"
# Combine keyword with TLD and date range
curl "https://api.namecrawl.dev/v1/registrations?keyword=pay&tld=.app&from=2026-03-18&to=2026-03-21" \
-H "Authorization: Bearer nc_live_your_key"
# Get registrations from a specific date
curl "https://api.namecrawl.dev/v1/registrations?date=2026-03-20" \
-H "Authorization: Bearer nc_live_your_key"
# Get registrations from the last 3 days
curl "https://api.namecrawl.dev/v1/registrations?from=2026-03-18&to=2026-03-21" \
-H "Authorization: Bearer nc_live_your_key"Registrations summary
/v1/registrations/summaryAuthstarter+Get a summary of how many new domains were registered per TLD per day. Useful for tracking registration trends and TLD popularity.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | No | Number of days to look back, between 1 and 90 (default: 7) |
Response
{
"success": true,
"data": {
"change_type": "registered",
"days": 7,
"entries": [
{ "tld": ".xyz", "detected_date": "2026-03-21", "count": 25300 },
{ "tld": ".net", "detected_date": "2026-03-21", "count": 18400 },
{ "tld": ".app", "detected_date": "2026-03-21", "count": 3200 }
]
}
}Use cases for new registration data
- Brand monitoring — Get alerted when someone registers a domain similar to your brand or trademark
- Phishing detection — Security teams can monitor for lookalike domains targeting their organization
- Competitive intelligence — Track when competitors register new domains for upcoming products or campaigns
- Market research — Analyze registration trends to understand which TLDs and naming patterns are gaining popularity
- Trend analysis — Use the summary endpoint to chart registration volume over time and spot spikes or seasonal patterns
How it works
Every day, nameCrawl downloads the official ICANN zone files for 100+ gTLDs. These zone files contain every registered domain in each TLD. By comparing today's zone file against yesterday's, we detect two things:
Yesterday - Today = Dropped— domain was in yesterday's file but not today's (it was deleted)Today - Yesterday = Registered— domain is in today's file but wasn't in yesterday's (it's new)
Zone files are published by ICANN between 00:00 and 06:00 UTC daily. Our data typically updates by 07:00 UTC (1:00 AM Central Time).
Note: Both dropped and newly registered domain endpoints cover the same 100+ gTLDs. Country-code TLDs (.io, .ai, .co, .gg, .me) are not available through ICANN zone files and are not included in this data.
Drop Alerts
Get webhook notifications when domains matching your filters are dropped or newly registered. Set up alerts with filters for TLDs, keywords, and domain name length to receive only the domains you care about. Requires Starter tier or above. Starter allows up to 100 alerts, Pro allows up to 1,000.
/v1/drops/alertsAuthstarter+Create a new drop alert. The system checks for matching domains every hour and sends a webhook POST with the results.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| webhook_url | string | Yes | HTTPS URL to receive notifications. Must be HTTPS. Validated against SSRF. |
| tlds | string[] | No | TLDs to monitor (e.g. [".xyz", ".dev"]). Empty array or omitted = all 30 TLDs. |
| keyword | string | No | Only match domains containing this substring (e.g. "tech" matches "techstart", "biotech", etc.) |
| max_length | integer | No | Only match domain names with at most this many characters (e.g. 5 matches "cool" but not "coolstartup") |
| min_length | integer | No | Only match domain names with at least this many characters |
| change_type | string | No | "dropped" (default), "registered", or "both" |
Request body
{
"webhook_url": "https://myapp.com/webhooks/drops",
"tlds": [".xyz", ".dev", ".app"],
"keyword": "tech",
"max_length": 8,
"min_length": 3,
"change_type": "dropped"
}Response
{
"success": true,
"data": {
"id": "a1b2c3d4-...",
"tlds": [".xyz", ".dev", ".app"],
"keyword": "tech",
"max_length": 8,
"min_length": 3,
"change_type": "dropped",
"webhook_url": "https://myapp.com/webhooks/drops",
"is_active": true,
"last_notified": null,
"created_at": "2026-03-21T12:00:00Z"
}
}/v1/drops/alertsList all your drop alerts
/v1/drops/alerts/:idUpdate an alert's filters, webhook URL, or active state
/v1/drops/alerts/:idRemove an alert
Webhook payload
When domains matching your alert are detected, nameCrawl sends a POST request to your webhook URL. The payload includes up to 100 matching domains per notification. Webhooks are signed with HMAC-SHA256 for verification.
{
"event": "domain.drop_alert",
"change_type": "dropped",
"matched_domains": [
{
"fqdn": "cooltech.xyz",
"domain_name": "cooltech",
"tld": ".xyz",
"detected_date": "2026-03-21"
},
{
"fqdn": "newtech.app",
"domain_name": "newtech",
"tld": ".app",
"detected_date": "2026-03-21",
"nameservers": ["ns1.cloudflare.com", "ns2.cloudflare.com"]
}
],
"total_matches": 2,
"timestamp": "2026-03-21T07:00:00Z"
}Example: monitor short .xyz drops
This alert notifies you whenever a .xyz domain with 5 or fewer characters is dropped, which is useful for domain investors looking for short, valuable names.
curl -X POST https://api.namecrawl.dev/v1/drops/alerts \
-H "Authorization: Bearer nc_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://myapp.com/hooks/drops",
"tlds": [".xyz"],
"max_length": 5,
"change_type": "dropped"
}'Example: monitor brand-related registrations
This alert notifies you whenever someone registers a new domain containing your brand name across all TLDs, useful for brand protection and phishing detection.
curl -X POST https://api.namecrawl.dev/v1/drops/alerts \
-H "Authorization: Bearer nc_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://myapp.com/hooks/brand-monitor",
"keyword": "mybrand",
"change_type": "registered"
}'Filter options explained
tlds— Limit to specific TLDs. If empty or omitted, monitors all 100+ gTLDs.keyword— Substring match on the domain name (case-insensitive). “tech” matches “techstart”, “biotech”, “tech42”, etc.max_length— Maximum characters in the domain name (not including TLD). Great for finding short, premium domains.min_length— Minimum characters in the domain name. Use with max_length to target a specific length range.change_type— “dropped” (domains deleted from registry), “registered” (newly registered domains), or “both”.
Limits: Starter allows up to 100 active alerts. Pro allows up to 1,000. Alerts are checked every hour. Each notification includes up to 100 matching domains. Nameservers are included for newly registered domains (not for drops, since they no longer have DNS records).
Domain Intelligence
Look up history, DNS records, and WHOIS data for any domain. These endpoints provide deep intelligence beyond simple availability checks.
/v1/domains/:fqdn/historyAuthStarter+Get the full history of a domain from nameCrawl's index, including status changes, check frequency, and metadata. Returns data from our persistent domain index -- the domain must have been checked through nameCrawl at least once.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| fqdn | string | Yes | Fully-qualified domain name (e.g. 'example.com'). Passed as URL path segment. |
Response
{
"success": true,
"data": {
"fqdn": "example.com",
"domain": "example",
"tld": ".com",
"current_status": "registered",
"available": false,
"registrar": "NameCheap, Inc.",
"registration_date": "1997-09-15T00:00:00Z",
"expiry_date": "2028-09-14T00:00:00Z",
"nameservers": ["ns1.example.com", "ns2.example.com"],
"domain_statuses": ["clientTransferProhibited"],
"first_seen_at": "2026-01-10T08:30:00Z",
"last_checked_at": "2026-04-11T14:22:00Z",
"check_count": 47,
"last_status_change_at": "2026-02-05T10:00:00Z",
"previous_status": "available",
"popularity_rank": 12,
"backlink_count": 8420
}
}Note: This endpoint returns data from our index. If the domain has never been checked through nameCrawl, a 404 is returned. Use the /v1/check endpoint first to add it to the index.
/v1/domains/:fqdn/dnsLook up live DNS records for a domain. Returns A, AAAA, NS, MX, TXT, and CNAME records. Useful for checking whether a registered domain is actively hosted or parked. No authentication required.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| fqdn | string | Yes | Fully-qualified domain name (e.g. 'example.com'). Passed as URL path segment. |
Response
{
"success": true,
"data": {
"fqdn": "example.com",
"records": {
"a": ["93.184.216.34"],
"aaaa": ["2606:2800:220:1:248:1893:25c8:1946"],
"ns": ["ns1.example.com", "ns2.example.com"],
"mx": [
{ "priority": 10, "exchange": "mail.example.com" },
{ "priority": 20, "exchange": "mail2.example.com" }
],
"txt": ["v=spf1 include:_spf.google.com ~all"],
"cname": []
}
}
}Tip: Empty record arrays are omitted from the response. A domain with no DNS records at all likely does not resolve (parked, expired, or not yet configured).
/v1/domains/:fqdn/whoisAuthStarter+Get structured WHOIS/RDAP data for a domain. Performs a live lookup via RDAP (preferred) with WHOIS fallback. Returns registrar, dates, nameservers, domain statuses, and raw protocol data.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| fqdn | string | Yes | Fully-qualified domain name (e.g. 'example.com'). Passed as URL path segment. |
Response
{
"success": true,
"data": {
"fqdn": "example.com",
"domain": "example",
"tld": ".com",
"available": false,
"status": "registered",
"registrar": "NameCheap, Inc.",
"registration_date": "1997-09-15T00:00:00Z",
"expiry_date": "2028-09-14T00:00:00Z",
"updated_date": "2024-08-14T07:01:44Z",
"nameservers": ["ns1.example.com", "ns2.example.com"],
"domain_statuses": ["clientTransferProhibited", "serverDeleteProhibited"],
"rdap_raw": { "...full RDAP JSON response..." },
"source": "rdap"
}
}Source field: The source field indicates which protocol provided the data: "rdap" (structured JSON from the registry) or "whois" (parsed from plaintext WHOIS response). When source is WHOIS, a whois_raw field contains the full text.
/v1/tldsList all supported TLDs with metadata. No auth required. Use this to discover which TLDs are available for your plan.
Response
{
"success": true,
"data": {
"tlds": [
{ "tld": ".com", "type": "generic", "rdap_supported": true, "min_tier": "free" },
{ "tld": ".io", "type": "country-code", "rdap_supported": true, "min_tier": "free" },
{ "tld": ".info", "type": "generic", "rdap_supported": true, "min_tier": "starter" }
],
"total": 54
}
}Free tier TLDs (15): .com, .net, .org, .io, .co, .dev, .app, .ai, .xyz, .tech, .me, .gg, .site, .online, .store. Starter and above unlock all 1,000+ TLDs including ccTLDs.
/v1/tlds/:tldGet detailed information for a single TLD, including registry metadata, RDAP/WHOIS server URLs, registrar pricing, and live stats from our index (total indexed domains, availability breakdown, 30-day drop and registration counts).
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| tld | string | Yes | TLD with or without dot (e.g. 'com' or '.com'). Passed as URL path segment. |
Response
{
"success": true,
"data": {
"tld": ".com",
"type": "generic",
"registry": "VeriSign",
"rdap_supported": true,
"rdap_server_url": "https://rdap.verisign.com/com/v1/",
"whois_server": "whois.verisign-grs.com",
"pricing_available": true,
"tier_required": "free",
"stats": {
"total_indexed": 148230,
"available": 12450,
"registered": 134820,
"dropping": 960,
"recent_drops_30d": 3420,
"recent_registrations_30d": 8910
},
"prices": [
{ "registrar": "cloudflare", "registration_price": 9.77, "renewal_price": 9.77, "currency": "USD" },
{ "registrar": "porkbun", "registration_price": 8.56, "renewal_price": 9.73, "currency": "USD" },
{ "registrar": "namesilo", "registration_price": 9.95, "renewal_price": 9.95, "currency": "USD" }
]
}
}/v1/prices/:tldGet registration and renewal prices for a specific TLD across all tracked registrars. Prices are refreshed periodically from registrar APIs.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| tld | string | Yes | TLD without dot (e.g. 'com', 'io'). Passed as URL path segment. |
Response
{
"success": true,
"data": {
"tld": ".com",
"prices": [
{ "registrar": "cloudflare", "registration_price": 9.77, "renewal_price": 9.77, "currency": "USD" },
{ "registrar": "porkbun", "registration_price": 8.56, "renewal_price": 9.73, "currency": "USD" },
{ "registrar": "namesilo", "registration_price": 9.95, "renewal_price": 9.95, "currency": "USD" },
{ "registrar": "dynadot", "registration_price": 10.88, "renewal_price": 10.88, "currency": "USD" }
]
}
}Domain Watching
Monitor domains for expiry and get notified via webhooks when they're about to expire. The system checks your watched domains every 6 hours and sends notifications at 30, 7, and 1 day(s) before expiry. Requires Pro tier or above.
/v1/watchAuthstarter+Add a domain to your watchlist. The system will look up the current expiry date via RDAP and begin monitoring.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | Yes | Full domain to watch (e.g. 'example.com') |
| webhook_url | string | No | HTTPS URL to receive expiry notifications. Must be HTTPS. |
| notify_days_before | integer[] | No | Days before expiry to send alerts (default: [30, 7, 1]) |
Request body
{
"domain": "example.com",
"webhook_url": "https://myapp.com/webhooks/domain"
}Response
{
"success": true,
"data": {
"id": "a1b2c3d4-...",
"domain": "example.com",
"expiry_date": "2026-06-15T00:00:00Z",
"notify_days_before": [30, 7, 1],
"webhook_url": "https://myapp.com/webhooks/domain",
"is_active": true,
"last_checked": "2026-03-19T12:00:00Z",
"created_at": "2026-03-19T12:00:00Z"
}
}/v1/watch/listList all watched domains
/v1/watch/:idUpdate webhook URL or notification settings
/v1/watch/:idRemove from watchlist
Webhook payload
When a domain approaches expiry, nameCrawl sends a POST request to your webhook URL with this payload. Webhooks are signed with HMAC-SHA256 for verification.
{
"event": "domain.expiring",
"domain": "example.com",
"expiry_date": "2026-06-15T00:00:00Z",
"days_until_expiry": 7,
"timestamp": "2026-06-08T12:00:00Z"
}Limits: Free and Starter plans cannot use watchlist. Pro allows up to 50 watched domains. Webhook URLs must be HTTPS and are validated against SSRF attacks (no localhost, private IPs, or internal hostnames).
Embeddable Widget
Add a domain search widget to any website with a single script tag. The widget uses shadow DOM for style isolation and calls the public check API.
Basic usage
<div id="namecrawl-widget"></div>
<script src="https://namecrawl.dev/widget.js"></script>With options
<div id="namecrawl-widget"></div>
<script
src="https://namecrawl.dev/widget.js"
data-theme="light"
data-accent="#8b5cf6"
data-max="10"
data-key="ncw_live_..."
></script>Options
| Attribute | Default | Description |
|---|---|---|
| data-theme | "dark" | "dark" or "light" |
| data-accent | "#22d3ee" | Accent color (any hex) |
| data-max | 0 (all) | Max results to display. Remaining results link to nameCrawl. |
| data-key | none | Widget token for higher rate limits and more TLDs (Starter+) |
| data-container | "namecrawl-widget" | Custom container element ID |
Widget tokens: Subscribers (Starter+) can create domain-restricted widget tokens in the dashboard to skip CAPTCHA and check up to 50-200 TLDs per search. Queries count against your monthly quota. Without a token, the widget uses the free public API (15 TLDs, CAPTCHA after 3 requests).
Customization: Use the interactive widget builder to preview themes, customize colors, and copy the embed snippet.
Error Handling
All errors return a consistent JSON format with a machine-readable code. Use the code field for programmatic error handling, not the HTTP status code.
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Try again in 30 seconds.",
"retry_after": 30
}
}| Code | HTTP | What to do |
|---|---|---|
| VALIDATION_ERROR | 400 | Check your request body and parameters |
| INVALID_DOMAIN | 400 | Domain name format is invalid (only letters, numbers, hyphens) |
| INVALID_TLD | 400 | TLD not recognized or not supported on your tier |
| UNAUTHORIZED | 401 | Missing or invalid API key. Check your Authorization header. |
| TOKEN_EXPIRED | 401 | JWT expired. Re-authenticate via the dashboard. |
| TIER_RESTRICTED | 403 | Feature requires a higher plan. Check /pricing for details. |
| NOT_FOUND | 404 | Resource doesn't exist (wrong endpoint or ID) |
| RATE_LIMIT_EXCEEDED | 429 | Too many requests. Wait retry_after seconds and retry. |
| QUOTA_EXCEEDED | 429 | Monthly or daily quota used up. Upgrade plan or wait. |
| BULK_LIMIT_EXCEEDED | 400 | Too many domains or TLDs for your tier |
| LOOKUP_FAILED | 502 | RDAP registry didn't respond. Try again or use cached results. |
| INTERNAL_ERROR | 500 | Something broke on our end. Contact support if persistent. |
Rate Limits
Every response includes rate limit headers so you can track your usage and avoid hitting limits.
X-RateLimit-Limit: 60 # Max requests per minute for your tier
X-RateLimit-Remaining: 58 # Requests remaining in current window
X-RateLimit-Reset: 1710590400 # Unix timestamp when the window resets| Tier | Requests/min | Query Quota | TLDs/request |
|---|---|---|---|
| Public (no auth) | 5/min | 100/day per IP | 15 (fixed) |
| Free | 10/min | 300/day, 3,000/mo | 15 |
| Starter ($19/mo) | 60/min | 10,000/mo | 50 |
| Pro ($49/mo) | 120/min | 100,000/mo | 200 |
How query costs work: Each TLD checked counts as 1 query. Checking mybrand across 15 TLDs costs 15 queries. Using skip_cache: true (Pro) doubles the cost to 2 per TLD. Use the limit parameter to control how many TLDs are checked per request. When rate limited, the API returns 429 with a retry_after field telling you how many seconds to wait.
Drops & registrations rate limits: The /v1/drops and /v1/registrations endpoints have separate, higher rate limits. Starter: 1,000 requests/min. Pro: 5,000 requests/min. These endpoints do not deduct from your monthly query quota.
Heads up: Pro users can check up to 200 TLDs per request, but a single request at max capacity costs 200 queries (400 with skip_cache). That can burn through your 100,000/month quota fast. Use the limit parameter to keep costs predictable.
Plans & Features
Start free and upgrade as your usage grows. No credit card required for the free plan. Manage your subscription at Dashboard → Billing.
Free
$0
- ✓3,000 queries / month
- ✓300 queries / day
- ✓15 TLDs per request
- ✓Price comparison
- ✓10 req/min
- ✓CLI tool
Starter
$19/mo
- ✓10,000 queries / month
- ✓No daily limit
- ✓Up to 50 TLDs per request (including ccTLDs)
- ✓Bulk check (10 domains, 20 TLDs)
- ✓Dropped & new registered domains
- ✓Keyword search on drops & registrations
- ✓Drop alerts (100 alerts)
- ✓Price comparison
- ✓60 req/min (1,000/min drops)
Pro
$49/mo
- ✓100,000 queries / month
- ✓No daily limit
- ✓Up to 200 TLDs per request (including ccTLDs)
- ✓Bulk check (20 domains, 50 TLDs)
- ✓Dropped & new registered domains
- ✓Keyword search on drops & registrations
- ✓Drop alerts (1,000 alerts)
- ✓WHOIS data access
- ✓Skip cache (fresh lookups)
- ✓Domain watchlist (50 domains)
- ✓Webhook notifications
- ✓120 req/min (5,000/min drops)
Support
Need help? Reach out and we'll get back to you as soon as possible.
Email: hello@namecrawl.dev
Status page: Check api.namecrawl.dev/health for API status.