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

Get the registrar, creation and expiry dates, domain age, days until expiry, status codes, nameservers, DNSSEC, and the published registrant organization for up to 5,000 domains per run. Registry RDAP first, port 43 WHOIS fallback. No key. Clay ready.

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

## Pricing

from $2.13 / 1,000 domain lookups

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

Look up who registered a domain, when, and when it expires. List domains, website URLs, or email addresses, and get one flat row per domain: the registrar, the creation, update, and expiry dates, the domain age and days until expiry, the status codes, the nameservers, DNSSEC, and the registrant organization and country where the registry publishes them. Use it to age a lead list, spot domains close to expiry, find the registrar for a takedown or a purchase, or check whether a domain is registered at all.

The actor asks each registry directly. It reads the registry's public RDAP server, the structured service that replaced WHOIS, from the official IANA list of RDAP servers. Where the IANA list names no RDAP server for a TLD, the actor uses the registry's own RDAP server where one answers (.io, .ac, .co, .us, .ch, and .li, each checked on 2026-10-28), and otherwise the registry's port 43 WHOIS server (such as .de, .eu, .jp, .be, .at, and .dk). No key, no account, and no third party lookup service.

### Features

- **Registry sources only.** RDAP from the IANA bootstrap file for 1,204 top level domains plus 6 registry RDAP servers the file does not list yet, and port 43 WHOIS through the IANA referral for the rest. The row names the source and the server that answered.
- **Domain age and days until expiry, computed.** Ready to filter on in Clay or a spreadsheet.
- **Registrar record filled in.** For .com, .net, and other registries that publish only part of the record, the actor also reads the registrar's own RDAP record for the abuse email and any registrant organization or country the registrar publishes.
- **Any input shape.** `stripe.com`, `https://blog.stripe.com/x`, and `jane@stripe.com` all look up `stripe.com`. A domain listed twice is looked up and charged once.
- **Not registered is an answer.** A domain the registry says it does not hold returns `registered` false.
- **You pay for answers only.** A row is charged only when the registry returned the dates or said the domain is not registered. A row with no dates published, an error row, and input that is not a domain are free.
- **Polite to registries.** At most two requests in flight per RDAP server and one query at a time per WHOIS server, with retries on rate limits.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `domains` | array | | Domains, URLs, or email addresses, 1 to 5,000 per run |
| `domain` | string | | One domain, for a Clay column with one domain per row. Added to `domains` |
| `follow_registrar_rdap` | string, `true` or `false` | `true` | Also read the registrar's RDAP record where the registry links one |
| `include_raw` | string, `true` or `false` | `false` | Put the registry's RDAP JSON or WHOIS text in `raw_response` |
| `max_charge_usd` | string | | Stop before a charge that would pass this amount |

Every input accepts a string, which is what Clay sends.

### Output

One row per domain. Every row has the same columns.

| Field | Type | Meaning |
|---|---|---|
| `input` | string | The entry as you gave it: a domain, URL, or email address. |
| `domain` | string | The registrable domain looked up, lowercase. Subdomains and www are dropped. Empty when the input is not a domain. |
| `tld` | string | The top level domain. |
| `registered` | boolean | true: the registry holds a record for this domain. false: the registry answered that it is not registered. Empty on an error row. |
| `registrar_name` | string | The registrar of record, as the registry or registrar publishes it. |
| `registrar_iana_id` | string | The registrar's IANA ID, where published (gTLDs and some ccTLDs). |
| `registrar_url` | string | The registrar's website, where published. |
| `registrar_abuse_email` | string | The registrar's abuse contact address, where published. |
| `created_at` | string | Registration date, UTC ISO 8601. |
| `updated_at` | string | Date the registry record last changed, UTC ISO 8601. |
| `expires_at` | string | Expiry date, UTC ISO 8601. |
| `domain_age_days` | integer | Whole days from the creation date to the time of the run. |
| `days_until_expiry` | integer | Whole days from the time of the run to the expiry date. Negative when the expiry date has passed (the domain may be in its grace period). |
| `status` | array | The domain status codes as the registry publishes them, for example client transfer prohibited, redemption period, or pending delete. |
| `nameservers` | array | The delegated nameservers, lowercase. |
| `dnssec` | boolean | true when the delegation is signed, false when it is not, empty when the registry does not say. |
| `registrant_organization` | string | The registrant organization, only when the registry or registrar publishes it. Most gTLD records are redacted for privacy, so this is often empty. |
| `registrant_country` | string | The registrant's two letter country code, only when published. |
| `source` | string | rdap: the registry's RDAP server. whois: the registry's port 43 WHOIS server, used where the registry has no RDAP server or its RDAP server failed. |
| `source_server` | string | The registry server that answered. |
| `registrar_rdap_status` | string | followed: the registrar's own RDAP record was read and filled gaps. not_offered: the registry names no registrar record. unreachable: the registrar record did not answer. off: the option is off. Empty for WHOIS rows. |
| `raw_response` | string | With Include the raw registry answer on: the RDAP JSON or the WHOIS text, up to 50,000 characters. Empty otherwise. |
| `row_status` | string | ok: the registry answered with the dates, or answered that the domain is not registered (charged). partial: the registry answered but publishes no creation or expiry date, as the .de and .eu registries do over WHOIS (free). error: no answer, or the input is not a domain (free). |
| `error_reason` | string | Why a row is partial or error, for example invalid_domain, whois_rate_limited, or input_invalid for input the run could not use. |
| `billable_events_json` | string | What this row was billed as, for example {"domain-lookup":1}. {} means free. |
| `checked_at` | string | When the row was written, UTC. |

