# Namewhere — Company Name to Domain & Website Finder (`cybermax/company-to-domain`) Actor

Company name to domain finder: turn company names into official website domains with a confidence score and evidence (Wikidata, homepage brand check), alternatives, social links, parked domains rejected. Clearbit NameToDomain replacement. $0.0008 per match; misses free.

- **URL**: https://apify.com/cybermax/company-to-domain.md
- **Developed by:** [CyberMax](https://apify.com/cybermax) (community)
- **Categories:** Lead generation, Developer tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.80 / 1,000 domain resolveds

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?

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

## Namewhere: company name to domain & website finder

**Turn a list of company names into their official website domains**, with a confidence score and the evidence behind every answer. Namewhere is a drop-in replacement for Clearbit's NameToDomain / Autocomplete lookups: give it "Acme Brick Company, Inc." and it returns `brick.com`, tells you *why* (Wikidata's company record, the homepage calling itself "Acme Brick", acmebrick.com redirecting there), lists runner-up domains, and skips parked or for-sale lookalikes.

Built for CRM and lead enrichment, AI agents that need a domain before calling other tools, and data cleaning at scale. **$0.0008 per confident match; misses, low-confidence and invalid names are free.**

### What you get (one record per company)

- **`domain`** and **`website`**: the official domain (`brick.com`) and the homepage URL after redirects.
- **`confidence`** (0–0.99) and **`confidenceLabel`** (high / medium / low), plus **`status`**: `resolved` (at or above your minimum, charged), `low-confidence` (best guess, free), `not-found`, `invalid`.
- **`evidence`**: the Wikidata record it matched (ID, label, description, country check), how well the domain spells the name, and what the homepage calls itself (title, `og:site_name`, JSON-LD organisation name) with a brand-match score.
- **`sources`**: `wikidata`, `dns-guess`, `redirect-from:<domain>`, `input`.
- **`companyName`** and **`description`**: the official name and a one-line description.
- **`socials`**: LinkedIn, X, Facebook, Instagram, YouTube, TikTok and GitHub profiles linked from the homepage (share buttons are ignored).
- **`alternatives`**: runner-up domains with their confidence (country sites, group vs. consumer sites, sister companies).
- **`rejected`**: domains it checked and threw out, and why (parked, for sale, dead).
- **`ambiguous: true`** when two different live companies share the exact name and nothing breaks the tie.

### How it decides (no search-engine scraping)

1. **Wikidata** company records (CC0): entities whose name matches and that state an official website, preferring organisations over people or films, and your country if you give one.
2. **Likely domains**: `name.com`, the country's domains (`.co.uk`, `.de`…), `.io`, `.co`, `.ai`, brand TLDs (`octopus.energy`), shortened forms (`Figma Technologies` → `figma.com`). Only domains that exist in DNS are visited.
3. **Homepage check** for every candidate: is it live, parked or for sale, where does it redirect, and does the page call itself by the company's name?
4. The evidence is combined into one confidence score. A domain that merely exists scores low; a domain Wikidata names *and* whose homepage says the company's name scores 0.99.

### Ready-made inputs (first try in one click)

**Four well-known names** (a few seconds, under $0.004):

```json
{ "companies": ["Stripe", "Acme Brick Company, Inc.", "Monzo Bank | gb", "GW&K Investment Management"] }
```

**Strict CRM write, UK companies:**

```json
{ "companies": ["Hiscox", "Octopus Energy", "Revolut Ltd."], "country": "gb", "minConfidence": 0.8 }
```

**Watch a list and return only companies whose domain changed** (pair with a weekly Schedule):

```json
{ "companies": ["Notion", "Figma Technologies Inc", "Linear"], "monitor": true, "monitorKey": "crm-names" }
```

### Input

```json
{
  "companies": ["Stripe", "Acme Brick Company, Inc.", "Monzo Bank | gb", "jane@figma.com"],
  "country": "us",
  "minConfidence": 0.6
}
```

