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.