# Company Profile Enrichment Tool — Clearbit Alternative (`khadinakbar/clearbit-alternative`) Actor

Enrich known company domains from public websites. Export company identity, descriptions, published contact links, optional technology signals, source URLs, and timestamps for CRM profile review.

- **URL**: https://apify.com/khadinakbar/clearbit-alternative.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 source-cited company enrichments

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 Profile Enrichment Tool — Clearbit Alternative

Enrich known company domains from public websites. Export company identity, descriptions, published contact links, optional technology signals, source URLs, and timestamps for CRM profile review. For CRM teams, each dataset record is one supplied company domain enriched with current public website observations.

### Workflow: put the results to work

Start with company domains from a spreadsheet or CRM. Enable published contacts and technology signals only when those fields help the review, then inspect the cited website evidence. The result describes current public observations rather than a proprietary company database.

### Best fit for this Actor

Start here when you have a CRM or spreadsheet of company domains and need a bounded, source-cited public-company profile that a person or system can inspect. It works well for enrichment before a CRM review, account research, or a downstream lead-validation step.

This Actor is designed as a focused standalone workflow. It accepts company domains rather than names, people, social-profile URLs, or search keywords, and it returns public website observations rather than a proprietary contact graph.

For long-form website content rather than a compact company profile, start with the [Website Content Crawler](https://apify.com/apify/website-content-crawler), then pass the selected canonical domains into this Actor for source-cited enrichment.

### How this workflow compares with Clearbit

This is an independent workflow alternative for collecting current, source-cited company information from a supplied public domain. Clearbit is now part of HubSpot’s Data Enrichment offering; HubSpot remains the broader fit for teams that need its CRM-native enrichment, proprietary data coverage, dashboards, collaboration, and suite administration.

| Decision | This Actor | Clearbit / HubSpot Data Enrichment | Best fit |
| --- | --- | --- | --- |
| Scope | Enriches one supplied company domain from bounded public website routes. | Adds broader CRM-oriented company and contact enrichment. | Use this Actor for public domain evidence; use HubSpot for the wider suite. |
| Billing and same-job cost | Charges by completed source-cited company record plus Apify platform usage. | Tied to a paid HubSpot plan; compare your plan allocation with the exact records and fields required. | Use the billing model that matches the job’s volume and data needs. |
| Effective efficiency | Returns a structured record with source URLs and collection time, ready for review or export. | Fits teams working inside a connected CRM workflow. | Choose the path that reduces active review work for the same accepted record. |
| Input and output | Starts with a company domain and returns public metadata, visibly published contacts, technology signals, and explicit nulls. | Provides broader enriched attributes beyond this Actor’s public-web contract. | Use the Actor when page-level provenance matters; use HubSpot when broader coverage is required. |
| Integrations and automation | Can be run through the Apify API or CLI with saved structured input and dataset readback. | Provides HubSpot-native CRM workflows and administration. | Choose the integration environment already supporting the next workflow step. |

Clearbit is a trademark of its owner. This independent Actor is not affiliated, associated, or endorsed by Clearbit or HubSpot.

### From company domains to a reviewable account profile

An operations analyst starts with a selected CRM segment and passes its domains to this Actor. The Actor visits the public homepage and a small number of standard company pages, then returns company name, description, published email and phone links, technology signals, source URLs, and collection time. The analyst can review cited website evidence before merging the row back into the CRM or passing approved domains to a separate validation workflow.

### Output: what one result contains

| Field | Meaning |
| --- | --- |
| inputCompanyName | Caller-provided CRM label retained unchanged; it is not public-web evidence. |
| companyName | Organization name observed in public structured data, metadata, or page content; it is null when no website identity signal was observed. |
| description | Public company description from metadata or organization markup. |
| publishedEmails and publishedPhones | Business contact links visibly published by fetched public pages. |
| technologySignals | Small, observed HTML signatures rather than a complete technology inventory. |
| sourceUrls and fieldSources | The fetched public pages that support the returned fields. |
| collectionOutcome and collectedAt | Per-company state and the time the website evidence was collected. |

```json
{
  "externalId": "crm-001",
  "inputDomain": "example.com",
  "normalizedDomain": "example.com",
  "inputCompanyName": "Example CRM label",
  "companyName": "Example Domain",
  "websiteUrl": "https://example.com/",
  "description": "Example company description.",
  "industrySignals": ["software"],
  "publishedEmails": [],
  "publishedPhones": [],
  "linkedinCompanyUrl": null,
  "otherSocialUrls": [],
  "technologySignals": [],
  "sourceUrls": ["https://example.com/"],
  "fieldSources": {"companyName": ["https://example.com/"]},
  "collectionOutcome": "ENRICHED",
  "warnings": [],
  "collectedAt": "collection timestamp"
}
```

### Quick start and input

Use domains you already selected. The default request stays small so the output is easy to inspect; increase maxCompanies only after confirming the needed fields and cost controls.

```json
{
  "companies": [
    {
      "domain": "example.com",
      "companyName": "Example Domain",
      "externalId": "crm-001"
    }
  ],
  "maxCompanies": 1,
  "maxPagesPerCompany": 3,
  "includePublishedContacts": true,
  "includeTechnologySignals": true,
  "useProxyFallback": true,
  "requestTimeoutSecs": 20
}
```

### API and dataset readback

Start a bounded request with the real Actor slug, then read its default dataset and the OUTPUT key after completion.

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~clearbit-alternative/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies":[{"domain":"example.com","externalId":"crm-001"}],"maxCompanies":1,"maxPagesPerCompany":2}'
```

```bash
apify call khadinakbar/clearbit-alternative \
  --input='{"companies":[{"domain":"example.com","externalId":"crm-001"}],"maxCompanies":1}'
```

### Scope, outcome states, and recovery

| Situation | What the Actor does | Recovery |
| --- | --- | --- |
| Invalid, duplicate, local, or private-network domain | Rejects it before collection and reports an `INVALID_INPUT` or `PARTIAL` outcome. | Correct the domain and rerun only the rejected input. |
| Website blocks or times out | Tries direct public access first and, when enabled, one managed Residential proxy fallback. | Retry later, lower the page cap, or disable the affected domain; there is no unbounded retry loop. |
| Public page is reachable but lacks a field | Persists explicit nulls or empty arrays with a `VALID_EMPTY` or successful record state. | Review `sourceUrls`, `fieldSources`, and `warnings`; treat absence as unknown rather than a verified negative. |
| Required pages remain unavailable | Produces `UPSTREAM_FAILED` without charging a `company-enriched` event. | Confirm the public site is reachable and that its terms allow access before retrying. |

Each run accepts at most 100 supplied companies and checks no more than four standard public routes per company. Collection stays on unauthenticated public pages and bounded routes. Private contacts, mailbox validation, proprietary people data, buyer intent, and CRM-suite data remain outside this workflow.

### Verification and freshness

The private release is verified against a 20-case cloud matrix that checks the exact build, dataset rows, `OUTPUT`, `RUN_SUMMARY`, and named event charges after delayed readback. The release-evidence file records the tested build and run IDs. It measures those bounded cases, while real-world website availability can still vary. Every company row carries `collectedAt`, `sourceUrls`, and field-level provenance so downstream users can decide when it is stale enough to refresh.

### Use with an AI agent

> Enrich these ten company domains from their public websites. Return company name, description, public contact links, technology signals, source URLs, collection time, and the final outcome. Keep the batch at ten, preserve explicit nulls, and read back the dataset after completion.

Give the agent a domain list and the fields required for the next decision. The Actor is read-only against public pages; inspect OUTPUT and RUN\_SUMMARY for COMPLETE, PARTIAL, VALID\_EMPTY, or a safe diagnostic outcome, then page the dataset if the result set is larger than the preview.

### Best results guidance

| Starting situation | Helpful action | Expected outcome |
| --- | --- | --- |
| You already have canonical company domains | Provide the domains with stable externalId values. | Source-linked company records that can be joined back to the CRM. |
| You need contact review | Enable published contacts and inspect their fieldSources. | Only email and telephone links visibly published by the selected sites. |
| A site temporarily refuses a direct request | Keep managed proxy fallback enabled and retry a later run. | Direct collection first, with one bounded managed retry when appropriate. |
| You need private contacts, a people graph, or buyer intent | Select a product or authorized data source designed for that broader requirement. | A workflow whose data rights, coverage, and scope match the requirement. |

### Builder's note

I designed this Actor around public provenance rather than inferred company facts: a field is more useful in an enrichment workflow when the reviewing team can see which page supplied it and when it was collected. The small page cap and explicit outcome states also make a batch easier for an agent or operator to reason about without treating a missing field as an invented answer.

### Responsible use

Use the Actor only for public pages you are authorized to access and for purposes allowed by applicable laws and site terms. Keep personal-data handling proportionate to the workflow and review published business contacts before use. The supported scope excludes bypassing access controls, collecting from private systems, and inferring protected information.

### Pricing and run costs

This Actor uses **Pay per event plus Apify platform usage**. The [Pricing tab](https://apify.com/khadinakbar/clearbit-alternative/pricing) lists the current event rates and billing terms.

| Event | Billing unit | When it applies |
|---|---|---|
| `apify-actor-start` | Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
| `company-enriched` | Source-cited company enrichment | Charged after a source-cited company record is persisted. |

Run cost combines the charged events and Apify platform usage. Review the run charge limit and requested result count before starting.

### Connect an AI agent

Use the [Apify MCP configurator](https://mcp.apify.com) to choose an available client connection. Inspect this Actor’s current input schema and required credentials before running it.

# Actor input Schema

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

Provide one to 100 companies you already selected, each with a public website domain such as apify.com. Optional companyName and externalId are carried through for an auditable CRM join. This is not a free-text person search, a LinkedIn profile list, or permission to send outreach.

## `maxCompanies` (type: `integer`):

Set the hard cap on distinct valid company domains in this run, from 1 through 100. It defaults to 10, so company-enriched event charges cannot exceed the selected count plus platform usage. This is a result cap, not a request to crawl the wider web.

## `maxPagesPerCompany` (type: `integer`):

Choose how many standard public routes to inspect: the homepage and then /about, /contact, and /team. It defaults to 3 and accepts 1 through 4 so source URLs stay bounded and reviewable. It does not enter portals, logins, or unrelated sites.

## `includePublishedContacts` (type: `boolean`):

When enabled, return business email and phone links visibly published on the fetched public company pages. It defaults to true and preserves supporting source URLs for review. It never guesses email patterns, unmask protected data, or validate a mailbox owner.

## `includeTechnologySignals` (type: `boolean`):

When enabled, return a small list of technologies whose public HTML asset signatures were observed during the fetch. It defaults to true and labels these as page-level observations, not a complete technology inventory. It does not infer contracts, spending, buyer intent, or internal systems.

## `useProxyFallback` (type: `boolean`):

Allow one Apify Residential proxy retry only after the direct request is blocked or transiently unavailable. It defaults to true to improve resilience while keeping direct public-site collection as the primary route. Proxy usage is additional platform usage and is not a bypass for private or restricted content.

## `requestTimeoutSecs` (type: `integer`):

Set the timeout for one public webpage request, from 5 through 40 seconds. It defaults to 20 seconds and is applied independently to every bounded route and retry. This does not extend the overall Actor timeout or allow unbounded retries.

## Actor input object example

```json
{
  "companies": [
    {
      "domain": "example.com",
      "companyName": "Example Domain",
      "externalId": "crm-001"
    }
  ],
  "maxCompanies": 10,
  "maxPagesPerCompany": 3,
  "includePublishedContacts": true,
  "includeTechnologySignals": true,
  "useProxyFallback": true,
  "requestTimeoutSecs": 20
}
```

# Actor output Schema

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

One source-cited record per supplied company that yielded a fetchable public page.

## `compactOutput` (type: `string`):

Terminal outcome, counts, warnings, and event-charge totals.

## `runSummary` (type: `string`):

Detailed page, route, validation, source, and billing diagnostics.

# 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": [
        {
            "domain": "example.com",
            "companyName": "Example Domain",
            "externalId": "crm-001"
        }
    ],
    "maxCompanies": 10,
    "maxPagesPerCompany": 3,
    "includePublishedContacts": true,
    "includeTechnologySignals": true,
    "useProxyFallback": true,
    "requestTimeoutSecs": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/clearbit-alternative").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": [{
            "domain": "example.com",
            "companyName": "Example Domain",
            "externalId": "crm-001",
        }],
    "maxCompanies": 10,
    "maxPagesPerCompany": 3,
    "includePublishedContacts": True,
    "includeTechnologySignals": True,
    "useProxyFallback": True,
    "requestTimeoutSecs": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/clearbit-alternative").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": [
    {
      "domain": "example.com",
      "companyName": "Example Domain",
      "externalId": "crm-001"
    }
  ],
  "maxCompanies": 10,
  "maxPagesPerCompany": 3,
  "includePublishedContacts": true,
  "includeTechnologySignals": true,
  "useProxyFallback": true,
  "requestTimeoutSecs": 20
}' |
apify call khadinakbar/clearbit-alternative --silent --output-dataset

```

## MCP server setup

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

```

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/SDthf1Y3UTZJYbtfr/builds/ve4sIWum0tRnFJFOL/openapi.json
