CRM Enrichment - Domain to Firmographics & Tech Stack
Pricing
from $18.60 / 1,000 enriched companies
CRM Enrichment - Domain to Firmographics & Tech Stack
Paste company domains, get one flat CRM-ready row each: industry, NAICS/SIC, employee band, revenue band, tech stack and role emails with live MX check. Imports straight into HubSpot, Salesforce, Pipedrive or Sheets. $20/1k rows — a Clearbit/Breeze alternative with no subscription.
Pricing
from $18.60 / 1,000 enriched companies
Rating
0.0
(0)
Developer
Renzo Madueno
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
CRM Enrichment — Bulk-Enrich Company Domains Into Flat, Import-Ready Rows
What it does: paste company domains, get back one flat row per company — industry + NAICS/SIC, employee band, revenue band, country, tech stack, role email, a named contact, and a confidence score — with column names a CRM import understands out of the box. Who it's for: RevOps and sales-ops people cleaning or backfilling HubSpot, Salesforce, Pipedrive, or a spreadsheet, without buying a data-platform subscription. What it costs: $0.02 per enriched company ($20 per 1,000) + $0.01 per run. Companies below your confidence threshold are returned but not charged.
The flat-row difference
Most enrichment APIs return deeply nested JSON that you have to flatten, rename, and de-duplicate before your CRM will accept it. This Actor does that work at the source. Every company comes back as a single row of scalar columns:
| Column | Example |
|---|---|
companyName, domain, website | "Stripe" · stripe.com |
industry, naicsCode, sicCode | "Financial Services & Fintech" · 522320 · 6199 |
employeeBand / revenueBand | "1001-5000" / "$100M-$500M" |
country, address, phone | "United States" · "354 Oyster Point Blvd" |
linkedinUrl, twitterUrl, facebookUrl | company social profiles |
techStack (CSV string), primaryTech, techCount | "HubSpot, Shopify, Google Analytics" |
roleEmail | "sales@company.com" |
contactName, contactTitle, contactEmail | "Jane Smith" · "VP Sales" |
emailPattern | "first.last" |
domainHasMx, mxProvider | true · "Google Workspace" |
confidenceScore | 0–1 |
Export to CSV/Excel and map columns once, or push rows automatically via Apify's HubSpot, Zapier, and Make integrations.
Data freshness: crawled live, not looked up
There is no stored database behind this Actor. Each run reads the company's own website (homepage + about/team/contact pages, up to maxPagesPerDomain) at that moment. That is why:
- a rebrand, acquisition, or pivot shows up immediately, not at the vendor's next refresh cycle;
- the mail server is verified by a live DNS MX lookup on every run;
- fields with no on-site signal come back null instead of stale — the row tells you what it doesn't know.
HubSpot data enrichment alternative (and Clearbit, for CRM imports)
HubSpot's built-in enrichment (Breeze Intelligence, the former Clearbit) is convenient if you live in HubSpot and buy credits. The honest trade-offs:
| This Actor | HubSpot Breeze / Clearbit | |
|---|---|---|
| Works with any CRM or a plain CSV | Yes | HubSpot-centric |
| Pricing | $20 per 1,000 rows, pay as you go | Credit packs tied to your HubSpot subscription |
| Charged for thin/unresolved records | No — your minConfidence is the billing gate | Credits are consumed per lookup |
| Data source | Live crawl of each company's site | Static database + ML estimates |
| NAICS / SIC codes | Yes | Yes |
| Tech stack per company | Yes, with primaryTech | Limited |
| Confidence score per row | Yes | No |
| Contract / seats | None | HubSpot subscription |
(Vendor pricing is list pricing at the time of writing.)
If you need Breeze's form-shortening or in-app intent features, keep it. If you need bulk domain → firmographics rows into any system at a flat per-row price, run this.
How to bulk-enrich domains for CRM import
- Paste your domains, one per line (full URLs also work).
- Optionally set
maxPagesPerDomain(default 5) andminConfidence(default 0.3 — below it, you don't pay). - Run, then export or auto-push.
{ "domains": ["stripe.com", "hubspot.com", "notion.so"], "minConfidence": 0.4 }
Sample row:
{"companyName": "Stripe","domain": "stripe.com","industry": "Financial Services & Fintech","naicsCode": "522320","employeeBand": "1001-5000","revenueBand": "$100M-$500M","country": "United States","techStack": "Next.js, Stripe, Cloudflare","primaryTech": "Next.js","roleEmail": "sales@stripe.com","contactName": "Jane Smith","contactTitle": "VP Sales","emailPattern": "first.last","domainHasMx": true,"mxProvider": "Google Workspace","confidenceScore": 0.85}
Filling the blanks in a CRM export, step by step
The usual job: a HubSpot, Salesforce or Pipedrive company export where Industry, Number of employees and Annual revenue are empty on half the records, and the accounts have nothing but a name and a website.
- Export the companies with two columns you care about: the record ID and the website/domain. Everything else can stay in the CRM.
- Strip the domain column down to bare domains or full URLs — both are accepted, and
https://www.prefixes are normalised away — and paste it intodomains. - Run, then export the dataset as CSV. One row per domain, in input order-independent form: join back to your CRM records on
domain. - Re-import with the CRM's "don't overwrite existing values" option on. The Actor returns
nullwhere a site publishes no signal, and a null written over a good value is worse than the blank you started with. Letting the import fill only empties is the safe default. - Route the rest. Rows with a low
confidenceScoreor a nullindustryare the accounts whose sites are thin — a short manual list rather than a silent hole in your data.
Two columns are worth mapping even if you only came for firmographics: domainHasMx flags accounts whose domain cannot receive mail at all (a dead domain in the CRM long after the company moved or folded), and contactName / contactTitle / contactEmail give the account a named human where the site publishes a leadership page.
Which fields backfill industry, company size and revenue
If the specific gap is the classification and sizing columns, these are the ones that fill them and where each comes from:
| CRM column you are missing | Field here | Where it comes from |
|---|---|---|
| Industry | industry | the company's own site copy, classified into a fixed set of industries |
| Industry code (reporting, territory rules) | naicsCode, sicCode | mapped from the classified industry |
| Number of employees | employeeBand | JSON-LD headcount, then "a team of N" copy, then a count of the named people on the team page |
| Annual revenue | revenueBand | derived: employees × an industry revenue-per-employee figure, bucketed — an estimate, labelled as one, and null when the headcount itself was only a floor |
| Country / HQ | country, address, phone | published address, falling back to the domain's country TLD |
| Technologies used | techStack, primaryTech, techCount | signatures in the HTML the site actually serves |
employeeBand and revenueBand are the two to treat as segmentation inputs — good enough to carve territories, route inbound or filter an ICP; not a source for a figure you would put in a board deck.
Where it fits in a RevOps workflow
- CRM append / backfill — fill empty industry, size, tech, and contact fields on existing account records.
- Data hygiene refresh — re-run your account list quarterly; rows come from the live site, so stale records self-correct.
- Lead routing inputs — route inbound by
employeeBand+industrywithout a data subscription. - ICP / territory carving — segment a raw domain list by size, geography, and tech stack.
- Pre-import cleaning — enrich a conference or purchased list before it ever touches the CRM.
Frequently asked questions
How is this different from the Company Enrichment API? Same live-crawl engine, different output shape. Company Enrichment returns the full nested profile (all emails, all decision-makers, categorized technographics). This Actor returns one flat row per company so your CRM import needs zero reshaping.
Will the columns map to HubSpot / Salesforce / Pipedrive properties?
Yes — they're scalar, predictably named columns (industry, employeeBand, country, …). Map once in your import wizard or connect the dataset through Zapier/Make.
What exactly am I billed for?
$0.01 when a run starts, $0.02 per company that resolves with substantive firmographics above your minConfidence. Weak or empty rows are returned free.
Can I run 5,000 domains at once? Yes — paste them all or feed them via the Apify API. 5,000 domains with, say, 3,800 substantive rows ≈ $76.01.
Where do employee and revenue bands come from? Employees from JSON-LD, "team of N" site copy, or a named-team count. Revenue is estimated from employees × industry and labeled as an estimate — never presented as a reported figure.
Do I need an API key? No key, no vendor account. Runs on Apify; callable from code via the Apify API if you want JSON programmatically.
Why did a company come back mostly null? Its website didn't publish those signals. Null-over-guess is a feature: your CRM stays free of fabricated data.
Is it compliant? It reads only publicly published business information from each company's own site. Lawful use in your jurisdiction is your responsibility.
Related Actors
- Company Enrichment API — the full nested profile per domain.
- People Enrichment — name + company → title, seniority & verified email.
- Lead Enrichment & Scoring — 0–100 ICP-fit score with reasons.
- All my Actors.
Built by Renzo Madueño. Found a bug or want a column added? Open an Issue — I read and respond to every one.