B2B Lead Enrichment
Pricing
Pay per usage
B2B Lead Enrichment
Turn a simple list of company domains into rich, actionable company profiles. Upload a CSV with company domains, and get back firmographic data, technology stacks, contact emails, social links, and industry classification. No paid API keys required. Everything runs on publicly available data.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Banea Teodor
Maintained by CommunityActor stats
1
Bookmarked
66
Total users
8
Monthly active users
2 days ago
Last modified
Categories
Share
Turn a plain list of company domains into sales-ready B2B profiles — company details, technology stack, email infrastructure, social links and contact emails.
Upload a CSV with a domain column and get back one enriched row per company. No API keys required, no external data vendors, no per-record data fees.
What does this Actor do?
For every company in your CSV, the Actor reads the company's own website, its DNS records, its TLS certificate and its public GitHub presence, then merges everything into a single consistent row.
It follows each site's own navigation to the pages that carry real information — contact, about, team, imprint — rather than guessing at fixed URLs, which is why it finds contacts that simpler scrapers miss.
What you get
| Data | Example | Source |
|---|---|---|
| Company name & legal name | Baremetrics / Baremetrics, Inc. | schema.org, SSL certificate |
| Description | Subscription analytics for SaaS businesses | schema.org, meta tags |
| Industry | Data & Analytics | Classified from the site's own copy |
| Employee count | 113 | schema.org, stated figures on the site |
| Founded year | 2014 | schema.org, "founded in…", copyright range |
| Location | Austin, TX, US | schema.org, <address>, SSL certificate |
| Named contacts | Luke Marshall — CEO — luke@baremetrics.com | Team & contact pages |
| Shared inboxes | hello@, sales@ | Contact pages, ranked by sales value |
| Phone | +1 512 555 0142 | tel: links, schema.org |
| Tech stack | Cloudflare, Next.js, HubSpot, Mailchimp | Headers, scripts, meta tags, SPF |
| Email provider | Google Workspace | MX records |
| Email security | SPF, DMARC, DKIM | TXT records |
| Programming languages | TypeScript, Ruby | Public GitHub repositories |
| Social links | LinkedIn, X, Facebook, Crunchbase, GitHub | schema.org sameAs, page links |
| SSL issuer & validity | Let's Encrypt | TLS certificate |
Every field records where it came from in a provenance object, and every row carries an enrichmentScore (0–100) so you can filter out thin records before importing into a CRM.
Quick start
- Prepare a CSV with a
domaincolumn:domainbaremetrics.combasecamp.combuffer.com - Paste it into CSV content, or point the Actor at a public URL or a key-value store record.
- Click Start.
Column names are auto-detected, so website, company_domain or url work just as well as domain.
Pricing
You are charged once per company enriched — one input row produces exactly one billable result, no matter how many contacts are found for it.
That means your cost is predictable before you start: 500 companies in your CSV is 500 results. Use Maximum companies to process to cap a run, and note that Max contacts per company does not affect what you pay — extra contacts ride along in the same row.
Output
One row per company. The best contact is flattened onto the row so CSV and spreadsheet exports stay usable, and the complete list is in contacts.
{"companyId": "8f14e45fceea167a","companyDomain": "baremetrics.com","companyName": "Baremetrics","companyLegalName": "Baremetrics, Inc.","companyDescription": "Subscription analytics and insights for SaaS businesses","companyIndustry": "Data & Analytics","companySizeEmployees": 42,"companyFoundedYear": 2014,"companyCity": "Austin","companyRegion": "TX","companyCountry": "US","companyWebsiteUrl": "https://baremetrics.com","companyLogoUrl": "https://baremetrics.com/og-image.png","companyLinkedinUrl": "https://www.linkedin.com/company/baremetrics","companyGithubUrl": "https://github.com/baremetrics","companyEmails": ["hello@baremetrics.com", "marketing@baremetrics.com"],"companyPhone": "+1 512 555 0142","techStack": ["Cloudflare", "jQuery", "HubSpot", "Mailchimp"],"techCategories": ["Web Server", "Email Marketing"],"programmingLanguages": ["TypeScript", "Ruby"],"emailProvider": "Google Workspace","emailSecurity": ["SPF", "DMARC"],"emailMarketingTools": ["Mailchimp"],"dnsProvider": "Cloudflare DNS","sslIssuer": "Let's Encrypt","primaryContactName": "Luke Marshall","primaryContactEmail": "luke@baremetrics.com","primaryContactTitle": "CEO","primaryContactSeniority": "C-Level","primaryContactDepartment": "Executive","contacts": [{"personFullName": "Luke Marshall","personEmail": "luke@baremetrics.com","personTitle": "CEO","personSeniority": "C-Level","personDepartment": "Executive"}],"contactCount": 5,"enrichmentScore": 77,"fieldsFilled": 11,"enrichedAt": "2026-09-13T14:30:00.000Z"}
Four dataset views are provided in the Console: Overview, Contacts, Tech Stack and Social & Web.
About data quality
This Actor reports only what the company publishes about itself, and it is deliberately conservative about what it is willing to call a fact:
- Documentation placeholders are filtered out. Addresses that appear in API examples and code samples on a company's own domain are excluded — a fake contact is worse than no contact.
- Shared inboxes are labelled, not disguised.
sales@is returned as a shared inbox, never dressed up as a person. - Names are only claimed when the page says so. A name is taken from a team card, or derived from an unambiguous
first.last@address — never guessed from initials. techStackcontains technologies only. Certificate authorities, GitHub topics and source languages have their own fields, so the column stays useful for filtering.- Fields are
nullrather than wrong. "Remote", "Worldwide" and lists of every office are not stored as a city.companyIndustryis left empty when no classification was confident enough.
Missing data is normal and expected: a company that publishes no address genuinely has no address to find. enrichmentScore tells you how much was recovered for each record.
Tips
- Add a free GitHub token to raise the GitHub rate limit from 60 to 5,000 requests/hour. Without it, GitHub data stops after roughly 60 companies in a run. Create one at github.com/settings/tokens — no scopes needed.
- Add a free Google Knowledge Graph key for richer descriptions on well-known companies. Get one in the Google Cloud Console under APIs & Services → Knowledge Graph Search API.
- Raise "Pages per company" to find more contacts. The Actor follows the site's navigation, so more pages usually means reaching the team page as well as the contact page.
- Raise "Max concurrency" for large runs. Most sites are read over plain HTTP, so 10–30 parallel companies is comfortable.
- Turn on proxies for runs of several hundred companies or more; some sites block datacenter IPs.
- Filter on
enrichmentScorebefore importing to a CRM — scores below about 30 are usually companies with a thin or parked website.
How it works
Sites are fetched over plain HTTP first. A real browser is launched only when a page turns out to render entirely in JavaScript, which is a small minority of company websites. You can disable that fallback under Website Scraper Settings for the lowest possible cost, at the price of missing data on JavaScript-only sites.
DNS lookups fall back to DNS-over-HTTPS when the system resolver is unavailable, so email provider and email security data stay populated on restricted networks.
Integrations
The dataset exports to CSV, JSON, Excel and Google Sheets, and can be pushed to Zapier, Make, Airbyte or any HTTP endpoint through Apify's integrations. Use companyId as a stable join key across runs.
Limitations
- Data comes from public sources only. Companies that publish little will return sparse rows.
- Employee counts and founding years are reported when stated; they are not estimated.
- Contact discovery depends on the company publishing addresses on its website. Sites that use only a contact form will return no email.
- This Actor does not verify that a mailbox accepts mail.