# Company Name to Domain Finder — Logo, LinkedIn & Socials (`yugenox/company-domain-enrichment`) Actor

Turn company names into domains with a match confidence score, then enrich each company from its own website: logo, LinkedIn company page, X, Facebook, Instagram, YouTube and TikTok links, role mailboxes (info@, sales@) and Wikidata facts. Misses are free.

- **URL**: https://apify.com/yugenox/company-domain-enrichment.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 domain founds

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 Name to Domain Finder — Logo, LinkedIn & Socials

Turn a list of **company names into domains**, and enrich every company from **its own website**, in one row:

- 🌐 **Domain + match confidence** — "Shopify" → `shopify.com` (0.99), acronym brands included, with the close alternatives listed so you can review edge cases.
- 🖼️ **Logo** and favicon — the logo the website itself publishes (its JSON-LD logo or header logo, else its app icon).
- 💼 **LinkedIn company page** — taken from the links on the company's own website (LinkedIn itself is never visited).
- 📣 **Social profiles** — X (Twitter), Facebook, Instagram, YouTube and TikTok.
- ✉️ **Role mailboxes** — info@, sales@, support@, hello@, press@ … on the company's own domain. Never the address of a named person.
- 🏛️ **Company facts** from Wikidata — headquarters country and city, founding year, industry, Wikidata id.

**Misses are free**: names that aren't found, matches below your confidence threshold, and websites that are blocked, parked or empty cost nothing. Already have domains? Give them instead of (or next to) names and only the website enrichment is charged.

Built for CRM clean-up, lead lists, Clay / n8n / Make workflows and AI agents that need "company name → website" resolution.

### 📦 What you get

One row per company found:

| Field | Example |
|---|---|
| `domain`, `matchConfidence`, `matchSource` | `shopify.com`, `0.99`, `clearbit+wikidata` |
| `logoUrl`, `iconUrl` | the site's own logo (or app icon) and its favicon |
| `linkedinCompanyUrl` | `https://www.linkedin.com/company/shopify` |
| `twitterUrl`, `facebookUrl`, `instagramUrl`, `youtubeUrl`, `tiktokUrl` | profile links |
| `roleEmails`, `phones` | `["help@mercury.com", "press@mercury.com"]`, `["+18889975597"]` |
| `hqCountry`, `hqLocation`, `foundedYear`, `industry`, `wikidataId` | `Canada`, `Ottawa`, `2006`, `["e-commerce"]`, `Q7501150` |
| `description`, `companyName`, `finalUrl` | meta description, name, where the homepage landed |
| `otherCandidates` | up to 3 other domains the name could mean, with their scores |
| `websiteStatus` | `ok`, `blocked`, `parked`, `unreachable`, `timeout`, `no_content` … |
| `fromWikidata` | which fields came from Wikidata because the website didn't show them |
| `billedEvents` | exactly what this row was charged for |

<details>
<summary>A full row (Shopify, real output)</summary>

```json
{
  "input": "Shopify",
  "inputType": "name",
  "companyName": "Shopify",
  "domain": "shopify.com",
  "website": "https://shopify.com/",
  "finalUrl": "https://www.shopify.com/",
  "matchConfidence": 0.99,
  "matchSource": "clearbit+wikidata",
  "matchedName": "Shopify",
  "otherCandidates": [
    { "domain": "shopify.plus", "name": "Shopify Plus", "confidence": 0.78, "source": "clearbit" }
  ],
  "description": "Try Shopify free. Build or grow your business fast with AI. Get more than ecommerce software with tools to manage every part of your business.",
  "logoUrl": "https://cdn.shopify.com/shopifycloud/brochure/assets/brand-assets/shopify-logo-primary-logo-456baa801ee66a0a435671082365958316831c9960c480451dd0330bcdae304f.svg",
  "iconUrl": "https://cdn.shopify.com/b/shopify-brochure2-assets/61cc781fe73f11e9d4bd160d27cc627b.png",
  "linkedinCompanyUrl": "https://www.linkedin.com/company/shopify",
  "twitterUrl": "https://x.com/Shopify",
  "facebookUrl": "https://www.facebook.com/shopify",
  "instagramUrl": "https://www.instagram.com/shopify",
  "youtubeUrl": "https://www.youtube.com/user/shopify",
  "tiktokUrl": "https://www.tiktok.com/@shopify",
  "roleEmails": [],
  "phones": [],
  "wikidataId": "Q7501150",
  "hqCountry": "Canada",
  "hqLocation": "Ottawa",
  "foundedYear": 2006,
  "industry": ["e-commerce", "online marketplace"],
  "fromWikidata": ["twitterUrl", "facebookUrl", "instagramUrl", "tiktokUrl"],
  "websiteStatus": "ok",
  "pagesFetched": 1,
  "status": "ok",
  "billedEvents": ["domain-resolved", "company-enriched"],
  "countryHint": null,
  "scrapedAt": "2026-10-10T13:12:48.616Z"
}
```

