# Domain Enricher (`silentflow/domain-enricher`) Actor

Turn any domain into rich company intelligence: WHOIS registration, DNS records, email provider, 50+ tech stack detections, social media profiles, and website metadata. Free Clearbit and BuiltWith alternative.

- **URL**: https://apify.com/silentflow/domain-enricher.md
- **Developed by:** [SilentFlow](https://apify.com/silentflow) (community)
- **Categories:** Lead generation, SEO tools, Other
- **Features:** Limited permissions
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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

## Domain Enricher

**Turn any domain name into rich company intelligence.** WHOIS registration, DNS records, email provider, technology stack, social media profiles, and website metadata. One API call per domain.

### How it works

![How Domain Enricher works, from domain name to structured company data](https://api.apify.com/v2/key-value-stores/kATsQT6TefTH2qN4W/records/how-it-works-v6.png)

### ✨ Why teams use this enricher

Paying hundreds per month for Clearbit just to look up a domain? Building spreadsheets by hand from WHOIS lookups? Guessing what tech stack a prospect uses?

- 🔍 **Everything about a domain in one call.** WHOIS registration, DNS records, email provider, 50+ technology detections, social media profiles, and website metadata. No need to query 5 different APIs.
- 💰 **Free Clearbit alternative.** Clearbit charges $99-999/month for similar data. This enricher is pay-per-domain with no subscription.
- ⚡ **20 domains in under 10 seconds.** 3 parallel workers enrich your entire list while you wait.
- 📊 **50+ technologies detected.** Frameworks (Next.js, Nuxt), CMS (WordPress, Shopify), analytics (GA4, Mixpanel), payments (Stripe, PayPal), CDN (Cloudflare, Vercel), monitoring (Sentry, Datadog), and more.
- 🌍 **Works with any TLD.** .com, .fr, .io, .ai, .co, .app, .dev, and every other TLD.
- 🛡️ **Always returns data.** Even if a website blocks scraping, you still get WHOIS, DNS, and email provider data.

### 🎯 What you can do with domain data

| Team | What they build |
|------|----------------|
| **Sales** | Qualify leads by domain: what tech do they use? How old is the company? What email provider? |
| **Competitive Intel** | Discover what tools and technologies your competitors run |
| **Market Research** | Analyze technology adoption across hundreds of companies in a sector |
| **Lead Enrichment** | Enrich your CRM with company metadata from domain names |
| **Due Diligence** | Verify domain registration, age, and status before partnerships |
| **Recruiting** | Identify a company's tech stack to match candidates with the right skills |

### 📥 Input parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `domains` | string\[] | Domain names to enrich (e.g., `stripe.com`, `doctolib.fr`, `mistral.ai`) |
| `maxItems` | integer | Maximum domains to process (default: 100) |

### 📊 Output data

```json
{
  "domain": "stripe.com",
  "enrichmentLevel": "full",
  "registration": {
    "registrar": "SafeNames Ltd.",
    "createdAt": "1995-09-12T04:00:00Z",
    "expiresAt": "2027-09-11T04:00:00Z",
    "updatedAt": "2025-10-01T01:39:51Z",
    "domainAge": 11166,
    "status": ["client delete prohibited"],
    "nameservers": ["ns-1087.awsdns-07.org"]
  },
  "dns": {
    "ipAddresses": ["185.166.24.2"],
    "mxRecords": ["aspmx.l.google.com"],
    "emailProvider": "Google Workspace",
    "detectedServices": ["Google Workspace", "Atlassian", "Facebook"]
  },
  "website": {
    "title": "Stripe | Financial Infrastructure to Grow Your Revenue",
    "description": "...",
    "language": "en",
    "ogImage": "https://...",
    "socialLinks": {
      "facebook": "https://www.facebook.com/StripeHQ",
      "twitter": "https://twitter.com/stripe",
      "linkedin": "https://www.linkedin.com/company/stripe",
      "instagram": "https://www.instagram.com/stripehq",
      "youtube": "https://youtube.com/@stripe",
      "github": "https://github.com/stripe"
    }
  },
  "techStack": {
    "cdn": "Cloudflare",
    "server": "nginx",
    "framework": "Next.js",
    "analytics": ["Google Analytics"],
    "payments": ["Stripe"],
    "monitoring": ["Sentry"],
    "allTechnologies": ["Next.js", "Stripe", "Nginx", "Google Analytics", "Sentry"]
  },
  "scrapedAt": "2026-04-08T14:30:00Z"
}
```

### 🗂️ Data fields

| Category | Fields |
|----------|--------|
| **Registration** | `registrar`, `createdAt`, `expiresAt`, `updatedAt`, `domainAge`, `status`, `nameservers` |
| **DNS** | `ipAddresses`, `mxRecords`, `emailProvider`, `detectedServices` |
| **Website** | `title`, `description`, `language`, `ogImage`, `favicon` |
| **Social** | `facebook`, `twitter`, `linkedin`, `instagram`, `youtube`, `tiktok`, `github` |
| **Tech Stack** | `framework`, `cdn`, `server`, `analytics`, `payments`, `monitoring`, `allTechnologies` |

#### 50+ technologies detected

| Category | Technologies |
|----------|-------------|
| **Frameworks** | Next.js, Nuxt.js, Angular, Gatsby, Remix, Astro, SvelteKit |
| **CMS** | WordPress, Shopify, Wix, Webflow, Squarespace, Ghost, Drupal, Contentful, Prismic, Sanity, Strapi |
| **Analytics** | Google Analytics, GTM, Hotjar, Amplitude, Mixpanel, Segment, PostHog, Plausible, Microsoft Clarity |
| **Marketing** | HubSpot, Intercom, Crisp, Drift, Zendesk, Mailchimp, Klaviyo |
| **Payments** | Stripe, PayPal, Adyen, Paddle, Chargebee |
| **CDN** | Cloudflare, CloudFront, Fastly, Vercel, Netlify |
| **Monitoring** | Sentry, Datadog, New Relic, LogRocket |

### 🚀 Examples

#### Enrich a single domain

```json
{
  "domains": ["stripe.com"]
}
```

#### Enrich a batch of competitors

```json
{
  "domains": [
    "doctolib.fr",
    "backmarket.fr",
    "alan.com",
    "qonto.com",
    "mistral.ai"
  ]
}
```

### 💻 Integrations

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("silentflow/domain-enricher").call(run_input={
    "domains": ["stripe.com", "doctolib.fr", "mistral.ai"],
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['domain']}: {item['techStack'].get('framework', 'N/A')}")
    print(f"  Email: {item['dns']['emailProvider']}")
    print(f"  Age: {item['registration']['domainAge']} days")
```

#### JavaScript

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('silentflow/domain-enricher').call({
    domains: ['stripe.com', 'doctolib.fr', 'mistral.ai'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
    console.log(`${item.domain}: ${item.techStack?.framework || 'N/A'}`);
});
```

### 📈 Performance

| Metric | Value |
|--------|-------|
| Speed | ~20 domains in 7 seconds |
| Enrichment rate | ~100% for DNS/WHOIS, ~90%+ for full HTML |
| Supported TLDs | All major TLDs |
| Graceful degradation | Returns `enrichmentLevel: "partial"` if website blocks scraping |

### 💡 Tips for best results

1. **Use clean domain names.** `stripe.com`, not `https://www.stripe.com/pricing`. Just the domain.
2. **Batch your domains.** More efficient than running one at a time. 3 parallel workers handle them concurrently.
3. **Check enrichmentLevel.** `"full"` means all data collected. `"partial"` means the website blocked scraping but DNS/WHOIS data is still available.
4. **Domain age is a strong signal.** `domainAge` in days helps distinguish new startups from established companies.

### ❓ FAQ

**Q: What data sources does this use?**
A: RDAP (modern WHOIS), Google DNS-over-HTTPS for DNS records, and direct website scraping for HTML metadata and tech detection. All public sources.

**Q: Why is enrichmentLevel "partial" for some domains?**
A: Some websites block automated access. You still get WHOIS, DNS, email provider, and SaaS detection. Only HTML-based data (title, social links, some tech stack) is missing.

**Q: How is this different from Clearbit?**
A: Clearbit charges $99-999/month for similar data. This enricher is pay-per-domain with no subscription.

**Q: Does it work with any TLD?**
A: Yes. .com, .fr, .io, .ai, .co, .app, .dev, and all other TLDs are supported.

### 📬 Support

Need something this enricher doesn't do yet? We ship features fast.

- 💡 **Feature requests** go straight to our backlog
- ⚙️ **Enterprise needs?** We do custom integrations and high-volume setups

Response time: usually under 24 hours.

Check out our other scrapers: [SilentFlow on Apify](https://apify.com/silentflow)

# Actor input Schema

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

List of domain names to enrich (e.g., doctolib.fr, stripe.com)

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

Maximum number of domains to enrich

## Actor input object example

```json
{
  "domains": [
    "doctolib.fr"
  ],
  "maxItems": 100
}
```

# Actor output Schema

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

Complete domain enrichment data including: WHOIS registration, DNS records, email provider, technology stack, social links, and website metadata.

## `resultsCSV` (type: `string`):

Data in CSV format.

## `resultsExcel` (type: `string`):

Data in Excel format.

# 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": [
        "doctolib.fr"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("silentflow/domain-enricher").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": ["doctolib.fr"] }

# Run the Actor and wait for it to finish
run = client.actor("silentflow/domain-enricher").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": [
    "doctolib.fr"
  ]
}' |
apify call silentflow/domain-enricher --silent --output-dataset

```

## MCP server setup

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

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/9s2llJK2JRvW3atfY/builds/nOivXcCj4B9EqS8Tp/openapi.json
