scrape-leads
Skill16 starsChanged 9 months agoMITView on GitHub
Scrape and verify business leads using Apify, classify with LLM, enrich emails, and save to Google Sheets. Use when user asks to find leads, scrape businesses, generate prospect lists, or build lead databases for any industry or location.
- Reads credentials
4 other projects use a version of this, 3 of them edited.
Adopted by
Most recently taken up by
- MohamedEssam0-0/claude-skillsedited, first seen Oct 11, 2026
- daniel9834/claude-skillstheir own version, first seen Oct 11, 2026
- phuongdo/claude-skillsedited, first seen Feb 17, 2026
- nickjwells/skills-workspaceedited, first seen Feb 1, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 3
- nickjwells/skills-workspace★ 2894% same
- MohamedEssam0-0/claude-skills★ 097% same
- phuongdo/claude-skills★ 097% same
Wrote their own version · 1
- daniel9834/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository39 other files it gives its agents.
- add-webhookSkill
- aws-production-deploySkill
- build-in-public-youtubeSkill
- casualize-namesSkill
- classify-leadsSkill
- create-proposalSkill
- cross-niche-outliersSkill
- design-websiteSkill
- euron-qaSkill
- excalidraw-diagramSkill
- excalidraw-visualsSkill
- generate-reportSkill
- ghost-browserSkill
- gmail-inboxSkill
- gmail-labelSkill
- gmaps-leadsSkill
- image-to-videoSkill
- instantly-autoreplySkill
- instantly-campaignsSkill
- linkedin-carousel-handwrittenSkill
- literature-researchSkill
- local-serverSkill
- mac-controlSkill
- modal-deploySkill
- Nano Banana 2 Image Generation MasterSkill
- onboarding-kickoffSkill
- pan-3d-transitionSkill
- recreate-thumbnailsSkill
- send-telegramSkill
- skill-builderSkill
- skool-monitorSkill
- skool-ragSkill
- thumbnail-generatorSkill
- title-variantsSkill
- upwork-applySkill
- video-editSkill
- welcome-emailSkill
- whisper-voiceSkill
- youtube-outliersSkill
The file
We split this skill into the rules it gives an agent
6 rules. 4 are common, 0 are distinctive, and 2 are very specific to this project.
4
Common
Most of the 4 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
All scripts are in ./scripts/:
- Common: line 36
Check if at least 20/25 (80%) leads match the Industry
- Common: line 38
Fail: Stop and ask user to refine keywords
- Common: line 87
No leads found: Ask user to broaden search
- Very specific: line 88
API Error: Check credentials in .env
- Common: line 89
Low quality classifications: If >80% "unclear", improve scrape keywords
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Lead Scraping & Verification
Goal
Scrape leads using Apify (code_crafter/leads-finder), verify their relevance (industry match > 80%), and save them to a Google Sheet. For large scrapes (1000+ leads), use parallel scraping for 3-5x faster performance.
Inputs
- Industry: The target industry (e.g., "Plumbers", "Software Agencies")
- Location: The target location (e.g., "Texas", "United States", "California"). Scripts auto-format to Apify's required format (US states get ", us" suffix automatically).
- Total Count: The total number of leads desired
Scripts
All scripts are in ./scripts/:
scrape_apify.py- Single scrape, for <1000 leadsscrape_apify_parallel.py- Parallel scraping, for 1000+ leadsclassify_leads_llm.py- LLM-based lead classificationenrich_emails.py- Email enrichment via AnyMailFinderupdate_sheet.py- Batch sheet updatesread_sheet.py- Read data from Google Sheets
Process
Small Scrapes (<1000 leads)
- Test Scrape
python3 ./scripts/scrape_apify.py --query "INDUSTRY" --location "LOCATION" --max_items 25 --no-email-filter --output .tmp/test_leads.json - Verification
- Read
.tmp/test_leads.json - Check if at least 20/25 (80%) leads match the Industry
- Pass: Proceed to step 3
- Fail: Stop and ask user to refine keywords
- Read
- Full Scrape
python3 ./scripts/scrape_apify.py --query "INDUSTRY" --location "LOCATION" --max_items TOTAL_COUNT --no-email-filter --output .tmp/leads.json - [Optional] LLM Classification (for complex niches)
python3 ./scripts/classify_leads_llm.py .tmp/leads.json --classification_type product_saas --output .tmp/classified_leads.json - Upload to Google Sheet
python3 ./scripts/update_sheet.py .tmp/leads.json --title "Leads - INDUSTRY" - Enrich Missing Emails
python3 ./scripts/enrich_emails.py SHEET_URL
Large Scrapes (1000+ leads)
- Test Scrape (same as above with 25 items)
Parallel Full Scrape
python3 ./scripts/scrape_apify_parallel.py \ --query "INDUSTRY" \ --total_count 4000 \ --location "United States" \ --strategy regions \ --no-email-filterGeographic partitioning is automatic:
- United States: 4-way (Northeast, Southeast, Midwest, West)
- EU/Europe: 4-way (Western, Southern, Northern, Eastern)
- UK: 4-way (SE England, N England, Scotland/Wales, SW England)
- Canada: 4-way (Ontario, Quebec, West, Atlantic)
- Australia: 4-way (NSW, VIC/TAS, QLD, WA/SA)
- Continue with steps 4-6 from small scrapes
Outputs
The ONLY deliverable is the Google Sheet URL. Local JSON files in .tmp/ are temporary intermediates.
Edge Cases
- No leads found: Ask user to broaden search
- API Error: Check credentials in
.env - Low quality classifications: If >80% "unclear", improve scrape keywords
Environment
Requires in .env:
APIFY_API_TOKEN=your_token
GOOGLE_APPLICATION_CREDENTIALS=path/to/credentials.json
ANTHROPIC_API_KEY=your_key
ANYMAILFINDER_API_KEY=your_keySchema
Inputs
| Name | Type | Required | Description |
industry | string | Yes | Target industry (e.g., 'Plumbers', 'Software Agencies') |
location | string | Yes | Target location (e.g., 'Texas', 'United States') |
total_count | integer | Yes | Total number of leads desired |
classification_type | string | No | LLM classification type (e.g., 'product_saas') |
Outputs
| Name | Type | Description |
sheet_url | string | Google Sheet URL with scraped leads |
lead_count | integer | Number of leads found |
Credentials
| Name | Source |
APIFY_API_TOKEN | .env |
GOOGLE_APPLICATION_CREDENTIALS | .env |
ANTHROPIC_API_KEY | .env |
ANYMAILFINDER_API_KEY | .env |
Composable With
Skills that chain well with this one: classify-leads, casualize-names, instantly-campaigns, onboarding-kickoff
Cost
$0.01-0.02 per lead + $0.30/1K for classification
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