</details>

### ⚙️ Input examples

Names, domains, or both — one per line:

```json
{ "companies": ["Shopify", "stripe.com", "HubSpot, hubspot.com", "Canva"] }
```

Names only, no website visit (fastest, cheapest):

```json
{ "companies": ["Shopify", "Canva", "Wealthsimple"], "enrich": false }
```

A CRM import where a wrong domain is worse than none, with every miss kept as a row:

```json
{ "companies": ["Delta", "Mercury", "Acme Plumbing"], "minConfidence": 0.8, "includeMisses": true }
```

Records from Clay / n8n / Make (any of these column names work: companyName, company, name, title, domain, website, url, country — a location / city column counts as a country hint only when it ends in a country name, like "Toronto, ON, Canada"):

```json
{ "items": [{ "companyName": "Pizza Nova", "country": "Canada" }, { "title": "Mill Street Brewery", "website": "https://millstreetbrewery.com" }] }
```

A Google Sheet or CSV file, or the dataset of another Actor (e.g. Google Maps Scraper output, which has `title` + `website`):

```json
{ "csvUrl": "https://docs.google.com/spreadsheets/d/<sheet-id>/edit#gid=0" }
```

```json
{ "datasetId": "<dataset id>" }
```

| Field | What it does |
|---|---|
| **Companies** | Names, domains / websites, or "Name, domain". Duplicates are looked up once. |
| **Enrich from the company website** | On (default): homepage (+ one about / contact page when needed) for logo, socials, LinkedIn, role mailboxes. Off: name → domain only. |
| **Role mailboxes** | On (default): collect info@ / sales@ / support@ … on the company's own domain. |
| **Company facts from Wikidata** | On (default): HQ country and city, founding year, industry; fills social links the site doesn't show. Free. |
| **Minimum match confidence** | 0-1, default 0.6. Below it a name counts as not found (free). |
| **Country hint** | Favours the company headquartered in that country when several share a name. A country name or ISO code ("Canada", "CA", "CAN"); anything else is ignored. |
| **Pages per website** | 1-3, default 2. |
| **Include misses in the dataset** | Also save a free row for each miss, with the reason in `status`. |
| **Max companies** | Look up at most this many (up to 50,000 per run). |

### 💵 Pricing

Pay per result — misses are free.

| Event | FREE / BRONZE | SILVER | GOLD / PLATINUM / DIAMOND |
|---|---|---|---|
| **Domain found** — a name matched at or above your minimum confidence | $0.0008 | $0.0007 | $0.0006 |
| **Company enriched** — the website gave its own logo, its LinkedIn company page, a social profile that is clearly the company's, or a role mailbox | $0.0015 | $0.0012 | $0.001 |
| **Actor start** — once per run | $0.001 | $0.001 | $0.001 |

A full row from a name costs **$0.0023** ($0.0016 on GOLD and up); from a domain you already have, **$0.0015** ($0.001). Not charged: names not found or below the minimum confidence, domains you supply (for the "domain found" event), websites that are blocked, parked, unreachable or empty, favicons, app icons and share images, social links that can't be tied to the company (a web designer's credit, a personal profile), Wikidata facts, phone numbers, miss rows.

### ❓ FAQ

**How is the match confidence computed?**
Each candidate domain is scored on how closely its company name matches yours (legal forms like Inc., Ltd, GmbH are ignored), how well the domain fits the name (`shopify.com` for Shopify, `ibm.com` for International Business Machines), and its rank in the source. When Clearbit and Wikidata name the same domain the score goes up (up to 0.99); when two different domains score alike it goes down, and the runner-ups are listed in `otherCandidates`. A domain you give yourself is 1.

**Where do the domains come from?**
Clearbit's public company autocomplete first, then Wikidata (the company's official website, property P856). Single-word or very common names ("Delta", "Mercury") can mean several companies: use a country hint, a higher minimum confidence, or give the domain.

**I used the Clearbit Logo API / Clearbit autocomplete. Is this a replacement?**
For company name → domain and logos, yes: the logo comes from the company's own website (its published logo, else its app icon; the favicon is in `iconUrl`), and names resolve through Clearbit's autocomplete with Wikidata as a fallback. If Clearbit's autocomplete ever stops answering, runs keep working on Wikidata alone (fewer small-company matches) and the status message says so.

**Do you scrape LinkedIn?**
No. LinkedIn is never visited. The LinkedIn company URL is the link the company's own website points to (or the LinkedIn id recorded on Wikidata). Only company pages (`linkedin.com/company/…`) are returned, never personal profiles.

