Company Enrichment by Domain ⚡ Emails, Socials, Hiring, Ads
Pricing
from $5.00 / 1,000 enriched companies
Company Enrichment by Domain ⚡ Emails, Socials, Hiring, Ads
Turn company domains into one enriched row each: emails by role, phones, address, founding year, LinkedIn/Instagram/X/YouTube/TikTok, website platform and marketing tools, Shopify/WooCommerce product count, ATS and open jobs, optional Google Ads activity. Respects robots.txt. Pay per company.
Pricing
from $5.00 / 1,000 enriched companies
Rating
0.0
(0)
Developer
Pulse Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Company Enrichment by Domain – Emails, Socials, Tech, Hiring, Ads
Give it a list of company domains and get back one enriched row per company, built from the company's own website and public APIs:
- Contacts – emails grouped by role (general / sales / support / press / careers / legal / personal), phones, postal address, contact page URL
- Company facts – name, description, language, country, founding year (from schema.org markup when the site publishes it)
- Social profiles – LinkedIn, Instagram, Facebook, X, YouTube, TikTok, GitHub, Pinterest
- Tech – website platform (Shopify, WooCommerce, WordPress, Webflow, Wix, Squarespace, HubSpot, Next.js, …) and marketing / support tools (Google Analytics, GTM, Google Ads tag, Meta Pixel, TikTok Pixel, LinkedIn Insight, HubSpot, Intercom, Zendesk, Klaviyo, Stripe, …)
- E-commerce – Shopify / WooCommerce detected, number of products, store currency
- Hiring – applicant tracking system (Greenhouse, Lever, Ashby, Workday, Workable, Recruitee, Breezy, BambooHR, Personio, Teamtailor), number of open jobs, jobs posted in the last 30 days, latest posting date, sample job titles, job board URL
- Google Ads (optional) – is the company running Google ads, estimated number of ads, last seen date (Google Ads Transparency Center)
No login, no API keys. The actor reads the homepage plus a few contact / about / imprint pages, respects robots.txt, and uses only official public endpoints for jobs and store data. Blocked or unreachable websites are reported and not charged.
Why this instead of a page-by-page contact scraper?
- One price per company, not per page – predictable cost for lists of thousands of domains.
- Sales signals in the same row – is the company hiring (and how fast), selling online (and how much), advertising on Google? Great for lead qualification and account prioritisation.
- Clean, deduplicated output – emails are validated and grouped by role, phones deduplicated, social links normalised.
Input
| Field | Description |
|---|---|
domains (required) | Company domains or website URLs, one per line. |
maxPagesPerDomain | Pages read per site (homepage + contact / about / imprint). Default 5, max 10. |
includeHiring | Detect ATS and count open jobs (default on, included in the company price). |
includeEcommerce | Detect Shopify / WooCommerce and read the public product count (default on, included). |
includeAdsCheck | Look the domain up in the Google Ads Transparency Center (default off, charged separately, uses a residential proxy). |
adsRegion | Country for the ads check (default anywhere). |
Example:
{"domains": ["stripe.com", "gymshark.com", "netguru.com", "https://www.hubspot.com"],"includeAdsCheck": true}
Output
One row per domain (type: "company"). Key fields:
domain, status, website, name, description, language, address, country, foundingDate, emails[], emailsByRole{}, primaryEmail, phones[], linkedin, instagram, facebook, x, youtube, tiktok, github, pinterest, platform, platforms[], generator, tools[], ecommercePlatform, productCount, storeCurrency, ats, atsSlug, jobBoardUrl, careersUrl, openings, postedLast30Days, latestPostedAt, topJobTitles[], adsVerdict, adsEstimateLow, adsEstimateHigh, latestAdDate, adsAdvertisers[], contactPageUrl, pagesCrawled, pagesSkippedByRobots, fetchedViaProxy, note, checkedAt
status: OK (charged), BLOCKED (site refuses automated access even from a residential IP – not charged), UNREACHABLE (DNS / TLS / network error – not charged), INVALID_INPUT, ERROR.
adsVerdict: NAME_MATCH (an advertiser whose name matches the domain runs ads for it), SINGLE_ADVERTISER, MIXED, LOW_VOLUME, NO_ADS, NOT_CHECKED (not charged).
Example row (real run, trimmed):
{"domain": "stripe.com","status": "OK","name": "Stripe","description": "Stripe is a suite of APIs powering online payment processing…","emails": ["press@stripe.com", "privacy@stripe.com"],"emailsByRole": { "press": ["press@stripe.com"], "legal": ["privacy@stripe.com"] },"linkedin": "https://www.linkedin.com/company/stripe/","x": "https://twitter.com/stripe","youtube": "https://youtube.com/@stripe","github": "https://github.com/stripe","platform": "nextjs","ats": "greenhouse","jobBoardUrl": "https://job-boards.greenhouse.io/stripe","openings": 725,"adsVerdict": "NAME_MATCH","pagesCrawled": 5}
Another: gymshark.com → Shopify store with 10,013 products, Greenhouse with 10 openings, support@gymshark.com, Instagram / Facebook / X / TikTok, Google Ads NAME_MATCH.
Measured results
Test list of 22 well-known companies (SaaS, DTC brands, agencies, a Korean corporation): 20 enriched, 2 blocked (Cloudflare / Vercel bot protection even from a residential IP – reported free), ~50 seconds in total with 4 parallel workers. Across the 20 enriched rows: social profiles found for 85 %, ATS + open-job count for 75 %, at least one email for 55 %, schema.org address or founding year for 25 % (large brands often publish contact forms instead of addresses; small and mid-size businesses typically expose more).
Pricing
Pay per event – only successful rows are charged:
- company – one enriched company row (
status: OK). Includes hiring and e-commerce detection. - ads-check – one Google Ads Transparency lookup (only when
includeAdsCheckis on and the lookup succeeded).
Blocked, unreachable and invalid domains are free. Platform usage is included in the event prices.
Limitations (please read)
- The actor only sees what the company publishes on its website and public job boards. Sites that hide contact details behind forms or JavaScript-only rendering return fewer fields.
- Some sites (Cloudflare "bot fight", Vercel rate limiting) block automated access even from residential IPs →
BLOCKED, not charged. - Email addresses are extracted, not verified. Role classification is based on the local part (
sales@,support@, …). - Job counts come from the public job-board API of the detected ATS; companies without a supported ATS get
ats: null. Workday boards are found only when the careers page links to them. - The Google Ads check reports what the Transparency Center shows for the domain; a
NO_ADSresult means no ads were found in the sample, not a guarantee. robots.txtis respected: pages a site disallows for all crawlers are skipped (pagesSkippedByRobots).- A per-domain time budget of 90 s keeps slow sites from stalling a run; skipped steps are listed in
note.