# Company Enrichment API — Domain to Firmographics & Tech (`nexgendata/company-enrichment-tool`) Actor

Have a list of company names or domains? Feed up to 1,000 and get a firmographic profile per company — industry, headcount, location, funding, detected tech stack, social links, and email patterns. Built for bulk CRM cleanup and lead scoring: domains in, enriched list out. Export CSV/JSON/Excel.

- **URL**: https://apify.com/nexgendata/company-enrichment-tool.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Lead generation, AI
- **Stats:** 97 total users, 8 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 company enrichment records

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Company Enrichment — Bulk Domain to Firmographics & Tech Stack

Have a list of company names or domains and missing data behind them? Feed up to 1,000 companies and get back a firmographic profile per company — description, estimated industry and size, country, detected tech stack, social links, role-based email patterns and a logo URL. Built for **bulk CRM cleanup and lead scoring**: a list of domains in, an enriched list out, one structured row per company.

This is an **enrichment** tool — it needs an input list. If you don't have companies yet and want to discover prospects by job title or industry, use the [B2B Leads Finder](https://apify.com/nexgendata/b2b-leads-finder?fpr=2ayu9b). If you want the on-site contact details for a list of websites, use the [Website Contact Scraper](https://apify.com/nexgendata/contact-info-scraper?fpr=2ayu9b).

### Pricing

**$0.10 per enriched company row** (Pay-Per-Event), plus $0.00005 per Actor start per GB of memory. A company that cannot be resolved to a domain is **not** written to the dataset and **not** charged, and no status or error row is ever billed. If the lookup source is unreachable for the whole run, the run fails rather than finishing green and empty.

### What you get per company

Exactly these fields, one row per enriched company:

- `companyName` — the value you supplied
- `domain` — resolved company domain
- `description` — short public description (DuckDuckGo Instant Answer / Wikipedia abstract)
- `industry` — estimated from the description keywords
- `estimatedEmployees` — coarse band estimated from the description
- `logoUrl` — logo/favicon image URL for the domain
- `commonEmails` — role-based patterns (`info@`, `contact@`, `hello@`, `support@`, `sales@`)
- `socialProfiles` — conventional LinkedIn / X / GitHub URLs for the domain
- `hasMxRecords` — domain publishes DNS MX records
- `country` — 2-letter ISO code from IP geolocation of the domain's A record
- `tech_stack` — CMS, analytics, payments, chat/marketing and infra detected in a live HTTP/HTML scan
- `sources` — which of the above signals contributed

`industry` and `estimatedEmployees` are **heuristic estimates** derived from the public description, not filed company data. There is no revenue, funding-stage, HQ-city or founded-year field.

### Use cases

- **CRM cleanup** — fill missing firmographics on imported accounts.
- **Lead scoring** — rank inbound by ICP fit (industry + size + tech).
- **Auto-enrich signups** — enrich every new signup via webhook.
- **Market mapping** — bulk-enrich a list of competitor domains.
- **Tech-stack targeting** — find accounts running a specific SaaS or CMS.

### Sample input

```json
{
  "companies": ["stripe.com", "vercel.com", "anthropic.com"],
  "enrichEmails": true,
  "enrichSocials": true,
  "enrichDescription": true
}
```

### Sample output

```json
{
  "companyName": "stripe.com",
  "domain": "stripe.com",
  "description": "Stripe, LLC is an American multinational financial services and software as a service company…",
  "industry": "Fintech",
  "estimatedEmployees": "1000+",
  "logoUrl": "https://www.google.com/s2/favicons?domain=stripe.com&sz=128",
  "commonEmails": ["info@stripe.com", "contact@stripe.com", "hello@stripe.com"],
  "socialProfiles": {"linkedin": "https://linkedin.com/company/stripe", "twitter": "https://twitter.com/stripe"},
  "hasMxRecords": true,
  "country": "US",
  "tech_stack": ["Stripe", "nginx", "Next.js"],
  "sources": ["duckduckgo", "dns_mx", "web_search", "ip_geo", "tech_fingerprint"]
}
```

### How to use