**What e-mail addresses do you return?**
Only role mailboxes on the company's own domain — info@, sales@, support@, hello@, press@, careers@ and similar. Addresses that could belong to a person (jane.doe@, jsmith@) and addresses on other domains (gmail.com etc.) are never collected.

**Why is a website "blocked"?**
Some websites refuse automated visits from data centres (bot protection, or rate limits — many Shopify-hosted stores answer "Too many requests"). This Actor does not try to get around that — no retry from another IP address, no residential proxies — and the website enrichment is not charged. For a company you gave by **name**, the row is still saved (its domain was found) with `websiteStatus: "blocked"` and any social links Wikidata has. For a company you gave as a **domain**, there is nothing new to return, so it is a free miss: it appears in the dataset only with "Include misses in the dataset" on, and is always counted in the RUN_REPORT.

**Can I send thousands of companies?**
Yes, up to 50,000 per run; ten companies are looked up in parallel. If a long stretch of the list finds nothing (100 in a row, or misses that would cost more than the run earns), the run stops early with a clear message instead of burning your time.

**Is it legal?**
The Actor reads public pages that companies publish about themselves, Wikidata's open data and a public autocomplete endpoint, without logging in. You are responsible for how you use the data (for example, anti-spam laws such as CAN-SPAM, CASL and GDPR when e-mailing role mailboxes).

# Actor input Schema

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

One company per line: a company name ("Shopify"), a domain or website ("stripe.com", "https://www.hubspot.com"), or both ("HubSpot, hubspot.com"). Names are resolved to their domain; domains are enriched from the company's own website. Duplicates are looked up once.

## `enrich` (type: `boolean`):

Read the company's homepage (plus one about or contact page when needed) for the logo, social links, the LinkedIn company page linked from the site, phone numbers and role mailboxes. Off = name to domain only.

## `roleEmails` (type: `boolean`):

Collect role mailboxes on the company's own domain: info@, sales@, support@, hello@, press@ and similar. Addresses of named people are never collected.

## `companyFacts` (type: `boolean`):

Add the Wikidata id, headquarters country and city, founding year and industry when the company is on Wikidata, and fill social links the website does not show. No extra charge.

## `minConfidence` (type: `number`):

Names whose best match scores below this (0 to 1) count as not found and are free. 0.6 suits most lists; use 0.8 for CRM imports where a wrong domain is worse than none. Rows show the score in matchConfidence and close alternatives in otherCandidates.

## `countryHint` (type: `string`):

Optional country for every name, e.g. "Canada" or "US". It favours the company headquartered there when several share a name. Records can carry their own country column instead.

## `maxPagesPerSite` (type: `integer`):

1 = homepage only. 2 (default) = homepage plus one about or contact page when the homepage has no role mailbox or social link. 3 = up to two extra pages.

## `includeMisses` (type: `boolean`):

Also save a row (free) for every company that was not found, scored below the minimum confidence, or whose website gave nothing, with the reason in status. Off = misses are listed only in the run report.

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

Look up at most this many companies from the list. Empty = all (up to 50,000 per run).

## `items` (type: `array`):

Objects with any of these columns: companyName / company / name / title, domain / website / url, country (a location / city column is used only when it ends in a country name). Example: \[{"companyName": "Shopify", "country": "Canada"}].

## `csvUrl` (type: `string`):

A link to a CSV file with a company name and / or website column (Google Sheets links work when the sheet is shared with "Anyone with the link"). A one-column file without a header works too.

## `datasetId` (type: `string`):

The id of an Apify dataset whose items have a company name and / or website (for example the output of Google Maps Scraper: title + website).

## `proxyConfiguration` (type: `object`):

Apify datacenter proxies are all this Actor needs. Residential proxies are not used: websites that block datacenter traffic are reported as blocked and not charged for enrichment.

## Actor input object example

```json
{
  "companies": [
    "Shopify",
    "stripe.com",
    "Canva"
  ],
  "enrich": true,
  "roleEmails": true,
  "companyFacts": true,
  "minConfidence": 0.6,
  "maxPagesPerSite": 2,
  "includeMisses": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every company saved in this run, one row each.

## `run` (type: `string`):

Status and statistics for this run.

## `report` (type: `string`):

RUN_REPORT: how the run ended, misses and why, website statuses, sources used, requests and traffic.

# 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": [
        "Shopify",
        "stripe.com",
        "Canva"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/company-domain-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 = {
    "companies": [
        "Shopify",
        "stripe.com",
        "Canva",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/company-domain-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 '{
  "companies": [
    "Shopify",
    "stripe.com",
    "Canva"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/company-domain-enrichment --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/company-domain-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/fZonUixLx1YKvTlPV/builds/NPdXfI9cYr9Aq4A1Q/openapi.json
