New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Find leads by scraping engagers from a competitor's top

Competitor post engagers

by gooseworks-ai · MIT license · ★ 1,220 on GitHub · updated Sep 21

Competitor post engagers cover

Find leads by scraping engagers from a competitor's top LinkedIn posts. Given one or more company page URLs, scrapes recent posts, ranks by engagement, selects the top N, extracts all reactors and commenters, ICP-classifies, and exports…

---
name: competitor-post-engagers
description: >
  Find leads by scraping engagers from a competitor's top LinkedIn posts.
  Given one or more company page URLs, scrapes recent posts, ranks by
  engagement, selects the top N, extracts all reactors and commenters,
  ICP-classifies, and exports CSV. Use when someone wants to "find leads
  engaging with competitor content" or "scrape people who interact with
  [company]'s LinkedIn posts".
tags: [lead-generation]
---

# Competitor Post Engagers

Find ICP-fit leads by scraping engagers from a competitor's top-performing LinkedIn posts. Given one or more company page URLs, this skill finds their highest-engagement recent posts, extracts everyone who reacted or commented, and classifies by ICP fit.

**Core principle:** Scrape all posts in one call per company, then locally rank and select the top N. This minimizes Apify costs while maximizing lead quality.

Overview

Find ICP-fit leads by scraping engagers from a competitor's top-performing LinkedIn posts. Given one or more company page URLs, this skill finds their highest-engagement recent posts, extracts everyone who reacted or commented, and classifies by ICP fit.

Manual install (npx, ZIP)
Claude Codenpx skills add gooseworks-ai/goose-skills --skill competitor-post-engagers -g -a claude-code
Claude Code (manual)mkdir -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/competitor-post-engagers
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/6493fb3815a2dc503f2b/competitor-post-engagers.zip" -OutFile "$env:TEMP\competitor-post-engagers.zip"; Expand-Archive "$env:TEMP\competitor-post-engagers.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md7.2 KB
  • skill.meta.json315 B
  • scripts/1 file · 34.4 KB
Read the files here
gooseworks-ai/615c6853 files
SKILL.md
Show the full text169 lines

Competitor Post Engagers

Find ICP-fit leads by scraping engagers from a competitor's top-performing LinkedIn posts. Given one or more company page URLs, this skill finds their highest-engagement recent posts, extracts everyone who reacted or commented, and classifies by ICP fit.

Core principle: Scrape all posts in one call per company, then locally rank and select the top N. This minimizes Apify costs while maximizing lead quality.

Phase 0: Intake

Ask the user these questions:

