DNS Records Lookup: A, MX, TXT, NS and More | $1/1K avatar

DNS Records Lookup: A, MX, TXT, NS and More | $1/1K

Pricing

from $1.00 / 1,000 results

Go to Apify Store
DNS Records Lookup: A, MX, TXT, NS and More | $1/1K

DNS Records Lookup: A, MX, TXT, NS and More | $1/1K

$1 per 1,000 results, platform usage included. DNS records for a list of domains: A, AAAA, MX, TXT, NS, CNAME, SOA and CAA, with TTLs, plus optional SPF and DMARC checks. Read over public DNS over HTTPS. No API key.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

One Dollar Store

One Dollar Store

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

DNS Records Lookup: A, AAAA, MX, TXT, NS, CNAME, SOA and CAA for a List of Domains

$1 per 1,000 domains looked up. Platform usage included. No rental, no minimum.

Give it a list of domains and it returns their DNS records: IPv4 and IPv6 addresses, mail servers, TXT records, name servers, aliases, the zone start of authority and the certificate authorities allowed by CAA. Each record type comes with its TTL. Optional SPF and DMARC checks. No account with a DNS provider and no API key.

Open it in Apify Console

New to Apify? [Create a free account](https://www.apify.com?fpr=ymnoit) (referral link). Runs from a free plan account return the first 10 results; any paid plan returns everything you ask for, up to your limit.

What it costs

DomainsThis actor
1,000$1.00
10,000$10.00
100,000$100.00

Plus $0.001 per run. One flat price, platform usage included, so there is no separate compute or proxy bill. One domain is one result, however many record types you ask for. A weekly check of 500 domains costs about $0.50 a run, or about $2 a month. A domain that does not exist is returned as a row with status NXDOMAIN and charged like any other row. A lookup that fails on both resolvers returns no row and is not charged.

Why use it

  • One row per domain. All record types sit in one row, so 8 record types for 1,000 domains is 1,000 results, not 8,000.
  • Two public resolvers. Queries go to Cloudflare over DNS over HTTPS. If it fails or answers SERVFAIL, Google Public DNS is asked instead.
  • Mail checks built in. Turn on SPF and DMARC and each row gets the SPF record, the DMARC record and the DMARC policy.
  • Flat output when you want it. Switch on one row per record and every record becomes its own line with domain, type, value and TTL.

Quick start

  1. Open the actor, paste your domains, press Start.
  2. Or paste this input:
{ "domains": ["apify.com", "wikipedia.org"], "recordTypes": ["A", "MX", "TXT", "NS"], "emailAuth": true }
  1. Download the results as JSON, CSV or Excel, or read them through the API.

Use it from code

curl -X POST "https://api.apify.com/v2/acts/one_dollar_store~dns-records-lookup/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains": ["apify.com", "wikipedia.org"], "recordTypes": ["A", "MX", "NS"]}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("one_dollar_store/dns-records-lookup").call(
run_input={"domains": ["apify.com", "wikipedia.org"], "recordTypes": ["A", "MX", "NS"]}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["domain"], item.get("a"), item.get("ns"))

Use it from an AI assistant

Claude, ChatGPT, Cursor and other assistants can call this actor through Apify's MCP server. Add it with this server address:

https://mcp.apify.com?tools=one_dollar_store/dns-records-lookup

Then ask, for example: "Look up the MX and TXT records for apify.com and tell me whether it has an SPF and DMARC policy."

Switching from another DNS lookup actor

Domains go in domains (a list). Links, host names with a port and email addresses are accepted; the host name is taken from them. Choose records with recordTypes. The core output fields are domain, a, aaaa, mx, txt, ns, cname, soa and caa. If you need one line per record, set rowPerRecord to true and read domain, type, value and ttl.

Input

