agentleFS
aiagentwithdhruvaiagentwithdhruv/skills/scrape-leads/SKILL.md

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

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
  1. Very specific:

    All scripts are in ./scripts/:

    line 17
  2. Common:

    Check if at least 20/25 (80%) leads match the Industry

    line 36
  3. Common:

    Fail: Stop and ask user to refine keywords

    line 38
  4. Common:

    No leads found: Ask user to broaden search

    line 87
  5. Very specific:

    API Error: Check credentials in .env

    line 88
  6. Common:

    Low quality classifications: If >80% "unclear", improve scrape keywords

    line 89

“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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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 leads
  • scrape_apify_parallel.py - Parallel scraping, for 1000+ leads
  • classify_leads_llm.py - LLM-based lead classification
  • enrich_emails.py - Email enrichment via AnyMailFinder
  • update_sheet.py - Batch sheet updates
  • read_sheet.py - Read data from Google Sheets

Process

Small Scrapes (<1000 leads)

  1. Test Scrape
    python3 ./scripts/scrape_apify.py --query "INDUSTRY" --location "LOCATION" --max_items 25 --no-email-filter --output .tmp/test_leads.json
  2. 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
  3. Full Scrape
    python3 ./scripts/scrape_apify.py --query "INDUSTRY" --location "LOCATION" --max_items TOTAL_COUNT --no-email-filter --output .tmp/leads.json
  4. [Optional] LLM Classification (for complex niches)
    python3 ./scripts/classify_leads_llm.py .tmp/leads.json --classification_type product_saas --output .tmp/classified_leads.json
  5. Upload to Google Sheet
    python3 ./scripts/update_sheet.py .tmp/leads.json --title "Leads - INDUSTRY"
  6. Enrich Missing Emails
    python3 ./scripts/enrich_emails.py SHEET_URL

Large Scrapes (1000+ leads)

  1. Test Scrape (same as above with 25 items)
  2. Parallel Full Scrape

    python3 ./scripts/scrape_apify_parallel.py \
      --query "INDUSTRY" \
      --total_count 4000 \
      --location "United States" \
      --strategy regions \
      --no-email-filter

    Geographic 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)
  3. 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_key

Schema

Inputs

NameTypeRequiredDescription
industrystringYesTarget industry (e.g., 'Plumbers', 'Software Agencies')
locationstringYesTarget location (e.g., 'Texas', 'United States')
total_countintegerYesTotal number of leads desired
classification_typestringNoLLM classification type (e.g., 'product_saas')

Outputs

NameTypeDescription
sheet_urlstringGoogle Sheet URL with scraped leads
lead_countintegerNumber of leads found

Credentials

NameSource
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

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.