Company Enrichment API: Company Data from a Domain avatar

Company Enrichment API: Company Data from a Domain

Pricing

from $7.00 / 1,000 company records

Go to Apify Store
Company Enrichment API: Company Data from a Domain

Company Enrichment API: Company Data from a Domain

Company enrichment API. Give company domains, get one record each: registrar, DNS and email provider, tech stack, open roles from its job board, and the phones, inboxes and address the company publishes on its own site. Every item links to its source. No headcount or funding data.

Pricing

from $7.00 / 1,000 company records

Rating

0.0

(0)

Developer

Ground Truth

Ground Truth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Security

Limited permissions

Share

Give it a list of company domains. For each one you get a single record: who registered the domain, which email provider the company uses, its website technology stack, how many roles it has open on its own job board, and the phone numbers, role inboxes (sales@, info@), postal address and contact page the company publishes on its own website. Every item links to the page or registry it came from.

Checked every day: this Actor is run daily with a known input and its results are compared with the original sources. Latest results: https://companyfacts.dev/status#apify-company-enrichment

When to use it

  • Enrich a CRM or lead list that only has a company domain: tech stack, hiring activity, a phone number and a contact page, in one pass.
  • Find which companies on a list run Google Workspace or Microsoft 365, publish DMARC, or use a given technology.
  • Spot growing companies: open roles by department, and roles opened and closed in the last 30 days, from the company's own Greenhouse, Ashby, Lever or Workable board.
  • Add a published phone number, role inbox and address to a list of small local businesses, with the page each came from.
  • Pre-qualify accounts before outreach: is the domain registered, how old is it, does the company still hire.

For an AI agent: call it when you need checkable facts about a company you only know by its domain, instead of guessing from a web search. Each part of the answer names its source, and a part with nothing to report says why.

What it does not do

  • It does not return headcount, revenue, funding or industry codes. It is built from public sources only, not from a purchased database.
  • It does not find the email of a named person. Emails are never guessed from a pattern such as first.last@. Only addresses the company itself published on its own website are returned, at the company's own domain, each with its page. Addresses beyond role inboxes (which may name a person) are returned for US companies only, never for EU or UK domains.
  • It reads only a company's own public pages, honoring robots.txt. It does not use LinkedIn, does not log in anywhere and does not get around bot protection. A site that blocks automated readers gives contacts_error.
  • hiring needs the company to use Greenhouse, Ashby, Lever or Workable and to match its domain name. Many do not, and the record says so under missing.
  • It takes a domain, not a company name. stripe.com, https://www.stripe.com/about and jane@stripe.com are all read as stripe.com.

Sample output

Input:

{ "domains": ["wpengine.com", "no-such-company-zq81x.com"], "include_contacts": true }

Output for the first domain (trimmed, run on 2026-10-30):

{
"input": "wpengine.com",
"lookup_status": "ok",
"domain": "wpengine.com",
"parts_found": ["web", "tech"],
"web": {
"registered": true,
"registrar": "MarkMonitor Inc.",
"created_date": "2010-03-10",
"expiry_date": "2027-03-10",
"email_provider": "Google Workspace",
"dmarc_policy": "reject",
"verify_url": "https://rdap.verisign.com/com/v1/domain/wpengine.com"
},
"tech": {
"domain": "wpengine.com",
"cms": ["WordPress"],
"technologies": [
{ "name": "WordPress", "categories": ["CMS", "Blogs"], "confidence": 100, "evidence": ["scripts"] },
{ "name": "WP Engine", "categories": ["PaaS", "Hosting"], "confidence": 100, "evidence": ["headers"] }
]
},
"missing": [ { "part": "hiring", "reason": "'wpengine' was not found. greenhouse has no board called 'wpengine'; ashby has no board called 'wpengine'; lever has no board called 'wpengine'; workable returned HTTP 429" } ],
"contacts": {
"domain": "wpengine.com",
"us_company": true,
"contact_page": "https://wpengine.com/contact/",
"phones": [ { "number": "+1 512-623-8484", "source_url": "https://wpengine.com/about-us/" } ],
"role_emails": [],
"other_emails": [],
"address": { "street": "500 W 2nd St", "city": "Austin", "region": "TX", "postal_code": "78701", "country": "US", "source_url": "https://wpengine.com/" },
"pages_read": [ { "url": "https://wpengine.com/", "kind": "home" }, { "url": "https://wpengine.com/contact/", "kind": "contact" } ],
"notes": []
}
}