FieldTypeDefaultWhat it does
domainslist of textrequiredDomains or host names, for example example.com or mail.example.com. Repeats are removed.
recordTypeslistall eightAny of A, AAAA, MX, TXT, NS, CNAME, SOA, CAA.
emailAuthtrue or falsefalseAdds spf, dmarc, dmarcPolicy and dmarcSubdomainPolicy to each row. One more lookup per domain, no extra row. Not used with rowPerRecord.
rowPerRecordtrue or falsefalseOne row per record instead of one row per domain. Every row is charged.
resolvertextcloudflarecloudflare or google. The other one is the back up.
maxItemsnumber1000Most rows in the run. Minimum 10.

Output fields

One row per domain (default):

FieldMeaning
domainThe host name that was looked up, in lower case.
statusNOERROR (the name exists) or NXDOMAIN (it does not).
a, aaaaIPv4 and IPv6 addresses.
mxMail servers as {priority, host}, lowest priority first.
txtTXT records. Strings split by DNS are joined.
nsName servers.
cnameThe alias target, when the name is an alias. Left out otherwise.
soaprimaryNs, adminEmail, serial, refresh, retry, expire, minimumTtl.
caaCertificate authority rules as {flags, tag, value}.
ttlThe lowest TTL in seconds for each record type, for example {"a": 300}.
spf, dmarc, dmarcPolicy, dmarcSubdomainPolicyOnly with emailAuth, and only when the record exists.
failedTypesRecord types that could not be read on either resolver. Rare.
resolver, queriedAtWhich service answered and when.

A type with no records comes back as an empty list. With rowPerRecord the fields are domain, type, value, ttl, plus priority (MX), caaFlags and caaTag (CAA) and soa (SOA), with resolver and queriedAt.

Sample results

Real rows from test runs on 9 October 2026 (long TXT lists and some address lists shortened).

[
{"domain": "wikipedia.org", "status": "NOERROR", "a": ["208.80.154.224"], "aaaa": ["2620:0:861:ed1a::1"], "mx": [{"priority": 10, "host": "mx-in1001.wikimedia.org"}, {"priority": 10, "host": "mx-in2001.wikimedia.org"}], "txt": ["v=spf1 include:_cidrs.wikimedia.org ~all", "... 2 more"], "ns": ["ns0.wikimedia.org", "ns1.wikimedia.org", "ns2.wikimedia.org"], "soa": {"primaryNs": "ns0.wikimedia.org", "adminEmail": "hostmaster@wikimedia.org", "serial": 2026060420, "refresh": 43200, "retry": 7200, "expire": 1209600, "minimumTtl": 3600}, "caa": [{"flags": 0, "tag": "iodef", "value": "mailto:dns-admin@wikimedia.org"}, {"flags": 0, "tag": "issue", "value": "letsencrypt.org"}, {"flags": 0, "tag": "issue", "value": "pki.goog"}], "ttl": {"a": 87, "aaaa": 73, "mx": 300, "txt": 600, "ns": 166257, "soa": 3600, "caa": 600}, "resolver": "cloudflare", "queriedAt": "2026-10-08T22:57:19.375Z"},
{"domain": "python.org", "status": "NOERROR", "a": ["151.101.128.223", "151.101.0.223"], "aaaa": ["2a04:4e42:600::223", "2a04:4e42::223"], "mx": [{"priority": 50, "host": "mail.python.org"}], "txt": ["v=spf1 mx ip4:188.166.95.178/32 ip6:2a03:b0c0:2:d0::71:1 include:stspg-customer.com include:_spf.google.com include:mailgun.org ~all", "... 12 more"], "ns": ["ns-1134.awsdns-13.org", "ns-2046.awsdns-63.co.uk", "ns-484.awsdns-60.com", "ns-981.awsdns-58.net"], "soa": {"primaryNs": "ns-2046.awsdns-63.co.uk", "adminEmail": "awsdns-hostmaster@amazon.com", "serial": 1, "refresh": 7200, "retry": 900, "expire": 1209600, "minimumTtl": 86400}, "caa": [], "ttl": {"a": 300, "aaaa": 218, "mx": 60, "txt": 300, "ns": 86400, "soa": 900}, "resolver": "cloudflare", "queriedAt": "2026-10-08T22:57:19.478Z"},
{"domain": "nodejs.org", "status": "NOERROR", "a": ["104.16.213.131", "104.16.212.131"], "aaaa": ["2606:4700::6810:d483", "2606:4700::6810:d583"], "mx": [{"priority": 10, "host": "aspmx.l.google.com"}, {"priority": 20, "host": "alt1.aspmx.l.google.com"}, {"priority": 20, "host": "alt2.aspmx.l.google.com"}, {"priority": 30, "host": "aspmx2.googlemail.com"}, {"priority": 30, "host": "aspmx3.googlemail.com"}], "txt": ["google-site-verification=v0MKccGKHVIlJbu0s9K45qnPGB7EBWnKzjpsd010r4E", "v=spf1 include:aspmx.googlemail.com -all"], "ns": ["meera.ns.cloudflare.com", "pablo.ns.cloudflare.com"], "soa": {"primaryNs": "meera.ns.cloudflare.com", "adminEmail": "dns@cloudflare.com", "serial": 2414071662, "refresh": 10000, "retry": 2400, "expire": 604800, "minimumTtl": 1800}, "caa": [], "ttl": {"a": 238, "aaaa": 113, "mx": 300, "txt": 300, "ns": 86400, "soa": 1800}, "resolver": "cloudflare", "queriedAt": "2026-10-08T22:57:19.521Z"}
]

