This site is not affiliated with or endorsed by Cloudflare, Inc. It simply showcases experiments built using Cloudflare services.
Cloudflare Experiments

DNS Propagation Checker

Compare DNS answers from Cloudflare, Google, and Quad9 resolvers in parallel via DoH

Query DNS-over-HTTPS resolvers (Cloudflare 1.1.1.1, Google 8.8.8.8, Quad9) in parallel for a domain and record type. Reports whether answers agree, each resolver's values, and response time.

Features

  • GET /check - parallel DoH queries across three public resolvers
  • Supports A, AAAA, CNAME, MX, TXT, NS record types
  • Agreement summary plus per-resolver values and latency

API Reference

GET /check

domain string (required) - Hostname to query (no scheme).

type string (required) - Record type: A, AAAA, CNAME, MX, TXT, or NS.

Example Request

curl "https://your-worker.workers.dev/check?domain=example.com&type=A"

Success Response

{
  "domain": "example.com",
  "type": "A",
  "agreement": true,
  "resolvers": [
    { "name": "Cloudflare", "values": ["93.184.216.34"], "responseTimeMs": 42, "error": null }
  ]
}

Error Codes

  • 400 - INVALID_DOMAIN, INVALID_TYPE
  • 502 - DNS_ERROR

Use Cases

  • Verify DNS changes have propagated globally after a cutover
  • Compare resolver behavior during TTL or nameserver migrations
  • Debug split-horizon or stale cache issues across providers

Limitations

  • Queries three public DoH endpoints only; not exhaustive global propagation
  • Single record type per request
  • Resolver errors return partial results rather than failing the whole request

Deployment

Configure bindings

See wrangler.json and the experiment README for required bindings.

Test your deployment

See the experiment README for curl examples.

Local Development

cd apps/experiments/dns-propagation-checker
npm install
npm run dev

Configuration

No bindings required beyond the Workers runtime.

Cloudflare Features Used

On this page