Domain sales history API
Read the domain sales market as JSON: totals and medians over 7 days, 30 days and 12 months, series by day, week or month, and the sales of one word. Every answer is a figure across many sales; no call lists a single sale.
- Without a key: the market's totals and medians, the series, one word's sales a day, and the summary of the similar sales behind a name.
- With a key: more than one word a day, and whether this exact name sold before.
- Free calls need no key: 60 calls an hour and 100 a day from one address.
Try it
curl -X GET "https://api.unique.domains/v1/market/sales"
const response = await fetch("https://api.unique.domains/v1/market/sales", {
method: "GET",
});
const data = await response.json();
console.log(data);import requests
response = requests.get(
"https://api.unique.domains/v1/market/sales",
)
print(response.json())req, err := http.NewRequest("GET", "https://api.unique.domains/v1/market/sales", nil)
if err != nil {
panic(err)
}
res, err := http.DefaultClient.Do(req)$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://api.unique.domains/v1/market/sales",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($ch);uri = URI("https://api.unique.domains/v1/market/sales")
request = Net::HTTP::Get.new(uri)
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }{
"data": {
"freshness": {
"today": "2026-11-05",
"yesterday": "2026-11-04",
"rollupAt": "2026-11-05T02:30:00.000Z"
},
"pulse": {
"windows": [
{
"id": "7d",
"count": 2890,
"prevCount": 2710,
"medianUsd": 1100,
"prevMedianUsd": 1050
}
],
"priceBandMix30d": [
{
"band": "50_999",
"count": 6120
}
],
"priceBandMix12m": [
{
"band": "50_999",
"count": 71200
}
]
},
"soldBefore": {
"size": 1840
}
},
"meta": {
"asOf": "2026-11-05T08:00:00Z",
"cursor": null,
"limit": null
},
"links": {
"self": "https://api.unique.domains/v1/market/sales",
"next": null,
"register": null,
"product": null,
"dataset": null
}
}Endpoints
/names/{name}/compsThe similar-sales aggregate of one name and how many endings its word sold on.FreeGET/market/salesThe domain sales pulse as headline aggregates: windows, price bands and the sold-before count.FreeGET/market/sales/seriesOne sales series by day, week or month, oldest first.FreeGET/market/sales/words/{word}One word's sales market over 12 months: count, median, endings sold on and the latest sale's month.FreeWays to call it
RapidAPIA paid subscription to this listing opens its paid endpoints.Domain Sales History API on RapidAPI
Domain sales history API questions
Contact meDoes it list individual sales?
No. Every answer is a figure across many sales (a count, a median, a mean, a price band) or a list of endings, never a sale, a sold name or where it sold.
Why does a second word answer 429?
Without a key, GET /market/sales/words/{word} reads one word a day per address. The same word again is answered; another word answers 429 until the next UTC midnight.
What does it answer before the first update?
The totals come from the nightly sales update. Before the first one, GET /market/sales answers 503 with the code not_ready.