Transform a LinkedIn URL into a complete research package with personalized outreach. Scrapes profile, researches company via Perplexity, runs AI analysis for pain points and DM sequences, stores results in Google Sheets. Run with /research-lead or ask to research a lead.
Transform a LinkedIn URL into a complete research package with personalized outreach content — constrained to relevant personalization only.
Relevant = relates to a problem they're likely facing that we can solve. Theater = personal but irrelevant (marathons, shared schools, hobbies).
Before including any fact, apply this test: "Does this relate to a problem they're facing that we can solve?" If no, discard it.
https://www.linkedin.com/in/username/)python3 .claude/skills/research-lead/scripts/research_lead.py "https://www.linkedin.com/in/username/"
Add --post-to-slack to post the review card to Slack.
python3 .claude/skills/research-lead/scripts/scrape_linkedin.py "LINKEDIN_URL"
Output: JSON — name, headline, company, role, experience, recent posts, skills Dependencies: RELEVANCE_AI_API_KEY (for scraping API)
python3 .claude/skills/research-lead/scripts/research_with_perplexity.py --company "Company Name" --person "Person Name" --role "Their Role"
Output: JSON — company overview, recent news, industry, challenges, tech stack signals Dependencies: PERPLEXITY_API_KEY
python3 .claude/skills/research-lead/scripts/analyze_with_openai.py --type lead_profile --profile profile.json --research research.json
python3 .claude/skills/research-lead/scripts/analyze_with_openai.py --type pain_gain_operational --profile profile.json --research research.json
python3 .claude/skills/research-lead/scripts/analyze_with_openai.py --type pain_gain_automation --profile profile.json --research research.json
python3 .claude/skills/research-lead/scripts/analyze_with_openai.py --type connection_request --profile profile.json --research research.json
python3 .claude/skills/research-lead/scripts/analyze_with_openai.py --type dm_sequence --profile profile.json --research research.json
Analysis types:
lead_profile — Structured profile summary with relevance filterpain_gain_operational — Business pain points and potential gainspain_gain_automation — Automation-specific opportunitiesconnection_request — Personalized LinkedIn connection messagedm_sequence — 3-message DM sequence (value-first, not salesy)Dependencies: OPENAI_API_KEY
python3 .claude/skills/research-lead/scripts/generate_review_report.py --data combined_analysis.json
Output: HTML report for human review before sending anything
python3 .claude/skills/research-lead/scripts/update_google_sheet.py --data combined_analysis.json --sheet-id "SHEET_ID"
python3 .claude/skills/research-lead/scripts/post_lead_review_to_slack.py --data combined_analysis.json
LinkedIn URL
↓
1. Scrape profile → profile.json
↓
2. Research company → research.json
↓
3. AI analysis (5x parallel) → analyses.json
↓
4. Generate review report → report.html
↓
5. (Optional) Store → Google Sheets
↓
6. (Optional) Post → Slack for review
python3 .claude/skills/research-lead/scripts/batch_research_leads.py --source airtable
Pulls unprocessed leads from Airtable, runs the full pipeline for each.
RELEVANCE_AI_API_KEY= # LinkedIn scraping
PERPLEXITY_API_KEY= # Company research
OPENAI_API_KEY= # AI analysis
SLACK_BOT_TOKEN= # Optional: Slack posting
GOOGLE_SHEETS_CREDENTIALS= # Optional: Google Sheets storage
~$0.40 per lead (API calls combined). Pipeline takes 45-60 seconds.