Systems Lab

Agent skill

engagement-miner

Extract warm prospects from competitor and industry post engagers across LinkedIn, Twitter, and blogs

dormantReaches the webActs undeclared1,077 words

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-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
network

Ask about engagement-miner

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
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.

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.json at repo root with services, icp, and scoring sections
  • WebSearch tool available
  • Optional: person-researcher skill for enriching extracted prospects
  • Optional: crm-writer skill for logging prospects to CRM

Phase 0: Intake

  1. Read agency.config.json from the project root.
  2. Extract:
    • services[].keywords -- topic relevance for filtering
    • icp.segments[].titles, icp.segments[].seniority -- prospect qualification criteria
    • icp.segments[].industries -- industry filters
    • icp.segments[].company_size -- company size filters
    • icp.primary_keywords, icp.secondary_keywords -- topic matching
    • icp.negative_keywords -- filter out competitors and service providers
  3. 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 title against icp.segments[].titles and icp.segments[].seniority.
  • Exact title match: +30 points
  • Seniority level match: +20 points
  • No title available: +5 points (benefit of the doubt)

Company relevance:

  • If company matches ICP industries: +20 points
  • If company size is estimable and within ICP range: +10 points
  • If company is a known competitor (from competitors param): -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

  1. Deduplicate by name + company combination (same person across multiple posts).
  2. For duplicates, keep the entry with the richest data (most fields populated).
  3. Merge comment snippets from multiple engagements into a single prospect record.
  4. 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.

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.