# Domain WHOIS Lookup (`junipr/domain-whois-lookup`) Actor

Look up WHOIS data and 7 DNS record types (A, AAAA, MX, TXT, NS, CNAME, SOA) for any domain. Returns registrar, dates, name servers, registrant info. Batch process hundreds of domains.

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

## Pricing

from $1.30 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Domain WHOIS & DNS Lookup

### What does Domain WHOIS & DNS Lookup do?

Domain WHOIS & DNS Lookup retrieves comprehensive registration and DNS data for any list of domain names. It performs WHOIS lookups to get registrar information, registration dates, expiration dates, nameservers, registrant organization, and domain status. It also queries DNS to return A, AAAA, MX, NS, TXT, CNAME, and SOA records. Both lookups run in parallel for fast batch processing.

The actor accepts domains in any format (with or without protocol, www prefix, or trailing paths) and normalizes them automatically. It processes domains concurrently in configurable batch sizes and returns one structured result per domain, including a registration status flag and any errors encountered during lookup.

### Features

- **WHOIS registration data** — Registrar, creation date, update date, expiration date, nameservers, DNSSEC status, registrant organization, country, and state
- **Full DNS records** — A, AAAA, MX, NS, TXT, CNAME, and SOA record types
- **Registration detection** — Boolean flag indicating whether the domain is registered
- **Batch processing** — Look up hundreds of domains in a single run with configurable concurrency
- **Flexible input** — Accepts `example.com`, `https://example.com`, `www.example.com`, or `https://www.example.com/path` and normalizes automatically
- **Selective lookups** — Toggle WHOIS and DNS independently to get only the data you need
- **Configurable DNS types** — Choose exactly which DNS record types to query
- **Domain status codes** — Returns EPP status codes (clientTransferProhibited, serverDeleteProhibited, etc.)
- **Error resilience** — Reports per-domain errors without stopping the entire batch
- **Concurrent lookups** — Processes multiple domains simultaneously for fast results

### Input Configuration

```json
{
  "domains": ["google.com", "github.com", "example.org"],
  "includeWhois": true,
  "includeDns": true,
  "dnsRecordTypes": ["A", "AAAA", "MX", "NS", "TXT", "CNAME", "SOA"],
  "maxConcurrency": 5,
  "requestDelay": 500
}
````

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `domains` | string\[] | `["google.com", "github.com"]` | List of domains to look up |
| `includeWhois` | boolean | `true` | Retrieve WHOIS registration data |
| `includeDns` | boolean | `true` | Retrieve DNS records |
| `dnsRecordTypes` | string\[] | `["A","AAAA","MX","NS","TXT","CNAME","SOA"]` | Which DNS record types to query |
| `maxConcurrency` | integer | `5` | Simultaneous domain lookups (1-20) |
| `requestDelay` | integer | `500` | Delay between batches in milliseconds (100-5,000) |

### Output Format

Each domain produces one result:

```json
{
  "domain": "github.com",
  "isRegistered": true,
  "whois": {
    "registrar": "MarkMonitor Inc.",
    "registrarUrl": "whois.markmonitor.com",
    "createdDate": "2007-10-09T18:20:50.000Z",
    "updatedDate": "2024-09-07T09:18:12.000Z",
    "expiresDate": "2026-10-09T18:20:50.000Z",
    "status": ["clientDeleteProhibited", "clientTransferProhibited"],
    "nameservers": ["dns1.p08.nsone.net", "dns2.p08.nsone.net"],
    "dnssec": "unsigned",
    "registrantOrg": "GitHub, Inc.",
    "registrantCountry": "US",
    "registrantState": "CA"
  },
  "dns": {
    "a": [{ "type": "A", "value": "140.82.121.3" }],
    "aaaa": [],
    "mx": [{ "type": "MX", "value": "alt1.aspmx.l.google.com", "priority": 5 }],
    "ns": [{ "type": "NS", "value": "dns1.p08.nsone.net" }],
    "txt": [{ "type": "TXT", "value": "v=spf1 ip4:192.30.252.0/22 include:_netblocks..." }],
    "cname": [],
    "soa": [{ "type": "SOA", "value": "dns1.p08.nsone.net hostmaster.nsone.net (serial: 1, refresh: 43200...)" }]
  },
  "errors": [],
  "scrapedAt": "2026-03-11T12:00:00.000Z"
}
```

### Usage Examples / Use Cases

- **Domain availability checking** — Quickly check registration status for a batch of domain names for acquisition or brand protection
- **Expiration monitoring** — Track when competitor or partner domains expire for acquisition opportunities or renewal reminders
- **DNS auditing** — Verify MX records, SPF/DKIM TXT records, and nameserver configuration across your domain portfolio
- **Security research** — Investigate suspicious domains by checking registration details, nameservers, and hosting infrastructure
- **SEO analysis** — Check domain age, registrar, and DNS configuration as part of competitive SEO research
- **Compliance and due diligence** — Verify domain ownership and registration details for business partnerships or legal matters
- **Email deliverability** — Check MX records and SPF/DMARC TXT records to diagnose email delivery issues

### Pricing

This actor uses Pay-Per-Event (PPE) pricing: **$1.30 per 1,000 domains looked up** ($0.0013 per event).

Pricing includes all platform compute costs — no hidden fees.

### FAQ

#### Does this actor need a proxy or API key?

No. WHOIS lookups use the standard WHOIS protocol and DNS lookups use the system DNS resolver. No proxy, API key, or external service subscription is required. The actor runs entirely on Apify infrastructure.

#### How many domains can I look up in one run?

There is no hard limit. The actor processes domains in concurrent batches based on your `maxConcurrency` setting. For very large batches (1,000+ domains), increase the run timeout in your Apify run configuration. Typical throughput is 5-10 domains per second depending on WHOIS server response times.

#### Why is WHOIS data missing for some domains?

Some TLDs and registrars redact WHOIS data to comply with GDPR or local privacy regulations. You may see `null` values for registrant organization, country, or contact fields. The `isRegistered` flag will still be accurate based on nameserver presence, and DNS data is unaffected by WHOIS privacy.

#### Can I look up subdomains?

DNS lookups work for subdomains (e.g., `blog.example.com`). WHOIS lookups are only meaningful for registered domain names, so the actor strips subdomains for WHOIS queries. If you only need DNS data for subdomains, set `includeWhois` to `false`.

#### What domain formats are accepted?

The actor normalizes any format: `example.com`, `https://example.com`, `http://www.example.com/path/page`, `www.example.com`. Protocol, www prefix, and paths are all stripped automatically before lookup.

