JSON API

Read-only and unauthenticated — no key, no signup. Rate limited to roughly 2 requests per second per IP, with a burst allowance, which is far above what any real integration needs. Every response carries the data dates so you can tell how fresh it is.

Responses are cached and served with ETag. Sending If-None-Match gets you a 304 and does not count meaningfully against you — please do that rather than re-downloading unchanged data. Exceeding the limit returns 429 with a Retry-After header; honour it and you will not be blocked. If you need the whole dataset regularly, the polite path is one paged sweep per day against /api/v1/tld?per=500 — that is three requests — rather than crawling 1,100 pages. Aggregates only: there is no endpoint that returns domain names, because CZDS terms prohibit redistributing zone data.

Licence: CC BY 4.0 — attribution required

Free to use, including commercially, with one condition: credit this site. Every response carries a ready-made line in meta.attribution, so the easiest thing to paste is also the correct thing.

"meta": {
  "license": "CC-BY-4.0",
  "license_url": "https://creativecommons.org/licenses/by/4.0/",
  "attribution": "Data: nTLDData (ntlddata.com), CC-BY-4.0"
}

Where the medium allows, link to the page or endpoint the figures came from — a reader who wants to check a number should be one click from it. Full terms, including what the licence does not cover, are on the licence page: the upstream sources keep their own terms, and this licence applies to the statistics derived here rather than to ICANN's or IANA's originals.

Not a licence condition but the thing we care about most: state which month you are quoting. Registrar figures are about three months in arrears while zone counts are from yesterday, and a chart that mixes them is wrong in a way no reader can see. Why there are two clocks.

Scope: the API returns everything by default

The site defaults to new gTLDs, because that is what it is for. The API does not — it returns every gTLD, new and legacy, and labels each row. A default that withheld a third of the namespace was a trap: /api/v1/tld?q=com used to return seven matches and not .com, which reads like an answer rather than a filter.

ValueReturnsTLDs
(none)Every gTLD — the default1,132
?scope=newDelegated from ICANN's 2012 round onward1,114
?scope=legacy.com, .net, .org and the other pre-2012 generics18
?scope=allExplicitly both; same as the default1,132

Every row carries is_new_gtld, so the two populations are separable without a second request. false means a legacy gTLD rather than "not a gTLD" — ccTLDs and the government strings are never returned, because no monthly reports exist for them. Aggregates that span TLDs — registrars, registries, backends — are recomputed per scope rather than filtered, so ?scope=legacy on /api/v1/registrar is a registrar's legacy book, not its whole book with rows removed. meta.scope always names what was applied.

Changed on 19 August 2026: the default was new gTLDs only. If you relied on that, add ?scope=new and nothing else changes.

Endpoints

EndpointDescription
GET /api/v1/overview Headline totals and the two data dates.
GET /api/v1/tld Every gTLD, new and legacy. Supports ?sort=, ?dir=, ?page=, ?per=, ?q=, ?scope=.
GET /api/v1/tld/{tld} One TLD with registry, backend and both domain figures.
GET /api/v1/tld/{tld}/history Daily domain counts. ?days= up to 3650.
GET /api/v1/tld/{tld}/registrars Registrar breakdown for a TLD, with the reporting month.
GET /api/v1/renewals Keep rate per TLD: the share of domains renewed rather than dropped.
GET /api/v1/registrar Registrar market share, latest reported month. ?group=1 combines families.
GET /api/v1/registrar/{slug} One registrar with its TLD portfolio and monthly series.
GET /api/v1/registry Registry operators and their portfolios.
GET /api/v1/backend Registry backends with TLD and domain counts. Attribution is inferred.
GET /api/v1/country Domains by registrar accreditation country — never registrant country.
GET /api/v1/country/{code} Registrars accredited in one country. ISO 3166-1 alpha-2.
GET /api/v1/dns Nameserver and parking provider share.
GET /api/v1/dns/{slug} One provider: its nameserver suffixes, hostnames and TLD spread.
GET /api/v1/dnssec Root signing and second-level signing rates.
GET /api/v1/parking Parking and monetisation platform share. A lower bound.
GET /api/v1/calendar Root-zone delegation events and the full delegation record.
GET /api/v1/upcoming Strings contracted or in sunrise but not yet delegated.
GET /api/v1/changes Detected registry and registrar identity changes.
GET /api/v1/status Pipeline freshness — the same data as /status.

Example

A legacy TLD, because it shows both clocks at once — and now shows them both populated. .com's zone was approved on 20 August 2026, so it carries a daily count from yesterday's zone and the figure Verisign filed with ICANN for April, 2.7 million apart. Neither is wrong; they are measuring different things on different days.

curl -s https://ntlddata.com/api/v1/tld/com | jq

{
  "data": {
    "tld": "com",
    "type": "generic",
    "is_new_gtld": false,
    "domains": 165566051,
    "stat_date": "2026-08-20",
    "reported_domains": 168322419,
    "reported_month": 202604,
    "registry": "VeriSign Global Registry Services",
    "backend": "Verisign",
    "root_signed": true
  },
  "meta": {
    "scope": "all",
    "zone_data_date": "2026-08-18",
    "registrar_month": 202604,
    "data_version": 12
  }
}

domains is strictly the zone-derived count and stat_date is the day it was taken; reported_domains is the registry's own figure for reported_month, about a quarter in arrears. They are never merged, because a caller could not then tell a count taken yesterday from one filed three months ago. Either can be null: a TLD with no CZDS approval has no daily count, and a TLD that has not filed has no reported one. Why there are two clocks.

Data currency. Domain counts on this page are from zone files dated and refresh daily. Registrar figures are from ICANN's monthly registry reports for May 2026, which ICANN publishes about three months in arrears; zone files contain no registrar information, so no fresher source exists. Full detail on methodology and live pipeline status.