You MAY NOT use our Paid API for a product or service, whether free or paid, without obtaining written permission, or your account will be terminated.
You MAY NOT use our Paid API for a product or service, whether free or paid, without obtaining written permission, or your account will be terminated.
Thank you for your interest in the NameBio.com API. Business Members may request API access to Paid Endpoints, and if granted, will receive 50,000 credits per month.
API access is intended for large, established businesses integrating NameBio data into their existing services or internal processes. Examples include registries pricing premium domains, marketplaces displaying comparable sales on listings, drop catching services flagging domains with sales history, and registrars offering research tools to customers.
To request access, please email us at [email protected] with your company name and website, a detailed explanation of how you'll use the API in your existing product or processes, and list the specific API endpoints you need.
No multi-threading requests. You must wait for a response before sending the next request.
Do not send more than 30 requests per minute. If you receive a rate limit error you must sleep for one minute, do not just keep sending requests until you receive a successful response.
Pay attention to the number of API credits you have remaining. Do not continue sending requests after your credits are exhausted, wait until they are reset.
Keep your API key private and secure. Sharing or re-selling API access, or the data obtained from it, is strictly forbidden.
A citation with link is required if you display any information from our API on your website.
Failure to follow these rules will result in your API access being revoked.
For all endpoints you must send a POST request with the following for authentication:
| Argument | Required | Notes |
|---|---|---|
| email (string) | Y | The email on your NameBio account. |
| key (string) | Y | Your private API key. |
All responses will be in JSON format, and will contain at minimum:
{
"status": "success",
"status_message": "",
"credits_remaining": 1234,
}
We strongly recommend that you cache responses on your server for at least 24 hours, as our database only updates once per day starting at midnight Eastern. Repeated calls within 24 hours are unlikely to contain any new information.
This endpoint exposes our Comps Engine, which can be seen on our Domain Details pages (when you click on a domain in the search results). You pass in a domain name and we'll return up to 25 of the most relevant retail sales. This is ideal for marketplaces and "For Sale" landers.
URL: https://api.namebio.com/comps/
COST: 25 Credits
| Argument | Required | Notes |
|---|---|---|
| domain (string) | Y | This is the domain you want comps for. For best results CamelCase the domain (e.g. ExampleDomain.com instead of exampledomain.com). |
| price_from (int) | N | Default/Min: 1000. Use this to not receive any comps below $5,000 for example. |
| price_to (int) | N | Default: INT_MAX. Use this to not receive any comps above $100,000 for example. |
| order_by (string) | N | Default: "date". Sort by "price" or "date". |
| order_dir (string) | N | Default: "desc". Whether to sort "asc" or "desc". |
| months_old (int) | N | Default: INT_MAX. How old the sales can be. Passing 12 would limit results to sales from the past year. See the discussion section below for more info. |
| match_sld_any_tld (string) | N | Default: "false". Values can be "true" or "false". See the discussion section below for more info. |
The months_old argument is best used when sorting by price descending, as that is likely to return results that are 10 or 15 years old. Basically you can turn it into "Give me the highest comps from the past five years." Otherwise using this argument is not recommended, as it increases the odds of receiving no results. It is generally better to show older sales than none at all.
The match_sld_any_tld argument means that if you pass us something like channels.to we'll return sales with "channels" in any TLD, for example channels.mobi. When you use this option it will include those matches regardless of your other parameters. So if you say price_from=1000 the channels.mobi sale for $551 will still show even though it is below 1000, and it will be put at the top of the results regardless of your sort method. The rest of the results will still follow your instructions on order field and direction though.
curl -d "[email protected]&key=YOURKEY&domain=example.com&order_by=price&order_dir=desc&monthsold=60&match_sld_any_tld=false" -X POST https://api.namebio.com/comps/
{
"status": "success",
"status_message": "",
"credits_remaining": 1234,
"domain": "example.com",
"sld": "example",
"tld": ".com",
"keywords": "example",
"comps": [
[
"similar.com",
"500000",
"2019-01-01",
"Private"
],
[
"domain.com",
"450000",
"2018-01-01",
"Private"
]
],
"attributes": [
"English Word",
"High Search Volume",
"No Advertisers",
"Extension .com",
"Exclude Hyphens",
"Exclude Numbers"
]
}
This endpoint allows you to check a domain to see if we have any sale records in our database, either above or below $100. If there are multiple sales we will return all of them. This is ideal for in-house tools that analyze portfolios or expired domain lists.
URL: https://api.namebio.com/checkdomain/
COST: 1 Credit
| Argument | Required | Notes |
|---|---|---|
| domain (string) | Y | This is the domain you want to check. |
curl -d "[email protected]&key=YOURKEY&domain=example.com" -X POST https://api.namebio.com/checkdomain/
{
"status": "success",
"status_message": "",
"credits_remaining": 1234,
"domain": "example.com",
"sales": [
[
"500000",
"2019-01-01",
"Private"
],
[
"25000",
"2018-01-01",
"Auction"
]
]
}
This endpoint returns all of the sales for the specified date. You can choose whether or not to include sales below $100, which affects the credits used. This is ideal for general research.
URL: https://api.namebio.com/dailysales/
COST: 250 Credits (Sales $100+), 500 Credits (All Sales)
| Argument | Required | Notes |
|---|---|---|
| date (string) | Y | YYYY-MM-DD format. Must be within the past year. Should never be today's date, most recent is always yesterday. |
| include_sub_hundred (string) | N | Default: "false". Values can be "true" or "false". |
While the daily update starts at midnight Eastern, there is a period of a few hours after that where data is in flux. That includes currency conversion, keyword parsing, categorization, manually removing questionable sales, and more. You should wait until at least 3AM Eastern to grab the latest daily sales.
curl -d "[email protected]&key=YOURKEY&date=2019-01-01&include_sub_hundred=true" -X POST https://api.namebio.com/dailysales/
{
"status": "success",
"status_message": "",
"credits_remaining": 1234,
"sales": [
[
"example.com"
"500000",
"2019-01-01",
"Private"
],
[
"aterribledomain.com"
"85",
"2019-01-01",
"Auction"
]
]
}
This endpoint returns the top X sales since a specified date. For example you can pass the date of one week ago to get the Top 10 Sales of the Week, or further limit it to "newgltds" to get the Top 10 New gTLD Sales of the Week. This is ideal for a blog sidebar or a "For Sale" lander.
URL: https://api.namebio.com/topsales/
COST: 1 Credit / Sale Record
| Argument | Required | Notes |
|---|---|---|
| date (string) | N | Default: ALL_TIME. YYYY-MM-DD format. |
| num_sales (int) | N | Default: 10. Max is 100. |
| extension (string) | N | Default: "any". Values can be "any", "newgltds", "cctlds" or any specific extension like ".com". Separate multiple extensions with pipes, for example ".com|.net|.org". |
curl -d "[email protected]&key=YOURKEY&date=2019-01-01&num_sales=100&extension=.com" -X POST https://api.namebio.com/topsales/
{
"status": "success",
"status_message": "",
"credits_remaining": 1234,
"sales": [
[
"example.com"
"500000",
"2019-05-31",
"Private"
],
[
"domain.com"
"450000",
"2019-04-30",
"Auction"
]
]
}
This endpoint returns sales stats for a given keyword including Total Sales, Dollar Volume, Average Price, Median Price, Low Price, and High Price. Optionally it can also include monthly trend data for average price and sales volume going back to 2007. The stats can include all extensions, a specified one, or one of our pre-sets (All New gTLDs or All ccTLDs). You can also restrict the underlying sales to be more recent than a certain date. This is ideal for doing keyword research.
URL: https://api.namebio.com/keywordstats/
COST: 10 Credits / Placement (without trend data), 20 Credits / Placement (with trend data)
| Argument | Required | Notes |
|---|---|---|
| keyword (string) | Y | This is the keyword you want to check. |
| placement (string) | N | Default: "anywhere". Values can be "anywhere", "start", "middle", "end", "exact", "prefix", or "suffix". Separate multiple placements with pipes, for example "start|prefix". |
| extension (string) | N | Default: "any". Values can be "any", "newgltds", "cctlds" or any specific extension like ".com". Separate multiple extensions with pipes, for example ".com|.net|.org". |
| date (string) | N | Default: ALL_TIME. YYYY-MM-DD format. Sales used to calculate the stats will be restricted to this date or more recent. |
| trends (string) | N | Default: "false". Values can be "true" or "false". Whether or not to include trend data for monthly average price and monthly sales volume. |
curl -d "[email protected]&key=YOURKEY&keyword=test&placement=start|prefix|exact&extension=.com&trends=true" -X POST https://api.namebio.com/keywordstats/
{
"status": "success",
"status_message": "",
"credits_remaining": 1234,
"stats": {
"start": {
"total_sales": "212",
"dollar_volume": "542833",
"average_price": "2561",
"median_price": "580",
"low_price": "100",
"high_price": "176505",
"trends_avg": [
{
"202012": 3957
},
{
"202011": 336.67
},
{
"202010": 103
},
[...]
],
"trends_vol": [
{
"202012": 1
},
{
"202011": 3
},
{
"202010": 2
},
[...]
]
},
"prefix":{
"total_sales": "97",
"dollar_volume": "158459",
"average_price": "1634",
"median_price": "620",
"low_price": "109",
"high_price": "14750",
"trends_avg": [
{
"202012": 3957
},
{
"202011": 320
},
{
"202009": 410.5
},
[...]
],
"trends_vol": [
{
"202012": 1
},
{
"202011": 1
},
{
"202009": 2
},
[...]
]
},
"exact":{
"total_sales": "0",
"dollar_volume": null,
"average_price": null,
"median_price": null,
"low_price": null,
"high_price": null,
"trends_avg": [
],
"trends_vol": [
]
}
}
}
The following endpoints are available to everyone at no cost and require no authentication. You may incorporate this data into other products and services, but attribution is required.
Returns aggregated retail sales statistics for a given keyword, broken down by keyword placement. Data covers retail sales of $100 or more. Stats are precomputed hourly.
You can download the complete Retail Keyword Stats dataset as a CSV file, or use our API endpoint to look up stats for a specific keyword.
This is not only useful for identifying valuable keywords, but also for determining their ideal position in a domain.
CSV format: one row per keyword with all placements and stats as columns (e.g. exact_sale_count, start_price_avg)
API Endpoint: https://api.namebio.com/retailstats
METHOD: POST
COST: Free (No Authentication Required)
RATE LIMIT: 4 requests per minute
| Parameter | Required | Notes |
|---|---|---|
| keyword (string) | Y | The keyword to look up (e.g. cloud). Case-insensitive. |
Returns a JSON object with the keyword and a data object whose keys are placement codes. Each placement contains five stats fields. All four placements are always present — if the keyword is not found, or has no sales for a given placement, all fields for that placement will be zero.
| Placement | Description |
|---|---|
| exact | Keyword is the entire SLD — single-word domains only (e.g. cloud.com) |
| start | Keyword is the first word in a multi-word domain (e.g. cloudhosting.com) |
| end | Keyword is the last word in a multi-word domain (e.g. mycloud.com) |
| middle | Keyword appears in neither the first nor last position (e.g. mycloudhosting.com) |
| Field | Type | Description |
|---|---|---|
| sale_count | integer | Number of retail sales recorded |
| price_sum | integer | Total USD volume of all sales |
| price_avg | decimal | Average sale price (USD) |
| price_max | integer | Highest recorded sale price (USD) |
| price_stddev | decimal | Standard deviation of sale prices |
curl -X POST https://api.namebio.com/retailstats \
-d "keyword=cloud"
{
"keyword": "cloud",
"data": {
"exact": { "sale_count": 50, "price_sum": 500000, "price_avg": 10000.00, "price_max": 100000, "price_stddev": 15000.00 },
"start": { "sale_count": 2000, "price_sum": 4000000, "price_avg": 2000.00, "price_max": 50000, "price_stddev": 3000.00 },
"end": { "sale_count": 1500, "price_sum": 3000000, "price_avg": 2000.00, "price_max": 40000, "price_stddev": 2500.00 },
"middle": { "sale_count": 500, "price_sum": 750000, "price_avg": 1500.00, "price_max": 20000, "price_stddev": 1000.00 }
}
}
Returns aggregated sales statistics for a given TLD (extension), broken down by time period. Stats are precomputed hourly at 30 minutes after the hour.
You can download the complete TLD Stats report as a CSV file, or use our API endpoint to check the stats for specific extensions without processing the entire file.
CSV format: one row per TLD with all periods and stats as columns (e.g. all_sale_count, 1y_price_avg)
API Endpoint: https://api.namebio.com/tldstats
METHOD: POST
COST: Free (No Authentication Required)
RATE LIMIT: 4 requests per minute
| Parameter | Required | Notes |
|---|---|---|
| extension (string) | Y | The TLD to look up (e.g. .com). |
Returns a JSON object with the TLD and a data object whose keys are time period codes. Each period contains five stats fields. If the TLD has no sales history, all fields are returned as zero.
| Period | Description |
|---|---|
| all | All-time, all sales (retail + wholesale) |
| all_retail | All-time, retail sales only |
| all_wholesale | All-time, wholesale sales only |
| 5y | Past 5 years |
| 3y | Past 3 years |
| 2y | Past 2 years |
| 1y | Past 1 year |
| 3m | Past 3 months |
| 1m | Past month |
| 1w | Past week |
| Field | Type | Description |
|---|---|---|
| sale_count | integer | Number of sales recorded |
| price_sum | integer | Total USD volume of all sales |
| price_avg | decimal | Average sale price (USD) |
| price_max | integer | Highest recorded sale price (USD) |
| price_stddev | decimal | Standard deviation of sale prices |
curl -X POST https://api.namebio.com/tldstats \
-d "extension=.com"
{
"extension": ".com",
"data": {
"all": { "sale_count": 300000, "price_sum": 987654321, "price_avg": 3292.18, "price_max": 30000000, "price_stddev": 12345.67 },
"all_retail": { "sale_count": 200000, "price_sum": 777654321, "price_avg": 3888.27, "price_max": 30000000, "price_stddev": 15000.00 },
"all_wholesale": { "sale_count": 100000, "price_sum": 210000000, "price_avg": 2100.00, "price_max": 5000000, "price_stddev": 5000.00 },
"5y": { "sale_count": 200000, "price_sum": 650000000, "price_avg": 3250.00, "price_max": 20000000, "price_stddev": 11000.00 },
"3y": { "sale_count": 150000, "price_sum": 500000000, "price_avg": 3333.33, "price_max": 15000000, "price_stddev": 10000.00 },
"2y": { "sale_count": 100000, "price_sum": 333000000, "price_avg": 3330.00, "price_max": 10000000, "price_stddev": 9000.00 },
"1y": { "sale_count": 50000, "price_sum": 165000000, "price_avg": 3300.00, "price_max": 8000000, "price_stddev": 8000.00 },
"3m": { "sale_count": 12000, "price_sum": 40000000, "price_avg": 3333.33, "price_max": 5000000, "price_stddev": 7000.00 },
"1m": { "sale_count": 4000, "price_sum": 12000000, "price_avg": 3000.00, "price_max": 3000000, "price_stddev": 6000.00 },
"1w": { "sale_count": 1000, "price_sum": 3000000, "price_avg": 3000.00, "price_max": 1000000, "price_stddev": 5000.00 }
}
}
Every day at 2:00 PM Eastern, Verisign releases pending delete .com and .net domains in a specific order. This endpoint provides the drop order for domains expiring over the next six days.
This allows drop catching services and domain investors to optimize their chasing strategies by focusing resources on one domain at a time, and even precisely estimate the release time.
You can download the complete drop order report as a text file, or use our API endpoint to check the drop position for specific domains without processing the entire file.
Text file format: DOMAIN:EXPIRES_DATE (ordered by release sequence)
API Endpoint: https://api.namebio.com/verisign
METHOD: POST
COST: Free (No Authentication Required)
RATE LIMIT: 5 requests of up to 100 domains each per 24 hours per IP address
Send a POST request with a JSON array of domain names in the request body. The Content-Type header must be set to "application/json".
| Property | Value |
|---|---|
| Request Body | JSON array of domain names (maximum 100 domains) |
| Content-Type | application/json |
Returns a JSON array containing matching domains with their expiration dates and drop order position. Domains not found in the database are omitted from the response.
| Field | Type | Description |
|---|---|---|
| domain | string | The domain name (lowercase) |
| expires_on | datetime | Expiration date and time (YYYY-MM-DD HH:MM:SS format) |
| order | integer | Sequential position in the drop order for that expiration date |
If you need to check more than 500 domains, please download the complete drop order file instead of making multiple API requests from different IPs.
curl -X POST https://api.namebio.com/verisign \
-H "Content-Type: application/json" \
-d '[
"yqos.com",
"rmoj.com",
"notpendingdelete.com"
]'
[
{
"domain": "rmoj.com",
"expires_on": "2026-06-17 19:00:00",
"order": 42427
},
{
"domain": "yqos.com",
"expires_on": "2026-06-17 19:00:00",
"order": 50578
}
]
If an error is encountered, the "status" field in the response will be "error" instead of the usual "success". The "status_message" field will contain any relevant information related to the error, such as you being rate limited, out of credits, missing a required field, etc.
{
"status": "error",
"status_message": "Insufficient API credits remaining.",
"credits_remaining": 0,
}