Find warm leads by searching LinkedIn for pain-language
Pain language engagers

Find warm leads by searching LinkedIn for pain-language posts — the frustrations, complaints, and operational struggles your ICP talks about publicly. Asks clarifying questions to understand your product, ICP, and their pain points,…
---
name: pain-language-engagers
description: >
Find warm leads by searching LinkedIn for pain-language posts — the frustrations, complaints,
and operational struggles your ICP talks about publicly. Asks clarifying questions to understand
your product, ICP, and their pain points, then generates pain-language search keywords,
scrapes LinkedIn for posts and engagers, enriches profiles, and ICP-filters the results.
Use when someone wants to "find leads who are complaining about X" or "find people
discussing problems we solve" or "LinkedIn pain-based prospecting."
tags: [lead-generation]
---
# Pain-Language Engagers
Find warm leads by scraping LinkedIn for pain-language posts and their engagers. People who write about, react to, or comment on posts expressing operational frustrations are signaling they live with a problem your product solves. This skill turns those signals into a qualified lead list.
**Core principle:** Search for **pain-language**, not solution-language. Solution keywords ("AI automation", "workflow optimization") attract builders and VCs. Pain keywords ("can't find drivers", "check calls are killing us") attract operators living with the problem.
Overview
Find warm leads by scraping LinkedIn for pain-language posts and their engagers. People who write about, react to, or comment on posts expressing operational frustrations are signaling they live with a problem your product solves. This skill turns those signals into a qualified lead list.
Manual install (npx, ZIP)
npx skills add gooseworks-ai/goose-skills --skill pain-language-engagers -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/gooseworks-ai/goose-skills/tar.gz/615c685f34f8 \
| tar -xz -C ~/.claude/skills --strip-components=4 goose-skills-615c685f34f8/skills/lead-generation/capabilities/pain-language-engagersNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/3793c7e4b2d5d89fb841/pain-language-engagers.zip" -OutFile "$env:TEMP\pain-language-engagers.zip"; Expand-Archive "$env:TEMP\pain-language-engagers.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md8.4 KBskill.meta.json311 Bconfigs/3 files · 13.7 KBoutput/6 files · 1.6 MBscripts/1 file · 36.3 KB
Read the files here
gooseworks-ai/
Show the full text189 lines
Pain-Language Engagers
Find warm leads by scraping LinkedIn for pain-language posts and their engagers. People who write about, react to, or comment on posts expressing operational frustrations are signaling they live with a problem your product solves. This skill turns those signals into a qualified lead list.
Core principle: Search for pain-language, not solution-language. Solution keywords ("AI automation", "workflow optimization") attract builders and VCs. Pain keywords ("can't find drivers", "check calls are killing us") attract operators living with the problem.
Phase 0: Intake
Before generating keywords or running anything, ask the user these questions. Present them as a numbered list and tell the user to answer what's relevant and skip what's not.
Product & Pain Context
- What does your product/service do in one sentence?
- What specific problem does it solve? Who feels this pain most acutely?
- What does your ICP's day-to-day look like WITHOUT your product? (The frustrations, workarounds, manual processes)
- What phrases would someone use when complaining about this problem on LinkedIn? (e.g., "check calls are killing us", "can't find drivers", "spending hours on manual data entry")
ICP Definition
- What industries/verticals are your target buyers in?
- What job titles or roles are your ideal buyers? (e.g., "VP Operations", "Broker owner", "Head of Logistics")
- What titles should be EXCLUDED? (e.g., "Software Engineer", "AI researcher")
- Any specific competitors whose employees should be filtered out?
- Geographic focus? (e.g., "United States only", "global")
LinkedIn Signal Sources
- Any LinkedIn company pages where your ICP is likely to engage? (Industry publications, communities, competitor pages)
- Any specific LinkedIn posts or content creators your ICP follows?
Phase 1: Generate Pain-Language Keywords
Based on the intake answers, generate ~15-25 pain-language keywords in LinkedIn boolean search syntax. Organize into categories:
- Staffing/Resource Pain — hiring difficulties, turnover, burnout
- Operational Friction — manual processes, missed SLAs, communication breakdowns
- Margin/Growth Pain — cost pressure, scaling challenges
- Process Complaints — specific workflow frustrations
Key principle: Every keyword should be something a frustrated operator would actually type or say, not marketing language or solution framing.
Also generate:
- ICP keyword list — industry terms for ICP classification (from answer #5)
- Tech vendor exclusion list — competitor names + generic tech titles (from answers #7, #8)
- Pain-pattern regexes — for filtering company page posts (derived from the keywords)
- Broad topic patterns — industry terms for known industry page filtering
- Hardcoded company pages — from answer #10, plus any the agent suggests based on the industry
Present the full keyword list to the user for approval/refinement before running. This is the most critical step — bad keywords = bad leads.
Once approved, save the complete config as JSON:
# Save config
skills/pain-language-engagers/configs/{client-name}.json
Config JSON structure:
{
"client_name": "example-client",
"pain_keywords": ["\"can't find X\"", "\"hiring Y\" problems"],
"pain_patterns": ["can.t find X", "hiring Y", "manual.*process"],
"icp_keywords": ["industry-term-1", "industry-term-2"],
"tech_vendor_keywords": ["software engineer", "competitor-name"],
"hardcoded_companies": ["https://www.linkedin.com/company/example/"],
"industry_pages": ["https://www.linkedin.com/company/example/"],
"broad_topic_patterns": ["industry", "sector", "niche-term"],
"country_filter": "United States",
"days_back": 60,
"max_posts_per_keyword": 50,
"max_posts_per_company": 100
}
Phase 2: Run LinkedIn Scraping Pipeline
Execute the pipeline script with the saved config:
python3 skills/pain-language-engagers/scripts/pain_language_engagers.py \
--config skills/pain-language-engagers/configs/{client-name}.json \
[--test] [--companies "url1,url2"]
Flags:
--config(required) — path to the client config JSON--test— limit to 3 keywords, 5 posts per company (for validation)--skip-discovery— skip keyword search, only scrape hardcoded/extra companies--companies "url1,url2"— add extra company URLs to scrape
What the script does:
- Keyword search —
apimaestro/linkedin-posts-search-scraper-no-cookiesfor each pain keyword - Post author extraction — People who wrote pain posts = direct leads (free, no API call)
- Company page discovery — Extract company pages from keyword results
- Company page engager scraping —
harvestapi/linkedin-company-postsfor each company page, pain-filtered - Profile enrichment —
harvestapi/linkedin-profile-scraperfor all profiles (gets headline + location) - ICP classification — Using the client-specific ICP/vendor keyword lists from config
- Dedup + CSV export
Cost estimate:
- Keyword search:
$0.10 per keyword ($2 for 20 keywords) - Company page scraping:
$0.002 per post per company ($0.20 per company) - Profile enrichment: ~$0.003 per profile
- Full run with 20 keywords + 10 companies: ~$5-10
Always run with --test first to validate the config produces relevant results before a full run.
Phase 3: Review & Refine
After the script completes, present results to the user:
- ICP breakdown — counts by tier (Likely / Possible / Unknown / Tech Vendor)
- Top 15 Likely ICP leads — name, role, company, engagement type
- Sample of filtered-out leads — so user can catch false negatives
- Keyword performance — which keywords produced the most leads, which were duds
If the user wants adjustments:
- Update the config JSON (add/remove keywords, adjust ICP lists)
- Re-run the script
- Repeat until the user is satisfied
Common adjustments:
- Too many Tech Vendor results — add more vendor names to
tech_vendor_keywords - Missing obvious ICP leads — add more industry terms to
icp_keywords - Irrelevant posts — refine
pain_patternsto be more specific - Not enough results — add more keywords or reduce
days_backconstraint
Phase 4: Output
CSV exported to the current working directory as {client-name}-{date}.csv with columns:
| Column | Description |
|---|---|
| Name | Full name |
| LinkedIn Profile URL | Profile link |
| Role | Parsed from headline |
| Company Name | Parsed from headline |
| Location | From profile enrichment |
| Source Page | Which company page(s) they engaged on |
| Post URL(s) | Links to the post(s) they engaged with |
| Engagement Type | Post Author, Comment, or Reaction |
| Comment Text | Their comment (if applicable — personalization gold) |
| ICP Tier | Likely ICP, Possible ICP, Unknown, or Tech Vendor |
| Niche Keyword | Which pain keyword matched |
Tools Required
- Apify API token — set as
APIFY_API_TOKENin.env - Apify actors used:
apimaestro/linkedin-posts-search-scraper-no-cookies(keyword search)harvestapi/linkedin-company-posts(company page scraping)harvestapi/linkedin-profile-scraper(profile enrichment)
Example Usage
Trigger phrases:
- "Find people complaining about [problem] on LinkedIn"
- "LinkedIn pain-based prospecting for [product]"
- "Find leads who are discussing [pain point]"
- "Scrape LinkedIn for [industry] pain posts"
- "Run the pain-language engagers pipeline for [client]"
With existing config:
python3 skills/pain-language-engagers/scripts/pain_language_engagers.py \
--config skills/pain-language-engagers/configs/happy-robot.json
Test mode:
python3 skills/pain-language-engagers/scripts/pain_language_engagers.py \
--config skills/pain-language-engagers/configs/happy-robot.json --test
| 1 | |
| 2 | name pain-language-engagers |
| 3 | description > |
| 4 | Find warm leads by searching LinkedIn for pain-language posts — the frustrations, complaints, |
| 5 | and operational struggles your ICP talks about publicly. Asks clarifying questions to understand |
| 6 | your product, ICP, and their pain points, then generates pain-language search keywords, |
| 7 | scrapes LinkedIn for posts and engagers, enriches profiles, and ICP-filters the results. |
| 8 | Use when someone wants to "find leads who are complaining about X" or "find people |
| 9 | discussing problems we solve" or "LinkedIn pain-based prospecting." |
| 10 | tags [lead-generation] |
| 11 | |
| 12 | |
| 13 | # Pain-Language Engagers |
| 14 | |
| 15 | Find warm leads by scraping LinkedIn for pain-language posts and their engagers. People who write about, react to, or comment on posts expressing operational frustrations are signaling they live with a problem your product solves. This skill turns those signals into a qualified lead list. |
| 16 | |
| 17 | **Core principle:** Search for **pain-language**, not solution-language. Solution keywords ("AI automation", "workflow optimization") attract builders and VCs. Pain keywords ("can't find drivers", "check calls are killing us") attract operators living with the problem. |
| 18 | |
| 19 | ## Phase 0: Intake |
| 20 | |
| 21 | Before generating keywords or running anything, ask the user these questions. Present them as a numbered list and tell the user to answer what's relevant and skip what's not. |
| 22 | |
| 23 | ### Product & Pain Context |
| 24 | |
| 25 | What does your product/service do in one sentence? |
| 26 | What specific problem does it solve? Who feels this pain most acutely? |
| 27 | What does your ICP's day-to-day look like WITHOUT your product? (The frustrations, workarounds, manual processes) |
| 28 | What phrases would someone use when **complaining** about this problem on LinkedIn? (e.g., "check calls are killing us", "can't find drivers", "spending hours on manual data entry") |
| 29 | |
| 30 | ### ICP Definition |
| 31 | |
| 32 | What industries/verticals are your target buyers in? |
| 33 | What job titles or roles are your ideal buyers? (e.g., "VP Operations", "Broker owner", "Head of Logistics") |
| 34 | What titles should be EXCLUDED? (e.g., "Software Engineer", "AI researcher") |
| 35 | Any specific competitors whose employees should be filtered out? |
| 36 | Geographic focus? (e.g., "United States only", "global") |
| 37 | |
| 38 | ### LinkedIn Signal Sources |
| 39 | |
| 40 | Any LinkedIn company pages where your ICP is likely to engage? (Industry publications, communities, competitor pages) |
| 41 | Any specific LinkedIn posts or content creators your ICP follows? |
| 42 | |
| 43 | ## Phase 1: Generate Pain-Language Keywords |
| 44 | |
| 45 | Based on the intake answers, generate ~15-25 pain-language keywords in LinkedIn boolean search syntax. Organize into categories: |
| 46 | |
| 47 | **Staffing/Resource Pain** — hiring difficulties, turnover, burnout |
| 48 | **Operational Friction** — manual processes, missed SLAs, communication breakdowns |
| 49 | **Margin/Growth Pain** — cost pressure, scaling challenges |
| 50 | **Process Complaints** — specific workflow frustrations |
| 51 | |
| 52 | **Key principle:** Every keyword should be something a frustrated operator would actually type or say, not marketing language or solution framing. |
| 53 | |
| 54 | Also generate: |
| 55 | **ICP keyword list** — industry terms for ICP classification (from answer #5) |
| 56 | **Tech vendor exclusion list** — competitor names + generic tech titles (from answers #7, #8) |
| 57 | **Pain-pattern regexes** — for filtering company page posts (derived from the keywords) |
| 58 | **Broad topic patterns** — industry terms for known industry page filtering |
| 59 | **Hardcoded company pages** — from answer #10, plus any the agent suggests based on the industry |
| 60 | |
| 61 | **Present the full keyword list to the user for approval/refinement before running.** This is the most critical step — bad keywords = bad leads. |
| 62 | |
| 63 | Once approved, save the complete config as JSON: |
| 64 | |
| 65 | |
| 66 | # Save config |
| 67 | skills/pain-language-engagers/configs/{client-name}.json |
| 68 | |
| 69 | |
| 70 | Config JSON structure: |
| 71 | |
| 72 | |
| 73 | { |
| 74 | "client_name": "example-client", |
| 75 | "pain_keywords": ["\"can't find X\"", "\"hiring Y\" problems"], |
| 76 | "pain_patterns": ["can.t find X", "hiring Y", "manual.*process"], |
| 77 | "icp_keywords": ["industry-term-1", "industry-term-2"], |
| 78 | "tech_vendor_keywords": ["software engineer", "competitor-name"], |
| 79 | "hardcoded_companies": ["https://www.linkedin.com/company/example/"], |
| 80 | "industry_pages": ["https://www.linkedin.com/company/example/"], |
| 81 | "broad_topic_patterns": ["industry", "sector", "niche-term"], |
| 82 | "country_filter": "United States", |
| 83 | "days_back": 60, |
| 84 | "max_posts_per_keyword": 50, |
| 85 | "max_posts_per_company": 100 |
| 86 | } |
| 87 | |
| 88 | |
| 89 | ## Phase 2: Run LinkedIn Scraping Pipeline |
| 90 | |
| 91 | Execute the pipeline script with the saved config: |
| 92 | |
| 93 | |
| 94 | python3 skills/pain-language-engagers/scripts/pain_language_engagers.py \ |
| 95 | --config skills/pain-language-engagers/configs/{client-name}.json \ |
| 96 | [--test] [--companies "url1,url2"] |
| 97 | |
| 98 | |
| 99 | **Flags:** |
| 100 | `--config` (required) — path to the client config JSON |
| 101 | `--test` — limit to 3 keywords, 5 posts per company (for validation) |
| 102 | `--skip-discovery` — skip keyword search, only scrape hardcoded/extra companies |
| 103 | `--companies "url1,url2"` — add extra company URLs to scrape |
| 104 | |
| 105 | **What the script does:** |
| 106 | |
| 107 | **Keyword search** — `apimaestro/linkedin-posts-search-scraper-no-cookies` for each pain keyword |
| 108 | **Post author extraction** — People who wrote pain posts = direct leads (free, no API call) |
| 109 | **Company page discovery** — Extract company pages from keyword results |
| 110 | **Company page engager scraping** — `harvestapi/linkedin-company-posts` for each company page, pain-filtered |
| 111 | **Profile enrichment** — `harvestapi/linkedin-profile-scraper` for all profiles (gets headline + location) |
| 112 | **ICP classification** — Using the client-specific ICP/vendor keyword lists from config |
| 113 | **Dedup + CSV export** |
| 114 | |
| 115 | **Cost estimate:** |
| 116 | Keyword search: ~$0.10 per keyword (~$2 for 20 keywords) |
| 117 | Company page scraping: ~$0.002 per post per company (~$0.20 per company) |
| 118 | Profile enrichment: ~$0.003 per profile |
| 119 | Full run with 20 keywords + 10 companies: ~$5-10 |
| 120 | |
| 121 | **Always run with `--test` first** to validate the config produces relevant results before a full run. |
| 122 | |
| 123 | ## Phase 3: Review & Refine |
| 124 | |
| 125 | After the script completes, present results to the user: |
| 126 | |
| 127 | **ICP breakdown** — counts by tier (Likely / Possible / Unknown / Tech Vendor) |
| 128 | **Top 15 Likely ICP leads** — name, role, company, engagement type |
| 129 | **Sample of filtered-out leads** — so user can catch false negatives |
| 130 | **Keyword performance** — which keywords produced the most leads, which were duds |
| 131 | |
| 132 | If the user wants adjustments: |
| 133 | Update the config JSON (add/remove keywords, adjust ICP lists) |
| 134 | Re-run the script |
| 135 | Repeat until the user is satisfied |
| 136 | |
| 137 | Common adjustments: |
| 138 | **Too many Tech Vendor results** — add more vendor names to `tech_vendor_keywords` |
| 139 | **Missing obvious ICP leads** — add more industry terms to `icp_keywords` |
| 140 | **Irrelevant posts** — refine `pain_patterns` to be more specific |
| 141 | **Not enough results** — add more keywords or reduce `days_back` constraint |
| 142 | |
| 143 | ## Phase 4: Output |
| 144 | |
| 145 | CSV exported to the current working directory as `{client-name}-{date}.csv` with columns: |
| 146 | |
| 147 | | Column | Description | |
| 148 | |--------|-------------| |
| 149 | | Name | Full name | |
| 150 | | LinkedIn Profile URL | Profile link | |
| 151 | | Role | Parsed from headline | |
| 152 | | Company Name | Parsed from headline | |
| 153 | | Location | From profile enrichment | |
| 154 | | Source Page | Which company page(s) they engaged on | |
| 155 | | Post URL(s) | Links to the post(s) they engaged with | |
| 156 | | Engagement Type | Post Author, Comment, or Reaction | |
| 157 | | Comment Text | Their comment (if applicable — personalization gold) | |
| 158 | | ICP Tier | Likely ICP, Possible ICP, Unknown, or Tech Vendor | |
| 159 | | Niche Keyword | Which pain keyword matched | |
| 160 | |
| 161 | ## Tools Required |
| 162 | |
| 163 | **Apify API token** — set as `APIFY_API_TOKEN` in `.env` |
| 164 | **Apify actors used:** |
| 165 | `apimaestro/linkedin-posts-search-scraper-no-cookies` (keyword search) |
| 166 | `harvestapi/linkedin-company-posts` (company page scraping) |
| 167 | `harvestapi/linkedin-profile-scraper` (profile enrichment) |
| 168 | |
| 169 | ## Example Usage |
| 170 | |
| 171 | **Trigger phrases:** |
| 172 | "Find people complaining about [problem] on LinkedIn" |
| 173 | "LinkedIn pain-based prospecting for [product]" |
| 174 | "Find leads who are discussing [pain point]" |
| 175 | "Scrape LinkedIn for [industry] pain posts" |
| 176 | "Run the pain-language engagers pipeline for [client]" |
| 177 | |
| 178 | **With existing config:** |
| 179 | |
| 180 | python3 skills/pain-language-engagers/scripts/pain_language_engagers.py \ |
| 181 | --config skills/pain-language-engagers/configs/happy-robot.json |
| 182 | |
| 183 | |
| 184 | **Test mode:** |
| 185 | |
| 186 | python3 skills/pain-language-engagers/scripts/pain_language_engagers.py \ |
| 187 | --config skills/pain-language-engagers/configs/happy-robot.json --test |
| 188 | |
| 189 |
Details
- Updated
- Sep 21, 2026
- License
- MIT
- Stars on the repo
- ★ 1,220
- Checked
- Source
- gooseworks-ai/goose-skills ↗
- Creator
- gooseworks-ai · 206 listings
Made with pain-language-engagers

Similar skills
See all →
SkillAct as a comprehensive AI sales intelligenceAI Sales Team — Main Orchestrator
SkillAutonomous cold email campaign launcherAuto research public
SkillRun a full Account-Based Marketing campaign end-to-endABM Campaign — DIY Playbook
SkillContact data skill for Claude Code and Codex: build a rankedAccount contact shortlist
SkillLead scoring and buying signals skill for Claude CodeAccount fit rank
SkillRun end-to-end B2B cold-email outreach through the Hyper MCPMore from gooseworks-ai
SkillMine the highest-converting ad angles from customer reviewsAd angle miner
SkillAnalyze ad campaign performance data to identify what'sAd campaign analyzer
SkillFor paid lead-gen and participant-recruitment adsAd lead quality analyzer
SkillAnalyze the message match between your ads and landing pagesAd to landing page auditor
SkillCheck and improve your brand's visibility across AI searchAeo
SkillSearch Amazon products - find items, compare pricesAmazon Product Search