Documentation
nameCrawl API
nameCrawl helps you check domain availability, compare registrar prices, monitor expiring domains, and discover trending domains. Use our REST API directly, the CLI tool for quick terminal lookups, or the web dashboard.
Domain Search
Check availability across 50+ TLDs with real-time RDAP data 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)
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" }
],
"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.
Trending domains
# See what's trending
trending
# Filter by category
trending --category expiring_soon
trending --category newly_available
trending --category rising
# Change time period
trending --period 7d
# Limit number of results
trending --limit 10Domain 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 |
| trending | View trending domains |
| trending --category expiring_soon | Filter trending by category |
| trending --period 7d | Change trending time period |
| trending --limit 10 | Limit number of results |
| 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_... |
| 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 multiple TLDs. Returns availability status, RDAP registration data, registrar pricing, and affiliate registration links.
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. |
| limit | integer | No | Max number of TLDs to check. Use this to control query cost without specifying individual TLDs. (e.g. 25) |
| include_pricing | boolean | No | Include registrar pricing for available domains (default: true) |
| include_whois | boolean | No | Include WHOIS data like registrar, nameservers, expiry (Pro+ only, 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"],
"limit": 25,
"include_pricing": true,
"include_whois": false,
"skip_cache": false
}Response
{
"success": true,
"data": {
"domain": "mybrand",
"results": [
{
"tld": ".com",
"fqdn": "mybrand.com",
"available": false,
"status": "registered",
"registrar": "Cloudflare, Inc.",
"expiry_date": "2027-01-15T00:00:00Z",
"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" }
],
"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", "limit": 5— checks only the first 5 default TLDs
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 WHOIS 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/public/trendingDiscover trending domains. No auth required. Data is refreshed hourly. When no snapshot data exists, falls back to popular domains from our index.
Parameters
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | No | most_searched, newly_available, expiring_soon, or rising (default: most_searched) |
| period | string | No | 1h, 24h, 7d, or 30d (default: 24h) |
| page | integer | No | Page number for pagination (default: 1) |
| limit | integer | No | Results per page, between 10 and 50 (default: 20) |
Response
{
"success": true,
"data": {
"period": "24h",
"category": "expiring_soon",
"generated_at": "2026-03-19T12:00:00Z",
"trends": [
{
"rank": 1,
"domain_name": "oldsite",
"fqdn": "oldsite.com",
"tld": ".com",
"expiry_date": "2026-03-22T00:00:00Z",
"days_until_expiry": 3
}
],
"meta_stats": {
"domains_in_index": 150000,
"total_searches_24h": 4200
}
},
"pagination": { "page": 1, "limit": 20, "has_more": true }
}Categories explained:
most_searched— domains searched most frequently by nameCrawl usersnewly_available— domains that recently changed from registered to availableexpiring_soon— registered domains with expiry dates in the next 30 daysrising— domains with rapidly increasing search interest
/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 50+ TLDs including ccTLDs.
/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" }
]
}
}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/watchAuthpro+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).
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.
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)
- ✓Price comparison
- ✓60 req/min
Pro
$49/mo
- ✓100,000 queries / month
- ✓No daily limit
- ✓Up to 200 TLDs per request (including ccTLDs)
- ✓Bulk check (20 domains, 50 TLDs)
- ✓WHOIS data access
- ✓Skip cache (fresh lookups)
- ✓Domain watchlist (50 domains)
- ✓Webhook notifications
- ✓120 req/min
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.