Skip to content
Marketing
Skill

/prospect-posts

Scrape recent LinkedIn posts from one or more prospect profiles via Apify and scan them for a theme (e.g. hiring pain, AI-first GTM). Outputs a report with matched excerpts and post links. Use for prospect or account intelligence research before outreach.

From plugin
headless-gtm
2917 skills

Claude Code

$ npx -y skills add Zevenue/headless-gtm --skill prospect-posts --agent claude-code

SKILL.md

prospect-posts.SKILL.md
name: prospect-posts
description: >-
  Scrape recent LinkedIn posts from one or more prospect profiles via Apify and scan them for a theme (e.g. hiring pain, AI-first GTM). Outputs a report with matched excerpts and post links. Use for prospect or account intelligence research before outreach.

Prospect Posts

You scrape the most recent LinkedIn posts of one or more profiles via Apify and scan them for a specific theme the user cares about (e.g. "AI-first GTM", "hiring pain", "pivoting to enterprise"). Output is a structured report showing which profiles mentioned the theme, with quoted excerpts and post links.

This is research for prospect/account intelligence - read-only, multi-profile.

How to invoke

The user says something like:

  • "pull the last 20 posts from [profile URL] and look for mentions of [theme]"
  • "scan these three founders' LinkedIn for talk of [topic]"
  • "has [prospect] posted about [theme]?"

Required inputs: 1. **Profile URL(s)** - one or more LinkedIn profile URLs 2. **Theme** - what to look for. Can be a topic, belief, pain point, or signal

Optional:

  • **Count** - posts per profile (default 20)
  • **Output path** - where to write the report. Default derived from theme + date (see Step 4)

If either profile URL or theme is missing, ask the user before running.

Prerequisites

  • `APIFY_API_TOKEN` in `.env`
  • `requests` and `python-dotenv` installed

Process

Step 1: Prepare

1. Confirm `APIFY_API_TOKEN` is set. If missing, tell the user to add it. 2. Pick the output directory:

  • Single profile that maps to an existing per-prospect folder (e.g. `prospects/{slug}/`): save there
  • Otherwise: `prospects/_scans/` (default)

3. Derive a filename slug from the theme (lowercase, hyphens, no punctuation) and today's date.

  • JSON path: `{output_dir}/{date}-{theme-slug}.json`
  • Report path: `{output_dir}/{date}-{theme-slug}.md`

4. Create `prospects/_scans/` if it doesn't exist.

Step 2: Fetch posts

Run the scraper. Repeat `--profile-url` for each profile:

python3 scripts/prospect_posts.py \
  --profile-url "<url-or-username-1>" \
  --profile-url "<url-or-username-2>" \
  --count 20 \
  --output-path "<json-path>"

The script:

  • Uses the `apimaestro/linkedin-profile-posts` actor (no LinkedIn cookies needed, $0.005/post)
  • Starts one actor run per profile in parallel, then polls until all complete
  • Accepts either a full URL (`https://www.linkedin.com/in/foo/`) or a bare username (`foo`)
  • Uses the actor's `total_posts` input to auto-paginate to the requested count
  • Writes structured JSON with `{profiles: [{input, username, profile_url, name, headline, status, posts: [{date, url, type, text, engagement}]}]}`
  • Includes reshared-post text inline with a `[Reshared from X]` prefix so theme matching sees it
  • If a run fails (FAILED/ABORTED/TIMED-OUT), that profile appears in the output with `status` set and an empty `posts` array - surface this to the user

Step 3: Scan for the theme

Read the JSON output. For each profile, read every post's `text` and judge whether it matches the theme **semantically** - not by keyword. A post about "our GTM team is replacing playbooks with Claude agents" matches "AI-first GTM" even without the exact phrase. Conversely, a post that mentions "AI" in passing while talking about something unrelated should not match.

For each match, capture:

  • Post date
  • A 1-3 sentence quote showing the match (use the author's own words, don't paraphrase)
  • The post URL
  • A one-line interpretation of why it matches the theme

If a post is borderline, include it in a separate "Adjacent signals" section with a note on why it's adjacent rather than a direct match.

Step 4: Write the report

Write a markdown report at the report path with this structure:

# Post scan: {theme}

**Scanned:** {date}
**Theme:** {theme exactly as user phrased it}
**Profiles:** {count}
**Posts reviewed:** {total across all profiles}

## {Profile name or URL}

**Profile:** {linkedin url}
**Headline:** {headline if available}
**Posts reviewed:** {n}
**Direct matches:** {m}

### Direct matches

#### {date} - [link]({post_url})
> {quoted excerpt}

**Why it matches:** {one-line interpretation}

{repeat per match}

### Adjacent signals
{only include if any; same format with a "Why it's adjacent" line}

### No-match summary
{if zero matches, one sentence summarizing what they DO post about so the user can judge whether the theme is truly absent or just framed differently}

---

{repeat per profile}

## Cross-profile patterns
{2-4 bullets if multiple profiles: who is loudest on the theme, what angles recur, who's silent. Skip this section for single-profile scans.}

Step 5: Report back to the user

Tell the user:

  • Path to the markdown report (relative to repo root)
  • One-line summary per profile: `{name}: {n} direct matches, {m} adjacent` or `{name}: no mentions of {theme}`
  • If there's a standout finding (a strong recent match, or a surprising silence), call it out in one sentence

Do not paste the full report into chat. The user will open the file.

Output locations

  • Report and JSON default to `prospects/_scans/` - gitignore this path in your project (scan output may contain commercial signals you don't want committed)
  • If the profile maps to an existing `prospects/{slug}/` folder, save there instead

What this skill does NOT do

  • Does not post to LinkedIn.
  • Does not download images (themes are textual; skip the image fetch overhead).
  • Does not scrape company pages - profiles only. For company-page scraping, a different actor is needed.
  • Does not draft outreach based on findings. That's downstream (use `email-writer` or `signal-builder`).

Troubleshooting

| Issue | Fix | |---|---| | `APIFY_API_TOKEN not found` | Add to `.env` | | Actor run times out | Increase `timeout_secs` in `scripts/prospect_posts.py` or reduce `--count` | | Profile returned 0 posts with status `SUCCEEDED` | Profile may be private,

Read more
@zevenue
Ships withheadless-gtm

GTM without the SaaS layer. An outbound pipeline built as agent skills for Claude Code and Codex: describe an ICP in plain English and the chain takes it from company discovery to verified, signal-ranked contacts - every step running on raw vendor APIs, not

Stars on GitHub

Momentum

stars in total
29
Star history of Zevenue/headless-gtm on GitHub, a chart by star-history.com

Other skills on headless-gtm.

00-gtm-router

00-gtm-router

Plan and run the full API-first GTM chain - the orchestrator (step 00) that turns an ICP description plus optional budget,…

01-icp-qualify

01-icp-qualify

The qualification gate of the GTM chain - judges every discovered company against the client's ICP before any paid enrichment, so…

01-prospeo-discover

01-prospeo-discover

B2B company discovery and list building via the Prospeo search API. Use when the user wants to find companies from an ICP, build…

01-prospeo-lookalike

01-prospeo-lookalike

Seed-based B2B company discovery via the Prospeo company-lookalike API. Use when the user has example companies and wants more…

More skills from other plugins.

seo

seo

Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…

@agricidaniel@agricidanielInstall Skill
brag

brag

Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…

brag2w21k
@latent-spaces@latent-spacesInstall Skill
geo-audit

geo-audit

Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…

Questions about prospect-posts.

Which coding agents can use prospect-posts?
prospect-posts installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.