# Company Enrichment: Domain to Company Profile & Socials (`deriverge/company-enrichment`) Actor

Enrich company domains in bulk from their own websites: name, legal name, description, logo, LinkedIn, X, Facebook, Instagram, YouTube, GitHub, mobile apps, contact and careers pages, tech stack, email provider and domain age. No personal data. JSON, CSV, API.

- **URL**: https://apify.com/deriverge/company-enrichment.md
- **Developed by:** [deriverge s.r.o.](https://apify.com/deriverge) (community)
- **Categories:** Lead generation, Developer tools, AI
- **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 companies

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

## Company Enrichment by Domain

Company Enrichment by Domain turns a list of company domains into one row per company, read from the company's own homepage and public records: name and legal name, description, logo, LinkedIn, X and other social profiles, links to its apps and to its contact, careers and pricing pages, the tech stack, the email provider from DNS and the date the domain was registered. Paste domains such as `stripe.com` into **Company domains or websites** and click **Start**. It returns no employee counts, revenue or contacts of people. It costs $2.00 per 1,000 companies on the Free plan ($1.00 on Business), and the $5 of monthly credit in Apify's Free plan covers about 2,500 companies.

### What data does it return?

| Field | Description |
|---|---|
| `input`, `domain`, `url` | The domain as you entered it, the registered domain, and the homepage address after redirects, such as `https://www.hubspot.com/`. |
| `status`, `error` | `ok` for an enriched company, the only status that is charged. Otherwise `blocked`, `robots_disallowed`, `no_content`, `unreachable` or `invalid_input`, with the reason in `error`. |
| `companyName`, `legalName` | The name from the website's Organization data, its site name or its page title, and the legal name where the site publishes one, such as `Apify Technologies s.r.o.`. |
| `description` | The homepage's meta description, as the company wrote it. |
| `logo` | Logo URL from the Organization data, otherwise the site icon. |
| `foundingYear`, `country`, `language` | Founding year and country from the Organization data (the country also from a national domain such as `.cz`), and the homepage language, such as `en-US`. |
| `linkedin`, `twitter`, `facebook`, `instagram`, `youtube`, `tiktok`, `github`, `pinterest` | The company's own profiles linked from the homepage or listed in its Organization data. Share buttons and links to single posts are ignored. |
| `appStoreApps`, `googlePlayApps` | Links to the company's iPhone and Android apps found on the homepage, up to 5 of each. |
| `contactPage`, `aboutPage`, `careersPage`, `pricingPage`, `blog` | Homepage links to these pages on the company's own domain, recognized by their path in several languages, such as `/careers`, `/jobs`, `/kariera` or `/karriere`. |
| `cms`, `ecommerce`, `analytics`, `marketingAutomation`, `crm`, `liveChat`, `payments`, `hosting`, `cdn` | Detected technologies by group, such as `HubSpot` under `marketingAutomation` and `Amazon CloudFront` under `cdn`. |
| `technologyNames` | Every technology found on the homepage, in its Google Tag Manager containers and in DNS, as one list. |
| `emailProvider` | Mailbox and sending services read from the MX and SPF records, such as `Google Workspace` and `Amazon SES`. |
| `verifiedServices` | Business tools the domain has verified in its public DNS TXT records, such as `Zapier`, `HubSpot` or `DocuSign`. |
| `domainCreatedAt`, `domainAgeYears`, `registrar` | Registration date of the domain from RDAP in UTC, the whole years since then, and the registrar. |
| `checkedAt` | When the company was enriched, as an ISO 8601 UTC timestamp. |

### How to enrich company domains

1. In **Company domains or websites**, paste one entry per line: `stripe.com`, `www.example.com` or a full address such as `https://www.hubspot.com`. Duplicates are dropped, and a run can take thousands.
2. Keep **Include the tech stack**, **Read DNS records** and **Include domain age** on for the full row, or switch off what you do not need. The price per company does not change.
3. Click **Start**. Rows reach the **Output** tab in batches of 25, and the export there gives CSV, Excel or JSON. The `SUMMARY` record in the key-value store counts the rows of each status.

For the API:

```json
{
  "websites": ["stripe.com", "https://www.hubspot.com", "rohlik.cz"],
  "includeTechnologies": true,
  "scanDns": true,
  "includeDomainAge": true
}
```

### Example output

The row for hubspot.com from a run on 11 October 2026.

```json
{
  "input": "hubspot.com",
  "domain": "hubspot.com",
  "url": "https://www.hubspot.com/",
  "status": "ok",
  "error": null,
  "companyName": "HubSpot",
  "legalName": null,
  "description": "HubSpot's customer platform includes all the marketing, sales, customer service, and CRM software you need to grow your business.",
  "logo": "https://www.hubspot.com/hubfs/HubSpot_Logos/HSLogo_color.svg",
  "foundingYear": 2006,
  "language": "en",
  "country": "US",
  "linkedin": "https://www.linkedin.com/company/hubspot",
  "twitter": "https://x.com/HubSpot",
  "facebook": "https://www.facebook.com/hubspot",
  "instagram": "https://www.instagram.com/hubspot",
  "youtube": "https://youtube.com/user/HubSpot",
  "tiktok": "https://www.tiktok.com/@HubSpot",
  "github": null,
  "pinterest": null,
  "appStoreApps": [
    "https://apps.apple.com/us/app/hubspot/id1107711722"
  ],
  "googlePlayApps": [
    "https://play.google.com/store/apps/details?id=com.hubspot.android"
  ],
  "contactPage": "https://offers.hubspot.com/contact-sales",
  "aboutPage": null,
  "careersPage": "https://www.hubspot.com/careers",
  "pricingPage": "https://www.hubspot.com/pricing/marketing",
  "blog": null,
  "cms": [
    "HubSpot CMS Hub"
  ],
  "ecommerce": [],
  "analytics": [
    "Cloudflare Browser Insights",
    "Linkedin Insight Tag"
  ],
  "marketingAutomation": [],
  "crm": [],
  "liveChat": [],
  "payments": [],
  "hosting": [
    "Cloudflare DNS"
  ],
  "cdn": [
    "Cloudflare"
  ],
  "emailProvider": [
    "Microsoft 365"
  ],
  "verifiedServices": [
    "Canva",
    "Notion",
    "Atlassian Cloud",
    "Atlassian Statuspage",
    "JetBrains",
    "Zapier",
    "Stripe",
    "Cursor",
    "Detectify",
    "ElevenLabs",
    "HackerOne",
    "HubSpot",
    "Jamf",
    "OneTrust",
    "OpenAI",
    "Adobe",
    "DocuSign",
    "Figma",
    "Meta",
    "Smartsheet",
    "Yahoo",
    "Zoom"
  ],
  "technologyNames": [
    "Canva",
    "HubSpot CMS Hub",
    "Notion",
    "Atlassian Cloud",
    "Atlassian Statuspage",
    "JetBrains",
    "Microsoft 365",
    "Zapier",
    "Stripe",
    "Cloudflare",
    "Cloudflare Bot Management",
    "Cloudflare Browser Insights",
    "Cloudflare DNS",
    "Cursor",
    "Detectify",
    "ElevenLabs",
    "HackerOne",
    "HSTS",
    "HubSpot",
    "Jamf",
    "Lightbox",
    "Linkedin Insight Tag",
    "OneTrust",
    "OpenAI",
    "Adobe",
    "DocuSign",
    "Figma",
    "Meta",
    "Open Graph",
    "Smartsheet",
    "Yahoo",
    "Zoom"
  ],
  "domainCreatedAt": "2005-02-06T20:02:28.000Z",
  "domainAgeYears": 21,
  "registrar": "MarkMonitor Inc.",
  "checkedAt": "2026-10-11T15:49:10.455Z"
}
```

### How much does it cost to enrich companies?

| | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| 1,000 companies | $2.00 | $1.60 | $1.30 | $1.00 |

You pay only for the events in the table. There is no start fee, and compute time and proxies are included.

A run on 11 October 2026 with 40 company domains took 8 seconds and enriched 31 of them for $0.062 on the Free plan. The 8 websites behind bot protection and 1 domain that does not exist came back with their reason and were not charged. Enriching 1,000 companies costs $2.00 on the Free plan and $1.00 on Business.

### Limits

- Only the homepage is opened, together with up to two Google Tag Manager containers it loads. Links that appear only on other pages of the site are not found.
- Some websites answer automated requests with a bot protection page. In the run above, 8 of 40 did, among them booking.com, nytimes.com and canva.com, through Cloudflare, AWS WAF, DataDome or a plain HTTP 403. The actor does not try to get past such a page: the row gets `blocked`, keeps the DNS findings and domain date, and is free.
- Before the homepage, the actor reads the website's `robots.txt`. If it disallows the homepage, the page is not requested and the row gets `robots_disallowed` with DNS details only, free of charge. A website whose `robots.txt` does not answer is left out of the run as `unreachable`.
- A homepage that is an empty shell filled in by JavaScript gives no company details. Such a row gets `no_content` and is free.
- Of the 31 enriched companies, 19 had a LinkedIn page, 18 a careers page, 11 a country, 7 a founding year and 6 a legal name. Founding year and legal name exist only where the site publishes them in its Organization data.
- Some registries publish no registration date over RDAP, so `domainCreatedAt` was `null` for zalando.de, bolt.eu and notion.so.
- `blog` is the first blog or news link on the homepage, which can be a single article: on stripe.com it pointed to one post.
- There are no firmographics such as industry, headcount, revenue or funding, and no personal data: no names, email addresses or phone numbers of people.

### FAQ

#### Is it legal to enrich companies from their websites?

The actor reads each company's public homepage, as allowed by its `robots.txt`, along with public DNS records and the RDAP domain registry. It collects facts about companies (names, links, technologies, domain dates) and nothing about people. You are responsible for how you use the data, including in sales outreach.

#### Can it find a domain from a company name?

No. Each entry must be a domain or a website address. Names without a domain, such as `Stripe`, are returned as `invalid_input` at no charge.

#### How fast is a large list?

Websites are read 8 at a time with the default 1 GB of memory, 4 at a time with 512 MB and 12 with 2 GB or more. The 40 domains above took 8 seconds in total.

### Related scrapers

- [Tech Stack Detector](https://apify.com/deriverge/tech-stack-detector)
- [Domain WHOIS and DNS Lookup](https://apify.com/deriverge/domain-whois-dns-lookup)
- [Career Site and ATS Jobs API](https://apify.com/deriverge/career-site-jobs-search)
- [Shopify Store Analyzer](https://apify.com/deriverge/shopify-store-analyzer)

### Support

This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the **Issues** tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the **API** tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.

# Changelog

This Actor's version history is a separate document: https://apify.com/deriverge/company-enrichment/changelog.md

# Actor input Schema

## `websites` (type: `array`):

One per line: stripe.com, www.example.com or https://www.example.com. Paste thousands at once, for example from your CRM.

## `includeTechnologies` (type: `boolean`):

Detect the CMS, ecommerce platform, analytics, marketing, CRM, chat, payments, hosting and CDN with 7,600 fingerprints.

## `scanDns` (type: `boolean`):

Detect the email provider (Google Workspace, Microsoft 365...) and business tools verified in DNS (Atlassian, Salesforce, DocuSign...).

## `includeDomainAge` (type: `boolean`):

Read the domain registration date and registrar from the public RDAP registry.

## Actor input object example

```json
{
  "websites": [
    "stripe.com",
    "apify.com",
    "hubspot.com"
  ],
  "includeTechnologies": true,
  "scanDns": true,
  "includeDomainAge": true
}
```

# Actor output Schema

## `companies` (type: `string`):

One row per domain with the company profile, social profiles, key pages, tech stack, email provider and domain age.

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

Companies enriched, blocked, unreachable and billed.

# 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 = {
    "websites": [
        "stripe.com",
        "apify.com",
        "hubspot.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("deriverge/company-enrichment").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 = { "websites": [
        "stripe.com",
        "apify.com",
        "hubspot.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("deriverge/company-enrichment").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 '{
  "websites": [
    "stripe.com",
    "apify.com",
    "hubspot.com"
  ]
}' |
apify call deriverge/company-enrichment --silent --output-dataset

```

## MCP server setup

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

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/9Bl7ewVdabFSefMzH/builds/EPIdFWBEXODfHELIc/openapi.json
