Agent skill
engagement-miner
Extract warm prospects from competitor and industry post engagers across LinkedIn, Twitter, and blogs
Filed under LinkedIn and social.
From ekatasingh1107/b2b-gtm-skills · 99 skills · 2 · pushed 2026-04-11
What it does when it runs
Extract warm prospects from competitor and industry post engagers across LinkedIn, Twitter, and blogs
Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- linkedin.com
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- network
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/ekatasingh1107/b2b-gtm-skills.git /tmp/b2b-gtm-skills git -C /tmp/b2b-gtm-skills sparse-checkout set "skills/capabilities/engagement-miner" mkdir -p ~/.claude/skills/engagement-miner cp -R "/tmp/b2b-gtm-skills/skills/capabilities/engagement-miner/." ~/.claude/skills/engagement-miner/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from ekatasingh1107/b2b-gtm-skills/blob/eae8dd0bb98da1c8e84abd297066a87015dd860f/skills/capabilities/engagement-miner/SKILL.md, which is licensed MIT (repository). 1,077 words, 23 headings.
Engagement Miner
Finds engaged audiences on competitor posts, industry discussions, and thought-leader content. Extracts commenters and engagers from LinkedIn posts, Twitter threads, and blog comments. These are warm prospects who already care about the topic and are pre-qualified by their own engagement behavior.
Prerequisites
agency.config.jsonat repo root withservices,icp, andscoringsections- WebSearch tool available
- Optional:
person-researcherskill for enriching extracted prospects - Optional:
crm-writerskill for logging prospects to CRM
Phase 0: Intake
- Read
agency.config.jsonfrom the project root. - Extract:
services[].keywords-- topic relevance for filteringicp.segments[].titles,icp.segments[].seniority-- prospect qualification criteriaicp.segments[].industries-- industry filtersicp.segments[].company_size-- company size filtersicp.primary_keywords,icp.secondary_keywords-- topic matchingicp.negative_keywords-- filter out competitors and service providers
- Accept parameters:
source_posts-- list of specific post URLs to mine (default: none, discover automatically)competitors-- competitor names/profiles whose posts to mine (default: none, user must supply)topics-- topic keywords to find relevant posts (default: use config keywords)platforms-- platforms to mine:linkedin | twitter | blogs(default: all)max_prospects-- max prospects to return (default: 50)min_engagement-- minimum engagement threshold for source posts (default: 10 comments)
Phase 1: Source Post Discovery
If source_posts not provided, discover high-engagement posts to mine.
LinkedIn post discovery:
site:linkedin.com/posts "{competitor_name}" "{service_keyword}"site:linkedin.com/posts "{service_keyword}" "comments" OR "agree" OR "great point"site:linkedin.com/posts "{icp_industry}" "{intent_keyword}"- Prioritize posts with visible comment counts >
min_engagement.
Twitter thread discovery:
site:twitter.com OR site:x.com "{competitor_name}" "{service_keyword}" "replies"site:twitter.com OR site:x.com "{service_keyword}" "thread" OR "unpopular opinion" "{icp_industry}"- Look for threads with high reply counts.
Blog comment discovery:
"{competitor_name}" blog "{service_keyword}" "comments""{industry_keyword}" blog "leave a comment" OR "responses" "{service_keyword}"- Target popular industry blogs with active comment sections.
For each source post, capture:
{
"post_url": "URL",
"platform": "LinkedIn | Twitter | Blog",
"author": "Post author name",
"author_company": "Author's company if visible",
"topic": "Main topic of the post",
"engagement_count": "Number of comments/replies visible",
"posted_date": "Date if available",
"relevance": "HIGH | MEDIUM"
}
Target 10-20 high-engagement source posts across platforms.
Phase 2: Engager Extraction
For each source post, extract people who engaged (commented, replied, shared):
LinkedIn engager extraction:
- Search:
site:linkedin.com "{post_title}" "{commenter_snippet}"to find comment previews - Search:
site:linkedin.com/in "{keyword_from_post}" "{icp_title}"to find people who likely engaged - Extract from search snippets: commenter names, their titles, companies
- Note: LinkedIn comments are not always fully indexed. Accept partial results.
Twitter engager extraction:
- Search:
site:twitter.com OR site:x.com "replying to @{author_handle}" "{topic_keyword}" - Search for quoted retweets:
site:twitter.com "{post_url_fragment}" - Extract: replier handles, names, bios if visible in snippets
Blog comment extraction:
- Use WebFetch on the blog URL (if available) to read comment sections
- Extract: commenter names, linked websites, comment content
- Commenter websites are valuable for company identification
For each extracted engager:
{
"name": "Full name",
"handle": "Social handle or username",
"platform": "LinkedIn | Twitter | Blog",
"title": "Job title if visible",
"company": "Company name if visible",
"profile_url": "Profile URL if available",
"comment_snippet": "What they said (first 200 chars)",
"source_post_url": "The post they engaged with",
"source_post_topic": "Topic of the source post"
}
Phase 3: Prospect Qualification
Filter and score extracted engagers against ICP:
Title matching:
- Compare
titleagainsticp.segments[].titlesandicp.segments[].seniority. - Exact title match: +30 points
- Seniority level match: +20 points
- No title available: +5 points (benefit of the doubt)
Company relevance:
- If
companymatches ICP industries: +20 points - If company size is estimable and within ICP range: +10 points
- If company is a known competitor (from
competitorsparam): -100 points (disqualify)
Engagement quality:
- Comment shows pain point or need: +25 points
- Comment asks a question: +20 points
- Comment shares experience: +15 points
- Generic agreement ("Great post!"): +5 points
- Self-promotional comment: -50 points (disqualify)
Negative keyword filter:
- Check name, title, company, and comment against
icp.negative_keywords. - Disqualify any match.
Scoring thresholds:
- HOT PROSPECT (60+): Strong title match + relevant engagement
- WARM PROSPECT (35-59): Partial match, worth researching
- COOL (<35): Weak match, skip unless volume is low
Phase 4: Deduplication
- Deduplicate by name + company combination (same person across multiple posts).
- For duplicates, keep the entry with the richest data (most fields populated).
- Merge comment snippets from multiple engagements into a single prospect record.
- Deduplicate by profile URL if available (exact match).
Phase 5: Output
Return structured prospect list:
{
"mining_summary": {
"source_posts_analyzed": 15,
"total_engagers_extracted": 120,
"after_qualification": 50,
"after_dedup": 42,
"breakdown": {
"hot": 8,
"warm": 22,
"cool": 12
}
},
"prospects": [
{
"name": "Jane Doe",
"title": "Head of Ecommerce",
"company": "BrandCo",
"platform": "LinkedIn",
"profile_url": "https://linkedin.com/in/janedoe",
"score": 75,
"tier": "HOT",
"engagement_context": "Commented on CRO post asking about checkout optimization",
"comment_snippets": ["We've been struggling with cart abandonment..."],
"source_posts": ["https://linkedin.com/posts/..."],
"recommended_approach": "Reference their checkout concern, offer CRO audit insight",
"next_step": "RESEARCH | CONNECT | EMAIL"
}
]
}
Present formatted summary:
ENGAGEMENT MINING REPORT
Source posts analyzed: {N} across {platforms}
Total engagers found: {N}
Qualified prospects: {N} ({hot} HOT, {warm} WARM)
HOT PROSPECTS ({count}):
1. {name} -- {title} at {company} -- Score: {N}
Context: "{comment_snippet}"
Approach: {recommended_approach}
Next: {next_step}
WARM PROSPECTS ({count}):
1. {name} -- {title} at {company} -- Score: {N}
Context: "{comment_snippet}"
Next: {next_step}
DISQUALIFIED: {count} (competitors: {a}, self-promoters: {b}, irrelevant: {c})
TOP ENGAGEMENT TOPICS:
1. {topic} -- {count} qualified engagers found
Phase 6: CRM Logging
If crm-writer is available and user approves:
- Log HOT and WARM prospects to CRM pipeline tab
- Columns: Date, Name, Title, Company, Platform, Source Post, Score, Tier, Context, Status
- Set initial status: "MINED"
Example Usage
Trigger phrases:
- "Mine engagement on competitor posts"
- "Find prospects from LinkedIn comments"
- "Extract engagers from this post: [URL]"
- "Who's engaging with Shopify CRO content on LinkedIn?"
- "Mine warm leads from competitor content"
- "Find people commenting on ecommerce topics"
User: Mine engagement from WebSavvy and Starter Labs LinkedIn posts about Shopify
Assistant: [reads config, discovers high-engagement posts by those competitors, extracts commenters, qualifies against ICP, scores and deduplicates, presents ranked prospect list with approach recommendations]
User: Extract prospects from these 3 LinkedIn posts: [URL1, URL2, URL3]
Assistant: [same flow but uses provided URLs directly as source posts, skips discovery phase]
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- playbook-linkedin-engagement by growthenginenowoslawski · 668
- re-engagement-sequencing by louisblythe · 143
- abm-engagement-scoring by NEON-Rutger · 46
- re-engagement by Frontal-so · 5
- content-engagement by Frontal-so · 5
- ad-angle-miner by edupegoretti · 0
Need help setting it up?
This page tells you what engagement-miner does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.