Hosting and Nameserver History
datapulse_dns_dphistory returns a domain’s hosting and nameserver history: the dated
versions of its web, mail and nameserver providers as observed in the DataPulse names
corpus, served by the BON Search API.
What the data is
For every listed PSL+1 name the corpus keeps one record: the providers of four services (see Service Types). The history is the change log of that record, not a series of snapshots:
- The log begins on 2023-04-07, the initial snapshot. Every domain listed then has
an
aon that day. Nothing earlier exists for any domain. - A version is written only when the record changes. A domain whose setup never changed has a single version, however popular it is (microsoft.com has one; wikipedia.org has two).
- Changes land mostly on the first of a month from 2024 on. A first listing (
a) can fall on any day. Expect month granularity when dating a change. - It holds no CNAME, A or AAAA records. Web hosting appears only as the ASN of the address the site resolves to, so CDN use is visible as an ASN (13335 for Cloudflare), not as a CNAME chain.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | The name to ask the corpus about (IDN accepted). Its spelling is canonicalized, but no labels are removed: www.github.com and github.com are separate lookups |
Input handling
- Canonicalized, but no hostname reduction. This is a DNS tool: the name’s
spelling is canonicalized (surrounding whitespace and every trailing dot removed,
case folded, Unicode label separators read as dots, IDN folded to its A-label form)
and the hostname level is kept.
www.github.comandgithub.comare different lookups and answer differently. Only the RDAP tools (datapulse_live_rdap,datapulse_live_rdap_bulk,datapulse_dns_rdap_history) reduce a hostname to its registrable domain, because RDAP only knows registered names. When the IDN conversion or the trailing dot changed your input, the response carriessubmitted_domainwith what you sent. The rules for every tool are indatapulse_help(topic="normalization"). - Which names are listed. Registrable domains, and names under registry-run
private suffixes (
microsoft.jp.net,uk.com), are corpus entries because each is a delegated zone. Hostnames under platform suffixes (octocat.github.io,foo.blogspot.com,app.herokuapp.com) are records inside the platform’s zone, not delegations, so the corpus answersfound: falsefor them even when the site is live. Look up the platform’s own name (github.io) for the infrastructure behind them. - A public suffix is looked up as it stands.
co.uk,jp.netandgithub.iohave their own records (they are delegated names with nameservers and, often, a website). - A single label is rejected (
com,localhost) with the validation library’sinvalid domainerror. So are IP literals, URLs and labels over 63 characters. - A name the corpus never listed is answered, not errored: the API’s own envelope
comes back with
found: falseand an emptyVersionslist, plus a hint as a second content item. Treat that as the answer “never listed”, not as an outage. An outage is an error carrying the BON Search API’s HTTP status and its body verbatim.
Response Format
{
"query": "github.com",
"datetime": "2026-09-16T22:11:02.84Z",
"server_id": "bonsearch-1",
"results": {
"Name": "github.com",
"Versions": [
{"YMD": 20230407, "Type": "a", "Body": {"name": "github.com", "services": [...]}},
{"YMD": 20260401, "Type": "c", "Body": {"name": "github.com", "services": [...]}}
]
},
"complete": true,
"found": true
}
| Field | Meaning |
|---|---|
query | The normalized name that was looked up |
submitted_domain | Your input, present only when normalization or reduction changed it |
datetime, server_id | Describe this API response, not the domain |
results.Name | The corpus entry’s name |
results.Versions | The timeline, oldest first |
complete | false when the server truncated the timeline (not observed in practice) |
found | Always true in a successful response; a never-listed domain is an error instead |
Version Types
Type | Meaning |
|---|---|
a | First listed: the domain began passing the active-and-functioning check. Also the entry, dated 20230407, for every domain in the initial snapshot |
c | The record changed from the previous version. The Body is the full record as of that day, not a diff: compare consecutive versions to see what changed |
d | De-listed: the domain stopped passing the active-and-functioning check and left the corpus. services is empty. A later a is a re-listing. The version before a d may still show services: the check failed on something the record does not show, most often the delegation (see Known Noise) |
These are DataPulse listing events, not registry events. a is not a registration
date; it is when the name first passed the corpus quality gate, which may be long after
registration. d is not a registry deletion; a de-listed domain is usually still
registered and simply stopped resolving or functioning. For registry-side events use
datapulse_dns_rdap_history; for how listing is decided see
datapulse_help(topic="methodology").
Body
Every version’s Body has the same shape, whatever its Type:
{
"name": "kevbo.org",
"services": [
{"type": "AW", "providers": [{"asn": 6181}]},
{"type": "MX", "providers": [{"name": ["postoffice-ipv4.kevbo.org"], "asn": 6181}]},
{"type": "OperationalNS", "providers": [{"name": ["aron.ns.cloudflare.com", "quinton.ns.cloudflare.com"], "asn": 13335}]},
{"type": "ReportedNS", "providers": [{"name": ["aron.ns.cloudflare.com", "quinton.ns.cloudflare.com"], "asn": 13335}]}
]
}
servicesis always an array. It is empty for everyd, and for acwhose services all vanished (a de-listing in progress; thedfollows on the next cycle). The API itself emitsnullor omitsservicesin those cases; the tool normalizes them.providers[].namelists the hostnames grouped under one provider. It is absent forAW, which is an address, not a hostname.providers[].asnis the provider’s autonomous system number as a flat integer, absent when unknown. ASN operator names and countries are not included; the number is the fact.
Service Types
| Type | Description |
|---|---|
AW | Web hosting: the ASN of the address the www hostname resolves to, or the apex when there is no www |
MX | Mail exchangers |
OperationalNS | Nameservers that actually answer authoritatively for the name |
ReportedNS | Nameservers delegated by the parent zone (the NS set held at the registry) |
OperationalNS and ReportedNS normally agree. When they differ, the delegation and
the zone’s own NS set have diverged: a nameserver migration in progress, or a stale
delegation. That disagreement is itself a useful signal and is worth reporting.
Example: kevbo.org
{
"query": "kevbo.org",
"datetime": "2026-09-17T15:47:57.8Z",
"server_id": "bonsearch-1",
"results": {
"Name": "kevbo.org",
"Versions": [
{"YMD": 20230407, "Type": "a", "Body": {"name": "kevbo.org", "services": [
{"type": "AW", "providers": [{"asn": 10796}]},
{"type": "MX", "providers": [{"name": ["mail-ipv4.kwhite.net"], "asn": 63949}]},
{"type": "OperationalNS", "providers": [{"name": ["ns-204-a.gandi.net", "ns-227-c.gandi.net", "ns-228-b.gandi.net"], "asn": 209453}]},
{"type": "ReportedNS", "providers": [{"name": ["ns-204-a.gandi.net", "ns-227-c.gandi.net", "ns-228-b.gandi.net"], "asn": 209453}]}]}},
{"YMD": 20240405, "Type": "c", "Body": {"name": "kevbo.org", "services": [
{"type": "AW", "providers": [{"asn": 10796}]},
{"type": "MX", "providers": [{"name": ["mail-ipv4.kwhite.net"], "asn": 63949}]},
{"type": "OperationalNS", "providers": [{"name": ["aron.ns.cloudflare.com", "quinton.ns.cloudflare.com"], "asn": 13335}]},
{"type": "ReportedNS", "providers": [{"name": ["aron.ns.cloudflare.com", "quinton.ns.cloudflare.com"], "asn": 13335}]}]}},
{"YMD": 20241001, "Type": "c", "Body": {"name": "kevbo.org", "services": [
{"type": "AW", "providers": [{"asn": 6181}]},
{"type": "MX", "providers": [{"name": ["mail-ipv4.kwhite.net"], "asn": 63949}]},
{"type": "OperationalNS", "providers": [{"name": ["aron.ns.cloudflare.com", "quinton.ns.cloudflare.com"], "asn": 13335}]},
{"type": "ReportedNS", "providers": [{"name": ["aron.ns.cloudflare.com", "quinton.ns.cloudflare.com"], "asn": 13335}]}]}},
{"YMD": 20251001, "Type": "c", "Body": {"name": "kevbo.org", "services": [
{"type": "AW", "providers": [{"asn": 6181}]},
{"type": "MX", "providers": [{"name": ["postoffice-ipv4.kevbo.org"], "asn": 6181}]},
{"type": "OperationalNS", "providers": [{"name": ["aron.ns.cloudflare.com", "quinton.ns.cloudflare.com"], "asn": 13335}]},
{"type": "ReportedNS", "providers": [{"name": ["aron.ns.cloudflare.com", "quinton.ns.cloudflare.com"], "asn": 13335}]}]}}
]
},
"complete": true,
"found": true
}
Read it as: listed in the initial snapshot on Gandi nameservers; nameservers moved to
Cloudflare by 2024-04-05; web hosting moved from AS10796 to AS6181 by 2024-10-01; mail
moved onto the same AS6181 host by 2025-10-01. Each c carries the whole record, so
the change is whatever differs from the version before it.
Example: a de-listing (fyrios.com)
"Versions": [
{"YMD": 20260104, "Type": "a", "Body": {"name": "fyrios.com", "services": [
{"type": "AW", "providers": [{"asn": 13335}]},
{"type": "OperationalNS", "providers": [{"name": ["ns-cloud-d1.googledomains.com", "ns-cloud-d2.googledomains.com", "ns-cloud-d3.googledomains.com", "ns-cloud-d4.googledomains.com"], "asn": 15169}]},
{"type": "ReportedNS", "providers": [{"name": ["ns-cloud-d1.googledomains.com", "ns-cloud-d2.googledomains.com", "ns-cloud-d3.googledomains.com", "ns-cloud-d4.googledomains.com"], "asn": 15169}]}]}},
{"YMD": 20260201, "Type": "c", "Body": {"name": "fyrios.com", "services": []}},
{"YMD": 20260301, "Type": "d", "Body": {"name": "fyrios.com", "services": []}}
]
Listed on 2026-01-04 with no mail; by 2026-02-01 nothing answered any more (the c
with empty services), and on 2026-03-01 it left the corpus. Removal is confirmed on the
cycle after the services vanish, so a domain can sit listed with an empty record for
about a month. datapulse_help(topic="why_missing") walks through pairing this arc
with datapulse_dns_rdap_history to find the registry-side reason (a hold, in this case).
Reading a Timeline: Known Noise
Not every c is a change the operator made. Check these before reporting one.
- Anycast ASN churn. The same nameserver or MX hostnames are attributed to a
different
asnfrom one month to the next, because the address measured sits in an anycast or multi-homed network.co.uk’s nic.uk nameservers wander among five ASNs, producing about twentycversions with no nameserver change; bbc.co.uk’s messagelabs MX hosts flip between AS16509 and AS396982. Compare hostnames first. An ASN-only difference with the same hostnames is a move only if it persists and the hostnames eventually change too. - One host, two ASNs. The same MX hostname can appear twice in one version under different ASNs (bücher.com) when its addresses were measured in two networks. It is one mail provider, not two.
- The 2025-09-01 collection gap. Domains on Google Workspace mail (github.com,
gfycat.com, hotbit.io and others) lost their
alt1–alt4aspmx.l.google.comhosts on 20250901 and regained them on 20251001. That is two spuriouscversions per affected domain. Disregard acon either date whose only change is the set of Google MX hosts. - A
cwith empty services is a de-listing in progress, not a configuration change (see the fyrios.com example). - Listing flap. A domain can alternate
d/amonth after month with the same providers throughout: microsoft.jp.net was de-listed and re-listed four times between 2025-12 and 2026-08, and eachdfollowed a version that still hadAWandOperationalNS. The check failed on something the record does not show; in two of the four cycles the version before thedhad also lostReportedNS, in the other two it had not. Read such a run as one unstable delegation, not as repeated outages and migrations, and do not date anything from the individualaanddentries.
Use Cases
- Infrastructure migration tracking. When did the site or the nameservers move,
and from which network to which. Pair with
datapulse_dns_rdap_historyfor the registrar-side dates of the same period. - Email provider history. Which MX hosts and networks handled mail, and when they changed; the lead indicator for a tenant move (for example onto Microsoft 365 or Google Workspace).
- Corroborating a suspension or lapse. The
a→c(empty) →darc dates when a name stopped functioning;datapulse_help(topic="why_missing")covers the procedure. - Provenance of infrastructure similarity. After
datapulse_dns_dptechsimmatches, the timelines show whether the shared setup is long-standing or recent.
Data Coverage
- Every corpus entry since 2023-04-07: registrable domains under ICANN suffixes and
under registry-run private suffixes, plus delegated suffixes themselves; not
hostnames under platform suffixes. See
datapulse_help(topic="methodology"). - One version per change, mostly dated the first of a month from 2024 on; a first listing can be any day. There are no daily snapshots and no pre-2023 data.
- Web, mail and nameserver providers only, as hostnames and ASNs. No CNAME, A, AAAA, TXT or registrar data; no ASN operator names.
Generated from the live server (DataPulse MCP 1.0.0) on October 1, 2026. Your AI assistant reads this page by calling datapulse_help(topic="history").