1. Open the Actor in the Apify Console.
2. Paste your company names or domains into the **Companies** field (one per line).
3. Toggle **Enrich emails**, **Enrich social profiles**, and **Enrich company description** as needed.
4. Click **Start**, then download the enriched list as JSON, CSV, or Excel, or pull it via the REST API.

### FAQ

**Can I enrich a CSV of domains in bulk?**
Yes — pass up to 1,000 companies per run. The **Companies** field accepts company names, domains, or website URLs, one per line.

**Does it detect the tech stack?**
Yes — a live HTTP/HTML scan returns CMS, analytics, payment, chat/marketing and hosting signals found on each domain.

**Company name only, no domain — does it still work?**
Usually. The name is resolved to a domain first; if no domain can be resolved, that company is skipped and not charged.

**Am I charged for companies that don't resolve?**
No. Only rows written to the dataset are billed, and only resolved companies are written.

**Is the output compliant to use?**
The output is B2B firmographic data plus role-based email patterns; you are the data controller for downstream use — follow your jurisdiction's rules.

### Related NexGenData actors

- [B2B Leads Finder — by Job Title, Industry & Location](https://apify.com/nexgendata/b2b-leads-finder?fpr=2ayu9b) — discover the companies first, then enrich them here.
- [Website Contact Scraper — Emails & Phones from a URL List](https://apify.com/nexgendata/contact-info-scraper?fpr=2ayu9b) — pull on-site emails and phones for a list of domains.
- [Company Email Finder — B2B Contact Scraper](https://apify.com/nexgendata/company-email-finder?fpr=2ayu9b) — find decision-maker emails on a known domain.
- [Lead List Enricher — Emails, Phones & Social from Any Domain](https://apify.com/nexgendata/lead-list-enricher?fpr=2ayu9b) — enrich a CSV of leads with contacts and socials.
- [Sales Intelligence MCP — Lead-Gen Tools for AI Agents](https://apify.com/nexgendata/sales-intelligence-mcp?fpr=2ayu9b) — all of these tools behind one MCP endpoint for AI agents.

# Actor input Schema

## `companies` (type: `array`):

Company names, domains, or website URLs to enrich (one per line). Example: stripe.com

## `enrichEmails` (type: `boolean`):

Append business emails found for each company.

## `enrichSocials` (type: `boolean`):

Append social profile links (LinkedIn, X, etc.) for each company.

## `enrichDescription` (type: `boolean`):

Append a short company description and firmographics.

## `notionConnector` (type: `string`):

Optional. Connect your Notion workspace and the enriched companies are also written as a Notion page in the same run - the Actor never sees your Notion credentials. Authorize a Notion MCP connector in Apify Console -> Settings -> API & Integrations, then select it here.

## `notionParentId` (type: `string`):

Optional. The Notion page ID to create the page under. If blank, Notion creates a private page in your workspace.

## `supabaseConnector` (type: `string`):

Optional. Connect your own Supabase project and the results are also inserted into a table in the same run — the Actor never sees your Supabase credentials. Authorize a write-scoped, project-scoped Supabase MCP connector in Apify Console (Settings -> Integrations), then select it here.

## `supabaseTable` (type: `string`):

Target table in the public schema (created if missing, with id, a jsonb data column, and a scraped\_at timestamp). Default: nexgendata\_leads.

## `supabaseProjectId` (type: `string`):

Your Supabase project reference (e.g. abcdefghijklmnop). Required unless your connector URL is already project-scoped. Find it in your project URL: supabase.com/dashboard/project/THIS\_PART.

## `deliveryDedup` (type: `boolean`):

When on (default), records already delivered in a previous run are not delivered again to the same destination — so scheduled runs only push new items. Turn off to deliver every record on every run.

## Actor input object example

```json
{
  "companies": [
    "stripe.com",
    "airbnb.com"
  ],
  "enrichEmails": true,
  "enrichSocials": true,
  "enrichDescription": true,
  "supabaseTable": "nexgendata_leads",
  "deliveryDedup": true
}
```

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

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

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

```

## MCP server setup

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

```

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/0EC4liiWbpeRAV7qq/builds/0narKX6T8iwddVVV5/openapi.json
