Company Enrichment by Domain or Name (Company 360) avatar

Company Enrichment by Domain or Name (Company 360)

Pricing

from $3.30 / 1,000 company (basic)s

Go to Apify Store
Company Enrichment by Domain or Name (Company 360)

Company Enrichment by Domain or Name (Company 360)

Enrich company domains or names into one row each: firmographics, traffic, tech stack, hiring, reviews, ads, SEC numbers, LEI, sanctions flag and decision-makers with work emails. Every field shows its source and confidence. Monitor mode reports weekly changes. Not-found rows are free.

Pricing

from $3.30 / 1,000 company (basic)s

Rating

0.0

(0)

Developer

locaihost data

locaihost data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

Give it website domains or company names and get one row per company from about 20 public sources. A row covers firmographics, web traffic, tech stack, hiring, reviews, ads, revenue, compliance and decision-makers with work emails. Every fact says where it came from and how sure we are. Companies we can't find cost nothing.

What people use it for:

  • Researching an account before a call: size, HQ, tech, open jobs, reviews and recent news in one row.
  • Scoring a lead list: describe your ideal customer and every company gets an icpScore from 0 to 100, with the reasons.
  • Reaching the right person: up to 5 decision-makers per company, with the work email the company publishes or one built from its own email format.
  • Filling a CRM: HubSpot and Salesforce views and CSV files that use their field names.
  • Watching a list: monitor mode tells you each week what changed in jobs, tech, pricing, ratings and ads.

Quick start

Paste this into the JSON tab of the input and click Start:

{
"companies": ["zapier.com", "monzo.com", { "name": "Gymshark", "country": "GB" }]
}

You get 3 rows, usually in under a minute. A domain is the fastest and surest input; a name works too (see How a name becomes a website). Add "depth": "basic" for the faster, cheaper read.

One row (made-up company, shortened)

{
"type": "company",
"input": "acme.com",
"status": "found",
"domain": "acme.com",
"website": "https://www.acme.com/",
"name": "Acme",
"legalName": "Acme Ltd",
"country": "GB",
"description": "Acme makes stock-control software for independent shops.",
"firmographics": {
"industry": "Software Development",
"employeesRange": "51-200",
"employeesOnLinkedIn": 134,
"foundedYear": 2014,
"hq": { "city": "Manchester", "region": "England", "country": "GB" },
"isPublic": false,
"registryStatus": "ACTIVE"
},
"contact": { "phone": "+44 161 000 0000", "roleEmails": ["hello@acme.com", "sales@acme.com"], "careersUrl": "https://www.acme.com/careers" },
"web": { "monthlyVisits": 182000, "globalRank": 211400, "topCountries": ["GB", "US", "IE"], "estimatesBy": "Similarweb" },
"tech": { "cms": "Webflow", "emailProvider": "Google Workspace", "dmarcPolicy": "reject", "cdn": "Cloudflare" },
"hiring": { "openJobs": 14, "byDepartment": { "Engineering": 8, "Sales": 4, "Customer": 2 }, "byCountry": { "GB": 11, "IE": 3 }, "remoteShare": 0.36, "atsPlatform": "Ashby" },
"reputation": { "trustpilot": { "rating": 4.6, "reviews": 812, "replyRate": 0.91, "url": "https://www.trustpilot.com/review/acme.com" }, "overallRating": 4.6 },
"pricing": { "plans": [{ "name": "Starter", "price": 29, "period": "month" }, { "name": "Growth", "price": 79, "period": "month" }], "hasFreeTrial": true, "contactSales": true },
"revenueBand": { "label": "$10M–$50M", "source": "estimate", "confidence": "low" },
"emailInfo": {
"emailFormat": { "pattern": "{first}.{last}", "example": "jane.doe@acme.com", "confidence": 0.9, "samples": 4 },
"formatSource": "company website (4 examples)",
"mailProvider": "Google Workspace",
"dmarcPolicy": "reject",
"catchAll": null
},
"people": [
{ "name": "Jane Doe", "title": "Chief Executive Officer", "seniority": "c-level", "department": "Executive", "source": "website", "sourceUrl": "https://www.acme.com/about/team", "workEmail": "jane.doe@acme.com", "emailStatus": "published", "emailConfidence": 1 },
{ "name": "John Doe", "title": "Head of Sales", "seniority": "head", "department": "Sales", "source": "website", "sourceUrl": "https://www.acme.com/about/team", "workEmail": "john.doe@acme.com", "emailStatus": "pattern-unverified", "emailConfidence": 0.9, "formatSource": "company website (4 examples)" }
],
"signals": [{ "key": "sponsors-visas", "label": "Sponsors visas", "reason": "UK sponsor licence" }],
"links": [{ "site": "trustpilot", "url": "https://www.trustpilot.com/review/acme.com", "confidence": 0.95, "evidence": "its page names acme.com" }],
"rejected": [{ "site": "linkedin", "url": "https://www.linkedin.com/company/acme-widgets", "confidence": 0.2, "why": "its page names a different website (acmewidgets.com)" }],
"sourcesChecked": { "site": "found", "dns": "found", "jobs": "found", "trustpilot": "found", "sec": "not-found", "g2": "skipped" },
"fieldSources": { "firmographics.employeesRange": { "source": "linkedin", "url": "https://www.linkedin.com/company/acme", "fetchedAt": "2026-11-04T09:12:31.000Z", "confidence": 0.95 } }
}

