Skip to main content

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

FieldWhy it mattersTypical source
Company nameDeduping, CRM matchingMaps, directories, site
Domain / websiteEnrichment keyMaps, Apollo, LinkedIn
Location / industryICP filteringMaps, LinkedIn, directories
PhoneCall workflows, dedupeMaps, site footer
Role / titleOutreach personalizationLinkedIn, Apollo
EmailSequences (after validation)Site crawl, enrichment tools
Place or company IDStable joins across runsMaps placeId, internal IDs

Keep a source URL on every row for auditability.


Top sources and how to cover them with Apify Actors

SourceWhat you getApify approach
Google MapsLocal SMBs: name, address, phone, site, ratings, coordsGoogle Maps Scraper. Tutorial: Scrape Google Maps
LinkedInTitles, companies, public profile signalsLinkedIn scrapers + scrape LinkedIn guide; stay on public data
Apollo.ioB2B org + contact listingsApollo scraping guide
Company websitesEmails, phones, socialsContact Details Scraper, Email & Phone Extractor
Business directoriesNiche or regional listingsSearch 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

StageGoalTypical actions
1. SourceFill the funnel with ICP-matched entitiesRun Maps / LinkedIn / Apollo / directory Actors with tight queries
2. NormalizeOne row per business or contactStandardize domains, phones, country codes
3. EnrichAdd email and socialsCrawl website with contact Actors; optional Maps contact add-ons
4. ValidateProtect domain reputationSMTP or vendor validation; drop invalid / disposable
5. DedupeClean CRMMatch on domain + phone or company + geo
6. SyncOperationalizeWebhook → 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

MetricValue
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

ApproachExamplesMonthly cost (typical)FreshnessBest for
Scraping + ApifyStore Actors$5–$49+Scraped nowCustom geo/niche, owned data
Enrichment APIsApollo, Clearbit$99–$499+Days–weeksVerified email at volume
Data brokersZoomInfo, Lusha$299–$999+Often olderEnterprise 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)
ActorRoleLink
Contact Details ScraperEmails, phones, social links from pagesRun on Apify
Email & Phone ExtractorFocused email discoveryRun on Apify
Validate before sending

Scraped emails are not verified sends. Batch-validate and keep bounce rate low to avoid damaging your domain.


CRM and automation

ToolPattern
n8nApify run success → webhook → transform → HubSpot / Salesforce. Apify + n8n
MakeVisual 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)

StepVolumeIndicative 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.


TopicPractice
ScopePublic pages only; no logged-in or paywalled abuse
EU / UKGDPR lawful basis, opt-out in outreach, data minimization
US emailCAN-SPAM: identify sender, physical address, working unsubscribe
LinkedInRespect ToS risk; prefer public data; see Is web scraping legal?

Why teams pick Apify for leads

FactorApify scrapingTypical vendor
Cost$5–$49+ common$99–$999+
FreshnessRun-timeStale exports
TargetingAny query/geoFixed filters

Start with $5/mo free credits, sign up at Apify →

Apify Affiliate Banner 300x250Apify Affiliate Banner 300x250Apify Affiliate Banner 300x50Apify Affiliate Banner 300x50

Related: Competitor analysis · Market intelligence · Blog: lead generation web scraping · Hands-on guide: web scraping for lead generation

Frequently Asked Questions

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.

Apify Affiliate Banner 728x90Apify Affiliate Banner 728x90Apify Affiliate Banner 300x50Apify Affiliate Banner 300x50