# Company Enrichment API - Domain to Buyer Fit Brief (`george.the.developer/company-enrichment-api`) Actor

Enrich company data from any domain: look up company info by website and get firmographics, tech stack, contacts, WHOIS, DNS, SEO metadata, plus an optional Buyer Fit Brief for sales teams. Clearbit alternative for B2B lead enrichment.

- **URL**: https://apify.com/george.the.developer/company-enrichment-api.md
- **Developed by:** [George Kioko](https://apify.com/george.the.developer) (community)
- **Categories:** Lead generation, Marketing
- **Features:** Limited permissions
- **Stats:** 169 total users, 3 monthly users, 100.0% runs succeeded, 3 bookmarks
- **User rating**: No ratings yet

## Pricing

from $16.00 / 1,000 company enricheds

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 API is an Apify Actor that turns a website domain into structured company data and, on request, a Buyer Fit Brief for sales. For each domain it returns the company name and description, the detected tech stack, social profile links, emails and phones found on the site, WHOIS and DNS data, SSL status and SEO metadata. Set `brief` to true and the result also carries a fit score, fit tier, sales angle, buying signals and risks.

Turn any domain into a buyer brief you can actually send. Get company data, tech stack, contact info, WHOIS, DNS, SEO metadata, social profiles, and an optional **Buyer Fit Brief** with a fit score, sales angle, buying signals, and risks. Built for SDRs, lead ops, agencies, and enrichment workflows that need a practical Clearbit, BuiltWith, Clay, or ZoomInfo alternative without a monthly contract.

[![Company Enrichment on Apify](https://img.shields.io/badge/Apify-Company%20Enrichment-blue)](https://apify.com/george.the.developer/company-enrichment-api)

### How it works

```mermaid
flowchart LR
    A[Input domain<br/>stripe.com] --> B[Normalize and block<br/>private/internal hosts]
    B --> C[Fetch website HTML<br/>with safe fallback]
    C --> D[Extract metadata<br/>title, description, H1,<br/>social profiles, contacts]
    D --> E[Detect tech stack<br/>CMS, frameworks,<br/>analytics, infrastructure]
    E --> F[Run DNS + WHOIS<br/>MX, SPF, DMARC,<br/>domain age, registrar]
    F --> G{brief=true?}
    G -- no --> H[Raw enrichment JSON]
    G -- yes --> I[Buyer Fit Brief<br/>score, angle, signals, risks]
    I --> H
    H --> J[Apify dataset]
```

### Sales workflow

```mermaid
flowchart TD
    LIST[Prospect domains<br/>from CRM, CSV, Ads, SERP] --> ENRICH[Company Enrichment API]
    ENRICH --> FIELDS[Company fields<br/>stack, contacts, socials,<br/>WHOIS, DNS, SEO]
    ENRICH --> BRIEF[Buyer Fit Brief]
    BRIEF --> SCORE[fit_score + fit_tier]
    BRIEF --> ANGLE[sales_angle]
    FIELDS --> CRM[CRM enrichment]
    SCORE --> ROUTE[Lead routing]
    ANGLE --> OUTREACH[Outbound email<br/>or sales task]
```

### What makes this different

Most enrichment APIs hand you a JSON blob. You still have to read it, interpret it, and write the outreach yourself. This one does the reading for you.

Flip `brief=true` on any call and the response includes a structured artifact you can drop straight into a sales tool:

```json
"buyer_brief": {
  "fit_score": 82,
  "fit_tier": "hot",
  "buyer_type": "midmarket",
  "sales_angle": "Open with their new Next.js migration. They're hiring 3 senior engineers per their careers page.",
  "buying_signals": [
    "modern stack: React, Next.js, AWS",
    "active hiring signals",
    "public decision maker contacts available"
  ],
  "risks": ["domain is under 12 months old"]
}
```

### Raw data you always get

- Company identification (name, description, logo, favicon)
- Technology detection (35+ signals: CMS, frameworks, analytics, infrastructure, payments)
- Social profiles (X, LinkedIn, Facebook, Instagram, YouTube, GitHub, TikTok, Threads)
- Contact extraction (emails and phones found on the site)
- WHOIS data (domain age, registrar, creation and expiry dates)
- DNS analysis (A, MX, SPF, DMARC)
- SSL detection
- SEO metadata (title, description, OG image, canonical, H1 headings)
- Email provider detection (Google Workspace, Microsoft 365, Zoho, Proton)
- Bulk mode (up to 10 domains per request)

### Use cases

- Sales prospecting. Replace your SDR's "research the company" step with a brief that names the angle.
- Lead scoring. Feed fit_score straight into your CRM as a numeric field.
- Agency outreach. Qualify 1,000 domains overnight and sort by fit_tier.
- CRM enrichment. Populate Salesforce and HubSpot with the structured fields.
- Due diligence. Get a one paragraph summary before a discovery call.
- Competitive mapping. Scan competitor stacks and social presence.
- Clearbit alternative. Enrich domains without needing a separate SaaS subscription.
- BuiltWith alternative for lightweight stack detection plus contact/social context.
- Clay workflow step. Use Apify API output as a lower-cost enrichment source before expensive human or AI research.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `domain` | String | Company domain to enrich (e.g. stripe.com) |
| `domains` | Array | Multiple domains to enrich (max 10) |
| `brief` | Boolean | Adds the Buyer Fit Brief to the response. Charged as 3 events per domain. |

#### Single domain

```json
{ "domain": "stripe.com" }
```

#### Single domain with brief

```json
{ "domain": "stripe.com", "brief": true }
```

#### Bulk with brief

```json
{ "domains": ["stripe.com", "shopify.com", "notion.so"], "brief": true }
```

### Output (raw enrichment, no brief)

```json
{
  "domain": "stripe.com",
  "company_name": "Stripe",
  "description": "Stripe is a financial infrastructure platform for businesses.",
  "technologies": ["React", "Next.js", "Google Analytics", "Cloudflare", "Stripe", "Google Workspace"],
  "social_profiles": {
    "twitter": { "url": "https://twitter.com/stripe", "handle": "stripe" },
    "linkedin": { "url": "https://linkedin.com/company/stripe", "handle": "stripe" },
    "github": { "url": "https://github.com/stripe", "handle": "stripe" }
  },
  "contact": {
    "emails": ["support@stripe.com"],
    "phones": []
  },
  "domain_info": {
    "age": "15y 2m",
    "registrar": "SafeNames Ltd.",
    "created": "2009-09-30T00:00:00.000Z",
    "expires": "2030-09-30T00:00:00.000Z"
  },
  "dns": {
    "a": ["185.166.21.22"],
    "mx": ["aspmx.l.google.com"],
    "has_spf": true,
    "has_dmarc": true
  },
  "ssl": { "has_ssl": true }
}
```

### Call it as an API

One POST runs the actor and returns the dataset rows in the same response:

```bash
curl -X POST "https://api.apify.com/v2/acts/george.the.developer~company-enrichment-api/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["stripe.com", "shopify.com"], "brief": true}'
```

### Pricing

Per event pricing. You only pay for what you run.

| Mode | Events | Cost at current $0.02/event |
|------|--------|-------------------------------|
| Raw enrichment | 1 event | $0.02 per domain |
| Enrichment + Buyer Fit Brief | 3 events | $0.06 per domain |

Bulk requests charge per domain that returns data. A domain that is not valid or cannot be reached comes back with an `error` field and is not charged.

### Compared to alternatives

| Feature | This API | Clearbit-style tools | BuiltWith-style tools | ZoomInfo/Apollo-style tools |
|---------|----------|----------------------|-----------------------|----------------------------|
| Buyer fit brief | Yes | Usually no | No | Usually no |
| Pay per call on Apify | Yes | Usually subscription/API plan | Usually subscription/API plan | Usually contract or credits |
| Tech detection | 35+ signals | Limited to enrichment fields | Deep tech stack | Limited |
| Social profiles | Yes | Often yes | Usually no | Often yes |
| WHOIS and DNS data | Yes | Usually no | Usually no | Usually no |
| Contact extraction from website | Yes | Varies | No | Yes |
| No separate vendor API key | Yes | No | No | No |

### How the brief works

The brief combines the raw enrichment signals (tech stack, contact availability, social footprint, domain age, positioning) and produces a scored artifact per domain. Score weighting favors reachable buyers with public decision maker contacts and a modern stack.

The brief now goes through a structured VPS endpoint instead of posting raw prompts straight to Ollama. The API returns a deterministic heuristic brief immediately, then the VPS warms an AI-enhanced brief in the background and serves that richer version from cache on later lookups for the same company summary. If the model is slow or unavailable, the request still fails open to the heuristic brief instead of sitting on a long timeout.

### FAQ

#### How do I call this as an API?

Send one POST request to the `run-sync-get-dataset-items` endpoint and the dataset rows come back in the same response. The full path is `https://api.apify.com/v2/acts/george.the.developer~company-enrichment-api/run-sync-get-dataset-items`. Pass your Apify token in the query string and the input as JSON in the request body.

#### Which technologies can it detect?

It checks for 35+ technology signals across CMS, frameworks, analytics, infrastructure and payments. It also detects the email provider, such as Google Workspace, Microsoft 365, Zoho or Proton. Detected names land in the `technologies` array, as in the output example above.

#### What contacts does it return?

It returns the emails and phone numbers found on the company website, in the `contact` object of each result. Phones come from click to call links, schema.org data and numbers written in international or North American format, so IDs and timestamps inside the page code are never reported as phones. When the site lists none, the `emails` or `phones` list comes back empty.

#### Is there a monthly subscription?

No. The actor uses pay per event pricing, so you only pay for what you run. A raw enrichment costs $0.02 per domain, and a domain with the Buyer Fit Brief costs $0.06 because the brief is charged as 3 events.

#### Can I enrich many domains at once?

Yes. Put up to 10 domains in the `domains` array of one request. Bulk requests charge per domain. Results are cached for 7 days to keep repeated lookups fast.

#### What are the limits?

Private and internal hostnames are blocked before any fetch. If the model behind the AI-enhanced brief is slow or unavailable, you still get the heuristic brief instead of a long timeout.

### Related tools

- [Domain WHOIS Lookup](https://apify.com/george.the.developer/domain-whois-lookup) for detailed WHOIS and DNS
- [Website Intelligence API](https://apify.com/george.the.developer/website-intelligence-api) for deep tech detection and SEO
- [Website Contact Scraper](https://apify.com/george.the.developer/website-contact-scraper) for all contact info from any site

Browse all tools by [george.the.developer on Apify](https://apify.com/george.the.developer).

# Actor input Schema

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

Company domain to enrich (e.g., stripe.com)

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

Array of domains to enrich (max 10)

## `brief` (type: `boolean`):

Generate a buyer fit score, sales angle, buying signals, and risks. Charged as 3 events per domain.

## Actor input object example

```json
{
  "domain": "stripe.com",
  "brief": false
}
```

# 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 = {
    "domain": "stripe.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("george.the.developer/company-enrichment-api").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 = { "domain": "stripe.com" }

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

```

## MCP server setup

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

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/yjpAcDRdrDhyscjXz/builds/NlqnOa6AwELIlYIFu/openapi.json
