{"slug":"lead-scraping-enrichment-pipeline","title":"Lead Scraping and Enrichment Pipeline — Building a Verified Prospect List","tags":["lead-scraping","enrichment","prospecting","data","apollo","outscraper","list-building"],"agent_summary":"How to build and enrich a verified prospect list for cold outreach: data sources, scraping tools, enrichment steps, deduplication, and verification before sending.","trigger_phrases":["lead scraping","lead list building","prospect list","enrich leads","outscraper","apollo lead list","how to build a prospect list","lead data pipeline"],"runnable":false,"markdown":"\n# Lead Scraping and Enrichment Pipeline\n\n**Last updated:** 2026-05-12\n\nA cold outreach system is only as good as the list it runs on. Unverified numbers and bad emails are the #1 reason reply rates collapse. This pipeline covers how to build a verified, enriched list ready for cold SMS or email.\n\n---\n\n## Step 1 — Define the Target\n\nBefore scraping anything, answer:\n\n- **Niche:** What type of business? (HVAC, roofer, plumber, landscaper)\n- **Geography:** What city, metro, or state?\n- **Signal filters:** What qualifies them as a good prospect?\n  - Review count range (e.g., 10–100 reviews — established but not dominant)\n  - GMB status (claimed, unclaimed, or no website)\n  - Website quality (no website = good prospect; old website = even better)\n  - Ad spend signals (not running ads = opportunity)\n\nDefining filters before scraping prevents wasted enrichment budget on bad-fit prospects.\n\n---\n\n## Step 2 — Scraping Sources\n\n### Google Business Profile (GMB) — Primary\n\n**Tool:** Outscraper (outscraper.com)\n\nScrapes GMB listings by niche + geo. Returns:\n- Business name\n- Address\n- Phone number\n- Website (if listed)\n- Review count and rating\n- Categories\n- Hours\n\n**Best for:** Local service businesses. Coverage is near-complete for businesses with a GMB listing.\n\n**Outscraper settings:**\n- Query: \"[niche] in [city, state]\"\n- Max results: 500 per query (increase for large metros)\n- Export: CSV\n\n---\n\n### LinkedIn — B2B Prospecting\n\n**Tool:** Apollo.io or Sales Navigator export + PhantomBuster\n\nBest for commercial service targets (commercial cleaning, IT services, commercial HVAC). Returns:\n- Company name\n- Decision-maker name and title\n- Email (verified or predicted)\n- Company size and revenue\n- Phone (limited)\n\nApollo gives 50 free credits/month. For volume, use the paid tier or PhantomBuster LinkedIn scrapes.\n\n---\n\n### Directories — Secondary\n\nFor niches with strong directory presence:\n- **Angi (formerly Angie's List)** — contractors, home services\n- **HomeAdvisor** — contractors\n- **Houzz** — remodelers, interior design\n- **Yelp** — general local businesses\n\nDirectory scraping gives you name, phone, website, and review count. Use for backfill when GMB returns are thin.\n\n---\n\n## Step 3 — Enrichment\n\nRaw scraped data is incomplete. Enrich before sending.\n\n### Phone Verification\n\n**Tool:** Twilio Lookup API or NeverBounce Phone\n\nFor each phone number in the list:\n- Confirm it is a valid mobile or landline\n- Identify carrier\n- Flag disconnected or invalid numbers\n\nRemove all numbers that return as disconnected or invalid. Do not send to bad numbers — it burns your sending reputation with carriers.\n\n**Cost:** ~$0.005 per lookup with Twilio.\n\n---\n\n### Email Verification\n\n**Tool:** NeverBounce, ZeroBounce, or Hunter.io Verify\n\nFor each email:\n- Valid / Invalid / Disposable / Catch-All\n- Remove invalid and disposable\n- Flag catch-all as risky (may or may not exist)\n\nSend only to Valid and Catch-All (with a suppression layer for bounces).\n\n---\n\n### Owner Name Enrichment\n\nRaw GMB scrapes return business name, not owner name. For personalized outreach, look up owner names through:\n\n- **Apollo.io** — search by company name + city\n- **LinkedIn search** — \"[business name] owner\" or \"owner [city]\"\n- **Google search** — \"[business name] owner\" often surfaces press releases or About pages\n\nOwner first name alone is sufficient for SMS personalization. Full name for email.\n\n---\n\n### Website and GMB Signal Enrichment\n\nAfter scraping, run each business through a quick audit signal check:\n\n- Does their website pass Core Web Vitals? (Google PageSpeed Insights API)\n- Are they in the map pack for their primary keyword? (manual spot check or DataForSEO)\n- How many citations do they have? (Moz Local or BrightLocal)\n\nAdd these signals to the spreadsheet as columns. They become the hooks for your cold outreach copy.\n\n---\n\n## Step 4 — Deduplication and Cleaning\n\nBefore loading the list into your sending tool:\n\n1. **Deduplicate by phone number** — remove any number appearing more than once\n2. **Deduplicate by business name + city** — same business listed twice from different scrape sources\n3. **Remove clients you already work with** — pull your current client list and suppress\n4. **Remove prior contacts** — cross-reference with your CRM for anyone you've already reached out to in the last 90 days\n5. **Remove DNC numbers** — for SMS: check against your internal DNC list and any purchased DNC registry (Syniverse or similar)\n\n---\n\n## Step 5 — List Segmentation\n\nSegment before sending. Do not send one undifferentiated blast.\n\nExample segments for a GMB-targeted list:\n\n| Segment | Criteria | Offer Angle |\n|---|---|---|\n| No website | Website field blank in GMB | \"You have no website — we can fix that in 7 days\" |\n| Low reviews | Under 10 reviews | \"Your competitors have 80+ reviews — here's how to catch up\" |\n| Not in map pack | Competitor check shows they're not ranking | \"You're invisible on Google Maps for [keyword] — we fixed this for 3 others in [city]\" |\n| Old website | Website created before 2020 | \"Your site is hurting your GMB ranking — here's why\" |\n\nSegmenting allows you to write one message per segment rather than one generic message for all.\n\n---\n\n## List Size Targets\n\n| Channel | Minimum List Size | Why |\n|---|---|---|\n| Cold SMS | 500 per send | Need volume to generate meaningful reply rates |\n| Cold email | 200 per send | Lower reply rates, need more volume per outcome |\n| Cold call | 50–100 per day per setter | Manageable dials with quality conversations |\n\n---\n\n## Tools Summary\n\n| Step | Tool | Cost |\n|---|---|---|\n| GMB scraping | Outscraper | ~$0.001/record |\n| LinkedIn scraping | Apollo + PhantomBuster | $49–$99/mo |\n| Phone verification | Twilio Lookup | ~$0.005/number |\n| Email verification | NeverBounce | ~$0.008/email |\n| Owner enrichment | Apollo | Included in plan |\n| CRM dedup | GHL | Included |\n\n---\n\n## Related Topics\n\n- [[cold-sms-outreach-strategy]]\n- [[cold-email-lead-gen-setup]]\n- [[lead-gen-pipeline]]\n- [[instantly-lead-pipeline-management]]\n","html":"<h1>Lead Scraping and Enrichment Pipeline</h1>\n<p><strong>Last updated:</strong> 2026-05-12</p>\n<p>A cold outreach system is only as good as the list it runs on. Unverified numbers and bad emails are the #1 reason reply rates collapse. This pipeline covers how to build a verified, enriched list ready for cold SMS or email.</p>\n<hr>\n<h2>Step 1 — Define the Target</h2>\n<p>Before scraping anything, answer:</p>\n<ul>\n<li><strong>Niche:</strong> What type of business? (HVAC, roofer, plumber, landscaper)</li>\n<li><strong>Geography:</strong> What city, metro, or state?</li>\n<li><strong>Signal filters:</strong> What qualifies them as a good prospect?\n<ul>\n<li>Review count range (e.g., 10–100 reviews — established but not dominant)</li>\n<li>GMB status (claimed, unclaimed, or no website)</li>\n<li>Website quality (no website = good prospect; old website = even better)</li>\n<li>Ad spend signals (not running ads = opportunity)</li>\n</ul>\n</li>\n</ul>\n<p>Defining filters before scraping prevents wasted enrichment budget on bad-fit prospects.</p>\n<hr>\n<h2>Step 2 — Scraping Sources</h2>\n<h3>Google Business Profile (GMB) — Primary</h3>\n<p><strong>Tool:</strong> Outscraper (outscraper.com)</p>\n<p>Scrapes GMB listings by niche + geo. Returns:</p>\n<ul>\n<li>Business name</li>\n<li>Address</li>\n<li>Phone number</li>\n<li>Website (if listed)</li>\n<li>Review count and rating</li>\n<li>Categories</li>\n<li>Hours</li>\n</ul>\n<p><strong>Best for:</strong> Local service businesses. Coverage is near-complete for businesses with a GMB listing.</p>\n<p><strong>Outscraper settings:</strong></p>\n<ul>\n<li>Query: \"[niche] in [city, state]\"</li>\n<li>Max results: 500 per query (increase for large metros)</li>\n<li>Export: CSV</li>\n</ul>\n<hr>\n<h3>LinkedIn — B2B Prospecting</h3>\n<p><strong>Tool:</strong> Apollo.io or Sales Navigator export + PhantomBuster</p>\n<p>Best for commercial service targets (commercial cleaning, IT services, commercial HVAC). Returns:</p>\n<ul>\n<li>Company name</li>\n<li>Decision-maker name and title</li>\n<li>Email (verified or predicted)</li>\n<li>Company size and revenue</li>\n<li>Phone (limited)</li>\n</ul>\n<p>Apollo gives 50 free credits/month. For volume, use the paid tier or PhantomBuster LinkedIn scrapes.</p>\n<hr>\n<h3>Directories — Secondary</h3>\n<p>For niches with strong directory presence:</p>\n<ul>\n<li><strong>Angi (formerly Angie's List)</strong> — contractors, home services</li>\n<li><strong>HomeAdvisor</strong> — contractors</li>\n<li><strong>Houzz</strong> — remodelers, interior design</li>\n<li><strong>Yelp</strong> — general local businesses</li>\n</ul>\n<p>Directory scraping gives you name, phone, website, and review count. Use for backfill when GMB returns are thin.</p>\n<hr>\n<h2>Step 3 — Enrichment</h2>\n<p>Raw scraped data is incomplete. Enrich before sending.</p>\n<h3>Phone Verification</h3>\n<p><strong>Tool:</strong> Twilio Lookup API or NeverBounce Phone</p>\n<p>For each phone number in the list:</p>\n<ul>\n<li>Confirm it is a valid mobile or landline</li>\n<li>Identify carrier</li>\n<li>Flag disconnected or invalid numbers</li>\n</ul>\n<p>Remove all numbers that return as disconnected or invalid. Do not send to bad numbers — it burns your sending reputation with carriers.</p>\n<p><strong>Cost:</strong> ~$0.005 per lookup with Twilio.</p>\n<hr>\n<h3>Email Verification</h3>\n<p><strong>Tool:</strong> NeverBounce, ZeroBounce, or Hunter.io Verify</p>\n<p>For each email:</p>\n<ul>\n<li>Valid / Invalid / Disposable / Catch-All</li>\n<li>Remove invalid and disposable</li>\n<li>Flag catch-all as risky (may or may not exist)</li>\n</ul>\n<p>Send only to Valid and Catch-All (with a suppression layer for bounces).</p>\n<hr>\n<h3>Owner Name Enrichment</h3>\n<p>Raw GMB scrapes return business name, not owner name. For personalized outreach, look up owner names through:</p>\n<ul>\n<li><strong>Apollo.io</strong> — search by company name + city</li>\n<li><strong>LinkedIn search</strong> — \"[business name] owner\" or \"owner [city]\"</li>\n<li><strong>Google search</strong> — \"[business name] owner\" often surfaces press releases or About pages</li>\n</ul>\n<p>Owner first name alone is sufficient for SMS personalization. Full name for email.</p>\n<hr>\n<h3>Website and GMB Signal Enrichment</h3>\n<p>After scraping, run each business through a quick audit signal check:</p>\n<ul>\n<li>Does their website pass Core Web Vitals? (Google PageSpeed Insights API)</li>\n<li>Are they in the map pack for their primary keyword? (manual spot check or DataForSEO)</li>\n<li>How many citations do they have? (Moz Local or BrightLocal)</li>\n</ul>\n<p>Add these signals to the spreadsheet as columns. They become the hooks for your cold outreach copy.</p>\n<hr>\n<h2>Step 4 — Deduplication and Cleaning</h2>\n<p>Before loading the list into your sending tool:</p>\n<ol>\n<li><strong>Deduplicate by phone number</strong> — remove any number appearing more than once</li>\n<li><strong>Deduplicate by business name + city</strong> — same business listed twice from different scrape sources</li>\n<li><strong>Remove clients you already work with</strong> — pull your current client list and suppress</li>\n<li><strong>Remove prior contacts</strong> — cross-reference with your CRM for anyone you've already reached out to in the last 90 days</li>\n<li><strong>Remove DNC numbers</strong> — for SMS: check against your internal DNC list and any purchased DNC registry (Syniverse or similar)</li>\n</ol>\n<hr>\n<h2>Step 5 — List Segmentation</h2>\n<p>Segment before sending. Do not send one undifferentiated blast.</p>\n<p>Example segments for a GMB-targeted list:</p>\n<p>| Segment | Criteria | Offer Angle |\n|---|---|---|\n| No website | Website field blank in GMB | \"You have no website — we can fix that in 7 days\" |\n| Low reviews | Under 10 reviews | \"Your competitors have 80+ reviews — here's how to catch up\" |\n| Not in map pack | Competitor check shows they're not ranking | \"You're invisible on Google Maps for [keyword] — we fixed this for 3 others in [city]\" |\n| Old website | Website created before 2020 | \"Your site is hurting your GMB ranking — here's why\" |</p>\n<p>Segmenting allows you to write one message per segment rather than one generic message for all.</p>\n<hr>\n<h2>List Size Targets</h2>\n<p>| Channel | Minimum List Size | Why |\n|---|---|---|\n| Cold SMS | 500 per send | Need volume to generate meaningful reply rates |\n| Cold email | 200 per send | Lower reply rates, need more volume per outcome |\n| Cold call | 50–100 per day per setter | Manageable dials with quality conversations |</p>\n<hr>\n<h2>Tools Summary</h2>\n<p>| Step | Tool | Cost |\n|---|---|---|\n| GMB scraping | Outscraper | ~$0.001/record |\n| LinkedIn scraping | Apollo + PhantomBuster | $49–$99/mo |\n| Phone verification | Twilio Lookup | ~$0.005/number |\n| Email verification | NeverBounce | ~$0.008/email |\n| Owner enrichment | Apollo | Included in plan |\n| CRM dedup | GHL | Included |</p>\n<hr>\n<h2>Related Topics</h2>\n<ul>\n<li>[[cold-sms-outreach-strategy]]</li>\n<li>[[cold-email-lead-gen-setup]]</li>\n<li>[[lead-gen-pipeline]]</li>\n<li>[[instantly-lead-pipeline-management]]</li>\n</ul>\n"}