Company Data Scraper — Domain to Firmographics & Emails avatar

Company Data Scraper — Domain to Firmographics & Emails

Pricing

from $10.00 / 1,000 company enricheds

Go to Apify Store
Company Data Scraper — Domain to Firmographics & Emails

Company Data Scraper — Domain to Firmographics & Emails

B2B data enrichment from a domain: employees, industry, HQ, LinkedIn, contact emails and a live hiring signal. CRM enrichment with verified matches.

Pricing

from $10.00 / 1,000 company enricheds

Rating

0.0

(0)

Developer

Diseño Web de Colombia

Diseño Web de Colombia

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Company Enrichment API — Domain to Firmographics + Emails

Paste a list of domains. Get back company records you can put straight into a CRM — and know which ones are wrong.

Call it as an API

One domain in, one company row out, in a single HTTP call. This is the fastest path and the one most people integrate into their own product.

curl -X POST "https://api.apify.com/v2/acts/dev_web_col~company-enrich/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domain": "stripe.com"}'
import requests
r = requests.post(
"https://api.apify.com/v2/acts/dev_web_col~company-enrich/run-sync-get-dataset-items",
params={"token": "YOUR_TOKEN"},
json={"domain": "stripe.com"},
)
company = r.json()[0]
print(company["companyName"], company["employees"], company["isHiring"])
const res = await fetch(
"https://api.apify.com/v2/acts/dev_web_col~company-enrich/run-sync-get-dataset-items?token=YOUR_TOKEN",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ domain: "stripe.com" }),
},
);
const [company] = await res.json();

run-sync-get-dataset-items waits for the run and returns the rows in the same response, so there is nothing to poll. Your token is on the Integrations page.

Passing domains instead of domain enriches a whole list in one call — use that when you are processing a CRM export rather than serving a live lookup.

What is Company Enrichment?

Company Enrichment turns a plain list of company websites into structured company records: headcount, industry, headquarters, founding year, company type, LinkedIn followers and specialties, plus contact emails and social profiles crawled from the company's own site, plus a live hiring signal.

It is the cheap alternative to Clearbit or Apollo for the one job most people actually need: taking a column of domains out of a CRM and filling in the columns next to it.

The thing that makes this different: it verifies the match

Most enrichment tools guess the LinkedIn page from the domain — vanta.com becomes linkedin.com/company/vanta. That is wrong, and silently so. Measured on this exact input:

DomainA naive guess returnsThis Actor returns
vanta.comVANTA - Chauffeurs, 4 employeesVanta, 1,965 employees
notion.soa Notion with 38 employeesNotion, 7,458 employees

Two independent checks decide it. The company must either link that LinkedIn page from its own website, or LinkedIn must list that same domain. Every row carries a linkedinVerified flag, and the onlyVerified option drops everything that failed.

Name matching would not save you here: "VANTA - Chauffeurs" starts with the word vanta, and the wrong Notion is called exactly "Notion". The website link is the only signal that actually separates them.

A wrong company in your CRM costs more than a missing row. This is the only field that tells you which one you got.

What you can use it for

What you wantHow to ask for it
CRM enrichment — fill the empty columns next to a domaindomains: [...] from a CRM export
Lead qualification — is this account big enough?Read employees, employeeRange, industry
B2B data for scoring — firmographics at scaleonlyVerified: true so nothing wrong enters the CRM
Email finder — contact addresses for a companyfindEmails: true, read emails
Sales triggers — who is hiring right nowRead isHiring, openJobs and jobBoardUrl
Territory research — headcount and HQ by accountRead hqLocation, founded, companyType
Live API lookup — one domain per call from your appdomain: "stripe.com" via run-sync-get-dataset-items
Investor or portfolio trackingRun the same domain list monthly, compare employees

Typical jobs: CRM enrichment, B2B data for lead scoring, company data lookups, email finder for outbound, and hiring-based sales triggers.

What data you get

Firmographics — company name, employee count, size band, industry, headquarters, founded year, company type, specialties, LinkedIn followers, LinkedIn URL.

Contact — emails found on the company site with own-domain addresses listed first, plus Twitter/X, Facebook and Instagram profiles.

Hiring signal — whether the company has an open public job board right now, how many roles are on it, which ATS it runs on, and the direct link.

Input

Every field is optional unless marked required.

FieldTypeDescription
domainsarray, requiredOne company website per line. Paste them straight from your CRM — https://, www. and trailing paths are all stripped for you.
findEmailsbooleanCrawls the company website for contact emails and social profiles. Also finds the company's own LinkedIn link, which is what makes the match reliable — turning this off makes verification much weaker.
onlyVerifiedbooleanDrops any company whose LinkedIn page could not be confirmed as belonging to that domain. Use it when the data goes straight into a CRM and a wrong match costs you more than a missing row.
proxyConfigurationobjectRequired. LinkedIn returns HTTP 999 to datacenter IPs, Apify's included, so runs without a residential proxy come back empty.

Input sample

{
"domains": [
"stripe.com",
"figma.com",
"vanta.com"
],
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}

Output sample

One real row from an actual run:

