# Bulk WHOIS & DNS Lookup – Domain Age, RDAP, Email Provider (`dedicated_crest/domain-whois-dns-intel`) Actor

Bulk WHOIS/RDAP & DNS lookup for any list of domains, URLs or emails: registrar, creation & expiry date, domain age, availability, MX/SPF/DMARC/DKIM, email provider (Google Workspace, Microsoft 365), SaaS stack, website status. $3/1,000.

- **URL**: https://apify.com/dedicated_crest/domain-whois-dns-intel.md
- **Developed by:** [Ben Barazandeh](https://apify.com/dedicated_crest) (community)
- **Categories:** Lead generation, Developer tools, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 domains

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Bulk WHOIS & DNS Lookup – Domain Age, RDAP, Email Provider, Tech

**Look up thousands of domains in one run and get WHOIS/RDAP registration, DNS, email setup and website status in one row per domain, for $3 per 1,000 domains.** Paste domains, URLs or email addresses. You get the registrar, creation and expiry dates, domain age in days, availability, nameservers, MX/SPF/DMARC (and optional DKIM), the company's **email provider** (Google Workspace, Microsoft 365, Zoho…), tools that send email for it (HubSpot, Salesforce, SendGrid…), ~50 SaaS tools verified in DNS (Atlassian, Slack, Stripe, OpenAI, DocuSign…), DNS host, and whether the website is up.

- ✅ **Official sources**: IANA RDAP bootstrap, registry WHOIS servers (fallback) and DNS-over-HTTPS
- ✅ **WHOIS + DNS + email + website in one row**, so you don't need four separate tools
- ✅ **Any input**: domains, full URLs or emails, normalized to the registrable domain (`co.uk`, `com.au`…) and deduplicated
- ✅ **No API key, login or proxy**. Pay per domain, and it stops at your *Maximum cost per run*

**Try it now:** the input is pre-filled with 7 real domains, URLs and emails (stripe.com, openai.com, apify.com, an @hubspot.com address, bbc.co.uk, spiegel.de, producthunt.co). Click **Start**; the test run below took about 46 seconds with all checks on. Turn off the website check for faster bulk runs.

### Real run results (18 Oct 2026)

Pre-filled input, all default checks (run `zrd4c12eVJk6EgIIz`, 7 domains, about 46 seconds). `ceo@hubspot.com` and `https://www.apify.com` were normalized to their domains. `.de` registries do not publish dates, so spiegel.de has DNS and email data but no WHOIS dates.

| Domain | Registrar | Created | Age (days) | Email provider | DMARC | DNS provider | SaaS found |
|---|---|---|---|---|---|---|---|
| stripe.com | SafeNames Ltd. | 1995-09-12 | 11359 | Google Workspace | reject | Amazon Route 53 | 12 |
| openai.com | MarkMonitor Inc. | 2007-01-19 | 7211 | Google Workspace | reject | Azure DNS | 19 |
| apify.com | Amazon Registrar, Inc. | 2009-06-02 | 6347 | Google Workspace | reject | Amazon Route 53 | 3 |
| hubspot.com | MarkMonitor Inc. | 2005-02-06 | 7923 | Google Workspace | reject | Cloudflare | 17 |
| bbc.co.uk | British Broadcasting Corpor… | 1994-12-13 | 11632 | Other / self-hosted | reject | – | 10 |
| spiegel.de | – | – | – | Microsoft 365 | quarantine | – | 6 |
| producthunt.co | GoDaddy.com, LLC | 2013-11-20 | 4715 | Google Workspace | reject | Cloudflare | 1 |

### Use cases

- 🎯 **Lead enrichment & segmentation** – "companies on Google Workspace with HubSpot", "Microsoft 365 shops with no DMARC", tech-stack signals for outbound
- 🛡️ **Email deliverability & security audits** – SPF, DMARC policy, DKIM selectors, email security gateways (Mimecast, Proofpoint…)
- 🕵️ **Fraud, KYC & risk scoring** – domain age in days, recently registered domains, registrar, expiry
- 🌐 **Domain investing & portfolio monitoring** – availability, expiry dates, days until expiry, status codes
- 🔍 **SEO & competitive research** – hosting/DNS provider, CDN, CMS, website status and titles
- 🤖 **AI agents & CRMs** – structured domain facts for any list of URLs or email addresses

### Features

- **Input anything**: domains, full URLs or email addresses → normalized to the registrable domain (handles `co.uk`, `com.au` etc.) and deduplicated
- **Registration (RDAP first, WHOIS fallback)**: registrar + IANA ID, created / updated / expiry dates, **domain age (days)**, **days until expiry**, EPP status, nameservers, DNSSEC, registrant org & country when public, abuse contact, **registered / available**
- Works for gTLDs (.com, .net, .org, .app, .dev, .ai, .xyz …) and many ccTLDs (.uk, .de, .fr, .nl, .io, .co, .me, .us, .ch, .ca, .au, .it, .jp, .so …)
- **DNS**: A, AAAA, MX, NS, TXT (optional raw), www CNAME, CAA (optional)
- **Email intelligence**: SPF record & includes, DMARC record & policy, optional DKIM selector probing (with wildcard detection), **email provider**, **email security gateway**, **email senders** detected from SPF
- **SaaS verifications**: ~50 tools detected from DNS verification TXT records
- **DNS provider** (Cloudflare, Route 53, Azure, GoDaddy, …)
- **Website check**: HTTP status, final URL after redirects, HTTPS, response time, server header, title, meta description, basic tech (WordPress, Shopify, Wix, Webflow, Next.js, HubSpot, GTM, Meta Pixel, Cloudflare, Vercel…)
- Parallel processing, retries with backoff, and it **respects your Maximum cost per run**

### How to use it

1. Click **Try for free** / **Start**.
2. Paste your domains, URLs or emails (one per line) — or send them via API.
3. Toggle the checks you need (WHOIS, DNS, DKIM, website).
4. Run, then export to **CSV / Excel / JSON** or connect Google Sheets, Make, Zapier, n8n or your CRM.

### Input example

```json
{
  "domains": ["stripe.com", "https://www.apify.com/store", "jane@hubspot.com", "bbc.co.uk", "notion.so"],
  "includeWhois": true,
  "includeDns": true,
  "checkDkim": false,
  "includeWebsite": true,
  "concurrency": 5
}
```

### Output example

Real output for `stripe.com`:

```json
{
  "domain": "stripe.com",
  "registered": true,
  "registrar": "SafeNames Ltd.",
  "registrarIanaId": "447",
  "createdAt": "1995-09-12T04:00:00Z",
  "updatedAt": "2025-10-01T01:39:51Z",
  "expiresAt": "2027-09-11T04:00:00Z",
  "domainAgeDays": 11358,
  "daysUntilExpiry": 328,
  "status": [
    "client delete prohibited",
    "client transfer prohibited",
    "client update prohibited",
    "server delete prohibited",
    "server transfer prohibited",
    "server update prohibited"
  ],
  "registryNameservers": [
    "ns-1087.awsdns-07.org",
    "ns-1882.awsdns-43.co.uk",
    "ns-423.awsdns-52.com",
    "ns-705.awsdns-24.net"
  ],
  "dnssec": false,
  "registrantOrg": null,
  "registrantCountry": null,
  "abuseEmail": "abuse@safenames.net",
  "whoisSource": "rdap",
  "whoisError": null,
  "a": [
    "198.202.176.41",
    "198.137.150.41"
  ],
  "aaaa": [],
  "mx": [
    "aspmx.l.google.com",
    "alt1.aspmx.l.google.com",
    "alt2.aspmx.l.google.com",
    "aspmx2.googlemail.com",
    "aspmx3.googlemail.com"
  ],
  "ns": [
    "ns-1087.awsdns-07.org",
    "ns-1882.awsdns-43.co.uk",
    "ns-423.awsdns-52.com",
    "ns-705.awsdns-24.net"
  ],
  "wwwCname": "stripe.com",
  "spf": "v=spf1 ip4:198.2.180.60/32 ip4:13.111.2.227/32 include:spf1.stripe.com include:greenhouse-outbound-mail.stripe.com include:_spf.qualtrics.com ~all",
  "spfIncludes": [
    "spf1.stripe.com",
    "greenhouse-outbound-mail.stripe.com",
    "_spf.qualtrics.com"
  ],
  "dmarc": "v=DMARC1; p=reject; pct=100; fo=1; rua=mailto:dmarc-reports@stripe.com; ruf=mailto:dmarc-forensics@stripe.com;",
  "dmarcPolicy": "reject",
  "dkimSelectorsFound": null,
  "emailProvider": "Google Workspace",
  "emailSecurityGateway": null,
  "emailSenders": [
    "Qualtrics",
    "Greenhouse",
    "Stripe"
  ],
  "dnsProvider": "Amazon Route 53",
  "saasVerifications": [
    "Anthropic",
    "Apple",
    "Atlassian",
    "Canva",
    "Cursor",
    "DocuSign",
    "Google Search Console",
    "Meta / Facebook",
    "Microsoft 365",
    "OpenAI",
    "Postman",
    "Stripe"
  ],
  "websiteUp": true,
  "httpStatus": 200,
  "finalUrl": "https://stripe.com/",
  "https": true,
  "responseTimeMs": 161,
  "server": "nginx",
  "title": "Stripe | Financial Infrastructure to Grow Your Revenue",
  "metaDescription": "Stripe is a financial services platform that helps all types of businesses accept payments, build flexible billing models, and manage money movement.",
  "websiteTech": [
    "Next.js"
  ],
  "checkedAt": "2026-10-17T16:15:56.978Z"
}
```

Fields that a registry doesn't publish (for example registrant details hidden for privacy/GDPR, or dates for `.de`) are `null`. For unregistered domains `registered` is `false`.

### Pricing

**Pay per event: $0.003 per domain** (**$3 per 1,000 domains**) with WHOIS/RDAP, DNS, email intelligence and the website check all included. No start fee. Set a *Maximum cost per run* and the Actor stops cleanly when it's reached.

How that compares with other WHOIS/DNS Actors on the Apify Store (free-tier list prices from the Store API, checked 18 Oct 2026):

| Actor | Price per 1,000 domains | Start fee | What's in a row |
|---|---|---|---|
| **This Actor** | **$3.00** | none | WHOIS/RDAP + DNS + SPF/DMARC/DKIM + email provider + SaaS + website |
| Domain WHOIS & DNS Lookup (santamaria-automations) | $3.00 | $0.001 | WHOIS + DNS + email provider |
| Whois Domain Lookup (agenscrape) | $2.50 | none | WHOIS |
| Domain Availability Checker (automation-lab) | $2.30 | $0.035 | availability + WHOIS basics |
| Bulk Domain Availability Checker + WHOIS (bridgeworks) | free (platform usage only) | none | availability + RDAP |
| Domain Availability, Expiry, WHOIS, DNS (datascoutapi) | $0.99 | $0.00005 | WHOIS + DNS + IP/ASN |

If you only need registrar and expiry dates, a WHOIS-only Actor can be cheaper. Choose this one when you also want email provider, DMARC, SaaS stack and website status for lead scoring or security checks.

### Tips

- Disable `includeWebsite` for the fastest bulk WHOIS + DNS runs.
- Schedule a weekly run on your portfolio and filter `daysUntilExpiry < 30` to catch renewals.
- Filter `domainAgeDays < 90` to flag newly registered domains in fraud or lead-qualification flows.

### FAQ

**Is this legal?** Yes. It queries public registration data through the official RDAP protocol and registry WHOIS services, public DNS, and each domain's public homepage. Some registries restrict reuse of WHOIS data (e.g. for marketing) — follow their terms and applicable privacy laws.

**Why is the registrant often empty?** Since GDPR most registrars redact registrant contact data. When it is public, you get organization and country.

**A TLD isn't supported?** A few registries (e.g. .es) offer no public RDAP/WHOIS; you'll still get DNS, email and website data and a `whoisError` note. Open an issue in the **Issues** tab for requests.

**How do I find which companies use Google Workspace or Microsoft 365?** Run your domain list and filter the `emailProvider` column. Combine it with `emailSenders` (HubSpot, Salesforce, Marketo…) and `saasVerifications` for tech-stack segments.

**Can I check if a domain is available?** Yes. `registered: false` means the registry has no record of it. Always confirm at a registrar before buying.

**How fast is it?** The 7-domain test above took about 46 seconds with every check on and concurrency 5; slow registries and slow websites take most of that time. For big lists, turn off the website check and raise *Concurrency* (up to 20).

**Is RDAP the same as WHOIS?** RDAP is the official, structured JSON successor to WHOIS run by the same registries. This Actor uses RDAP first and falls back to port-43 WHOIS where RDAP isn't available.

### Related tools

Other Actors by the same developer that work well with this one:

- [SEC EDGAR Scraper](https://apify.com/dedicated_crest/sec-edgar-funding-leads): newly funded companies from SEC Form D; enrich their domains here
- [Career Site Jobs API](https://apify.com/dedicated_crest/ats-career-jobs-scraper): see who is hiring at the companies on your domain list
- [GDELT News Scraper](https://apify.com/dedicated_crest/gdelt-news-monitor): track news coverage of a brand or domain
- [USAspending Scraper](https://apify.com/dedicated_crest/usaspending-federal-awards): federal contractors and grant recipients to enrich
- [Local Business Leads](https://apify.com/dedicated_crest/osm-local-business-leads): local business lists with websites from OpenStreetMap; enrich their domains here

# Actor input Schema

## `domains` (type: `array`):

One per line. Accepts bare domains (stripe.com), URLs (https://www.stripe.com/pricing) or email addresses (jane@stripe.com) — they're normalized to the registrable domain and deduplicated.

## `includeWhois` (type: `boolean`):

Registrar, created/updated/expiry dates, domain age, status, availability, registrant org/country (when public).

## `followRegistrarRdap` (type: `boolean`):

For .com/.net etc., also query the registrar's RDAP server for registrant organization/country (1 extra request).

## `includeDns` (type: `boolean`):

A/AAAA/MX/NS/TXT, SPF, DMARC, email provider, email senders, DNS provider and SaaS tools detected from DNS verification records.

## `checkDkim` (type: `boolean`):

Check ~14 common DKIM selectors (google, selector1, selector2, k1, s1…). Adds ~15 DNS queries per domain.

## `includeCaa` (type: `boolean`):

Which certificate authorities may issue certificates for the domain.

## `includeRawTxt` (type: `boolean`):

Add all raw TXT records to the output.

## `includeWebsite` (type: `boolean`):

Fetch the homepage: HTTP status, final URL, HTTPS, response time, title, meta description and basic tech (WordPress, Shopify, HubSpot, Cloudflare…).

## `concurrency` (type: `integer`):

Domains processed in parallel.

## `maxItems` (type: `integer`):

Stop after this many domains. The run also stops cleanly when your Maximum cost per run is reached.

## Actor input object example

```json
{
  "domains": [
    "stripe.com",
    "openai.com",
    "https://www.apify.com",
    "ceo@hubspot.com",
    "bbc.co.uk",
    "spiegel.de",
    "producthunt.co"
  ],
  "includeWhois": true,
  "followRegistrarRdap": true,
  "includeDns": true,
  "checkDkim": false,
  "includeCaa": false,
  "includeRawTxt": false,
  "includeWebsite": true,
  "concurrency": 5,
  "maxItems": 10000
}
```

# Actor output Schema

## `results` (type: `string`):

Registrar, dates, domain age, availability, nameservers, MX/SPF/DMARC, email provider, SaaS verifications, website status and tech for each domain.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "domains": [
        "stripe.com",
        "openai.com",
        "https://www.apify.com",
        "ceo@hubspot.com",
        "bbc.co.uk",
        "spiegel.de",
        "producthunt.co"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dedicated_crest/domain-whois-dns-intel").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "domains": [
        "stripe.com",
        "openai.com",
        "https://www.apify.com",
        "ceo@hubspot.com",
        "bbc.co.uk",
        "spiegel.de",
        "producthunt.co",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("dedicated_crest/domain-whois-dns-intel").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "domains": [
    "stripe.com",
    "openai.com",
    "https://www.apify.com",
    "ceo@hubspot.com",
    "bbc.co.uk",
    "spiegel.de",
    "producthunt.co"
  ]
}' |
apify call dedicated_crest/domain-whois-dns-intel --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dedicated_crest/domain-whois-dns-intel"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mmRcNNkyc8v0EsnqP/builds/sL1UFSGo40ZVxsxjf/openapi.json
