mcpbeat Sign in

Pain Language Engagers Agent Skill

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

425k tokens
context cost
the whole folder, loaded on every use
12
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
1086
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/gooseworks-ai/goose-skills --skill pain-language-engagers

What comes with it

1 691 833 bytes besides the instruction
configs/artisan-ai.json
configs/happy-robot.json
configs/outset-ai.json
output/artisan-ai-20260225_1237.csv
output/artisan-ai-20260225_1344.csv
output/outset-ai-20260225_1232.csv
output/outset-ai-20260225_1237.csv
output/outset-ai-20260225_1250-cleaned.csv
output/outset-ai-20260225_1250.csv
scripts/pain_language_engagers.py
skill.meta.json

The instruction itself

11 sections, as written by the author

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

10. Any LinkedIn company pages where your ICP is likely to engage? (Industry publications, communities, competitor pages)

11. 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 searchapimaestro/linkedin-posts-search-scraper-no-cookies for 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 scrapingharvestapi/linkedin-company-posts for each company page, pain-filtered
  • Profile enrichmentharvestapi/linkedin-profile-scraper for 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_patterns to be more specific
  • Not enough results — add more keywords or reduce days_back constraint

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_TOKEN in .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

Other skills for the same job

different authors, same section of the catalogue
Apify Ultimate Scraper
by apify
vendor ×1

Universal AI-powered web scraper for any platform. Scrape data from Instagram, Facebook, TikTok, YouTube, LinkedIn, X/Twitter, Google Maps, Google Search, Google Trends, Reddit, Airbnb, Yelp, and 15+ more platforms. Use for lead generation, brand monitoring, competitor analysis, influencer discovery, trend research, content analytics, audience analysis, review analysis, SEO intelligence, recruitment, or any data extraction task.

20k tokens
Ebay Sold Listings Search
by browser-act

eBay sold-listings scraper across 8 marketplaces (ebay.com/.co.uk/.de/.fr/.it/.es/.ca/.com.au). Takes keyword plus filters (category, price range, item condition, item location, sort order, completed toggle) and returns paginated real-sale records with itemId, url, title, condition, conditionId, endedAt, soldPrice, soldCurrency, listingType (best_offer_accepted / buy_it_now / auction), isBestOfferAccepted, buyingFormat, bidCount, shipping, totalPrice, thumbnails, seller info, sellerType. Use when user mentions ebay sold, ebay sold listings, ebay sold prices, ebay completed listings, ebay comps, ebay resale prices, ebay auction sold results, ebay best offer accepted, scrape ebay sold, ebay market research, ebay pricing intelligence, ebay flipping research, real sold prices ebay, get sold prices from ebay. Also applies to price benchmarking, sold-price analytics, resale valuation, cross-marketplace price arbitrage, appraisal for collectibles, brand demand tracking on ebay.

10k tokens scripts
Etsy Keyword Search
by browser-act

Etsy keyword search scraper: given a search keyword and optional page number, returns paginated product listings with listingId, shopId, title, url, image, salePrice, originalPrice, currency, rating, reviewCount, shopName, isAd, freeShipping, badge from etsy.com search results. Use when user mentions Etsy, etsy.com, Etsy search, search Etsy by keyword, scrape Etsy listings, extract Etsy products, Etsy product search, Etsy marketplace search, find products on Etsy, Etsy handmade search, Etsy vintage search, Etsy craft search, bulk Etsy product export, Etsy price monitoring, Etsy competitor research, Etsy top listings, Etsy bestseller extraction, Etsy sales data, Etsy shop discovery via keyword. Also applies to trend research on handmade or craft niches, competitor keyword ranking on Etsy, sourcing Etsy suppliers by product type, and any paginated bulk product collection driven by a search keyword.

4k tokens scripts
Etsy Product Detail
by browser-act

Etsy product detail scraper: given an Etsy listing URL, returns full product detail including listingId, title, priceCurrent, priceOriginal, currency, images (all), description, shopName, shopUrl, rating, reviewCount, favorites, inCartCount, variations (with per-option price ranges), highlights, listedDate, relatedTags. Use when user mentions Etsy product, Etsy listing detail, Etsy item info, Etsy product page, scrape Etsy listing, extract Etsy product data, Etsy price and variations, Etsy product images, Etsy product description, Etsy shop from listing, Etsy favorites count, Etsy sale count, Etsy variations extraction, Etsy listing metadata, single Etsy product scrape, bulk enrich Etsy listing URLs, Etsy product details export. Also applies to competitor product monitoring, price and variation tracking on a specific listing, favorites/wishlist popularity tracking, description mining for SEO analysis, and any per-listing enrichment task.

4k tokens scripts
Goofish Search List
by browser-act

Scrapes second-hand item search results from Goofish (闲鱼/xianyu, goofish.com) — China's largest second-hand marketplace. Input: keyword, optional sort/filter params. Output: list of items with id, title, price, image, location, want-count per page (30 items/page). Use when user mentions goofish, 闲鱼, xianyu, 二手交易, second-hand marketplace China, 二手商品搜索, search used goods, scrape goofish listings, xianyu search results, collect second-hand prices, monitor used item prices, 闲鱼关键词搜索, 闲鱼数据采集, 批量抓取闲鱼, goofish scraper, goofish data, xianyu data extraction, 二手商品价格监控, used iPhone prices, 二手手机价格. Also applies to: price research on Chinese second-hand market, competitor product monitoring via used goods listings, inventory analysis.

4k tokens scripts
Google Maps API Skill
by browser-act

This skill helps users automatically scrape business data from Google Maps using the BrowserAct Google Maps API. Agent should proactively trigger this skill for needs like finding restaurants in a specific city, extracting contact info of dental clinics, researching local competitors, collecting addresses of coffee shops, generating lead lists for specific industries, monitoring business ratings and reviews, getting opening hours of local services, finding specialized stores (e.g., Turkish-style restaurants), analyzing business categories in a region, extracting website links from local businesses, gathering phone numbers for sales outreach, mapping out service providers in a specific country.

2k tokens scripts
Google Search Serp
by browser-act

Extracts Google Search results page (SERP) data including organic results, paid ads, related searches, People Also Ask questions, AI Overview text, and total result count from google.com. Use when user mentions Google search results, SERP scraping, google search data, search engine results page, organic rankings, keyword SERP, Google SERP extraction, scrape Google search, Google search API alternative, SEO ranking data, paid search ads, PPC ads on Google, Google search monitoring, keyword research, search results export, check Google rankings, what shows up on Google, search engine scraper, google results checker.

3k tokens scripts
Indeed Job Search
by browser-act

Scrape job listings from Indeed.com by keyword, location, and country. Returns job title, company, salary, rating, description, benefits, and apply links. Use when user mentions Indeed, Indeed scraper, Indeed jobs, scrape Indeed, job search Indeed, Indeed job listings, extract Indeed data, Indeed job data, get jobs from Indeed, Indeed employment data, job market research Indeed, Indeed salary data, bulk job extraction Indeed, Indeed job scraper, monitor Indeed listings, Indeed hiring data, job postings Indeed, Indeed career search. Also applies to: job market analysis, salary benchmarking from Indeed, competitor hiring monitoring, recruitment data collection, building job databases from Indeed search results.

4k tokens scripts

How to use it

Copy the folder

Take gooseworks-ai/pain-language-engagers from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.