{
"domain": "stripe.com",
"companyName": "Stripe",
"linkedinUrl": "https://www.linkedin.com/company/stripe/",
"linkedinVerified": true,
"employees": 17034,
"employeeRange": "5,001-10,000 employees",
"industry": "Technology, Information and Internet",
"hqLocation": "South San Francisco, California",
"founded": "2010",
"companyType": "Privately Held",
"specialties": null,
"followers": 1605462,
"linkedinWebsite": "https://stripe.com",
"emails": [
"contact@stripe.com"
],
"facebook": "https://www.facebook.com/StripeHQ",
"instagram": "https://www.instagram.com/stripehq",
"twitter": "https://twitter.com/stripe",
"isHiring": true,
"atsPlatform": "greenhouse",
"jobBoardUrl": "https://boards.greenhouse.io/stripe",
"openJobs": 531
}

How often each field comes back

Measured on 20 real company domains in one run:

FieldHit rate
LinkedIn match verified88%
At least one email65%
An email on the company's own domain41%
Hiring signal present41%

Two things that table tells you honestly. First, 41% is the number that matters for outbound — a press@ or an agency address is not the same as someone@thecompany.com, and the rows list own-domain addresses first so you can filter. Second, that run asked for 20 domains and returned 17: the time budget stops enrichment at about 3.5 minutes and delivers what it has. Split large lists.

Who uses this

  • Sales and RevOps — enrich an inbound list before it ever reaches a rep
  • Recruiters — see which target companies are hiring, and on which board
  • Investors and analysts — headcount and industry across a whole portfolio
  • Agencies — qualify a prospect list without paying per seat for a data vendor
  • Anyone with a spreadsheet of domains and no budget for Clearbit

Honest limits

These are real and none of them is fixable by any tool. They are here so you know what you are buying before you run it.

  • A residential proxy is required. LinkedIn answers HTTP 999 to datacenter IPs, Apify's included. The default input already asks for one.
  • Not every domain has a LinkedIn page, and some companies never list their website there. Those rows come back with linkedinVerified: false and the LinkedIn fields empty or unconfirmed — by design, rather than guessing.
  • Emails come from the public website only. No pattern-guessing, no invented firstname.lastname@. If the site publishes no address, the field is empty. Expect generic inboxes like info@ or press@, not named contacts.
  • The hiring index covers 1,014 validated companies, weighted toward tech. isHiring: false means "not in the index", not "definitely not hiring".
  • Big lists need batching. A run stops enriching after about 3.5 minutes and delivers what it has. Split large lists across runs.
  • LinkedIn headcount is self-reported. It is the company's claim, not payroll truth.

FAQ

What does linkedinVerified: false actually mean?

It means the LinkedIn page shown could not be confirmed as belonging to that domain. The data may still be right — but it may be a different company with a similar name. Treat those rows as a lead, not a fact. Set onlyVerified: true to drop them entirely.

Why do I get generic emails instead of a person's address?

Because this Actor only reports addresses that are actually published on the company site. It never guesses name@company.com patterns. Invented addresses bounce, damage your sending domain, and are worse than no data.

Does turning off "Find emails" make it faster?

Yes, but it also makes the match less reliable. The site crawl is where the company's own LinkedIn link is found, and that link is the strongest verification signal. Leave it on unless you only need a rough pass.

How is the hiring signal built?

From a bundled index of 1,014 companies whose public job boards on Greenhouse, Lever, Ashby and Workable were validated. It ships inside the Actor, so it costs no extra requests and adds no time to your run.

Can I feed it company names instead of domains?

Not today — it takes domains, because a domain is unambiguous and a company name is not. That is the same reason the verification step exists.

Do I need an account or an API key for the source?

No. This Actor only reads public pages and public endpoints, the same ones any logged-out visitor sees. You never give it credentials, and nothing is done on your behalf.

Scraping publicly available information is broadly accepted as legal, and this Actor only ever touches pages that require no login. That said, what you may do with the data afterwards is a separate question — personal data in particular is regulated by GDPR and CCPA. If you plan to process personal data, take advice first. Apify has a good primer: Is web scraping legal?

How much will a run cost me?

You are charged per result, so the cost scales with what you actually get back. The pricing is shown on this page above the input form. Start with a small run to see real numbers before you scale up.

Can I export to Excel, CSV or Google Sheets?

Yes. Every run's dataset can be downloaded as CSV, Excel, JSON, XML or HTML from the Storage tab, and Apify integrates directly with Google Sheets, Airtable, Zapier, Make and Slack.

Can I run this on a schedule?

Yes. Open the Schedules tab and pick an interval — hourly, daily, weekly. Each run only costs you what it returns.

Can I call it from my own code instead of the console?

Yes. Every Actor on Apify is also an API endpoint. There are official clients for Python and JavaScript, plus a plain REST API. The API tab on this page shows ready-made snippets with your input already filled in.

Something came back empty. Is it broken?

Usually not. An empty result normally means the filters were too narrow, or the source genuinely has nothing to return for that query. This Actor is written to finish successfully and tell you what happened rather than fail — check the run log, it says which step returned nothing.

  • ATS Job Scraper — search live jobs across the same company index
  • LinkedIn Jobs Scraper + Direct Apply Links — jobs with the original apply link
  • Local Business Email & Contact Scraper — the same email crawling, but starting from a city and a category instead of a domain list. Use that one when you do not know the companies yet.

Where the data comes from

Public LinkedIn company pages as a logged-out visitor sees them, and the company's own website. No login, no cookies, no personal data about individuals — company records only.