### Related Actors

- [Email Validator](https://apify.com/junipr/email-validator) — Validate email addresses with MX record checks, SMTP verification, and disposable domain detection
- [Contact Info Scraper](https://apify.com/junipr/contact-info-scraper) — Extract emails, phones, and social links from any website
- [SEO Audit Tool](https://apify.com/junipr/seo-audit-tool) — Comprehensive SEO analysis for any website
- [Website Tech Stack Detector](https://apify.com/junipr/website-tech-stack-detector) — Identify technologies, frameworks, and services used by any website
- [Sitemap Generator](https://apify.com/junipr/sitemap-generator) — Crawl a website and generate a complete XML sitemap

# Actor input Schema

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

List of domains to look up. Can include or omit protocol and www prefix.

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

Look up WHOIS registration data (registrar, dates, nameservers).

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

Look up DNS records (A, AAAA, MX, NS, TXT, CNAME, SOA).

## `dnsRecordTypes` (type: `array`):

Which DNS record types to query.

## `maxConcurrency` (type: `integer`):

Maximum number of domains to look up simultaneously.

## `requestDelay` (type: `integer`):

Delay between batches of lookups in milliseconds.

## Actor input object example

```json
{
  "domains": [
    "google.com",
    "github.com"
  ],
  "includeWhois": true,
  "includeDns": true,
  "dnsRecordTypes": [
    "A",
    "AAAA",
    "MX",
    "NS",
    "TXT",
    "CNAME",
    "SOA"
  ],
  "maxConcurrency": 5,
  "requestDelay": 500
}
```

# Actor output Schema

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

WHOIS and DNS data for each queried 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": [
        "google.com",
        "github.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("junipr/domain-whois-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": [
        "google.com",
        "github.com",
    ] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "google.com",
    "github.com"
  ]
}' |
apify call junipr/domain-whois-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=junipr/domain-whois-lookup",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Domain WHOIS Lookup",
        "description": "Look up WHOIS data and 7 DNS record types (A, AAAA, MX, TXT, NS, CNAME, SOA) for any domain. Returns registrar, dates, name servers, registrant info. Batch process hundreds of domains.",
        "version": "1.0",
        "x-build-id": "gPPcAOY5PTvcRU7gq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/junipr~domain-whois-lookup/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-junipr-domain-whois-lookup",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/junipr~domain-whois-lookup/runs": {
            "post": {
                "operationId": "runs-sync-junipr-domain-whois-lookup",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/junipr~domain-whois-lookup/run-sync": {
            "post": {
                "operationId": "run-sync-junipr-domain-whois-lookup",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "domains": {
                        "title": "Domains",
                        "type": "array",
                        "description": "List of domains to look up. Can include or omit protocol and www prefix.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "google.com",
                            "github.com"
                        ]
                    },
                    "includeWhois": {
                        "title": "Include WHOIS Data",
                        "type": "boolean",
                        "description": "Look up WHOIS registration data (registrar, dates, nameservers).",
                        "default": true
                    },
                    "includeDns": {
                        "title": "Include DNS Records",
                        "type": "boolean",
                        "description": "Look up DNS records (A, AAAA, MX, NS, TXT, CNAME, SOA).",
                        "default": true
                    },
                    "dnsRecordTypes": {
                        "title": "DNS Record Types",
                        "type": "array",
                        "description": "Which DNS record types to query.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "A",
                            "AAAA",
                            "MX",
                            "NS",
                            "TXT",
                            "CNAME",
                            "SOA"
                        ]
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of domains to look up simultaneously.",
                        "default": 5
                    },
                    "requestDelay": {
                        "title": "Request Delay (ms)",
                        "minimum": 100,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Delay between batches of lookups in milliseconds.",
                        "default": 500
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