Target Companies
  1. LinkedIn company page URL(s) to scrape (e.g., https://www.linkedin.com/company/11x-ai/)
  2. Time window — how many days back to look (default: 30)
  3. Top N posts per company to extract engagers from (default: 1)
ICP Criteria
  1. ICP keywords — job title/role terms that indicate a good lead (e.g., "sales", "SDR", "revenue")
  2. Exclude keywords — roles to filter out (e.g., "software engineer", "designer")
  3. Geographic focus (optional, e.g., "United States")

Save config in the current working directory (or user-specified path):

competitor-post-engagers-config.json

Config JSON structure:

{
  "name": "<run-name>",
  "company_urls": ["https://www.linkedin.com/company/<competitor>/"],
  "days_back": 30,
  "max_posts": 50,
  "max_reactions": 500,
  "max_comments": 200,
  "top_n_posts": 1,
  "icp_keywords": ["sales", "revenue", "growth", "SDR", "BDR", "outbound"],
  "exclude_keywords": ["software engineer", "developer", "designer"],
  "enrich_companies": true,
  "competitor_company_names": ["<competitor-name>"],
  "industry_keywords": ["freight", "logistics", "trucking", "transportation", "3pl", "supply chain", "carrier", "brokerage", "shipping", "warehousing"],
  "output_dir": "output"
}
  • enrich_companies — Enable Apollo company enrichment (default: true). Set to false or use --skip-company-enrich to skip.
  • competitor_company_names — Company names to exclude from enrichment (the competitor itself).
  • industry_keywords — Industry terms that indicate ICP fit. Matched against Apollo's industry field.

The output_dir is relative to the script directory by default. Override it with an absolute path to write output to a specific location.

Phase 1: Run the Pipeline

python3 skills/competitor-post-engagers/scripts/competitor_post_engagers.py \
  --config competitor-post-engagers-config.json \
  [--test] [--yes] [--skip-company-enrich] [--top-n 3] [--max-runs 30]

Flags:

  • --config (required) — path to config JSON
  • --test — small limits (20 posts, 50 profiles, 1 top post)
  • --yes — skip cost confirmation prompts
  • --skip-company-enrich — skip Apollo company enrichment step (saves credits)
  • --top-n — override top_n_posts from config
  • --max-runs — override Apify run limit
Pipeline Steps

Step 1: Scrape company posts + engagers — For each company URL, one Apify call using harvestapi/linkedin-company-posts with scrapeReactions: true, scrapeComments: true. Returns posts, reactions, and comments in a single dataset.

Step 2: Rank & select top posts — Filter posts by time window (days_back), rank by total engagement (reactions + comments), select top N per company. Then extract engagers (reactors + commenters) only from those selected posts. Deduplication by name. Score engagers by position:

  • +3 Commenter (higher intent)
  • +2 Position matches ICP keywords
  • -5 Position matches exclude keywords

Step 3: Company enrichment (Apollo) — Extract unique company names from engagers, call apollo.enrich_organization(name=...) for each. Returns industry, employee count, description, and location. ~1 Apollo credit per unique company. Merge data back to all engagers from that company. Skip with --skip-company-enrich or "enrich_companies": false.

Step 4: ICP classify & export — Classify as Likely ICP / Possible ICP / Unknown / Tech Vendor. Uses both headline keyword matching AND company industry data (from Step 3) — if the engager's company industry matches industry_keywords, they're classified as "Likely ICP" regardless of role. Export CSV.

Cost Estimates
Parameter Test Standard
Posts scraped per company 20 50
Max reactions 50 500
Max comments 50 200
Est. Apify cost (1 company) ~$0.10 ~$0.50-1
Est. Apollo credits (company enrich) ~10-20 ~30-80 unique companies
Est. Apollo cost ~$0.05-0.10 ~$0.15-0.40

Phase 2: Review & Refine

Present results:

  • Post selection — which posts were chosen and why (engagement counts, preview)
  • Per-company breakdown — how many leads from each competitor
  • ICP breakdown — counts by tier
  • Top 15 leads — name, role, company, engagement type

Common adjustments:

  • Too many irrelevant leads — tighten icp_keywords or add exclude_keywords
  • Missing ICP leads — broaden icp_keywords
  • Wrong posts selected — increase top_n_posts or adjust days_back
  • Too expensive — use --test mode or lower max_reactions/max_comments

Phase 3: Output

CSV exported to {output_dir}/{name}-engagers-{date}.csv:

Column Description
Name Full name
LinkedIn URL Profile link
Role Parsed from headline
Company Parsed from headline
Company Industry From Apollo enrichment
Company Size Estimated employee count from Apollo
Company Description Short company description from Apollo
Company Location City, State, Country from Apollo
Source Page Which competitor's page
Post URL Link to the specific post
Post Preview First 120 chars of post content
Engagement Type Comment or Reaction
Comment Text Their comment (personalization gold)
ICP Tier Likely ICP / Possible ICP / Unknown / Tech Vendor
Pre-Filter Score Priority score from pre-filter

Tools Required

  • Apify API token — set as APIFY_API_TOKEN in .env
  • Apollo API key — set as APOLLO_API_KEY in .env (for company enrichment)
  • Apify actors used:
    • harvestapi/linkedin-company-posts (post + engager scraping)
  • Apollo endpoints used:
    • organizations/enrich (company industry/size lookup, 1 credit per company)

Example Usage

Trigger phrases:

  • "Find leads engaging with [competitor]'s LinkedIn posts"
  • "Scrape engagers from [company]'s top posts"
  • "Who is interacting with [competitor]'s content?"
  • "Run competitor-post-engagers for [company]"

Test mode:

python3 skills/competitor-post-engagers/scripts/competitor_post_engagers.py \
  --config competitor-post-engagers-config.json --test --yes

Full run:

python3 skills/competitor-post-engagers/scripts/competitor_post_engagers.py \
  --config competitor-post-engagers-config.json --yes
1---
2name: competitor-post-engagers
3description: >
4 Find leads by scraping engagers from a competitor's top LinkedIn posts.
5 Given one or more company page URLs, scrapes recent posts, ranks by
6 engagement, selects the top N, extracts all reactors and commenters,
7 ICP-classifies, and exports CSV. Use when someone wants to "find leads
8 engaging with competitor content" or "scrape people who interact with
9 [company]'s LinkedIn posts".
10tags: [lead-generation]
11---
12 
13# Competitor Post Engagers
14 
15Find ICP-fit leads by scraping engagers from a competitor's top-performing LinkedIn posts. Given one or more company page URLs, this skill finds their highest-engagement recent posts, extracts everyone who reacted or commented, and classifies by ICP fit.
16 
17**Core principle:** Scrape all posts in one call per company, then locally rank and select the top N. This minimizes Apify costs while maximizing lead quality.
18 
19## Phase 0: Intake
20 
21Ask the user these questions:
22 
23### Target Companies
24 
251. LinkedIn company page URL(s) to scrape (e.g., `https://www.linkedin.com/company/11x-ai/`)
262. Time window — how many days back to look (default: 30)
273. Top N posts per company to extract engagers from (default: 1)
28 
29### ICP Criteria
30 
314. ICP keywords — job title/role terms that indicate a good lead (e.g., "sales", "SDR", "revenue")
325. Exclude keywords — roles to filter out (e.g., "software engineer", "designer")
336. Geographic focus (optional, e.g., "United States")
34 
35Save config in the current working directory (or user-specified path):
36```bash
37competitor-post-engagers-config.json
38```
39 
40Config JSON structure:
41```json
42{
43 "name": "<run-name>",
44 "company_urls": ["https://www.linkedin.com/company/<competitor>/"],
45 "days_back": 30,
46 "max_posts": 50,
47 "max_reactions": 500,
48 "max_comments": 200,
49 "top_n_posts": 1,
50 "icp_keywords": ["sales", "revenue", "growth", "SDR", "BDR", "outbound"],
51 "exclude_keywords": ["software engineer", "developer", "designer"],
52 "enrich_companies": true,
53 "competitor_company_names": ["<competitor-name>"],
54 "industry_keywords": ["freight", "logistics", "trucking", "transportation", "3pl", "supply chain", "carrier", "brokerage", "shipping", "warehousing"],
55 "output_dir": "output"
56}
57```
58 
59- `enrich_companies` — Enable Apollo company enrichment (default: true). Set to false or use `--skip-company-enrich` to skip.
60- `competitor_company_names` — Company names to exclude from enrichment (the competitor itself).
61- `industry_keywords` — Industry terms that indicate ICP fit. Matched against Apollo's industry field.
62 
63The `output_dir` is relative to the script directory by default. Override it with an absolute path to write output to a specific location.
64 
65## Phase 1: Run the Pipeline
66 
67```bash
68python3 skills/competitor-post-engagers/scripts/competitor_post_engagers.py \
69 --config competitor-post-engagers-config.json \
70 [--test] [--yes] [--skip-company-enrich] [--top-n 3] [--max-runs 30]
71```
72 
73**Flags:**
74- `--config` (required) — path to config JSON
75- `--test` — small limits (20 posts, 50 profiles, 1 top post)
76- `--yes` — skip cost confirmation prompts
77- `--skip-company-enrich` — skip Apollo company enrichment step (saves credits)
78- `--top-n` — override top_n_posts from config
79- `--max-runs` — override Apify run limit
80 
81### Pipeline Steps
82 
83**Step 1: Scrape company posts + engagers** — For each company URL, one Apify call using `harvestapi/linkedin-company-posts` with `scrapeReactions: true, scrapeComments: true`. Returns posts, reactions, and comments in a single dataset.
84 
85**Step 2: Rank & select top posts** — Filter posts by time window (`days_back`), rank by total engagement (reactions + comments), select top N per company. Then extract engagers (reactors + commenters) only from those selected posts. Deduplication by name. Score engagers by position:
86- `+3` Commenter (higher intent)
87- `+2` Position matches ICP keywords
88- `-5` Position matches exclude keywords
89 
90**Step 3: Company enrichment (Apollo)** — Extract unique company names from engagers, call `apollo.enrich_organization(name=...)` for each. Returns industry, employee count, description, and location. ~1 Apollo credit per unique company. Merge data back to all engagers from that company. Skip with `--skip-company-enrich` or `"enrich_companies": false`.
91 
92**Step 4: ICP classify & export** — Classify as Likely ICP / Possible ICP / Unknown / Tech Vendor. Uses both headline keyword matching AND company industry data (from Step 3) — if the engager's company industry matches `industry_keywords`, they're classified as "Likely ICP" regardless of role. Export CSV.
93 
94### Cost Estimates
95 
96| Parameter | Test | Standard |
97|-----------|------|----------|
98| Posts scraped per company | 20 | 50 |
99| Max reactions | 50 | 500 |
100| Max comments | 50 | 200 |
101| Est. Apify cost (1 company) | ~$0.10 | ~$0.50-1 |
102| Est. Apollo credits (company enrich) | ~10-20 | ~30-80 unique companies |
103| Est. Apollo cost | ~$0.05-0.10 | ~$0.15-0.40 |
104 
105## Phase 2: Review & Refine
106 
107Present results:
108- **Post selection** — which posts were chosen and why (engagement counts, preview)
109- **Per-company breakdown** — how many leads from each competitor
110- **ICP breakdown** — counts by tier
111- **Top 15 leads** — name, role, company, engagement type
112 
113Common adjustments:
114- **Too many irrelevant leads** — tighten `icp_keywords` or add `exclude_keywords`
115- **Missing ICP leads** — broaden `icp_keywords`
116- **Wrong posts selected** — increase `top_n_posts` or adjust `days_back`
117- **Too expensive** — use `--test` mode or lower `max_reactions`/`max_comments`
118 
119## Phase 3: Output
120 
121CSV exported to `{output_dir}/{name}-engagers-{date}.csv`:
122 
123| Column | Description |
124|--------|-------------|
125| Name | Full name |
126| LinkedIn URL | Profile link |
127| Role | Parsed from headline |
128| Company | Parsed from headline |
129| Company Industry | From Apollo enrichment |
130| Company Size | Estimated employee count from Apollo |
131| Company Description | Short company description from Apollo |
132| Company Location | City, State, Country from Apollo |
133| Source Page | Which competitor's page |
134| Post URL | Link to the specific post |
135| Post Preview | First 120 chars of post content |
136| Engagement Type | Comment or Reaction |
137| Comment Text | Their comment (personalization gold) |
138| ICP Tier | Likely ICP / Possible ICP / Unknown / Tech Vendor |
139| Pre-Filter Score | Priority score from pre-filter |
140 
141## Tools Required
142 
143- **Apify API token** — set as `APIFY_API_TOKEN` in `.env`
144- **Apollo API key** — set as `APOLLO_API_KEY` in `.env` (for company enrichment)
145- **Apify actors used:**
146 - `harvestapi/linkedin-company-posts` (post + engager scraping)
147- **Apollo endpoints used:**
148 - `organizations/enrich` (company industry/size lookup, 1 credit per company)
149 
150## Example Usage
151 
152**Trigger phrases:**
153- "Find leads engaging with [competitor]'s LinkedIn posts"
154- "Scrape engagers from [company]'s top posts"
155- "Who is interacting with [competitor]'s content?"
156- "Run competitor-post-engagers for [company]"
157 
158**Test mode:**
159```bash
160python3 skills/competitor-post-engagers/scripts/competitor_post_engagers.py \
161 --config competitor-post-engagers-config.json --test --yes
162```
163 
164**Full run:**
165```bash
166python3 skills/competitor-post-engagers/scripts/competitor_post_engagers.py \
167 --config competitor-post-engagers-config.json --yes
168```
169 
View all files on GitHub →

Details

Updated
Sep 21, 2026
License
MIT
Stars on the repo
★ 1,220
Checked
Source
gooseworks-ai/goose-skills ↗
Creator
gooseworks-ai · 206 listings
View creator

Made with competitor-post-engagers

Competitor post engagers — CleanShot 2026-07-13 at 20 16 54@2x (from the gooseworks-ai/goose-skills README)
Competitor post engagers — CleanShot 2026-07-13 at 20 16 54@2x (from the gooseworks-ai/goose-skills README)

by gooseworks-ai

Similar skills

See all →
SkillEstimate the intrinsic value of a public company using DCFCompany valuationhimself65/finance-skills · by himself65Estimate the intrinsic value of a public company using DCF, relative (peer multiple) and sum-of-parts (SOTP) methods, then triangulate to an implied share price with upside/downside versus the current market price. Use this skill whenever the user asks: what is AAPL worth", "valuation of NVDA", "fair value of TSLA", "intrinsic value", DCF for MSFT", "build a DCF", "discounted cash flow", "WACC", "terminal value", implied share price", "upside to fair value", "is X overvalued/undervalued", relative valuation", "peer comparison valuation", "EV/EBITDA target", "SOTP", sum of the parts", "how much is [company] worth", "price target from fundamentals", value this company", or any ticker in the context of computing intrinsic or relative valuation. Default to running ALL three methods (DCF + relative + SOTP-if-applicable) and presenting a blended implied price with a sensitivity table. Do not answer valuation questions from memory — always run the workflow.★ 3.3k GitHub starsSkillFind keywords a competitor ranks for that the user's siteCompetitor gapRyze-AI-Adgent/open-seo-mcp-skills · by Ryze-AI-AdgentFind keywords a competitor ranks for that the user's site doesn't — the content gap, prioritized by volume and winnability. Use when asked "what does competitor.com rank for", "keyword gap vs X", "steal competitor keywords", or "why do they outrank us".★ 3.1k GitHub starsSkillMine the highest-converting ad angles from customer reviewsAd angle minergooseworks-ai/goose-skills · by gooseworks-aiMine the highest-converting ad angles from customer reviews, Reddit complaints, support tickets, and competitor ads. Extracts actual pain language, competitor weaknesses, and outcome phrases that real buyers use. Outputs a ranked angle bank with proof quotes and recommended ad formats per angle.★ 1.2k GitHub starsSkillAnalyze competitor content coverageCompetitor content intelligencesandbaseai/sandbase-skills · by sandbaseaiAnalyze competitor content coverage and uncover differentiated content opportunities using web search, page extraction, and DataForSEO content analysis. Use when asked for competitor content research, editorial gap analysis, content brief inputs, or topic whitespace.★ 203 GitHub starsSkillCreates competitive battlecards for sales deal conversationsgrowthack88/growth-marketing-os · by growthack88Creates competitive battlecards for sales deal conversations. Produces win themes, landmines to plant, objection handlers, and competitive positioning per competitor. Outputs a structured markdown battlecard with quick-reference sections for live sales calls. Depends on competitor-research for competitive intelligence and consumes product-messaging, win-loss-analysis, and positioning for framing. Feeds into sales-deck, outreach-emails, and demo-script. Triggered by "battlecard", "competitive intel", "win against [competitor]", or "how do we beat [competitor]".★ 117 GitHub starsSkillRead your X audience and niche from real dataX audience insightssergebulaev/x-skills · by sergebulaevRead your X (Twitter) audience and niche from real data. Pull a handle's recent tweets (yours or a competitor's) with likes, replies, and views, see which formats and hooks are working, read the repliers on a tweet (X gates likers, so repliers are the signal), and scan a niche query for top tweets. Powered by Apify, no login. Triggers on "analyze my tweets", "what is working on X", "read the replies", "competitor tweets", "who is engaging". Not for writing a tweet (use x-post-writer).★ 95 GitHub stars

More from gooseworks-ai

SkillMine the highest-converting ad angles from customer reviewsAd angle minergooseworks-ai/goose-skills · by gooseworks-aiMine the highest-converting ad angles from customer reviews, Reddit complaints, support tickets, and competitor ads. Extracts actual pain language, competitor weaknesses, and outcome phrases that real buyers use. Outputs a ranked angle bank with proof quotes and recommended ad formats per angle.★ 1.2k GitHub starsSkillAnalyze ad campaign performance data to identify what'sAd campaign analyzergooseworks-ai/goose-skills · by gooseworks-aiAnalyze ad campaign performance data (Google, Meta, LinkedIn) to identify what's working, what's wasting budget, and specific cut/scale/test recommendations. Runs statistical analysis, funnel diagnostics, and multi-channel budget reallocation with specific dollar-amount shift recommendations and scenario modeling.★ 1.2k GitHub starsSkillFor paid lead-gen and participant-recruitment adsAd lead quality analyzergooseworks-ai/goose-skills · by gooseworks-aiFor paid lead-gen and participant-recruitment ads, replaces vanity CPA with true CAC per qualified lead by joining ad-platform data with downstream funnel events, surfaces tracking gaps, and classifies every creative into Scale / Keep / Investigate / Cut.★ 1.2k GitHub starsSkillAnalyze the message match between your ads and landing pagesAd to landing page auditorgooseworks-ai/goose-skills · by gooseworks-aiAnalyze the message match between your ads and landing pages. Checks if the promise in the ad copy carries through to the landing page headline, body, and CTA. Flags disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads.★ 1.2k GitHub starsSkillCheck and improve your brand's visibility across AI searchAeogooseworks-ai/goose-skills · by gooseworks-aiCheck and improve your brand's visibility across AI search engines (ChatGPT, Perplexity, Gemini, Grok, Claude, DeepSeek). Set up tracking, run visibility analyses, audit your website for AI readability, and get actionable recommendations. Uses the npx goose-aeo@latest CLI.★ 1.2k GitHub starsSkillSearch Amazon products - find items, compare pricesAmazon Product Searchgooseworks-ai/goose-skills · by gooseworks-aiSearch Amazon products - find items, compare prices, read reviews★ 1.2k GitHub stars