NewAPIVerve Academy: free courses and certifications anyone can verify.Explore the Academy →

DNS Propagation Checker Template

  • Next.js
  • TypeScript

Check a DNS record against public resolvers around the world and see where a change has landed.

A Next.js app that checks DNS propagation. Enter a domain and pick A, AAAA, CNAME, MX, NS or TXT, and see what ten public resolvers such as Google, Cloudflare and Quad9 return, side by side, with a score for how many agree. Use it after moving a site or changing mail records, or lift the route into your own status checks.

The dns propagation checker app running

What it does

Ten resolvers at once
Asks public resolvers in the US, Europe and worldwide, including Google, Cloudflare, Quad9 and OpenDNS.
Agreement score
A ring shows the share of resolvers returning the most common answer, so you can tell at a glance if a change is everywhere.
Colour-matched answers
Resolvers that return the same records share a colour, which makes stragglers and geo-routed answers easy to spot.
Six record types
Switch between A, AAAA, CNAME, MX, NS and TXT with one tap; the route rejects bad domains before spending credits.
Keeps your key private
The browser only talks to your own API route, which holds the key, caches for 2 minutes and rate-limits visitors.

How it works

The route: validate the domain and record type, answer from the cache, then call DNS Propagation.

app/api/check/route.ts
export async function GET(request: Request) {
  const params = new URL(request.url).searchParams;
  const domain = str(params.get('domain'), 253)
    .toLowerCase()
    .replace(/^https?:\/\//, '')
    .replace(/\/.*$/, '');
  const type = str(params.get('type'), 5).toUpperCase() || 'A';
  if (!domain) return fail('Enter a domain, like example.com');
  if (!DOMAIN.test(domain)) return fail('That doesn’t look like a domain name');
  if (!TYPES.includes(type)) return fail(`Record type must be one of ${TYPES.join(', ')}`);

  const key = `dns:${type}:${domain}`;
  const hit = fromCache(key, TTL_MS);
  if (hit) return Response.json(hit);

  const blocked = guard(request);
  if (blocked) return blocked;

  return respond(async () => {
    const data = await callApi('dnspropagation', { query: { domain, type } });
    toCache(key, data);
    return data;
  });
}

See the whole file on GitHub →

Deploy it

  1. Get a free API key

    The free plan includes 200 credits a month, no card needed. Create your key.

  2. Deploy it

    Click Deploy to Vercel. Vercel copies the repo to your GitHub account and asks for APIVERVE_API_KEY: paste your key there.

  3. Open your app

    Vercel builds it and gives you a live URL, usually in about a minute. Every push to the repo redeploys it.

Try the DNS Propagation Checker API — the call this template makes

Request
GETapi.apiverve.com/v1/dnspropagation?domain=google.com
Query parameters
Verification
Format

No key required to try it. Get a key to use it in your app.

Example
{
  "status": "ok",
  "error": null,
  "data": {
    "domain": "google.com",
    "recordType": "A",
    "propagationComplete": false,
    "serversChecked": 10,
    "serversResponded": 10,
    "uniqueResponses": 35,
    "results": [
      {
        "server": "Google",
        "location": "United States",
        "ip": "8.8.8.8",
        "success": true,
        "records": [
          "192.179.16.100",
          "192.179.16.101",
          "192.179.16.102",
          "192.179.16.113",
          "192.179.16.138",
          "192.179.16.139"
        ],
        "error": null,
        "responseTime": 6
      },
      {
        "server": "Cloudflare",
        "location": "Global",
        "ip": "1.1.1.1",
        "success": true,
        "records": [
          "142.250.177.238"
        ],
        "error": null,
        "responseTime": 38
      },
      {
        "server": "OpenDNS",
        "location": "United States",
        "ip": "208.67.222.222",
        "success": true,
        "records": [
          "173.194.193.100",
          "173.194.193.101",
          "173.194.193.102",
          "173.194.193.113",
          "173.194.193.138",
          "173.194.193.139"
        ],
        "error": null,
        "responseTime": 24
      },
      {
        "server": "Quad9",
        "location": "Global",
        "ip": "9.9.9.9",
        "success": true,
        "records": [
          "142.250.125.100",
          "142.250.125.101",
          "142.250.125.102",
          "142.250.125.113",
          "142.250.125.138",
          "142.250.125.139"
        ],
        "error": null,
        "responseTime": 13
      },
      {
        "server": "Control D",
        "location": "Global",
        "ip": "76.76.2.0",
        "success": true,
        "records": [
          "74.125.202.100",
          "74.125.202.101",
          "74.125.202.102",
          "74.125.202.113",
          "74.125.202.138",
          "74.125.202.139"
        ],
        "error": null,
        "responseTime": 15
      },
      {
        "server": "Level3",
        "location": "United States",
        "ip": "4.2.2.1",
        "success": true,
        "records": [
          "142.251.186.100",
          "142.251.186.101",
          "142.251.186.102",
          "142.251.186.113",
          "142.251.186.138",
          "142.251.186.139"
        ],
        "error": null,
        "responseTime": 22
      },
      {
        "server": "Verisign",
        "location": "United States",
        "ip": "64.6.64.6",
        "success": true,
        "records": [
          "142.251.211.14"
        ],
        "error": null,
        "responseTime": 24
      },
      {
        "server": "DNS4EU",
        "location": "Europe",
        "ip": "86.54.11.100",
        "success": true,
        "records": [
          "142.251.34.238"
        ],
        "error": null,
        "responseTime": 116
      },
      {
        "server": "Yandex",
        "location": "Russia",
        "ip": "77.88.8.8",
        "success": true,
        "records": [
          "142.251.38.110"
        ],
        "error": null,
        "responseTime": 149
      },
      {
        "server": "Hurricane Electric",
        "location": "United States",
        "ip": "74.82.42.42",
        "success": true,
        "records": [
          "142.251.214.206"
        ],
        "error": null,
        "responseTime": 18
      }
    ]
  }
}

Build your own with DNS Propagation Checker. Start with 200 free credits. One key unlocks all 300+ APIs.

Explore the catalog

300+ APIs on the same key and the same response shape.

Browse all APIs