B2B lead generation with web scraping means you source public listings, enrich contacts, and sync clean rows to your CRM, without paying enterprise list prices.
Quick answer: Web scraping automates B2B lead collection from Google Maps, LinkedIn, company websites, and business directories. Apify provides ready-to-use lead generation scrapers in its Store.
Use Apify when you need fresh, geography- and niche-specific rows you own, not a static subscription export. Official positioning: Lead generation on Apify.
Browse lead generation Actors in the Apify Store →
Scrape Google Maps leads for free (free-tier credits) →
What data to collect for B2B leads
| Field | Why it matters | Typical source |
|---|---|---|
| Company name | Deduping, CRM matching | Maps, directories, site |
| Domain / website | Enrichment key | Maps, Apollo, LinkedIn |
| Location / industry | ICP filtering | Maps, LinkedIn, directories |
| Phone | Call workflows, dedupe | Maps, site footer |
| Role / title | Outreach personalization | LinkedIn, Apollo |
| Sequences (after validation) | Site crawl, enrichment tools | |
| Place or company ID | Stable joins across runs | Maps placeId, internal IDs |
Keep a source URL on every row for auditability.
Top sources and how to cover them with Apify Actors
| Source | What you get | Apify approach |
|---|---|---|
| Google Maps | Local SMBs: name, address, phone, site, ratings, coords | Google Maps Scraper. Tutorial: Scrape Google Maps |
| Titles, companies, public profile signals | LinkedIn scrapers + scrape LinkedIn guide; stay on public data | |
| Apollo.io | B2B org + contact listings | Apollo scraping guide |
| Company websites | Emails, phones, socials | Contact Details Scraper, Email & Phone Extractor |
| Business directories | Niche or regional listings | Search the Store for the site name (e.g. Yelp, industry portals) via lead generation category search |
For hard targets or repeated blocks, pair Actors with Apify Proxy. For managed proxy infrastructure at scale, some teams also use Bright Data alongside Apify runs.
End-to-end lead generation pipeline
| Stage | Goal | Typical actions |
|---|---|---|
| 1. Source | Fill the funnel with ICP-matched entities | Run Maps / LinkedIn / Apollo / directory Actors with tight queries |
| 2. Normalize | One row per business or contact | Standardize domains, phones, country codes |
| 3. Enrich | Add email and socials | Crawl website with contact Actors; optional Maps contact add-ons |
| 4. Validate | Protect domain reputation | SMTP or vendor validation; drop invalid / disposable |
| 5. Dedupe | Clean CRM | Match on domain + phone or company + geo |
| 6. Sync | Operationalize | Webhook → n8n / Make / Zapier → HubSpot, Pipedrive, Airtable |
Text flow:
Source Actors → CSV/JSON dataset → enrich websites → validate email → dedupe → CRM / sequencer
End-to-end playbook: 500 Dallas roofing leads into HubSpot
A concrete run you can copy:
1. Source: compass/crawler-google-places
Input:
{
"searchStringsArray": ["roofing contractors"],
"locationQuery": "Dallas, Texas",
"maxCrawledPlacesPerSearch": 500,
"language": "en",
"scrapeContacts": false
}
Dataset fields you'll use: placeId, title, address, phone, website, categoryName, totalScore, reviewsCount, location.lat, location.lng. Runtime: ~8 minutes. Cost: ~$2 (Actor is paid per event, check its Pricing tab for current per-place price).
2. Enrich: vdrmota/contact-info-scraper
Feed the website column from step 1 as startUrls. Set maxDepth: 2 so the crawler finds /contact, /about. Returns emails, phones, linkedIns, twitters. Typical coverage for US SMBs: 55–70% have at least one email on a reachable page; the rest only expose contact forms. Cost: ~$1–3.
3. Merge + dedupe in n8n
// n8n Code node: join on website, drop bad emails
const places = $input.first().json.places;
const contacts = $input.last().json.contacts;
const byHost = Object.fromEntries(
contacts.map(c => [new URL(c.url).hostname.replace(/^www\./, ''), c])
);
return places.map(p => {
const host = p.website ? new URL(p.website).hostname.replace(/^www\./, '') : null;
const c = host ? byHost[host] : null;
return {
json: {
placeId: p.placeId,
company: p.title,
email: (c?.emails || []).find(e => !/noreply|postmaster/i.test(e)) || null,
phone: p.phone,
website: p.website,
city: 'Dallas',
source: `maps:${p.placeId}`,
},
};
});
4. Validate: NeverBounce or ZeroBounce node
Drop invalid and disposable. Keep catch-all on a suppressed list capped at 10 sends/day.
5. Sync: HubSpot Create or update contact node
Map email → primary email, company → Company, phone → Phone, source → custom property lead_source_id (stable = placeId, so re-runs upsert instead of duplicating).
Outcome
| Metric | Value |
|---|---|
| Raw Maps rows | ~500 |
| With scraped email | ~300–350 |
| Survives validation | ~250–300 |
| Total Apify spend | ~$3–5 |
| Wall-clock | ~15 min (vs 8–12 hrs manual) |
Open the Google Maps Scraper →
Web scraping vs. data vendors
| Approach | Examples | Monthly cost (typical) | Freshness | Best for |
|---|---|---|---|---|
| Scraping + Apify | Store Actors | $5–$49+ | Scraped now | Custom geo/niche, owned data |
| Enrichment APIs | Apollo, Clearbit | $99–$499+ | Days–weeks | Verified email at volume |
| Data brokers | ZoomInfo, Lusha | $299–$999+ | Often older | Enterprise buying committees |
Scraping wins on targeting and freshness; you trade that for validation work on email.
Enrichment workflow (websites → emails)
Google Maps rarely includes email in the base payload. Use the website column as the join key.
maps_export.csv (column: website)
↓
Contact Details Scraper or Email & Phone Extractor input = list of URLs
↓
Merge on website (spreadsheet VLOOKUP, pandas, or ETL)
| Actor | Role | Link |
|---|---|---|
| Contact Details Scraper | Emails, phones, social links from pages | Run on Apify |
| Email & Phone Extractor | Focused email discovery | Run on Apify |
Scraped emails are not verified sends. Batch-validate and keep bounce rate low to avoid damaging your domain.
CRM and automation
| Tool | Pattern |
|---|---|
| n8n | Apify run success → webhook → transform → HubSpot / Salesforce. Apify + n8n |
| Make | Visual modules, fast CRM mapping. Apify + Make |
| Zapier | “New dataset item” style triggers. Apify + Zapier |
Scheduling: Apify Console → Schedules → e.g. 0 8 * * 1 for weekly Monday 08:00 refreshes.
Cost illustration (verify on each Actor page)
| Step | Volume | Indicative credits |
|---|---|---|
| Google Maps scrape | ~500 places | ~$1–2 |
| Website enrichment | ~500 URLs | ~$1–3 |
| Weekly refresh | ~500 new/changed | ~$3–5 / week |
Most small pipelines fit the free plan ($5/mo credits) for tests or Starter for production.
Legal and compliance (short version)
| Topic | Practice |
|---|---|
| Scope | Public pages only; no logged-in or paywalled abuse |
| EU / UK | GDPR lawful basis, opt-out in outreach, data minimization |
| US email | CAN-SPAM: identify sender, physical address, working unsubscribe |
| Respect ToS risk; prefer public data; see Is web scraping legal? |
Why teams pick Apify for leads
| Factor | Apify scraping | Typical vendor |
|---|---|---|
| Cost | $5–$49+ common | $99–$999+ |
| Freshness | Run-time | Stale exports |
| Targeting | Any query/geo | Fixed filters |
Start with $5/mo free credits, sign up at Apify →
Related: Competitor analysis · Market intelligence · Blog: lead generation web scraping · Hands-on guide: web scraping for lead generation
Automatically collecting public business and contact fields from the web to build ICP-specific lists, usually by running pre-built Apify Actors for Maps, LinkedIn, Apollo, or websites, then enriching and validating before CRM import. See our lead generation web scraping playbook.
Open the Apify Store and search the lead generation category: lead generation Actors. Compare ratings, pricing, and input schemas before scaling.
Local SMB: Google Maps. Roles and org charts: LinkedIn (public data only) and Apollo-style listings. Emails: company websites via contact scrapers. Combine sources and dedupe on domain or phone for best coverage.
Yes. Use Apify webhooks or integrations with n8n, Make, or Zapier to map dataset fields to CRM objects after validation. See the CRM section in this guide.
Public business data from Maps is widely treated as accessible public information in many jurisdictions, but always follow local privacy law and platform terms. LinkedIn is higher risk on ToS; limit to public profiles and get legal advice for your use case. Read Is web scraping legal?.
Maps often omits email in the base dataset. You need a second step crawling each business website, and some sites only expose contact forms. Expect partial coverage and validate every address you mail.
The free tier includes $5/month in credits, enough for trial runs (often hundreds to low thousands of Maps rows depending on Actor pricing). Check each Actor’s Pricing tab and start with small max-result limits.
Common mistakes and fixes
Emails are missing for most leads.
Run a contact-details or email extractor on the website column; expect contact forms for many SMBs. Cross-check LinkedIn or Apollo for titles and domains.
High bounces after outreach.
Validate with NeverBounce, ZeroBounce, or similar; drop invalid and risky disposable domains; cap volume on catch-all domains.
Actor runs fail or return empty rows.
Narrow queries and locations, reduce max results per run, check the run log, and add [Apify Proxy](https://apify.com/proxy?fpr=use-apify) where the Actor supports it.





