How to find a company's website from its name, in bulk
Short answer
Don't trust the first search result. Use a lookup that checks evidence: Namewhere on Apify matches each name against Wikidata, tests likely domains, opens the homepage to confirm the brand, rejects parked domains and returns the domain with a 0-1 confidence, at $0.0008 per match; misses are free.
- Put one company name per row. Add the country when names are common ("Monzo Bank | gb" or the country field).
- Remove legal suffixes only if they are inconsistent; Namewhere handles Inc, Ltd, GmbH and similar itself.
- Run the list and keep the confidence column: 0.9+ is safe to use as is, 0.6-0.9 deserves a quick look.
- Check the runner-up domains for rows where two companies share a name.
- Feed the domains to the next step: contact details, tech stack or company size.
Copy-paste code
Python (pip install apify-client): names in, domain + confidence out
import csv, os
from apify_client import ApifyClient
names = [row[0] for row in csv.reader(open("companies.csv")) if row]
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("cybermax/company-to-domain").call(run_input={
"companies": names, # "Acme Brick Company", "Monzo Bank | gb", ...
"minConfidence": 0.6,
"includeSocials": True,
})
with open("domains.csv", "w", newline="") as f:
w = csv.writer(f)
w.writerow(["company", "domain", "confidence", "status"])
for r in client.dataset(run["defaultDatasetId"]).iterate_items():
w.writerow([r["input"], r.get("domain"), r.get("confidence"), r["status"]])JavaScript / Node (npm i apify-client)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('cybermax/company-to-domain').call({
companies: ['Stripe', 'Acme Brick Company', 'Monzo Bank | gb'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const r of items) console.log(r.input, '->', r.domain, r.confidence);No code: Google Sheets via n8n, Make or Zapier
n8n: HTTP Request node (or the Apify node, action "Run an Actor and get dataset")
Method: POST
URL: https://api.apify.com/v2/acts/cybermax~company-to-domain/run-sync-get-dataset-items
Auth: Header Auth -> Authorization: Bearer <your Apify token>
Body: JSON {"companies": {{ $json.names }}, "minConfidence": 0.6}
Output: one n8n item per result row, ready for Google Sheets / Airtable / a Slack message
Make: Apify app -> "Run an Actor" (Actor: cybermax/company-to-domain, wait for finish = yes)
-> Apify "Get Dataset Items" (dataset = the run's defaultDatasetId) -> Google Sheets "Add a Row"
Zapier: Apify app -> action "Run Actor" (cybermax/company-to-domain, input JSON as above)
-> trigger "Finished Actor Run" -> "Fetch Dataset Items" -> your app
Runs longer than 5 minutes: start with POST /v2/acts/cybermax~company-to-domain/runs and read the dataset when the run finishes.
Sheet flow: Google Sheets "Get rows" -> Aggregate the name column into one array -> the request above -> "Update row" with domain and confidence.From an AI agent (MCP)
# Any MCP client (Claude Desktop, Claude Code, Cursor, VS Code): Apify's hosted MCP server
{
"mcpServers": {
"company-to-domain": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.apify.com/?tools=cybermax/company-to-domain",
"--header", "Authorization: Bearer ${APIFY_TOKEN}"],
"env": { "APIFY_TOKEN": "<your Apify token>" }
}
}
}
# The agent sees one tool, cybermax--company-to-domain, with the Actor's input schema.| Field | Value |
|---|---|
| domain | stripe.com |
| confidence | 0.99 (high) |
| sources | dns-guess, redirect-from:stripe.io, redirect-from:stripe.net, wikidata |
| homepage title | Stripe | Financial Infrastructure to Grow Your Revenue |
| socials | linkedin, x, github |
Source: Namewhere (Apify Actor cybermax/company-to-domain) README, real run on 24 Sep 2026
Why the first Google result is not good enough
Search results mix the company with review sites, directories, news and lookalike domains, and many short names have a parked or unrelated .com. A lookup built for this checks that the homepage really names the brand and records why it chose the domain, so you can trust a 0.95 and review a 0.65.
Company name to domain for CRM and lead lists
Typical uses: cleaning a CRM import, matching a trade-show or grant list to websites, enriching an investor portfolio, or giving an AI agent a reliable first step before it looks anything else up.
Good to know
Price on Apify: $0.0008 per resolved company ($0.80 per 1,000); names it cannot resolve with enough confidence are free. Apify's free plan includes $5 of usage each month.
Very generic names ("Smith Consulting") need a country or city to resolve well; without one they come back as unresolved instead of a guess.
Namewhere: Company names in, official website domains out
$0.0008 per match, misses freeNamewhere returns the official domain for each company name with a confidence score, evidence and socials. $0.0008 per match; misses are free.
Runs on your own Apify account, pay per result; failed results are not charged.Questions
Is there a free company name to domain API?
Namewhere charges only for matches, and Apify's monthly free credit covers a first list of a few thousand names.
How accurate is it?
Every row carries a 0-1 confidence and the evidence (Wikidata, name match, homepage check). Filter on confidence to trade coverage for precision.
Can it handle companies outside the US?
Yes. Add a country code to each name ("Name | de") or set the country field to rank local domains first.
Can an AI agent use it?
Yes. Apify's MCP server exposes it as cybermax--company-to-domain for Claude, Cursor and other MCP clients.
Free: the Free API Starter Kit
Copy-paste calls for 4 APIs with free daily tiers (CVE priority, VIN recalls, US duty rates, email checks), then 5 short emails on KEV/EPSS, MCP and free data.