Example row:

```json
{
  "input": "https://www.notion.io/pricing",
  "domain": "notion.io",
  "tld": "io",
  "registered": true,
  "registrar_name": "Gandi SAS",
  "registrar_iana_id": "81",
  "registrar_url": "https://www.gandi.net",
  "registrar_abuse_email": "abuse@support.gandi.net",
  "created_at": "2012-05-21T04:24:08.000Z",
  "updated_at": "2026-09-10T01:50:39.000Z",
  "expires_at": "2027-05-21T04:24:08.000Z",
  "domain_age_days": 5273,
  "days_until_expiry": 205,
  "status": [
    "clientTransferProhibited"
  ],
  "nameservers": [
    "ns-1812.awsdns-34.co.uk",
    "ns-685.awsdns-21.net"
  ],
  "dnssec": false,
  "registrant_organization": "SOCIETE EDITRICE DU MONDE",
  "registrant_country": "FR",
  "source": "rdap",
  "source_server": "rdap.verisign.com",
  "registrar_rdap_status": "followed",
  "raw_response": null,
  "row_status": "ok",
  "error_reason": null,
  "billable_events_json": "{\"domain-lookup\":1}",
  "checked_at": "2026-10-28T14:00:00.000Z"
}
```

The run also writes a `RUN_SUMMARY` record to its key-value store with counts per row status and per source, the requests made, and the charges.

### Pricing

Pay per event. You pay for domain lookups and the run start.

| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| `domain-lookup`, one domain the registry answered for | $0.0025 | $0.002375 | $0.00225 | $0.002125 |
| `apify-actor-start`, once per run (one per GB of memory; the default 128 MB is one) | $0.0006 | $0.0006 | $0.0006 | $0.0006 |

Per 1,000 domain lookups: $2.50 on the free plan, $2.13 on Gold.

Free rows: a domain whose registry publishes no creation or expiry date (`partial`), an error row, input that is not a domain, and a repeat of a domain in the same run. A run whose input is refused writes one free row and charges only the run start.

Free plan cap: 1.50 USD of evaluation a month, about 600 domain lookups. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your `max_charge_usd`.

Mamba Labs pays the platform costs of your run. The registries' RDAP and WHOIS services are free and need no key.

### Usage examples

**Apify Console or API.** Paste your domains and start the run. Read the rows with `GET https://api.apify.com/v2/datasets/{datasetId}/items`.

```json
{
  "domains": ["stripe.com", "notion.io", "lemonde.fr"]
}
```

**Clay.** Add an Apify column, pick this actor, and map your domain or website column to `domain`. Filter on `row_status` first, then on `domain_age_days` or `days_until_expiry`.

**MCP.** The Mamba Labs MCP server `@mambalabsdev/mcp-whois-domain-lookup` exposes the tool `lookup_domain_whois` to Claude and other MCP clients.

### Error handling

| Case | What you get |
|---|---|
| No domains, an empty list, a wrong type, or more than 5,000 domains | One free row, `row_status` `error`, `error_reason` starting `input_invalid:`, and the run ends successfully. Only the run start is charged |
| An entry that is not a domain (an IP address, a bare TLD, text) | A free row, `error_reason` `invalid_domain` |
| The registry says the domain is not registered | A charged row, `registered` false |
| The registry answers but publishes no dates (.de and .eu over WHOIS) | A free row, `row_status` `partial`, with the status and nameservers it did publish |
| The RDAP server fails or times out | The actor asks the registry's WHOIS server instead; if that fails too, a free `error` row names both |
| A WHOIS server drops the connection | One retry 3 seconds later, then a free `error` row |
| A WHOIS server refuses more queries | A free row, `error_reason` `whois_rate_limited`; rerun those domains later |
| The run nears its timeout | It stops starting new domains 90 seconds before the timeout, writes the rest as free `not_started` rows, and ends successfully |

