Company Enrichment API: Company Data from a Domain
Pricing
from $7.00 / 1,000 company records
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Security
Limited permissionsShare
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. hiringneeds the company to use Greenhouse, Ashby, Lever or Workable and to match its domain name. Many do not, and the record says so undermissing.- It takes a domain, not a company name.
stripe.com,https://www.stripe.com/aboutandjane@stripe.comare all read asstripe.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
| Field | Type | Required | Default | Meaning |
|---|---|---|---|---|
domains | list of text | yes | stripe.com, wpengine.com | Company 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_contacts | true or false | no | true | Also 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
| Field | Meaning |
|---|---|
input, domain | What you gave (never a mailbox name) and the host looked up |
lookup_status | ok (a company record was found) or error (see error; not charged) |
parts_found | Which parts answered: web, tech, hiring |
web | Registry (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 |
tech | The website's technology stack: name, categories, confidence and the evidence it was judged from |
hiring | The company's own job board: open roles, by department and place, salary ranges where posted, roles opened and closed in the last 30 days |
missing | A part that was tried and had nothing to report, with the reason (for example no job board found) |
contacts | us_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_error | Why there are no contacts: the site publishes nothing, robots.txt asks readers to stay out, or the site could not be read |
error | Why a company has no record. Present only when lookup_status is error |
Errors and what to do
| What you see | Meaning | What to do |
|---|---|---|
lookup_status: "error", "is not a registered domain" | The registry says the domain does not exist | Check the spelling, or drop the row |
lookup_status: "error", "nothing could be found" with a 502-style reason | A source was down for the whole lookup | Re-run those domains |
contacts_error: "publishes no phone, email, address or contact page" | The site's pages hold none | Nothing to do; not charged |
contacts_error: "robots.txt asks automated readers not to read the site" | The site opts out | Nothing 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 yours | Report 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 run | Raise 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.