A field is null (or an empty list) when a source had nothing; the reason is in sourcesChecked and sourceNotes. We never fill a gap with a guess.

What you get

Sections marked full need "depth": "full" (the default).

Identity

Name, registered name, country, logo, description and website, from the company's own site and GLEIF. input echoes what you typed; status is found, partial, not-found or invalid.

Firmographics

Founded year, HQ (city, region, country), public or private, ticker, LEI and registry status, from the website, GLEIF and SEC EDGAR.

Official company registries (UK, France, Norway, Singapore, GLEIF) through the Open Company Graph: the company's record in its own national register (firmographics.registry: registered number, legal name, status, incorporation date, industry codes, registered city and postcode, LEI where it has one, a link to the official record, and whether it was matched by the website or by name). It fills the founded year and registry status when nothing else states them, and covers companies with no LEI. Organisations only: no officers or owners. Full: employee band, the member count LinkedIn shows, industry, specialities and LinkedIn HQ, from the company's LinkedIn page (company data only). Corporate family (family): parent, ultimateParent, up to 50 subsidiaries, subsidiaryCount and familySize, from the Open Company Graph's ownership links (GLEIF relationship data, UK companies that own other companies on the Companies House PSC register, and SEC 10-K Exhibit 21 subsidiary lists), with GLEIF filling any gap. It works for companies with no LEI too. Companies only: when the owners are individuals, missingParentReason says so in plain words ("no parent company: controlled by individuals or a state, per GLEIF") and never names them. fieldSources says which source each family field came from. Google Maps places that are the company's (locations: count and cities), full.

Web

Full: monthly visits, 3-month trend, global and country rank, top countries, traffic channels, AI chatbot share and bounce rate. These are Similarweb estimates and labelled as such (estimatesBy).

Tech

Technologies on the homepage, headers and DNS (up to 150, with category, version where the page shows it, and what matched), CMS, e-commerce platform, analytics, CDN, hosting, TLS issuer, domain age and registrar. Blog and changelog cadence (content, productUpdates: posts per month over 6 months, last post) and the GitHub organisation the website links to (openSource: repos, stars, activity, languages).

Hiring

Open jobs by department and country, remote share, advertised pay bands and the jobs platform, from Greenhouse, Lever, Ashby, Personio and Teamtailor public boards. hiringIntel: jobs posted in 7 and 30 days, seniority mix, trending roles, new locations and the tech named in ads. Visa sponsorship: US H-1B and PERM filings over the last 3 fiscal years (US Department of Labor) and the UK sponsor licence (UK Home Office register).

Reputation

