From research
Scrape LinkedIn post commenters and export Lemlist-ready CSVs, with optional ICP filtering. Use this skill when the user wants to scrape engagement from a LinkedIn post, extract commenters, build a lead list from LinkedIn post interactions, generate a CSV for Lemlist import, or filter scraped contacts against an Ideal Customer Profile. Triggers on "scrape LinkedIn post", "get commenters", "LinkedIn engagement", "post engagers", "Lemlist CSV", "who commented on this post", "ICP filter", "ideal customer profile", or "filter leads".
How this skill is triggered — by the user, by Claude, or both
Slash command
/research:linkedin-engagement-scraperThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scrape everyone who engaged with a LinkedIn post and produce two Lemlist-ready outputs:
Scrape everyone who engaged with a LinkedIn post and produce two Lemlist-ready outputs:
LinkedIn post URL
↓
scrape_engagers.py (PhantomBuster API)
↓
┌───┴───┐
│ │
▼ ▼
All CSV engagers.json
(Lemlist) │
▼
filter_icp.py (define ICP → score → filter)
│
▼
ICP Matches CSV
(Lemlist)
| Requirement | Details |
|---|---|
PHANTOMBUSTER_API_KEY | Settings → API |
PHANTOMBUSTER_AGENT_ID | From phantom URL: phantombuster.com/phantoms/<ID>/... |
| Python packages | pip install requests python-dotenv |
Set the env vars in a .env file in the working directory.
See references/phantombuster-setup.md for full PhantomBuster setup instructions.
python <skill-path>/scripts/scrape_engagers.py "<linkedin_post_url>"
This launches PhantomBuster, waits for results, and outputs:
| File | Purpose |
|---|---|
output/all_engagers_YYYY-MM-DD_HHMMSS.csv | All contacts, Lemlist-ready. Import directly. |
output/engagers.json | Full contact data with seniority tagging. Feed to Step 2. |
python <skill-path>/scripts/filter_icp.py output/engagers.json
The script prompts you to define your ICP interactively:
--- Define your Ideal Customer Profile ---
Segment 1:
Industries (comma-separated, or blank for any): saas, fintech
Target titles/keywords (comma-separated, or blank for any): vp, head of, director
Minimum seniority [c_suite / vp / director / manager / senior_ic / any]: director
Company name keywords (comma-separated, or blank for any):
Add another segment? (y/n): n
Or reuse a saved ICP:
python <skill-path>/scripts/filter_icp.py output/engagers.json --icp output/icp_criteria.json
Output:
| File | Purpose |
|---|---|
output/icp_matches_YYYY-MM-DD_HHMMSS.csv | Strong + likely ICP matches, Lemlist-ready |
output/icp_criteria.json | Your saved ICP (reuse on future scrapes) |
Each contact is scored against your ICP segments on four dimensions:
| Dimension | Source | What it checks |
|---|---|---|
| Title keywords | LinkedIn headline | Does their title contain your target keywords? |
| Company keywords | LinkedIn headline | Does their company match your targets? |
| Seniority | Parsed from title | Are they at or above your minimum seniority level? |
| Industry | LinkedIn headline | Does their company/headline match your target industries? |
Fit ratings:
The ICP CSV includes strong + likely fits. Weak fits are output as a fallback if no strong/likely matches exist.
Parsed automatically from job titles:
| Level | Example titles |
|---|---|
c_suite | CEO, CTO, Founder, Chief __ Officer |
vp | VP, SVP, Head of, Partner |
director | Director, Senior Director, Managing Director |
manager | Manager, Senior Manager, Product Manager |
senior_ic | Principal, Staff, Lead, Architect |
individual_contributor | Everything else |
See references/icp-parsing-guide.md for detailed parsing rules.
Both output CSVs use the same Lemlist-compatible format:
| Column | Description |
|---|---|
email | Blank — Lemlist enriches from LinkedIn URL on import |
firstName | First name |
lastName | Last name |
companyName | Company (extracted from LinkedIn headline) |
linkedinUrl | LinkedIn profile URL |
jobTitle | Job title (extracted from LinkedIn headline) |
icebreaker | Comment text — use {{icebreaker}} in Lemlist templates |
icpFit | (ICP CSV only) strong_fit or likely_fit |
all_engagers or icp_matches){{icebreaker}} in your email template for personalization| Issue | Fix |
|---|---|
412 Precondition Failed on launch | Enable auto-launch in PhantomBuster phantom settings |
403 or auth errors | Check PHANTOMBUSTER_API_KEY in .env |
| 0 contacts returned | Post has no comments, or PhantomBuster session cookie expired |
| Missing company/title | Person's headline doesn't follow "Title at Company" format |
| 0 ICP matches | Broaden criteria — try fewer keywords or lower seniority minimum |
npx claudepluginhub casper-studios/casper-marketplace --plugin researchScrapes LinkedIn post engagers (commenters + reactors) from profiles, deduplicates, and enriches with full profile data and company websites. Triggers on post engagement lead gen queries.
Scrapes LinkedIn post engagers (commenters + reactors) from profiles, deduplicates, and enriches with full profile data and company websites. Triggers on post engagement lead gen queries.
Pulls LinkedIn post engagers and segments them by ICP fit (peer/aspirational/prospect/other). Produces roster, tiers, and outreach action lists.