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

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

Pricing

from $1.00 / 1,000 result emitteds

Go to Apify Store
DNS Records Lookup — Bulk A/MX/TXT/NS/AAAA Scraper

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

Bulk DNS record lookup for any list of domains. Resolves A, AAAA, MX, TXT, NS, CNAME, SOA and CAA records via Cloudflare and Google DNS-over-HTTPS, with automatic fallback between resolvers. One clean row per domain, ready for portfolio monitoring or DNS change detection.

Pricing

from $1.00 / 1,000 result emitteds

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 days ago

Last modified

Categories

Share


🎯 What this 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.

  • Any domain — apex, subdomain, or a mix
  • Standard record types: A, AAAA, MX, TXT, NS, CNAME, SOA, CAA
  • Two independent DNS-over-HTTPS resolvers (Cloudflare + Google), so a query survives either resolver having a bad day

🔥 Features

  • 🌐 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.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Paste one or more domains into the domains field — one per line.
  3. Optionally adjust recordTypes (defaults to A, AAAA, MX, TXT, NS) and pick a resolver preference.
  4. Click Start. Rows stream into the dataset as each domain resolves.
  5. Export from Storage → Dataset as JSON, CSV, or Excel — or call the Apify API directly.

For recurring monitoring, use Apify Schedules (cron syntax) so the dataset refreshes on your preferred cadence.

📥 Input

FieldTypeRequiredDefaultNotes
domainsarrayyes["github.com", "cloudflare.com"]Domains to look up. One per line.
recordTypesarrayno["A", "AAAA", "MX", "TXT", "NS"]DNS record types to query for every domain. Uppercased automatically.
resolverstringno"cloudflare"Primary resolver — cloudflare or google. The other is used as an automatic fallback.
proxyConfigurationobjectno{"useApifyProxy": false}Standard Apify Proxy field. Not required for this target's traffic pattern.

Example input

{
"domains": [
"github.com",
"cloudflare.com"
],
"recordTypes": ["A", "AAAA", "MX", "TXT", "NS"],
"resolver": "cloudflare"
}

📤 Output

One dataset row per domain, with records grouped by type:

{
"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"
}
  • records — every decoded answer across every queried type for this domain.
  • record_types_failed — types where both resolvers failed for this domain (a clean NXDOMAIN or empty answer is not a failure and doesn't appear here).

💰 Pricing

Pay-Per-Event — you're charged only when the Actor actually does something:

EventPriceWhen
Actor start$0.20Once per run
Result$0.001Once per domain row written to the dataset ($1.20 / 1,000 results incl. the flat start fee)

No results, no result charge — only the small warm-up fee applies.

🚧 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.

🙋 Your feedback

Found a domain or record type this Actor doesn't handle well? Leave a review or open an issue from the Actor's Apify Store page — we read every one and ship fixes fast.