DNS Records Lookup icon

Developer tools

DNS Records Lookup — Bulk A/MX/TXT/NS/AAAA Scraper

Bulk DNS record lookup for any list of domains — A, AAAA, MX, TXT, NS, CNAME, SOA, CAA — via Cloudflare and Google DNS-over-HTTPS with automatic resolver fallback. One clean, decoded row per domain.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

Feed this Actor a list of domains and the DNS record types you care about, and it comes back with one dataset row per domain — every requested record type decoded into a readable string (MX, not 15; NOERROR, not 0), grouped together so you get a full DNS snapshot in a single glance.

What we handle for you

  • 🌐 Two-resolver fallback — every lookup tries your chosen primary resolver first (Cloudflare or Google) and automatically retries on the other if it errors, times out, or returns something unparsable.
  • 🧱 Per-domain and per-type fault isolation — one domain's problem never blocks the rest of the batch, and one record type failing never blows up the whole row.
  • 🔁 Retries with backoff on 408 / 429 / 503 before falling back to the other resolver.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, decoded type/status strings, ISO-8601 timestamps.
  • 📡 Concurrent per-domain fan-out — every requested record type for a domain is queried in parallel.
  • 💰 Pay-Per-Event pricing — you pay only for rows that land. No data, no charge beyond the small actor-start fee.

Use cases

  • Domain portfolio monitoring — run daily against a list of domains you manage and catch unexpected DNS changes.
  • MX record auditing — verify mail routing configuration across a list of client domains.
  • SPF/DKIM/DMARC visibility — pull TXT records in bulk to check email-authentication posture across a portfolio.
  • Migration verification — confirm A/AAAA/NS records point where you expect after a DNS cutover.
  • Security research — bulk-resolve a domain list gathered from another source (e.g. a WHOIS or subdomain-enumeration Actor) and get structured DNS data back.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
domains array yes Domains to look up. One per line. At least one is required.
recordTypes array no DNS record types to query for every domain (e.g. A, MX, TXT). Uppercased automatically.
resolver string no Primary DNS-over-HTTPS resolver. The other resolver is used automatically as a fallback.
{
  "domains": [
    "github.com",
    "cloudflare.com"
  ],
  "recordTypes": [
    "A",
    "AAAA",
    "MX",
    "TXT",
    "NS"
  ],
  "resolver": "cloudflare"
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

domainresolver_usedrecordsrecord_types_queriedrecord_types_failedqueried_at

{
  "domain": "github.com",
  "resolver_used": "cloudflare",
  "records": [
    {
      "type": "MX",
      "status": "NOERROR",
      "ttl": 300,
      "data": "0 github-com.mail.protection.outlook.com"
    }
  ],
  "record_types_queried": [
    "A",
    "AAAA",
    "MX",
    "TXT",
    "NS"
  ],
  "record_types_failed": [],
  "queried_at": "2026-09-05T12:00:00+00:00"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result emitted$0.0010Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

Limitations

  • No zone-transfer (AXFR) and no DNSSEC validation surfacing beyond what the upstream resolver already returns — this is a lookup tool, not a DNS security auditor.
  • No WHOIS lookups and no reverse-DNS (PTR) bulk mode in v1.
  • Very large domain lists run sequentially domain-by-domain to keep memory bounded and stream rows as they resolve, so total run time scales roughly linearly with domain count.

FAQ

Does this need an API key?
No — both upstream resolvers (Cloudflare, Google) are public, keyless DNS-over-HTTPS APIs.
What happens if a domain doesn't exist?
You still get a row. records will be empty for that domain and record_types_failed stays empty too — an NXDOMAIN is a valid answer, not an error.
What happens if a DNS resolver is temporarily down?
We retry with backoff, then fall back to the other resolver automatically. Only if both resolvers fail for a given record type does it show up in record_types_failed.
Can I query custom record types?
Yes — any DNS record type name is accepted in recordTypes; numeric types outside the common set decode as TYPE<n> rather than crashing the row.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run