# WHOIS Domain Lookup: Registrar, Age, Expiry & DNS (Bulk) (`globose_talent_mn9/whois-domain-lookup`) Actor

Bulk WHOIS lookup for any domain: registrar, creation and expiry dates, domain age, days to expiry, status codes, nameservers, DNSSEC, registrar abuse contact plus A/MX/NS records. Uses official registry RDAP with port-43 WHOIS fallback. $1 per 1,000 domains.

- **URL**: https://apify.com/globose_talent_mn9/whois-domain-lookup.md
- **Developed by:** [Andrew Shamah](https://apify.com/globose_talent_mn9) (community)
- **Categories:** SEO tools, Developer tools, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 domain looked ups

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

## WHOIS Domain Lookup: Registrar, Age, Expiry & DNS (Bulk)

Get **WHOIS data for many domains at once**: registrar, creation date, **domain age**, **expiry date and days left**, EPP status codes, nameservers, DNSSEC, the registrar's abuse contact, plus the domain's current **A, MX and NS records**. You get clean JSON, CSV or Excel output with one row per domain.

The Actor asks the **official registry** directly. It uses **RDAP** (the modern, structured WHOIS) for 1,200+ TLDs and falls back to classic **port-43 WHOIS** for registries without RDAP, such as .eu, .co, .il, .ru and .jp. DNS is the last resort. No API key is needed and no third-party WHOIS reseller sits in the middle.

**Price: $1 per 1,000 domains** ($0.001 per domain looked up). Invalid inputs and failed lookups are free.

### What can you use it for?

- **Domain age checks** for fraud screening, lead scoring and SEO (how old is this website?)
- **Expiry monitoring** of your own or your clients' domain portfolio (`daysToExpiry`, `expiringSoon`)
- **Domain investing / drop catching**: see which names expire soon and who the registrar is
- **Security & abuse reports**: get the registrar's abuse email/phone and lock status (`clientTransferProhibited` …)
- **Lead enrichment**: add registrar, hosting nameservers and mail provider (MX: Google Workspace, Microsoft 365 …) to a list of company domains
- **Brand protection**: check lookalike domains in bulk

### Input

| Field | Description |
|---|---|
| `domains` | Domains or URLs, one per line. `https://www.shop.co.uk/page` becomes `shop.co.uk`. IDNs (bücher.de) are supported. |
| `includeDns` | Also return the A, MX and NS records (default **on**). |
| `whoisFallback` | Query port-43 WHOIS where RDAP is not available (default **on**). |
| `dnsFallback` | Confirm registration via DNS if the registry does not answer (default **on**). |
| `maxDomains` | Safety cap (0 = no limit). |
| `concurrency` | Parallel lookups (default 10, max 25). Per-registry limits are applied automatically. |

```json
{
  "domains": ["apify.com", "python.org", "europa.eu", "bbc.co.uk", "yandex.ru"]
}
```

### Output

```json
{
  "domain": "apify.com",
  "tld": "com",
  "registered": true,
  "source": "rdap",
  "registrar": "Amazon Registrar, Inc.",
  "registrarIanaId": "468",
  "registrarAbuseEmail": "trustandsafety@support.aws.com",
  "registrarAbusePhone": "+1.2024422253",
  "createdAt": "2009-06-02T17:14:10.000Z",
  "updatedAt": "2026-05-16T16:53:04.000Z",
  "expiresAt": "2035-06-02T17:14:10.000Z",
  "ageDays": 6360,
  "ageYears": 17.4,
  "daysToExpiry": 3135,
  "expiringSoon": false,
  "statusCodes": ["client transfer prohibited"],
  "nameservers": ["ns-1225.awsdns-25.org", "ns-1928.awsdns-49.co.uk", "ns-449.awsdns-56.com", "ns-839.awsdns-40.net"],
  "dnssec": true,
  "rdapServer": "https://rdap.verisign.com/com/v1/",
  "whoisServer": null,
  "dnsA": ["3.170.42.68", "3.170.42.76"],
  "dnsMx": ["aspmx.l.google.com", "alt1.aspmx.l.google.com"],
  "dnsNs": ["ns-1225.awsdns-25.org", "ns-449.awsdns-56.com"],
  "checkedAt": "2026-11-01T17:10:00.000Z",
  "error": null
}
```

- `registered`: `true`, `false` (the registry says the name is not registered) or `null` (the lookup failed, free).
- `source`: `rdap`, `whois` or `dns`. Results with `dns` confirm the domain exists, but the registry gave no dates or registrar.
- `expiringSoon`: `true` when the domain expires within 30 days.
- Date fields are ISO 8601 in UTC. Fields a registry does not publish are `null`. For example, DENIC (.de) and EURid (.eu) do not publish creation or expiry dates.

Download results as JSON, CSV, Excel or HTML, or read them through the Apify API. You can also connect them to Make, Zapier, n8n or Google Sheets.

### Privacy: no personal data

The Actor returns **registry-level facts only**: registrar, dates, status, nameservers and the registrar's corporate abuse contact. **Registrant, admin and tech contact data (names, emails, phones, addresses) is never extracted**, even when a registry still shows it. That keeps the output GDPR-friendly and safe to store.

### Pricing

Pay per event:

- **$0.001 per domain** successfully looked up (registered or confirmed not registered).
- A tiny Actor start fee ($0.00005).
- Invalid inputs and failed lookups (`registered: null`) are **free**.

1,000 domains cost about **$1**. Set *Maximum cost per run* in the run options and the Actor stops cleanly when that budget is reached.

### Tips & limits

- Registries rate-limit WHOIS. The Actor limits itself to 4 RDAP and 2 WHOIS requests at a time per registry and retries with back-off. For very large .eu/.de/.jp batches, keep `concurrency` at the default.
- Only checking whether names are **available to buy**? Use the sister Actor [Bulk Domain Availability Checker](https://apify.com/globose_talent_mn9/domain-availability-rdap). It also generates name × TLD combinations.
- Need a website's emails, phones and social links? See [Website Contact Details Scraper](https://apify.com/globose_talent_mn9/website-contact-details-scraper).
- Checking a domain's email security (SPF, DMARC, DKIM, MTA-STS)? See [DNS & Email Security Checker](https://apify.com/globose_talent_mn9/dns-email-security-checker).

### FAQ

**Is RDAP the same as WHOIS?** RDAP is the IETF standard that replaces WHOIS. ICANN requires it for all gTLDs (.com, .net, .org, new gTLDs). It returns structured JSON instead of free text. This Actor uses RDAP first and classic WHOIS where RDAP is missing.

**Why is `registrar` empty for some ccTLDs?** Some registries (e.g. .de) do not publish the registrar or dates publicly. The Actor returns what the registry publishes.

**Can I monitor expiry dates on a schedule?** Yes. Create a Task with your domain list and schedule it weekly. Then filter on `expiringSoon = true` or `daysToExpiry < 60`.

### Related Actors

#### SEO & web suite

- [SEO Audit Crawler](https://apify.com/globose_talent_mn9/seo-audit-crawler)
- [Broken Link Checker](https://apify.com/globose_talent_mn9/broken-link-checker)
- [Sitemap URL Extractor](https://apify.com/globose_talent_mn9/sitemap-urls)
- [Bulk Redirect Checker](https://apify.com/globose_talent_mn9/redirect-checker)
- [Website Metadata / Open Graph Extractor](https://apify.com/globose_talent_mn9/website-metadata-extractor)
- [Website Screenshot](https://apify.com/globose_talent_mn9/website-screenshot)
- [Website Image Extractor](https://apify.com/globose_talent_mn9/website-image-extractor)
- [SSL Certificate Checker](https://apify.com/globose_talent_mn9/ssl-certificate-checker)
- [Subdomain Finder](https://apify.com/globose_talent_mn9/subdomain-finder)
- [DNS & Email Security Checker (SPF/DKIM/DMARC)](https://apify.com/globose_talent_mn9/dns-email-security-checker)
- [Domain Availability Checker](https://apify.com/globose_talent_mn9/domain-availability-rdap)
- [Tech Stack Detector](https://apify.com/globose_talent_mn9/tech-stack-detector)

#### Documents suite

- [PDF Text Extractor](https://apify.com/globose_talent_mn9/pdf-text-extractor)
- [Scanned PDF & Image OCR](https://apify.com/globose_talent_mn9/pdf-image-ocr)
- [Article Extractor](https://apify.com/globose_talent_mn9/article-extractor)
- [URL & HTML to PDF Converter](https://apify.com/globose_talent_mn9/url-to-pdf)

#### Jobs suite

- [Greenhouse Jobs API](https://apify.com/globose_talent_mn9/greenhouse-jobs-api)
- [Lever Jobs API](https://apify.com/globose_talent_mn9/lever-jobs-api)
- [Ashby Jobs API](https://apify.com/globose_talent_mn9/ashby-jobs-api)
- [Workday Jobs API](https://apify.com/globose_talent_mn9/workday-jobs-api)
- [Company Jobs API (10 ATS)](https://apify.com/globose_talent_mn9/ats-jobs-api)
- [Remote Jobs Aggregator](https://apify.com/globose_talent_mn9/remote-jobs-aggregator)

#### Also by us

- [Wayback Machine Snapshots](https://apify.com/globose_talent_mn9/wayback-machine-snapshots)
- [RSS Feed Reader](https://apify.com/globose_talent_mn9/rss-feed-reader)
- [Website Contact Details Scraper](https://apify.com/globose_talent_mn9/website-contact-details-scraper)

# Actor input Schema

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

Domain names or URLs, one per line (e.g. example.com, https://www.shop.co.uk/page). 'www.' and paths are stripped. Internationalised names (bücher.de) are supported.

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

Also return the current A, MX and NS records of each registered domain (via DNS-over-HTTPS).

## `whoisFallback` (type: `boolean`):

For TLDs without a public RDAP server (e.g. .eu, .il, .co, .jp) or when RDAP fails, query the registry's classic WHOIS server. Only registry-level facts are extracted; registrant contact data is never returned.

## `dnsFallback` (type: `boolean`):

If neither RDAP nor WHOIS answers, confirm registration via DNS (result marked source = dns, without dates or registrar).

## `maxDomains` (type: `integer`):

Look up at most this many domains. 0 = no limit.

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

How many domains to look up at the same time (max 25). Requests to a single registry are limited automatically (4 RDAP / 2 WHOIS at a time).

## Actor input object example

```json
{
  "domains": [
    "apify.com",
    "python.org",
    "europa.eu"
  ],
  "includeDns": true,
  "whoisFallback": true,
  "dnsFallback": true,
  "maxDomains": 0,
  "concurrency": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

All WHOIS results in the default dataset, shown with the 'overview' table view.

## `summary` (type: `string`):

Counts of registered, not registered and failed lookups.

# 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": [
        "apify.com",
        "python.org",
        "europa.eu"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("globose_talent_mn9/whois-domain-lookup").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": [
        "apify.com",
        "python.org",
        "europa.eu",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("globose_talent_mn9/whois-domain-lookup").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": [
    "apify.com",
    "python.org",
    "europa.eu"
  ]
}' |
apify call globose_talent_mn9/whois-domain-lookup --silent --output-dataset

```

## MCP server setup

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

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/2Zs1IDjxeHOdhxPLK/builds/1d1MSquFWAwcdYEuS/openapi.json
