Free data API
Everything this site knows, as static JSON, with no key, no account and no rate limit. CORS is open, so you can fetch it straight from a browser. Updated with every build — last 2026-10-09 06:34 UTC.
The other comparison sites charge for this: one gates bulk downloads behind a subscription, the other sells its feed for $300 a year. These files are a by-product of building the site, so there is nothing to charge for. Attribution is appreciated and not required.
REST endpoints
Named fields, one resource per URL, under /api/v1/. Every one of them is a file written
at build time — this site is static, served from a CDN with no application behind it, so a URL either
exists as a file or it 404s. Two consequences worth knowing before you write a client:
- The path ends in
.json. A directory here would need anindex.htmlto be served at all, and an extensionless file is served with a guessed content type; the filename in the URL is the honest version and it comes back asapplication/json. - There are no query parameters. Nothing on this host reads a query string, so the cuts you would ask
for with
?limit=and?since=are separate files instead:/api/v1/cheapest/50.json, and one file per snapshot date under/api/v1/changes/. The indexes at/api/v1/cheapest.jsonand/api/v1/changes.jsonlist what exists.
| URL | What it holds | Size |
|---|---|---|
GET /api/v1/tlds.json | Every extension we track, with its registry, its category, whether we have a price and a link to its detail file. | ~585 KB |
GET /api/v1/tld/{ext}.json | One extension: cheapest registration, renewal and transfer with the code that reaches each, three-, five- and ten-year hold costs, and every registrar we price it at. 2,491 files, one per priced extension. | ~18.8 MB |
GET /api/v1/registrars.json | Every registrar carried, how many extensions each prices and how many it is actually cheapest on. | ~64 KB |
GET /api/v1/cheapest.json | The leaderboard by five-year cost: 2,480 extensions, which is every priced one that also has a renewal price to project forward. Pre-cut to the top 50, 100, 500 at /api/v1/cheapest/<n>.json. | ~731 KB |
GET /api/v1/changes/{date}.json | Every price that moved between that dated snapshot and the latest build, as a diff. 47 dates available; the index is at /api/v1/changes.json. | ~14.1 MB |
Prices are the ones the rest of the site ranks on: the lowest a reader can actually pay, with the
coupon applied where a coupon wins, and the code that gets you there in the same object. A discounted
figure never travels without it. list_price beside it is the same registrar’s price with no
code applied.
Request
curl -s https://tld-price-check.pages.dev/api/v1/tld/com.json
Response
{
"endpoint": "/api/v1/tld/com.json",
"generated": "2026-10-09 06:34 UTC",
"currency": "USD",
"docs": "https://tld-price-check.pages.dev/api.html#rest",
"tld": "com",
"registry": "VeriSign, Inc.",
"sponsor": "VeriSign Global Registry Services",
"category": "gTLD",
"type": "gTLD",
"new_gtld": false,
"dnssec": "yes",
"restrictions": "none \u2014 open registration",
"popularity": {
"rank": 1,
"label": "Highest",
"percentile": 100
},
"status": {
"brand_registry": false,
"closed_to_public": false,
"registry_agreement_ended": false,
"renewal_jump_pct": 898.0
},
"cheapest": {
"registration": {
"price": 1.0,
"registrar": "IONOS",
"code": null,
"list_price": 20.0,
"operation": "registration"
},
"renewal": {
"price": 9.98,
"registrar": "cloudean",
"code": null,
"list_price": 9.98,
"operation": "renewal"
},
"transfer": {
"price": 0.0,
"registrar": "OnlyDomains",
"code": null,
"list_price": 0.0,
"operation": "transfer"
}
},
"hold_cost": {
"three_year": 15.12,
"five_year": 35.48,
"ten_year": 86.38,
"five_year_split_saving": 8.14
},
"registrar_count": 181,
"page": "https://tld-price-check.pages.dev/tld/com/",
"offers": [
{
"registrar": "IONOS",
"registration": 1.0,
"renewal": 20.0,
"transfer": 9.5,
"list_registration": 20.0,
"list_renewal": 20.0,
"list_transfer": 9.5,
"reseller_only": false
}
]
}Or pull one figure straight out:
curl -s https://tld-price-check.pages.dev/api/v1/tld/com.json | jq '.cheapest.registration'
Start at /api/v1/index.json, which lists every endpoint
above with its current size.
Data files
The files the site itself loads, kept as they are and still supported — the board fetches
home.json on every visit. Positional rows, sized for a phone rather than for reading.
| URL | What it holds | Size |
|---|---|---|
/data/home.json |
Every extension as a positional row: cheapest register, renew and transfer with
the registrar that charges it, five-year cost, split-registrar saving, bait score, popularity and
flags. Registrars are indices into the registrars array. |
~165 KB |
/data/tlds.json |
The same set keyed by name, with the exchange rate used and its date, and the counts behind every figure on the site. | ~1 MB |
/data/history/YYYY-MM-DD.json |
One dated snapshot per build of the cheapest register, renew and transfer per extension. Price history, from the day this started. | ~120 KB each |
/data/i18n.json |
Interface strings in 17 languages. | ~22 KB |
Row format
Rows in home.json are positional rather than keyed, which is what keeps the file small
enough to load on a phone. The schema array in the file names the fields in order:
["tld", "cat", "register", "register_by", "renew", "renew_by", "transfer", "transfer_by", "five_year", "split_saving", "bait", "pop_pct", "pop_label", "flags", "registrar_count"] ["com", 0, 1.0, 0, 9.98, 0, 0.0, 0, 35.48, 8.14, 100, 100, "Highest", 0, 181]
register_by and its siblings index into registrars, currently
189 entries. flags is a bitfield: 1 closed brand registry, 2 registry agreement
ended, 4 renewal jumps above the first year. Prices are USD; rates in the same file converts
to 9 currencies.
Fetching it
curl -s https://tld-price-check.pages.dev/data/home.json | jq '
.rows
| map(select(.[8] != null))
| sort_by(.[8])
| .[:5]
| map({tld: .[0], five_year: .[8]})'That prints the five cheapest extensions to own for five years.
Terms
| Authentication | None. No key, no account, no sign-up. |
| Rate limit | None is enforced, and none can be: these are static files on a CDN and there is
no server here counting requests. That is not an invitation — every response carries
Cache-Control: max-age=600, the data changes once a day, and refetching it faster than
that gets you the same bytes. Cache what you fetch. |
| CORS | Access-Control-Allow-Origin: *, so a browser can fetch it directly. |
| Licence | Not yet set. No licence has been chosen for this data, so none is claimed here. Until the site owner picks one, treat it as unlicensed and ask if you need certainty. |
| Attribution | Appreciated, not required. A link back is the usual form. |
Prices are reproduced as published. Nothing here is warranted accurate; confirm at the registrar before spending money.
The build that produces these files is a single Python script in a public repository. If you would rather run it yourself than depend on this site staying up, you can.
On this page
The free domain price API, answered
01Is the domain price API free?
Yes. It is static JSON on a CDN — no key, no account, no sign-up. The other comparison sites gate the same thing behind a subscription.
02Are there rate limits?
No enforced limit. The files are plain cached objects, so ordinary use costs nothing to serve; please cache rather than refetching the same file in a loop.
03How current is the data?
It is written on the same daily build as the site, so an endpoint never disagrees with the page showing the same extension. Every response carries the timestamp it was generated at.
04Can I use it commercially?
Yes, with attribution. The prices are the registrars' own published figures; the collection and the five-year maths are this site's.
05What does an endpoint return?
One resource per URL under /api/v1/ with named fields — register, renew and transfer prices, which registrar each comes from, the five-year total, and the coupon where one applies.
06Is there a bulk download?
Yes. The full extension list is available as a single CSV and as JSON, so you do not have to walk the per-extension files to get every price.
07Do I need to handle currency conversion?
No. Everything is US dollars excluding VAT, converted at the rate named in the response, so two endpoints fetched on the same day are always comparable.