
I built a leads workflow that scrapes and scores businesses by how bad their website is
I built a weekly n8n workflow that scrapes local businesses that need a website redesign, ranked by how weak their web presence actually is — not just by whether they showed up in a search.
How it works
- Setup (you run it once). Creates two n8n Data Tables — one for leads, one for a history of past searches. No separate database.
- Weekly trigger. An LLM picks a fresh business type and city each week, and it sees the results of every past search — leads found, how many came back hot — not just which segments were already tried. So it's not just avoiding repeats, it refines toward markets that are actually producing hot leads and mints one Gluecrawl job that scrapes their info (website, address, phone number, etc)
- Score, don't just list. Every business that comes back gets its own site fetched and checked: dead domain, parked page, 4xx — that's a hot lead. A site that's just a script bundle with no real text gets flagged unreadable, not scored as "has nothing." A domain that repeats across multiple listings gets caught as a franchise, since nobody at a chain branch is your buyer.
- Build the call list. Output is a markdown brief, hot leads before warm, and every line already carries the reason — which doubles as the opening line of the call.
What you can do with it
- Call them. Every lead carries a phone number, so an outbound-calling node (Vapi, Bland, Twilio) after the brief turns this into an automated dialer, not just a list you work by hand.
- Send it instead of storing it. Drop a Gmail, Slack, or Telegram node after the brief and it lands in an inbox instead of a table.
- Work it. Point a HubSpot, Pipedrive, or Airtable node at the leads table and push the hot tier straight into a pipeline.
- Personalize it further. Run each lead's flagged issue through a second LLM call to draft a first line — just keep that downstream of the scoring step, not inside it.
- Point it at a different directory or niche entirely. Nothing about the scraping or scoring is specific to local business listings.
Limitations
- Qualification is heuristic, not visual. Check and Score fetches raw HTML and never renders JS, to keep the check cheap and fast. A site that's mostly client-rendered can come back looking emptier than it is. Fix: swap that node for an AI agent that actually loads and reads the page — more accurate, more expensive per lead.
- Gluecrawl's free tier caps you at 2 active scrapers, and this workflow mints a new one every week — you'll hit that ceiling by week three. Fix: upgrade the plan, or add a step before job creation that deletes the oldest scraper first.
If you fix one of the limitations above, or improve the workflow some other way, please share it!
Requirements:
- Gluecrawl API key (free tier included): https://www.gluecrawl.ai
- OpenAI API key: https://platform.openai.com
Template (MIT, free to import): https://github.com/deep-soup-labs/gluecrawl-n8n-templates/blob/main/templates/local-leads-by-web-presence.json