### Limitations

- Most .com, .net, and new gTLD records redact the registrant for privacy, so `registrant_organization` is often empty. The actor never guesses it.
- Some registries publish less than others. DENIC (.de) publishes status, nameservers, and the last change date over WHOIS, and EURid (.eu) publishes the registrar and nameservers; neither publishes creation or expiry dates there, so those rows are `partial` and free.
- Some ccTLD registries publish no WHOIS or RDAP for automated use, or answer only listed addresses (for example .es). Those rows are free errors. A WHOIS server that drops a connection is retried once.
- WHOIS text formats differ by registry. Fields a registry prints in an unusual format can be empty; `include_raw` returns the text so you can read it yourself.
- Dates are the registry's own. A domain past its expiry date can still show `registered` true during the registry's grace period.

### Mamba Labs actor suite

| Actor | Actor ID |
|---|---|
| [Account Hiring Watch](https://apify.com/mambalabs/account-hiring-watch?fpr=mamba) | `gRAZA5WBi1r6L0gy7` |
| [Agent Accessibility Auditor](https://apify.com/mambalabs/agent-accessibility-auditor?fpr=mamba) | `anxbRv0lKrpQ1pnua` |
| [Agent to Brokerage Resolver](https://apify.com/mambalabs/agent-brokerage-resolver?fpr=mamba) | `ePRRGLxOGyaVHO4dI` |
| [AI Tooling Detector](https://apify.com/mambalabs/ai-tooling-detector?fpr=mamba) | `EwkHhmqiuJgRoVEbE` |
| [B2B Reddit Conversation Monitor](https://apify.com/mambalabs/b2b-reddit-conversation-monitor?fpr=mamba) | `SoDryzzsjmY3SsiyG` |
| [Bluesky Brand Presence Mapper](https://apify.com/mambalabs/bluesky-brand-presence-mapper?fpr=mamba) | `eLpxzP4IuXznlFVND` |
| [Career Change Signal Engine](https://apify.com/mambalabs/career-change-signal-engine?fpr=mamba) | `vX2Yga1a6wGaXaP14` |
| [Company Change Event Feed](https://apify.com/mambalabs/company-change-event-feed?fpr=mamba) | `oX44rS0fkEJ3rXLWe` |
| [Company Contact Details Extractor](https://apify.com/mambalabs/company-contact-details-extractor?fpr=mamba) | `4mMncKaJykiq94grz` |
| [Company Discovery List Builder](https://apify.com/mambalabs/company-discovery-list-builder?fpr=mamba) | `jch0HdaZnpbMqlcGS` |
| [Company Firmographic Enricher](https://apify.com/mambalabs/company-firmographic-enricher?fpr=mamba) | `YlUtLWjfPpqykmB8g` |
| [Company Funding Record](https://apify.com/mambalabs/funding-investor-record?fpr=mamba) | `OFS4Mt1gyYNtGfUbE` |
| [Company Headcount Estimator](https://apify.com/mambalabs/company-headcount-estimator?fpr=mamba) | `aHC4GROnNt6kfZe5r` |
| [Company Identity Resolver](https://apify.com/mambalabs/company-identity-resolver?fpr=mamba) | `lr8fTRAmZCBZmuwwh` |
| [Company Social Presence Mapper](https://apify.com/mambalabs/company-social-presence-mapper?fpr=mamba) | `4k6CCemkgBDz18m2h` |
| [Competitor Price, Stock, and Changelog Monitor](https://apify.com/mambalabs/competitor-price-stock-changelog-monitor?fpr=mamba) | `yxdgCbUQ4PYQWwRNU` |
| [Contact Classifier](https://apify.com/mambalabs/contact-classifier?fpr=mamba) | `0lGSeYJmniXhGANnO` |
| [Contractor License Lookup](https://apify.com/mambalabs/contractor-license-lookup?fpr=mamba) | `WBYK3CPI2kdeq4bP1` |
| [Cookie Consent Audit](https://apify.com/mambalabs/cookie-consent-audit?fpr=mamba) | `TrKyOS0KBoGC35nbr` |
| [Domain Deliverability Checker](https://apify.com/mambalabs/domain-deliverability-checker?fpr=mamba) | `0tVgxI7A6o9jMlxmc` |
| [Domain to LinkedIn URL Resolver](https://apify.com/mambalabs/domain-to-linkedin-url-resolver?fpr=mamba) | `3HtnSaqPHOg1Qg5gx` |
| [Ecommerce Platform Profiler](https://apify.com/mambalabs/ecommerce-platform-profiler?fpr=mamba) | `5G2NeYjBbQTjaTn9L` |
| [Ecommerce Store Discovery](https://apify.com/mambalabs/ecommerce-store-discovery?fpr=mamba) | `PeHu4sLyFvQHXUUrX` |
| [Event Presence Index](https://apify.com/mambalabs/event-presence-index?fpr=mamba) | `WLhMy8fMDgsxdYxv5` |
| [Expert Witness Directory](https://apify.com/mambalabs/expert-witness-directory?fpr=mamba) | `LIpwlgfE3LaQBaXd4` |
| [Funding and Press Signal Scanner](https://apify.com/mambalabs/funding-press-signal-scanner?fpr=mamba) | `FS13X6dhQVgX3XOM6` |
| [GitHub Organization Signal Scanner](https://apify.com/mambalabs/github-organization-signal-scanner?fpr=mamba) | `ahF8RRpv5mzPao5CN` |
| [Google Ads Transparency Monitor](https://apify.com/mambalabs/google-ads-transparency-monitor?fpr=mamba) | `1eOwxhBVxzvOXAm4s` |
| [Government Contract Award Monitor](https://apify.com/mambalabs/public-award-monitor?fpr=mamba) | `zhEtllASykOcx9hJ8` |
| [GTM Hiring Signal Scraper](https://apify.com/mambalabs/gtm-hiring-signal-scraper?fpr=mamba) | `D7O1SA2EqwHGsGr1P` |
| [GTM Signals Aggregator](https://apify.com/mambalabs/b2b-buying-signals-hiring-tech-stack-intent-for-clay?fpr=mamba) | `xKdRfnfFNkdMpFuNs` |
| [ICP Fit Scorer](https://apify.com/mambalabs/icp-account-lead-scoring-fit-scorer-0-100-for-clay?fpr=mamba) | `W161DT8W4kW55dMFh` |
| [Influencer Change Monitor](https://apify.com/mambalabs/creator-change-monitor?fpr=mamba) | `d2VVgahNL6UmcLkhg` |
| [Influencer Finder](https://apify.com/mambalabs/creator-finder?fpr=mamba) | `tpkedmloIIWtXx6sg` |
| [Influencer Lead List Builder](https://apify.com/mambalabs/creator-lead-list-all-in-one?fpr=mamba) | `KnmByszcv135yM30G` |
| [Influencer Profile Scraper](https://apify.com/mambalabs/creator-profile-reader?fpr=mamba) | `EqEnklDVMIcB1V499` |
| [Influencer Talent Agency Lookup](https://apify.com/mambalabs/talent-agency-lookup?fpr=mamba) | `zCuX4Mgyg6JvXgGzd` |
| [Instagram Facebook Brand Presence Mapper](https://apify.com/mambalabs/meta-brand-presence-mapper?fpr=mamba) | `HXh65I0JBjPsunbY8` |
| [Integration and Marketplace Presence Mapper](https://apify.com/mambalabs/integration-marketplace-presence-mapper?fpr=mamba) | `V0guNuvM85Q61f2gj` |
| [Job Board Keyword Signal Scanner](https://apify.com/mambalabs/job-board-keyword-signal-scanner?fpr=mamba) | `4DvqpvhMR74NLcDDY` |
| [Job Change Tracker](https://apify.com/mambalabs/job-change-tracker?fpr=mamba) | `L8UbEmMJC1XYPSZOb` |
| [Job Posting Monitor](https://apify.com/mambalabs/gtm-job-discovery?fpr=mamba) | `QCfICD9kOPiOdj5iI` |
| [Legal Entity Resolver](https://apify.com/mambalabs/legal-entity-resolver?fpr=mamba) | `KHFyPCDIx7CyqULYm` |
| [Link in Bio Scraper and Newsletter Detector](https://apify.com/mambalabs/link-in-bio-newsletter-checker?fpr=mamba) | `OorucdheTIgu7RFzK` |
| [LinkedIn Company Page Mapper](https://apify.com/mambalabs/linkedin-company-presence-mapper?fpr=mamba) | `zOPm6A9JEhUGcIdFW` |
| [LinkedIn Post Tracker](https://apify.com/mambalabs/linkedin-post-engager-capture?fpr=mamba) | `oiGLNPuaf5BRaz9K5` |
| [Local Business Lead Builder](https://apify.com/mambalabs/local-business-lead-builder?fpr=mamba) | `qMN97aoHhsAS5bznV` |
| [Local Rank and Map Pack Tracker](https://apify.com/mambalabs/local-rank-map-pack-tracker?fpr=mamba) | `gv0kyHGDIg8XscclB` |
| [Lookalike Company Finder](https://apify.com/mambalabs/lookalike-company-finder?fpr=mamba) | `e2O426WBAbLLQL4Z2` |
| [Manufacturer and Supplier Finder](https://apify.com/mambalabs/manufacturer-supplier-finder?fpr=mamba) | `Qcsdmd0lUfPzVkonh` |
| [Meta Ad Library Monitor](https://apify.com/mambalabs/meta-ad-library-monitor?fpr=mamba) | `J1GWlSXfSGU3u8Wng` |
| [Mobile Phone Waterfall](https://apify.com/mambalabs/mobile-phone-waterfall-orchestrator?fpr=mamba) | `6OOgPktf7RIa5XCOP` |
| [New Company Registrations Feed](https://apify.com/mambalabs/new-company-registrations-feed?fpr=mamba) | `g2WfZhWvCtc57g2Jo` |
| [New Hire Finder](https://apify.com/mambalabs/new-hire-finder?fpr=mamba) | `cKuc38p4nYHNF3IW8` |
| [Newsletter Sponsor Tracker](https://apify.com/mambalabs/newsletter-sponsor-tracker?fpr=mamba) | `qSwpqxD1TiPZpLQHv` |
| [Open Tender and RFP Finder](https://apify.com/mambalabs/open-tender-rfp-finder?fpr=mamba) | `kPTGz6t6TFoUUyfaO` |
| [Outbound Stack Detector](https://apify.com/mambalabs/outbound-infrastructure-fingerprint?fpr=mamba) | `v43UJC8r7qW7cBSTG` |
| [Page Finder and Extractor](https://apify.com/mambalabs/page-finder-extractor?fpr=mamba) | `TpurgcOZbVnknlaiC` |
| [Partner and Member Directory Extractor](https://apify.com/mambalabs/partner-member-directory-extractor?fpr=mamba) | `ZX0XJPPUvnFJxeC1a` |
| [People Finder & Email Verifier](https://apify.com/mambalabs/people-finder?fpr=mamba) | `LEgloG7tWgQl4o6TD` |
| [Person LinkedIn URL Resolver](https://apify.com/mambalabs/person-linkedin-url-resolver?fpr=mamba) | `ssuyPV8LnEsL8qbnb` |
| [Person Social Footprint Mapper](https://apify.com/mambalabs/person-social-footprint-mapper?fpr=mamba) | `jfQXa2zW9FHCJot9K` |
| [Personal Email to Company Resolver](https://apify.com/mambalabs/personal-email-to-company-resolver?fpr=mamba) | `AefT5Ye6YNPFQwJBf` |
| [Pinterest Brand Presence Mapper](https://apify.com/mambalabs/pinterest-brand-presence-mapper?fpr=mamba) | `d1HvjZfKhgvWsoEwn` |
| [Podcast Guest and Host Finder](https://apify.com/mambalabs/podcast-guest-host-finder?fpr=mamba) | `o2MGSvgbSLeeXOsIo` |
| [Prospect Engine](https://apify.com/mambalabs/b2b-prospect-engine?fpr=mamba) | `q9rT6v64nUJdPexOQ` |
| [Public Feature Board and Roadmap Monitor](https://apify.com/mambalabs/public-feature-board-roadmap-monitor?fpr=mamba) | `rcHF5gj5r2Vqnry35` |
| [Publishing Frequency Tracker](https://apify.com/mambalabs/blog-publishing-frequency?fpr=mamba) | `TbLwaUUATdYb6wp4N` |
| [Reddit Brand Presence Mapper](https://apify.com/mambalabs/reddit-brand-presence-mapper?fpr=mamba) | `pKQZmDaT70SEb54bZ` |
| [Reporting Window Finder](https://apify.com/mambalabs/public-company-reporting-window-finder?fpr=mamba) | `uINxR7a1IW8qUTRUX` |
| [Sequencer Event Poller](https://apify.com/mambalabs/sequencer-event-poller?fpr=mamba) | `S6s8Rjd61tGdrMRk4` |
| [Sequencer Lead Push](https://apify.com/mambalabs/clay-to-instantly-smartlead-push?fpr=mamba) | `0Jv27VeWM5tSZQs9x` |
| [Team Page People Extractor](https://apify.com/mambalabs/team-page-people-extractor?fpr=mamba) | `j8a9zX0k4mNbvDbWK` |
| [Tech Stack Signal Detector](https://apify.com/mambalabs/gtm-tech-stack-signal-scraper?fpr=mamba) | `qyd7nNyqFPelQViBx` |
| [TikTok Brand Presence Mapper](https://apify.com/mambalabs/tiktok-brand-presence-mapper?fpr=mamba) | `fco8FvoJcSafbeyd1` |
| [Trustpilot Reputation Enricher](https://apify.com/mambalabs/review-platform-reputation-enricher?fpr=mamba) | `3lIqfCt61j4hqE1xz` |
| [VC and Accelerator Portfolio List Builder](https://apify.com/mambalabs/vc-accelerator-portfolio-list-builder?fpr=mamba) | `chH8hrfuoqqolW06m` |
| [WCAG Accessibility Audit](https://apify.com/mambalabs/wcag-accessibility-audit?fpr=mamba) | `P3jBj3FRghKEhX52z` |
| [Website Phrase and Business Model Classifier](https://apify.com/mambalabs/website-phrase-business-model-classifier?fpr=mamba) | `CBuZ9k7sRwBeiKiCS` |
| [Website Traffic Rank Estimator](https://apify.com/mambalabs/website-traffic-rank-estimator?fpr=mamba) | `GnOFUzlNVIoXgeJjH` |
| [Work Email Waterfall](https://apify.com/mambalabs/email-waterfall-orchestrator?fpr=mamba) | `OT6xqTFThC0Rjf7Zj` |
| [Workplace Program Detector](https://apify.com/mambalabs/workplace-program-detector?fpr=mamba) | `Li6pPDhqbdzFz3h7G` |
| [X Brand Presence Mapper](https://apify.com/mambalabs/x-brand-presence-mapper?fpr=mamba) | `oLOgadhHUkNAyDA3w` |
| [YouTube Channel Stats Extractor](https://apify.com/mambalabs/youtube-channel-transcript-extractor?fpr=mamba) | `6hSpD3kd2s2IQ4VSs` |

MCP servers for the suite are published under the npm scope [@mambalabsdev](https://www.npmjs.com/org/mambalabsdev).

Built by [Mamba Labs](https://apify.com/mambalabs).

# Actor input Schema

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

Domains, website URLs, or email addresses, one per line, 1 to 5,000 per run. Subdomains and www are dropped (blog.stripe.com is looked up as stripe.com), and a domain listed twice is looked up and charged once. An entry that is not a domain returns one free error row.

## `domain` (type: `string`):

One domain, URL, or email address. Use this for a Clay column that holds one domain per row. Added to Domains when both are given.

## `follow_registrar_rdap` (type: `string`):

On by default. For registries that publish only part of the record (such as .com and .net), also read the registrar's own RDAP record for the abuse email and any registrant organization or country the registrar publishes. Off saves one request per domain and does not change the price.

## `include_raw` (type: `string`):

Off by default. On: raw_response carries the registry's RDAP JSON or WHOIS text, up to 50,000 characters, for audits or your own parsing.

## `max_charge_usd` (type: `string`):

Optional. The run stops before any charge that would take it past this amount and delivers every row already charged. Leave empty to rely only on the maximum cost per run you set in Apify, which the actor also honors.

## `source_tag` (type: `string`):

Internal attribution tag for saved tasks. Leave empty.

## Actor input object example

```json
{
  "domains": [
    "stripe.com",
    "notion.io",
    "lemonde.fr"
  ],
  "follow_registrar_rdap": "true",
  "include_raw": "false"
}
```

# Actor output Schema

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

No description

## `run_summary` (type: `string`):

No description

# 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",
        "notion.io",
        "lemonde.fr"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mambalabs/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": [
        "stripe.com",
        "notion.io",
        "lemonde.fr",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("mambalabs/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": [
    "stripe.com",
    "notion.io",
    "lemonde.fr"
  ]
}' |
apify call mambalabs/whois-domain-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mambalabs/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/MTrkG5FLU6SjqLdJY/builds/QIZjmXjEdOTcapvVh/openapi.json