Trustpilot and Sitejabber rating, review count and reply rate. Full: the Google Maps rating of the main place (counted only when its website is the company's). overallRating is weighted by review count. The review insights add-on (includeReviewInsights) gives the top complaint and praise phrases, a 4-quarter rating trend and the reply rate from up to 100 recent reviews: phrases and counts only, never review text or reviewer names.

Marketing

Google ads seen and when (Ads Transparency Centre), the official social accounts the company links to, YouTube subscribers, Instagram followers, and mobile apps with ratings (App Store, Google Play). socialActivity: last post, posts per month, engagement rate and average views on its own YouTube and Instagram. pricing: plans, prices, billing period, free plan or trial and "contact sales", from its own pricing page. customers and integrations: named logos and partners from its own pages. news: headlines from the last 90 days (Google News). Full: whether Meta ads are running and how many, by platform; LinkedIn ad count and formats; up to 10 competitors named in "alternatives" search results.

Money and public sector

Latest annual revenue and net income for US-listed companies (SEC EDGAR), Form D raises, UK public contracts won (Contracts Finder) and US federal contract awards over 3 years (usFederal: count, value, top agencies, from USAspending.gov). revenueBand is the revenue a filing states, or a labelled estimate (source: "estimate", confidence: "low", with the method).

Compliance

LEI, entity status, registry number, and an entity-only sanctions screen (OFAC, UK FCDO, EU lists; organisations, never people). certifications: SOC 2, ISO 27001, GDPR, PCI DSS and so on as the company lists them, with the page it says so on.

Signals

Plain-English flags worth acting on, each with its numbers: raised money (Form D in 90 days), won a public contract, sponsors visas, running ads, in the news (3+ headlines in 30 days), shipping fast (4+ product updates a month), hiring (25+ open jobs), traffic up or down 25% over 3 months. Monitor mode adds the change signals (see Monitor mode).

Decision-makers and work emails

Up to 5 decision-makers per company (maxPeoplePerCompany, up to 25), most senior first, from the company's own team, leadership and about pages and, for US-listed companies, the officers named in its own SEC filings. Each person has:

  • name, title, seniority (c-level, founder, vp, director, head, manager) and department;
  • source (website or sec) and sourceUrl, the page or filing they came from;
  • workEmail with emailStatus: published when the company prints that address for that person, or pattern-unverified when we built it from the company's email format (for example {first}.{last}), with emailConfidence and formatSource;
  • workPhone, only when the company prints a number in that person's own entry (never the switchboard);
  • linkedinUrl, only when the company's own page links to it.

Filters: peopleSeniority, departments, and excludeEuUk (no people for companies based in the EU, EEA or UK). Set includePeople to false to leave people out. A person without a work email is still listed, and is free.

Email checks

Every row gets emailInfo: the company's email format with a placeholder example (jane.doe@acme.com), where the format came from (formatSource), the domains it sends mail from, its mail provider, whether it accepts mail, DMARC, SPF, BIMI and its published role addresses (info@, sales@). The format is learned from named addresses on the company's own pages in this run (team, privacy, imprint, press and contact pages and security.txt), or, when its pages show none today, from archived copies of its public pages (web archive (6 examples)). We keep only the format and counts from archives, never the addresses.

Two more modes use the same engine:

  • Find work emails ("mode": "findEmails"): give people as [{"name": "Jane Doe", "domain": "acme.com"}] (or "company": "Acme" instead of the domain). Each gets workEmail, emailStatus (published, pattern-unverified or not-found), the pattern used with its formatSource, confidence and mailProvider. A personal mail domain is refused and nothing is built.
  • Check email addresses ("mode": "verifyEmails"): give emails. Each gets a syntax check, isRole, isDisposable, isPersonalDomain, its mail servers (mx) and mailProvider. status is invalid (bad syntax, or the domain takes no mail), disposable, personal-domain (not checked, free) or unknown (the domain takes mail; the mailbox itself was not checked).

On every row

  • fieldSources: for each filled field, the source, the page, when it was read and a confidence from 0 to 1;
  • links: every matched account or record, with the evidence that ties it to the company;
  • rejected: the near-misses we did not use, and why;
  • sourcesChecked: what each source said (found, not-found, blocked, unavailable, skipped), with notes in sourceNotes;
  • icpScore and icpReasons, when you give an icp (industries, countries, employee range, required or ruled-out tech, minimum traffic).

How a name becomes a website

A matched account or record is used only when one of these holds:

  1. It links back. The profile or record names the company's website (confidence 0.95).
  2. The company links to it. The company's own website links to that account (0.9).
  3. Name and place agree. The names match and so does the country (0.75). For a one-word ordinary name such as "Tally" or "Close", the city or the registered name has to agree too.

Anything weaker goes to rejected, never into the row. A name with no domain is matched to a website only when that site's own homepage shows the name and something else ties it to the company: Google's results, its country's web address, or its registered name or number on the page. When nothing does, the row is not-found and free. "Monzo" works; {"name": "Sage", "country": "GB"} works better; for ordinary-word names, give the domain.

On a 40-company benchmark checked by hand (4 Nov 2026), 99.2% of matched identities (website, socials, Trustpilot, ticker, LEI, jobs board) were correct; the one miss was a disputed case.

Depth: basic or full

Basic ("depth": "basic")Full (default)
What it readsEverything a plain web request reaches: website, DNS, jobs, visa filings, Trustpilot, Sitejabber, Google ads, YouTube, Instagram, apps, SEC, Form D, GLEIF, official company registries, UK contracts and the intelligence sectionsBasic, plus traffic estimates, the LinkedIn company page, Google Maps, Meta and LinkedIn ads and competitors
TimeAbout 10 seconds a companyUp to 30 seconds a company
Price$6 per 1,000$25 per 1,000, but only when a full-depth source returned data; otherwise the row is charged at basic

Several companies are read at once (concurrency, default 6). Pick fewer sections or sources for a faster run.

CSV, Google Sheet and CRM files

Put a public CSV link, or a Google Sheet shared as "anyone with the link", in Or a CSV file / Google Sheet. Columns are found by their headers: domain (or website, url), company (or name), country.

The run also saves HUBSPOT.csv and SALESFORCE.csv in its key-value store, with HubSpot company property names and Salesforce Account field names, and the dataset has HubSpot and Salesforce views. Only stated values go in: we never fill in an employee count or a revenue figure we didn't read.

Monitor mode: what changed since last time

Set Mode to monitor and give the list a Watch list name (for example competitors). The first run saves a baseline. Each later run with the same name compares every company with its own last snapshot, so a weekly schedule gives you a list of what moved:

  • monitorStatus: first-run (baseline saved), changed, unchanged, or not-read (the company could not be read this time: free, and its snapshot is kept);
  • changes: field, old value, new value and the date of the snapshot it was compared with; lists give added and removed;
  • signals: hiring fast or slowed, hiring in a new country, new ads, rating dropped, tech stack changed, pricing changed, new integrations or customer logos, website redesigned, new parent company (the ultimate parent changed), group growing (3 or more new subsidiaries);
  • changedSince and snapshotAt: when the compared snapshot was taken;
  • stale: fields this run could not read, or that came back empty for the first time. Their last values are kept and are never reported as changes.

Turn on Charge only changed companies (onlyChanged) and an unchanged company costs nothing: you get a short row saying it is unchanged and since when. Different watch names are kept apart, so one account can watch several lists. For a ready-made weekly set-up with the change thresholds spelled out, use Company Change Monitor.

Price

Pay per result, nothing per run. Prices per 1,000 on the Starter tier; Scale pays 25% less and Business 45% less.

EventWhen it is chargedPrice per 1,000
company-basicA company found or partly found, basic sources only$6
company-fullA company where a full-depth source returned data (charged instead of basic)$25
company-updateA company checked in monitor mode: first run, changed, or unchanged with onlyChanged off (full-depth monitor rows are charged company-full)$6
name-lookupAdd-on: a company given by name only that needed a web search to find its website$4
review-insightsAdd-on, only with includeReviewInsights: a company that has review insights$3
contactA person in a company row who has a work email$5
email-foundA work email found in findEmails mode$3
email-verifiedAn address checked in verifyEmails mode$1
apify-actor-startOnce per run$0.05 (so $0.00005 a run)

Free: not-found and invalid rows, companies given by domain (no name-lookup), unchanged companies in monitor mode with onlyChanged on, people without a work email, emails not found, and addresses with bad syntax or a personal mail domain.

Example: 1,000 domains at basic depth with people off costs $6. The same list at full depth with up to 5 people each, where 2 per company have a work email, costs at most $25 + $10 = $35.

Limits, stated up front

  • Work contacts only. People come with the business details their company publishes: name, title, work email, and a work phone only where the company prints one for them. Never personal emails (Gmail, Outlook.com, Yahoo and the like), personal mobiles, home addresses, personal social profiles or domain registrant details.
  • Work emails need a known format. A built address appears only when the company's own pages (or archived copies of them) show its email format. We don't check mailboxes, so no address is ever marked verified and catchAll stays empty.
  • Logged-out, public data only. We never log in.
  • Coverage varies by company. On the 40-company benchmark at full depth, the share of rows with data was: website 95%, tech 95%, Trustpilot 80%, social activity 80%, traffic 70%, industry 70%, LinkedIn employee band 65%, Google Maps 65%, open jobs 45%, pricing plans 45%, news 40%, named customers 35%, registry 35%, visa filings 25%, SEC 10%. Small and private companies have less.
  • Trustpilot shows a visitor check to plain web requests. At full depth we pass it as a logged-out visitor through a real browser. At basic depth a refused page says blocked and, if Sitejabber shows the Trustpilot rating, we use that copy and say where it came from.
  • G2 and Capterra are not read in this version: their pages refuse requests from cloud servers. They show as skipped and never make a row partial.
  • partial means a source we expected ran out of time; its section is empty and sourceNotes says which. A source that refuses says blocked; one that is down or too slow (USAspending can take 20 seconds or more) says unavailable.
  • Estimates are labelled. Traffic numbers are Similarweb's estimates. A revenue band without a filing behind it says source: "estimate" and confidence: "low". Neither is ever shown as a fact.
  • Some sources refuse sometimes. LinkedIn, Meta and Google may ask for a login or rate-limit; that source then says blocked or unavailable for that company and the rest of the row is unaffected.
  • A company's own site sometimes refuses automated visits. Its row then has less, and sourcesChecked says why.

FAQ

How much does company enrichment cost?

$6 per 1,000 companies at basic depth, $25 per 1,000 at full depth, plus $5 per 1,000 people with a work email. Companies we can't find are free. See Price.

Can I give company names instead of domains?

Yes. Add the country for common names ({"name": "Sage", "country": "GB"}). A name that needs a web search to find its website adds $4 per 1,000. If we can't tie a website to the name, the row is not-found and free.

Are the work emails verified?

No mailbox is checked. published addresses are printed by the company for that person. pattern-unverified addresses are built from the company's own email format, with a confidence for how consistent that format is.

Can I use it through the API, from Python or from an AI agent?

Yes. Call it like any Apify Actor through the Apify API or the Python client, connect it to Zapier, Make or n8n, or use it from an AI assistant through Apify's MCP server: one tool call returns the whole row.

Why are some fields empty?

The source had nothing, refused this time, or wasn't asked for. sourcesChecked and sourceNotes say which, per company.

Can I track changes over time?

Yes: monitor mode, above, or the Company Change Monitor.

Lawful use

Use the data lawfully: for B2B research, account planning and compliance checks. The buyer controls the data and is responsible for using it under the laws that apply to them and to the people they contact, including privacy and marketing rules.

Removal requests

Anyone can ask to be left out. Email apify@locaihost.org with the work email address, or the name and company, that should be removed. A whole company can also ask for its people to be left out. We add each request to our removal list the same day, and every run checks that list before anything is stored or charged. You don't need to give a reason.

Did it help? A rating helps others find it.

Questions or a correction: apify@locaihost.org