From gtm-skills
Extracts commenters, reactors, and reposters from LinkedIn posts, enriches with emails and company data, uploads to Extruct table for outreach. Supports Anysite MCP, RapidAPI, Apify, Phantombuster.
npx claudepluginhub extruct-ai/gtm-skills --plugin gtm-skillsThis skill uses the workspace's default tool permissions.
Turn LinkedIn post engagement into a prospecting list. Extract commenters, reactors, and reposters from any LinkedIn post — then enrich and upload to Extruct for outreach.
Monitors LinkedIn engagement: tracks author replies to your comments in 6-24h window for follow-up drafts; analyzes post likers/commenters by ICP fit, seniority, company tiers for reports. Uses Apify.
Automates LinkedIn via CLI: fetch profiles, search people/companies, send messages, manage connections, create posts, react, comment, and use Sales Navigator. For scripting outreach, research, recruiting workflows.
Finds LinkedIn profiles of decision makers at target companies using Extruct's company_people_finder. Takes company table, adds people finder column, produces linked people table with names, roles, URLs. Uses internal index only.
Share bugs, ideas, or general feedback.
Turn LinkedIn post engagement into a prospecting list. Extract commenters, reactors, and reposters from any LinkedIn post — then enrich and upload to Extruct for outreach.
post-engagers → email-search → email-generation → campaign-sending
This skill produces a people table. The next step (email-search) gets verified emails, then email-generation drafts personalized outreach.
This skill delegates all Extruct API calls to the extruct-api skill.
For all Extruct API operations, read and follow the instructions in skills/extruct-api/SKILL.md.
Table creation, row uploads, and data fetching are handled by the extruct-api skill. This skill focuses on scraping LinkedIn engagers and preparing the data — the extruct-api skill handles the API execution.
| Input | Source | Required |
|---|---|---|
| LinkedIn post URL(s) | User provides | yes |
| Engagement types to scrape | User choice: comments, reactions, reposts (default: all) | no |
| LinkedIn scraping provider | User choice (see provider list below) | yes |
| Existing people table ID | Extruct table to append to (or create new) | no |
This skill does not mandate a specific provider. Ask the user which LinkedIn scraping tool they want to use. Below are known options — the user may have others.
| Provider | Engagement types | Auth | Notes |
|---|---|---|---|
| Anysite MCP | Comments, reactions, reposts | MCP connection | Built into Claude Code via MCP. Tools: get_linkedin_post_comments, get_linkedin_post_reactions, get_linkedin_post_reposts |
| RapidAPI (LinkedIn scrapers) | Comments, reactions, reposts | X-RapidAPI-Key header | Multiple scrapers available (e.g. Fresh LinkedIn Profile Data, LinkedIn Bulk Data Scraper). Check endpoint docs per scraper |
| Apify | Comments, reactions, reposts | APIFY_API_TOKEN | Actors: curious_coder/linkedin-post-commentors, supreme_coder/linkedin-post-likers. Run via Apify API |
| Phantombuster | Comments, reactions | PHANTOMBUSTER_API_KEY | Phantoms: "LinkedIn Post Commenters", "LinkedIn Post Likers" |
| Custom / self-hosted | Varies | Varies | User may have their own scraping setup |
If the user doesn't know where to start:
Extract the activity URN from each post URL. The numeric ID is typically after activity- or ugcPost- in the URL (e.g. activity:7433261939285385217).
Use the chosen provider to fetch engagement data. The approach varies by provider:
If using Anysite MCP:
mcp__claude_ai_Anysite__get_linkedin_post_comments with urn: "activity:{id}", count: 1500mcp__claude_ai_Anysite__get_linkedin_post_reactions with urn: "activity:{id}", count: 1500mcp__claude_ai_Anysite__get_linkedin_post_reposts with urn: "activity:{id}", count: 1500If using another provider:
For each engager, extract (field names vary by provider):
{
"full_name": "...",
"linkedin_url": "...", # profile URL
"headline": "...", # job title / headline
"engagement_type": "...", # comment / reaction / repost
"post_url": "...", # which post they engaged with
}
If scraping multiple posts, tag each engager with the post_url they engaged with.
linkedin_url across all posts and engagement types. If someone both commented and reacted, keep both engagement types as a comma-separated value.| Priority | Pattern | Segment |
|---|---|---|
| 1 | founder|co-founder|ceo|owner | Founders / CEOs |
| 2 | cto|vp.*eng|head of eng|director.*eng | Engineering Leadership |
| 3 | cmo|vp.*market|head of market|director.*market | Marketing Leadership |
| 4 | cro|vp.*sales|head of sales|director.*sales|head of revenue | Sales Leadership |
| 5 | director|vp|vice president|head of|chief | Directors / VPs / Heads |
| 6 | revops|revenue ops|sales ops|growth ops|gtm ops|gtm eng | RevOps / Growth Ops |
| 7 | product manag|head of product|product lead | Product |
| 8 | data scien|machine learn|ml eng|ai eng|data eng | Data / ML |
| 9 | account exec|sdr|bdr|sales dev|business dev|sales rep | Sales ICs |
| 10 | market|content|brand|growth|demand gen|copywrite | Marketing / Content |
| 11 | sales|commercial|partnerships|revenue | Sales (General) |
| 12 | ai|automat|gpt|llm|agent|no.?code | AI / Automation Builders |
| 13 | consult|freelanc|advisor|coach|mentor|agenc | Consultants / Agencies |
| 14 | engineer|develop|software|fullstack|backend|frontend | Engineering / Product / Data |
| — | (no match) | Other |
Engager Summary:
- Total unique engagers: N
- Comments: N | Reactions: N | Reposts: N
Segment Breakdown:
Founders / CEOs: N (X%)
Sales Leadership: N (X%)
Marketing Leadership: N (X%)
...
Other: N (X%)
Create a new Extruct generic table or append to an existing one. Delegate to the extruct-api skill.
If creating a new table:
{
"name": "{user-provided name or 'Post Engagers - {date}'}",
"kind": "generic",
"column_configs": [
{"kind": "input", "name": "Full Name", "key": "full_name"},
{"kind": "input", "name": "LinkedIn URL", "key": "linkedin_url"},
{"kind": "input", "name": "Job Title", "key": "job_title"},
{"kind": "input", "name": "Segment", "key": "segment"},
{"kind": "input", "name": "Engagement Type", "key": "engagement_type"},
{"kind": "input", "name": "Source Post", "key": "source_post"},
{"kind": "input", "name": "Company", "key": "company"},
{"kind": "input", "name": "Domain", "key": "domain"}
]
}
Upload rows in batches of 50 via the extruct-api skill.
If appending to an existing table:
linkedin_url valuesPresent upload summary:
Upload Complete:
- Engagers uploaded: N
- Table: {table_name}
- URL: https://app.extruct.ai/tables/{table_id}
Segment Breakdown (uploaded):
Founders / CEOs: N
Sales Leadership: N
...
Suggest next steps:
email-search on the people table to enrich with verified emailslist-enrichment to add company data (industry, size, funding)email-generation after emails are found| Output | Format | Location |
|---|---|---|
| People table | Extruct generic table | https://app.extruct.ai/tables/{table_id} |
| Engagers CSV | CSV backup | claude-code-gtm/csv/input/{campaign}/post_engagers.csv |