| Field | Default | What it does |
|---|---|---|
| `companies` | required | One name per line. Legal forms (Inc, LLC, GmbH, Ltd, S.A.…) are handled. Add a country after a bar (`"Monzo Bank \| gb"`) or pass objects `{"name": "Hiscox", "country": "gb"}`. A domain, URL or email is just verified. |
| `country` | none | Two-letter default country for names without one: tries its domains and prefers companies registered there. |
| `minConfidence` | 0.6 | Threshold for `resolved` (charged). Use 0.8 for strict CRM writes. |
| `maxAlternatives` | 3 | Runner-up domains per company. |
| `includeSocials` | true | Social profile links from the homepage. |
| `useWikidata` / `guessDomains` | true / true | Turn either source off. |
| `monitor` / `monitorKey` | false / auto | Only return companies that are new or whose domain changed since the last run. |
| `maxConcurrency` | 6 | Companies in parallel. |
| `timeoutSecs` | 8 | Per request. |

### Output (real record from an Apify run, 24 Sep 2026)

```json
{
  "input": "Stripe",
  "status": "resolved",
  "domain": "stripe.com",
  "website": "https://stripe.com/",
  "confidence": 0.99,
  "confidenceLabel": "high",
  "companyName": "Stripe",
  "description": "Irish-American payment technology company",
  "sources": ["dns-guess", "redirect-from:stripe.io", "redirect-from:stripe.net", "wikidata"],
  "evidence": {
    "wikidata": { "id": "Q7624104", "label": "Stripe", "nameMatch": 1, "countryMatch": null },
    "domainNameMatch": 1,
    "homepage": { "reachable": true, "title": "Stripe | Financial Infrastructure to Grow Your Revenue", "brandMatch": 1, "matchedField": "orgName" }
  },
  "socials": {
    "linkedin": "https://www.linkedin.com/company/stripe",
    "x": "https://twitter.com/stripe",
    "github": "https://github.com/stripe"
  },
  "rejected": [{ "domain": "stripe.org", "reason": "parked, for sale or redirects to a third-party page" }]
}
```

More real output: [`examples/real-run-benchmark-8.json`](examples/real-run-benchmark-8.json).

### Benchmark (24 Sep 2026, same 8 names, on Apify)

Names: Stripe, Acme Brick Company, Monzo Bank, Gusto, Linear, Blue Bottle Coffee, Octopus Energy, Basecamp. Correct = the company's own website.

