End-to-end lead generation and CRM pipeline automation for OpenClaw agents. Discover leads from web searches and directories, enrich with contact data, score and qualify leads, push to CRM (HubSpot, Pipedrive, Zoho), and run automated email outreach sequences with follow-ups. Use when: (1) finding new leads or prospects, (2) enriching lead data with emails and company info, (3) pushing leads to a CRM, (4) setting up email outreach campaigns, (5) scoring or qualifying leads, (6) managing a sales pipeline, or (7) automating follow-up sequences.
Full lead generation pipeline — from discovery to CRM to outreach. Find prospects, enrich their data, qualify them, push to your CRM, and automate follow-up sequences.
pip3 install requests
config.json)HUNTER_API_KEY, free 25 searches/mo)HUBSPOT_API_KEY)PIPEDRIVE_API_KEY + PIPEDRIVE_DOMAIN)ZOHO_ACCESS_TOKEN)SENDGRID_API_KEYNot all are required — use what fits your stack.
lead-gen/
├── config.json # API keys, CRM selection, scoring rules
├── leads/ # Lead database (JSON files)
│ ├── raw/ # Newly discovered leads
│ ├── enriched/ # Leads with contact data
│ ├── qualified/ # Scored and qualified
│ └── archived/ # Closed/rejected
├── campaigns/ # Outreach campaign configs
├── templates/ # Email templates
└── reports/ # Pipeline reports
Run scripts/init-workspace.sh to create this structure.
Find leads matching your ideal customer profile:
scripts/discover-leads.sh --query "ai agency owner" --count 20
scripts/discover-leads.sh --query "shopify store owner" --industry ecommerce --location "United States"
scripts/discover-leads.sh --directory yelp --category "marketing agencies" --location "Los Angeles"
Discovery sources:
Output: raw lead JSON files in leads/raw/.
Add contact data and company info to raw leads:
scripts/enrich-lead.sh <lead-id>
scripts/enrich-leads.sh --batch raw # Enrich all raw leads
Enrichment adds:
Score leads based on configurable criteria:
scripts/score-leads.sh # Score all enriched leads
scripts/score-leads.sh --threshold 70 # Only qualify leads scoring 70+
Default scoring rubric (customizable in config.json):
Leads scoring above threshold move to leads/qualified/.
Push qualified leads to your CRM:
scripts/push-to-crm.sh <lead-id>
scripts/push-to-crm.sh --batch qualified # Push all qualified leads
scripts/push-to-crm.sh --crm hubspot # Override default CRM
Supported CRMs:
See references/crm-setup.md for per-CRM configuration.
Run automated outreach campaigns with follow-ups:
scripts/create-campaign.sh --name "q1-outreach" --template cold-intro --leads qualified
scripts/send-campaign.sh --campaign "q1-outreach" --dry-run # Preview first
scripts/send-campaign.sh --campaign "q1-outreach" # Send for real
Campaign features:
Critical: Never send without user approval. --dry-run always first.
scripts/pipeline-report.sh # Current pipeline summary
scripts/pipeline-report.sh --weekly # Weekly activity report
scripts/pipeline-report.sh --conversion # Conversion funnel metrics
Store in templates/ as JSON:
{
"name": "cold-intro",
"subject": "Quick question about {company_name}",
"body": "Hi {first_name},\n\nI noticed {company_name} is {personalization_hook}.\n\nWe help companies like yours {value_prop}.\n\nWould you be open to a quick chat this week?\n\nBest,\n{sender_name}",
"follow_ups": [
{
"delay_days": 3,
"subject": "Re: Quick question about {company_name}",
"body": "Hi {first_name},\n\nJust following up on my previous note. {follow_up_hook}\n\nHappy to share more details if helpful.\n\nBest,\n{sender_name}"
},
{
"delay_days": 7,
"subject": "Last note from me",
"body": "Hi {first_name},\n\nDon't want to be a pest — just one last check. If {value_prop_short} isn't a priority right now, no worries at all.\n\nIf timing changes, I'm here.\n\nBest,\n{sender_name}"
}
]
}
references/crm-setup.md — Setup guides for HubSpot, Pipedrive, Zohoreferences/email-best-practices.md — Deliverability, compliance, templatesreferences/scoring-customization.md — How to tune the scoring model