The second domain comes back as a record with lookup_status: "error" and error: "no-such-company-zq81x.com is not a registered domain, so there is no company to look up". It is in the dataset, it is not charged.

Check it yourself. Open web.verify_url: it is the registry's own record for the domain, with the same registrar and dates. Open each source_url under contacts: the phone number or address is on that page. Technology names come with the evidence they were judged from (headers, dns:TXT, page markup).

A handled error. An entry such as "not a domain" or 12345 is written to the dataset with the reason (lookup_status: "error") and is not charged. A company that cannot be looked up is never silently dropped.

Input

FieldTypeRequiredDefaultMeaning
domainslist of textyesstripe.com, wpengine.comCompany website domains. Up to 1,000 per run. Names, URLs, www. hosts and email addresses are reduced to the host. Unicode names are converted to punycode. Duplicates are looked up once.
include_contactstrue or falsenotrueAlso read the company's own website for the phones, role inboxes, address and contact page it publishes. Turn off for the company record alone.

Output fields

FieldMeaning
input, domainWhat you gave (never a mailbox name) and the host looked up
lookup_statusok (a company record was found) or error (see error; not charged)
parts_foundWhich parts answered: web, tech, hiring
webRegistry (RDAP) and DNS facts: registered or not, registrar, created, updated and expiry dates, domain age, nameservers, MX hosts, email provider, SPF and DMARC policy, verify_url. No registrant data
techThe website's technology stack: name, categories, confidence and the evidence it was judged from
hiringThe company's own job board: open roles, by department and place, salary ranges where posted, roles opened and closed in the last 30 days
missingA part that was tried and had nothing to report, with the reason (for example no job board found)
contactsus_company, contact_page, phones, role_emails, other_emails (US companies only), address, pages_read, notes. Every phone, email and the address carries source_url. Present only where something was found
contacts_errorWhy there are no contacts: the site publishes nothing, robots.txt asks readers to stay out, or the site could not be read
errorWhy a company has no record. Present only when lookup_status is error

Errors and what to do

What you seeMeaningWhat to do
lookup_status: "error", "is not a registered domain"The registry says the domain does not existCheck the spelling, or drop the row
lookup_status: "error", "nothing could be found" with a 502-style reasonA source was down for the whole lookupRe-run those domains
contacts_error: "publishes no phone, email, address or contact page"The site's pages hold noneNothing to do; not charged
contacts_error: "robots.txt asks automated readers not to read the site"The site opts outNothing to do; it is honored and not charged
Run fails with "rejected this Actor's API key" or "no lookups left"A fault on the author's side, not yoursReport it on the Actor page. Nothing was charged for the unprocessed domains, which are listed in the dataset as "not looked up"
Entries "not looked up: the spending limit set for this run was reached"You set a maximum cost per runRaise it and run those domains again

Pricing

Pay per event, no subscription: one company-record event for each company that returned a record, and one contacts-record event for each company where contacts were found, plus Apify's small start event. You are not charged for invalid entries, duplicates, a company that failed, or a site that publishes no contacts. Current prices are on the Pricing tab.

Sources and licensing

Our own data service, which reads registry RDAP servers, public DNS over HTTPS, a company's own public web pages (robots.txt honored), company job boards, and SEC filings. Details and the full testing record are in SOURCES.md and NETWORK-EXEMPTION.md.

Rate it, or tell us what broke

If this Actor did the job for you, a star rating on its Reviews tab helps other people find it. If something did not work, please open an issue instead: we read every one and fix what we can.