Limits

  • DNS over HTTPS only. Answers come from Cloudflare (1.1.1.1) or Google Public DNS, so they are what a public resolver returns, including cached answers. TTLs are the remaining time on the resolver, so the same record can show different TTLs in two runs.
  • No zone transfers and no record guessing. Only the record types listed above are read. The actor cannot list every subdomain of a domain; use the Subdomain Finder for that.
  • DNSSEC records are not returned. There is no DS, DNSKEY or RRSIG output.
  • Names only. IP addresses are skipped, so there are no reverse (PTR) lookups.
  • Failed lookups are not returned. If neither resolver answers (timeout, SERVFAIL on both), the domain is listed in the run summary under failedDomains and no row is charged. A domain that does not exist is returned with status NXDOMAIN.
  • Public side only. Some domains answer differently by location, and split DNS zones are seen as the public sees them.

FAQ

How much does it cost to look up 10,000 domains? $10, plus $0.001 for each run. That is for one row per domain. With rowPerRecord on, each record is a row and costs $0.001.

Do I pay for compute or proxy on top? No. Platform usage is included in the $1 per 1,000 price.

Do I need an API key or a DNS account? No. The actor asks two public DNS over HTTPS services. There is nothing to sign up for.

Can it check email setup for many domains? Yes. Turn on emailAuth to get the SPF record, the DMARC record and the DMARC policy for each domain, next to the MX records.

Why is a record type an empty list? The domain has no record of that type. An empty mx list usually means the domain does not receive email, or that the name is an alias with no mail setup of its own.

Is it legal? The actor sends standard DNS queries and returns records that DNS publishes for anyone to read. How you use the data is your responsibility: follow the law where you live and the terms of the resolver services (Cloudflare and Google Public DNS).

Is this an official Cloudflare or Google product? No. It is an independent tool and is not affiliated with or endorsed by Cloudflare or Google.

Do I need an Apify account? Yes. Actors run from an Apify account, and a free account is enough to start: it includes $5 of platform usage every month. You can sign up here. This is a referral link and it costs you nothing.

Is there a limit on the free plan? Yes. A run started from a free plan account delivers the first 10 results, then ends with a message and a link to the plans. Any paid plan returns everything you ask for, up to your own limit. The price per result is the same on every plan.

More from The One Dollar Store

Every actor here costs $1 per 1,000 results, platform usage included. See the whole store: https://apify.com/one_dollar_store

Domains and apps

Changelog

  • October 2026: first release.