Bulk WHOIS DNS SSL Lookup — Domain Enrichment avatar

Bulk WHOIS DNS SSL Lookup — Domain Enrichment

Pricing

from $2.00 / 1,000 domain looked ups

Go to Apify Store
Bulk WHOIS DNS SSL Lookup — Domain Enrichment

Bulk WHOIS DNS SSL Lookup — Domain Enrichment

Batch WHOIS, DNS (A/AAAA/MX/NS/TXT) and TLS cert lookup for domain lists — 256 MB default; failed domains free by default. One row per domain: registrar/dates + DNS + SSL days-left; no paid WHOIS API keys.

Pricing

from $2.00 / 1,000 domain looked ups

Rating

0.0

(0)

Developer

新世紀書僮

新世紀書僮

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

WHOIS DNS SSL Lookup — Batch Domain Enrichment

Look up WHOIS, DNS records and SSL certificates for a list of domains — structured enrichment for knowledge-base hygiene, low memory, failed domains free by default. Paste domains (or URLs). For each host the Actor can query public WHOIS, resolve A/AAAA/MX/NS/TXT, and read the TLS leaf certificate (issuer, validity, days left). Default memory: 256 MB. No browser, no paid WHOIS API keys.

What you get

  • 📇 WHOIS — registrar, created, expires (when the public server returns them)
  • 🌐 DNS — A, AAAA, MX, NS, TXT (selectable)
  • 🔒 SSL / TLS — issuer, subject, validFrom / validTo, daysLeft, SAN
  • 📦 Structured output — one dataset row per domain + flat overview columns
  • 🧾 SUMMARY — ok / partial / error counts, duration, peak memory
  • 💸 Failed domains free by default — only ok / partial rows are charged unless you turn on chargeFailedDomains
  • 🪶 Light — no browser; WHOIS + DNS + stdlib SSL; 256 MB default

Measured results

Local + private cloud benches (2026-09-30 Asia/Taipei). PPE locked from measured cost — see docs/PRICING.md.

TestResult
Local smoke: example.com + google.com2/2 ok in 0.7 s, peak 80 MB; charged 2
Local: example.com + nonexistent .testok 1 charged, error 1 free (NXDOMAIN)
Cloud smoke f9qom9UMGniuQOtwr (2 domains, 512 MB, build 0.1.1)SUCCEEDED; peak 90 MB; settled $0.000280
Cloud bench LsndNzP5DyvhbHi4b (50 domains)SUCCEEDED; 46 ok / 4 partial; peak 94 MB; settled $0.001584 (~$0.000032 / domain)
Cloud bench 8fCgMF187IGXYhbhV (100 domains)SUCCEEDED; 92 ok / 8 partial; peak 95 MB; settled $0.002725 (~$0.000027 / domain)

Use cases

  • Domain enrichment for knowledge bases — registrar, age, expiry, nameservers as structured fields
  • SSL / DNS hygiene — certificate days-left and record snapshots before crawl or index jobs
  • Inventory & migration checks — bulk WHOIS + DNS for domains you already operate or archive
  • Dataset cleanup — validate hosts in an existing URL/domain list (broken or expired names surface as errors)

How to use

  1. Paste domains in Domains (or URLs — the host is used).
  2. Choose WHOIS / DNS / SSL modules and optional concurrency / WHOIS delay.
  3. Click Start. Results are in the Dataset; SUMMARY / OUTPUT in the Key-value store.

Input example

{
"domains": ["example.com", "google.com"],
"maxDomains": 100,
"lookupWhois": true,
"lookupDns": true,
"lookupSsl": true,
"maxConcurrency": 4,
"whoisDelayMs": 200,
"chargeFailedDomains": false
}

Output example (one dataset item)

{
"domain": "example.com",
"status": "ok",
"whois": {
"registrar": "RESERVED-Internet Assigned Numbers Authority",
"created": "1995-08-14T04:00:00+00:00",
"expires": "2027-08-13T04:00:00+00:00"
},
"whoisRegistrar": "RESERVED-Internet Assigned Numbers Authority",
"whoisCreated": "1995-08-14T04:00:00+00:00",
"whoisExpires": "2027-08-13T04:00:00+00:00",
"dns": {
"A": ["93.184.216.34"],
"AAAA": [],
"MX": [],
"NS": ["a.iana-servers.net", "b.iana-servers.net"],
"TXT": ["v=spf1 -all"]
},
"dnsA": "93.184.216.34",
"ssl": {
"issuer": "Example CA",
"validFrom": "2025-01-01T00:00:00+00:00",
"validTo": "2026-12-25T22:56:35+00:00",
"daysLeft": 86
},
"sslIssuer": "Example CA",
"sslValidTo": "2026-12-25T22:56:35+00:00",
"sslDaysLeft": 86,
"errors": [],
"durationMs": 1200
}

Key-value store records

KeyContent
SUMMARYCounts: totalLookedUp, charged, freeErrors, ok/partial/error, duration, peak memory
OUTPUTSame summary (sibling Actors consistency)

Pricing

Pay per event (locked from measured cloud cost — see docs/PRICING.md):

EventPrice
Domain looked up (primary)$0.002 per domain (= $2.00 per 1,000)
Actor start (Apify synthetic)$0.00005 per GB (platform default)

Worked example: 1,000 successful/partial domains ≈ $2.00 + one start event. Platform cost on a 100-domain public bench was about $0.0027 (own run; not PPE revenue).

By default, complete failures (status: error) are not charged. Invalid inputs never become a lookup row and are not charged. Details: docs/PRICING.md.

Integrations

Call from the Apify API or another Actor. Chain domain lists from spreadsheets / crawlers into domains.

from apify_client import ApifyClient
client = ApifyClient("<token>")
run = client.actor("ingenious_quip_bxq/whois-dns-ssl-lookup").call(run_input={
"domains": ["example.com", "google.com"],
"maxDomains": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["domain"], item["whoisExpires"], item.get("sslDaysLeft"))

Known limits

  • Public WHOIS servers rate-limit and often privacy-redact contact fields; some TLDs return thin or empty parses.
  • WHOIS is best-effort via python-whois (no paid WHOIS API in this Actor).
  • SSL check uses TCP + TLS to the given port (default 443); it does not crawl HTTP.
  • IP addresses are rejected as input (hostnames only).
  • Be polite: keep concurrency low and use whoisDelayMs on large batches.

FAQ

Are failed domains charged? Not by default. Turn on chargeFailedDomains to charge every attempted domain.

Why is a row partial? At least one module returned data and another failed (or DNS NXDOMAIN with other modules on).

Do you copy closed Actors? No. MIT/ISC/stdlib libraries only; AGPL-3.0 for this Actor’s source.

License & source code

Actor source is AGPL-3.0 (see LICENSE). Dependency licenses: docs/LICENSE_REVIEW.md. Public GitHub link will be added when the coordinator approves publishing.

Changelog

See CHANGELOG.md.