TLD Price Check

Free data API

Extensions3,184
Priced2,491
Endpoints5
Rebuilt2026-10-09

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 an index.html to 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 as application/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.json and /api/v1/changes.json list what exists.
URLWhat it holdsSize
GET /api/v1/tlds.jsonEvery 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}.jsonOne 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.jsonEvery registrar carried, how many extensions each prices and how many it is actually cheapest on.~64 KB
GET /api/v1/cheapest.jsonThe 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}.jsonEvery 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.

URLWhat it holdsSize
/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

AuthenticationNone. 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.
CORSAccess-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.
AttributionAppreciated, 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

How these numbers are made →
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.