| Actor | Correct | Wrong answers | Run time | Cost for the 8 |
|---|---|---|---|---|
| **Namewhere** | **8/8** | 0 | 21 s | $0.0064 |
| Top rival by users (4 GB, search-based) | 6/8 | 2 (Monzo → a comparison site; Blue Bottle → a kids' TV site) | 60 s | $0.032 |
| Cheapest rival ($0.001/match) | 6/8 | 1 (Gusto → gusto.co.uk, a different company), 1 not found | 9 s | $0.006 |
| Rival with evidence scores | 5/8 | 1 (Monzo → a comparison site), 2 not found | 5 s | $0.005 |

A harder set of 40 names (legal names like "Alphabet Inc.", "Meta Platforms, Inc.", "Nestlé S.A.", "International Business Machines Corporation", plus startups and UK/German firms): **39/40 correct** in one 134 s run (abc.xyz, meta.com, nestle.com, ibm.com, notion.com, shopify.com…). The one miss, "Revolut Ltd" → revolut.io, came back flagged `ambiguous: true` with revolut.com as the first alternative. [Browse all 40 results](https://huggingface.co/spaces/CyberMax-tools/company-name-to-domain).

Octopus Energy: Namewhere returns the group site `octopusenergy.group` (Wikidata's official website) with the consumer site `octopus.energy` as the first alternative. Rival costs are their listed Store prices at the time. Namewhere is slower than the fastest rivals because it checks every candidate homepage; that check is what keeps parked domains and namesakes out.

### Pricing

**$0.0008 per company resolved** at or above your `minConfidence`. Low-confidence guesses, not-found and invalid names are returned free. No start fee. 1,000 matched companies = $0.80.

### Run it on a schedule

Companies rebrand, get acquired and move domains. Save a task with `"monitor": true` and a `monitorKey`, then add an Apify Schedule (for example weekly on Monday 06:00). Each run returns and charges only companies that are new to the list or whose domain changed, with `change: "changed"` and `changes.domain.from/to`.

```json
{ "companies": ["...your account list..."], "monitor": true, "monitorKey": "crm-accounts", "minConfidence": 0.8 }
```

### Integrations

**Make:** Apify app → "Run an Actor" (Actor `cybermax/company-to-domain`, input `{"companies":["{{company}}"]}`, run synchronously) → "Get dataset items" → update the CRM record's website field.

**Zapier:** Apify app → "Run Actor" with `{"companies":["{{Company Name}}"],"minConfidence":0.8}` on every new lead that has a company but no website.

**n8n / any HTTP client:**

```
POST https://api.apify.com/v2/acts/cybermax~company-to-domain/run-sync-get-dataset-items?token=YOUR_TOKEN
{"companies": ["Acme Brick Company", "Monzo Bank | gb"]}
```

**Google Sheets:** `=IMPORTDATA("https://api.apify.com/v2/acts/cybermax~company-to-domain/runs/last/dataset/items?format=csv&fields=input,domain,confidence,status&token=YOUR_TOKEN")`

**Python:**

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("cybermax/company-to-domain").call(run_input={"companies": open("companies.txt").read().splitlines()})
for r in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(r["input"], r["domain"], r["confidence"], r["status"])
```

**JavaScript:**

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('cybermax/company-to-domain').call({ companies: ['Stripe', 'Basecamp'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**AI agents (MCP):** Namewhere is a tool on Apify's hosted MCP server, `https://mcp.apify.com/?tools=cybermax/company-to-domain` (header `Authorization: Bearer <your Apify token>`).

```json
{ "mcpServers": { "namewhere": { "url": "https://mcp.apify.com/?tools=cybermax/company-to-domain",
  "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" } } } }
```

Example prompts: *"What's the website of Acme Brick Company?"*, *"Find the domains for these 300 companies from my trade-show list and flag the unsure ones."*, *"Get the official domain for Monzo, then find its tech stack."*

### Common uses

- **CRM and lead enrichment:** fill the website field for accounts that only have a name, before running email, tech-stack or logo tools that need a domain.
- **Data cleaning:** match messy company names from forms, trade-show lists or invoices to one canonical domain.
- **AI agents:** a reliable first step that turns "the company the user mentioned" into a domain other tools can use.
- **Replacing Clearbit NameToDomain:** same job, with evidence and confidence you can audit.

### When NOT to use Namewhere

- You already have emails or URLs: extract the domain directly (Namewhere will just verify it).
- Tiny local businesses with no website of their own, or whose site lives on a builder subdomain (Wix, Shopify stores): expect `not-found`.
- You need people, emails or firmographics: use a contact or enrichment tool after this step.
- You need search-engine rankings or "who ranks for this name": Namewhere doesn't scrape search engines.

### FAQ

**What does a miss cost?** Nothing. Only `resolved` rows (at or above `minConfidence`) are charged; `low-confidence`, `not-found` and `invalid` are free.

**Names with "&" or initials?** Handled the way companies write their domains: "GW\&K Investment Management" → gwkinvest.com, "AT\&T" → att.com, "Ben & Jerry's" → benjerry.com.

**Do you use Google or Bing?** No search-engine scraping: Wikidata (CC0), DNS and the candidate sites' own homepages only, so results are stable and cheap.

**Two companies share a name. Which do I get?** The one matching your `country` if you give one; otherwise `ambiguous: true` with the runner-up in `alternatives`.

### Also from CyberMax

- [Logolark — company logo API & favicon finder](https://huggingface.co/spaces/CyberMax-tools/saas-logos-brand-colors?soon=logo-finder): the logo and brand colour for each domain you just found.
- [DomainDNA — tech stack, email security & domain age](https://apify.com/cybermax/domain-intel): what each company runs on.
- [Hollerdex — website emails, phones & socials](https://apify.com/cybermax/website-contacts): contact details for every resolved domain.
- [HireHeat — company hiring signals by domain](https://apify.com/cybermax/hiring-signals): who's hiring, and for what.

All tools: [Boardroom Buys](https://apify.com/cybermax/sec-insider-tracker) · [Swellmeter](https://apify.com/cybermax/google-trends) · [SnapScout](https://apify.com/cybermax/website-screenshot) · [Gripeline](https://apify.com/cybermax/app-reviews) · [Keyfern](https://apify.com/cybermax/keyword-ideas) · [Linkheft](https://apify.com/cybermax/domain-authority) · [Printwren](https://huggingface.co/spaces/CyberMax-tools/docs-pages-as-pdfs?soon=html-to-pdf) · [Inkpluck](https://apify.com/cybermax/article-extract) · [Pinloft](https://huggingface.co/spaces/CyberMax-tools/batch-geocoder-demo?soon=batch-geocoder) · [Ziplore](https://huggingface.co/spaces/CyberMax-tools/zip-code-lookup?soon=zip-data-api)

### Data, license and attribution

Company records come from [Wikidata](https://www.wikidata.org/) (CC0) through its public API, rate-limited politely. Homepages are visited once per candidate with an identifying User-Agent; only public pages are read. No search engines are scraped and no personal data is collected.

© 2026 CyberMax. All rights reserved.

### Changelog

- 25 Sep 2026: names with "&" between initials resolve (GW\&K Investment Management → gwkinvest.com, H\&M → hm.com, AT\&T → att.com); regression tests added.
- 0.1 (24 Sep 2026): first release (build 0.1.6). Wikidata + verified domain candidates, confidence and evidence, parked-domain filter, brand TLDs, social links, monitor mode.

# Actor input Schema

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

One company per line, e.g. "Stripe" or "Acme Brick Company, Inc.". Legal forms (Inc, LLC, GmbH, Ltd…) are handled for you. Add a country after a bar to disambiguate: "Monzo Bank | gb". In JSON you can also pass objects: {"name": "Hiscox", "country": "gb"}. A domain, URL or email in the list is simply verified.

## `country` (type: `string`):

Optional two-letter country code applied to every name without its own, e.g. "us", "gb", "de". It tries that country's domains (.co.uk, .de…) and prefers companies registered there.

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

0 to 0.99. Results at or above it get status "resolved" (and are charged); lower ones are returned free as "low-confidence" with their best guess. 0.6 is balanced; use 0.8 for strict CRM enrichment.

## `maxAlternatives` (type: `integer`):

How many runner-up domains to list with their confidence (e.g. a country site or a sister company).

## `includeSocials` (type: `boolean`):

LinkedIn, X, Facebook, Instagram, YouTube, TikTok and GitHub profiles linked from the company's homepage. Free, no extra requests.

## `useWikidata` (type: `boolean`):

Look the name up in Wikidata's company records (official website, country). Best for established companies.

## `guessDomains` (type: `boolean`):

Try likely domains (name.com, name.io, country domains…), keep those that exist, skip parked or for-sale ones, and confirm by the homepage's own brand name. Best for startups and small firms.

## `monitor` (type: `boolean`):

For scheduled runs over the same list: return (and charge) only companies that are new or whose domain changed since the last run (rebrands, acquisitions, domain moves).

## `monitorKey` (type: `string`):

Optional name for this watchlist's saved state, so you can edit the list without starting over. Defaults to a hash of the list.

## `maxConcurrency` (type: `integer`):

Companies resolved at the same time.

## `timeoutSecs` (type: `integer`):

Per homepage or lookup request.

## Actor input object example

```json
{
  "companies": [
    "Stripe",
    "Acme Brick Company",
    "Monzo Bank | gb"
  ],
  "minConfidence": 0.6,
  "maxAlternatives": 3,
  "includeSocials": true,
  "useWikidata": true,
  "guessDomains": true,
  "monitor": false,
  "maxConcurrency": 6,
  "timeoutSecs": 8
}
```

# Actor output Schema

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

No description

# 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",
        "Acme Brick Company",
        "Monzo Bank | gb"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cybermax/company-to-domain").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",
        "Acme Brick Company",
        "Monzo Bank | gb",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("cybermax/company-to-domain").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",
    "Acme Brick Company",
    "Monzo Bank | gb"
  ]
}' |
apify call cybermax/company-to-domain --silent --output-dataset

```

## MCP server setup

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

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/6vuRfUa62f3ha8OHp/builds/6Y9zn1Y60iPWyqcZP/openapi.json
