π£ Generate Angi roofing contractor leads with Apify, SerpApi, Hunter and Google Sheets
β‘ 5 views Β· π£ Lead Generation & Enrichment
π‘ Pro Tip β HTTP Request scraping tends to break when sites update their markup. If youβre scraping a major platform, check if ScraperNode covers it β it has maintained scrapers for LinkedIn, Instagram, TikTok, YouTube, and 20+ other platforms that return structured data.
Description
Quick overview
Video: https://lnkd.in/p/dCCv3avg
This workflow runs daily to scrape roofing contractor leads via Apify, deduplicates them against a Google Sheets lead list, enriches new leads with website and email data using SerpApi and Hunter, and then appends results to Google Sheets with Slack notifications.
How it works
- Runs on a daily schedule trigger.
- Calls the Apify API to scrape Angi roofing contractor profiles for Austin, TX and normalizes the results while removing duplicates within the same scrape batch.
- Loads existing leads from a Google Sheets βLeadsβ tab and flags any scraped records that match by proId, phone, or a name+location fallback key.
- Sends new leads to SerpApi (Google Search) to discover a likely company domain while skipping common directory and social sites.
- If a domain is found, queries the Hunter Domain Search API and selects the best available contact email based on seniority/title; otherwise marks the lead as phone-only.
- Appends the finalized lead (including enrichment status, website, and contact details when available) to Google Sheets.
- Posts to Slack when a new lead is saved and posts a separate Slack message when a duplicate lead is skipped.
Setup
- Add credentials for Apify (HTTP Header Auth), SerpApi (HTTP Query Auth), Hunter (HTTP Query Auth), Google Sheets OAuth2, and Slack OAuth.
- Replace REPLACE_WITH_SHEET_ID with your Google Sheets document ID in both Google Sheets steps and ensure the sheet name is βLeadsβ with matching columns (e.g., proId, phone, fallbackKey, companyName, website, email, enrichmentStatus).
- Update the Apify scrape parameters (searchTerms, location, maxResults, and detailLevel) if you want different contractor types or service areas.
- Set the Slack channel ID for both Slack messages to the channel where you want lead and duplicate notifications.
π Nodes Used
Google Sheets, HTTP Request, Slack, Schedule Trigger
π₯ Import
Download workflow.json and import into n8n:
Workflow menu β Import from File