Bulk WHOIS DNS SSL Lookup — Domain Enrichment
Pricing
from $2.00 / 1,000 domain looked ups
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 CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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/partialrows are charged unless you turn onchargeFailedDomains - 🪶 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.
| Test | Result |
|---|---|
| Local smoke: example.com + google.com | 2/2 ok in 0.7 s, peak 80 MB; charged 2 |
Local: example.com + nonexistent .test | ok 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
- Paste domains in Domains (or URLs — the host is used).
- Choose WHOIS / DNS / SSL modules and optional concurrency / WHOIS delay.
- Click Start. Results are in the Dataset;
SUMMARY/OUTPUTin 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
| Key | Content |
|---|---|
SUMMARY | Counts: totalLookedUp, charged, freeErrors, ok/partial/error, duration, peak memory |
OUTPUT | Same summary (sibling Actors consistency) |
Pricing
Pay per event (locked from measured cloud cost — see docs/PRICING.md):
| Event | Price |
|---|---|
| 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 ApifyClientclient = 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
whoisDelayMson 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.