Champion Tracker
gooseworks-ai/goose-skills
Track product champions for job changes and qualify their new companies against ICP.
Set up a recurring buying-signal detection pipeline that finds companies showing buying intent across three signal types — job postings (hiring for the persona), fundraising events (recent raises)…
$ npx skills add apify/awesome-skills --skill apify-buying-signal-detection -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install apify/awesome-skills apify-buying-signal-detection --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/apify/awesome-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/apify-buying-signal-detection .claude/skills/apify-buying-signal-detection && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "apify-buying-signal-detection" agent skill from https://github.com/apify/awesome-skills/tree/main/skills/apify-buying-signal-detection into .claude/skills/apify-buying-signal-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "apify-buying-signal-detection", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/apify/awesome-skills/tree/main/skills/apify-buying-signal-detectionType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add apify/awesome-skills --skill apify-buying-signal-detection -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install apify/awesome-skills apify-buying-signal-detection --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apify/awesome-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/apify-buying-signal-detection .agents/skills/apify-buying-signal-detection && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "apify-buying-signal-detection" agent skill from https://github.com/apify/awesome-skills/tree/main/skills/apify-buying-signal-detection into .agents/skills/apify-buying-signal-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "apify-buying-signal-detection", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add apify/awesome-skills --skill apify-buying-signal-detection -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install apify/awesome-skills apify-buying-signal-detection --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apify/awesome-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/apify-buying-signal-detection .cursor/skills/apify-buying-signal-detection && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "apify-buying-signal-detection" agent skill from https://github.com/apify/awesome-skills/tree/main/skills/apify-buying-signal-detection into .cursor/skills/apify-buying-signal-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "apify-buying-signal-detection", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/apify/awesome-skills.git --path skills/apify-buying-signal-detection--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add apify/awesome-skills --skill apify-buying-signal-detection -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install apify/awesome-skills apify-buying-signal-detection --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apify/awesome-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/apify-buying-signal-detection .gemini/skills/apify-buying-signal-detection && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "apify-buying-signal-detection" agent skill from https://github.com/apify/awesome-skills/tree/main/skills/apify-buying-signal-detection into .gemini/skills/apify-buying-signal-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "apify-buying-signal-detection", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install apify/awesome-skills apify-buying-signal-detectionInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add apify/awesome-skills --skill apify-buying-signal-detection -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/apify/awesome-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/apify-buying-signal-detection .github/skills/apify-buying-signal-detection && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "apify-buying-signal-detection" agent skill from https://github.com/apify/awesome-skills/tree/main/skills/apify-buying-signal-detection into .github/skills/apify-buying-signal-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "apify-buying-signal-detection", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add apify/awesome-skills --skill apify-buying-signal-detection -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install apify/awesome-skills apify-buying-signal-detection --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/apify/awesome-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/apify-buying-signal-detection .opencode/skills/apify-buying-signal-detection && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "apify-buying-signal-detection" agent skill from https://github.com/apify/awesome-skills/tree/main/skills/apify-buying-signal-detection into .opencode/skills/apify-buying-signal-detection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "apify-buying-signal-detection", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
apify-buying-signal-detectionSet up a recurring buying-signal detection pipeline that finds companies showing buying intent across three signal types — job postings (hiring for the persona), fundraising events (recent raises)…
Apify Buying Signal Detection is an agent skill from apify/awesome-skills, published by the product's own GitHub organization. Set up a recurring buying-signal detection pipeline that finds companies showing buying intent across three signal types — job postings (hiring for the persona), fundraising events (recent raises), and LinkedIn content (pain-point posts, hiring announcements) — then aggregates results into a deduplicated leads.csv with the signal source, evidence URL, and detection timestamp per row. Split-schedule architecture — Apify Actor Tasks pull raw data on their own cadence, a Claude-side aggregation task normalizes…
Its SKILL.md is about 5.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including scripts and reference files (for example `examples/icp.example.json`, `references/actors.md` and `references/csv-schema.md`).
It sits in Business, Finance & HR, covering Web scraping, Cold outreach and Fundraising and pitch decks. It works with Apify and LinkedIn. The repository describes itself as: Community collection of Apify agent skills for AI coding assistants. The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1eb0cd0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 2 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
console.apify.comapify.commcp.apify.comdocs.apify.comgithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
APIFY_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Apify Buying Signal Detection loads about 5.1k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 248 tokens; SKILL.md has 2,184 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
_TOKEN=$(cat ~/.apify_token)` or add to `.env`. Get one at [console.apify.com/account/integrations](https://console.apifAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from apify/awesome-skills at commit 1eb0cd0, republished under its Apache-2.0 licence (© apify). 2,184 words, ~5,090 tokens.
.claude/skills/apify-buying-signal-detection/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.Turn an ICP description into a recurring pipeline that surfaces companies showing buying intent across three signal types — job postings, fundraising events, and LinkedIn content — and appends them to a single deduplicated leads.csv you can pipe straight into your CRM.
This skill sets up and runs a scheduled workflow. It does not draft cold emails, score leads by fit, or push rows into a CRM. Its output is a clean, evidence-linked leads.csv — the input to whatever outreach process you already have. Cold outreach drafting for these leads is deliberately a separate concern (that's what apify-link-prospecting-outreach and similar skills exist for).
Three design commitments worth knowing before you start:
apify login (OAuth, if using the Apify CLI)APIFY_TOKEN environment variablescripts/aggregate.py and scripts/setup_apify_tasks.py; only stdlib is required — requests is used when available but has a urllib fallback)scheduled-tasks MCP is the recommended path when you're on Claude Code; cron / Task Scheduler / GitHub Actions all work too if you'd rather run it headlesslyCopy this checklist and mark items done:
Task Progress:
- [ ] Step 1: Collect ICP inputs (block on these)
- [ ] Step 2: Write icp.json + blacklist.csv (if any)
- [ ] Step 3: Provision Apify Actor Tasks (setup_apify_tasks.py)
- [ ] Step 4: Verify Actor picks in the Apify Console
- [ ] Step 5: Register the Claude-side aggregation schedule
- [ ] Step 6: First manual run of aggregate.py — sanity check the outputAsk the user for all of the following before writing any file. The setup script needs every field to route correctly, and reworking a scheduled task after it's provisioned means either editing it in the Apify Console or re-running setup — both worse than asking once.
emea-saas-hiring-aes-bebity-linkedin-jobs-scraper). If the user already runs multiple campaigns, prevent collisions upfront.["jobs", "funding", "linkedin_content"]. Rarely will a campaign want only one; the strength of the workflow is the intersection of signals per company. Recommend all three unless there's a specific cost concern.["US", "GB", "DE", "FR", "AU"] will fan out to five regional job Actors, which is 5× the weekly cost. See references/gotchas.md.industry, to LinkedIn as keywords when no explicit content search terms are provided, and to job scrapers as a fallback when no persona titles are given."Account Executive", "SDR", "BDR" are hits; "sales" is noise. Optional seniority (entry, mid, senior, manager, director, vp, cxo) and company-size bands ("11-50", etc.) get applied post-hoc in the aggregator.seed, series_a, series_b, etc.) and max_days_since_announcement (default 90). Fresh cash → open budget → tighter window is better."sales") waste budget. Specific pain-point phrases beat category names — see references/actors.md. Plus min_reactions (default 5) and posted_within_days (default 14) for post-filtering../leads.csv inside the campaign directory. This file is the pipeline's memory across runs; keep it under version control (or at least back it up) so the dedup guard survives disk resets.domain,company,reason. Rows matching either the exact domain or the normalized company name get dropped before append. If the user doesn't have one, ask if they want to start with obvious exclusions (existing customers, their own domain, top competitors).apify_side_cron (when Apify runs the Actors) and claude_side_cron (when Claude aggregates). Default: 0 6 * * 1 (Apify Monday 06:00 UTC) and 0 8 * * 1 (Claude Monday 08:00 UTC). Two hours of buffer between them absorbs slow Actor runs.The full schema is documented in references/icp-config-schema.md. A worked example lives at examples/icp.example.json.
icp.json and blacklist.csvWrite the campaign directory contents:
<campaign-dir>/
icp.json ← the config from Step 1
blacklist.csv ← optional; columns: domain,company,reason
leads.csv ← created empty; the aggregator will populate itStart leads.csv with just the header row (schema in references/csv-schema.md) so the aggregator doesn't have to handle a missing-file case on first run:
detected_at,company,domain,signal_type,signal_detail,signal_source_actor,signal_date,evidence_url,geo,notesRun the setup script:
APIFY_TOKEN=$APIFY_TOKEN \
python ${CLAUDE_PLUGIN_ROOT}/scripts/setup_apify_tasks.py \
--config ./icp.jsonWhat this does:
icp.json and picks Actors per the routing tables in references/actors.md — global Actors always, plus regional Actors matching the geo list.<campaign>-<actor-slug> with the input payload derived from the ICP. Re-running the script updates existing tasks in place; it does not create duplicates.<campaign-dir>/.<campaign-name>.tasks.json recording the task IDs. aggregate.py reads this to know which tasks to pull dataset items from.schedule.apify_side_cron is set in the ICP (default is), creates or updates a single Apify Schedule that fires all the tasks on that cron.Useful flags:
--dry-run — print the pick list and payloads without making any API calls. Always do this once when authoring a new campaign.--no-schedule — provision tasks but skip Schedule creation (useful when you want to trigger runs manually while calibrating).Open console.apify.com/actors/tasks. Filter by the campaign prefix. Sanity-check three things:
null.<campaign>-schedule, confirm it's on and lists every task.If anything looks wrong, edit icp.json and re-run setup_apify_tasks.py — it's idempotent.
Register a scheduled task that invokes the aggregator on the campaign's claude_side_cron. Pick whichever runner matches your environment:
Option A — scheduled-tasks MCP inside Claude Code. The MCP exposes mcp__scheduled-tasks__create_scheduled_task. The concrete call to make:
{
"name": "<campaign-name>-aggregate",
"cron_expression": "<value of schedule.claude_side_cron from icp.json>",
"timezone": "UTC",
"prompt": "Run the buying-signal aggregator. Execute exactly: python ${CLAUDE_PLUGIN_ROOT}/scripts/aggregate.py --config /abs/path/to/icp.json. Requires APIFY_TOKEN env var. On non-zero exit, surface the stderr in the notification body — do not attempt to reinterpret the error."
}Substitute the real values for <campaign-name> and /abs/path/to/icp.json before making the call. Verify the task landed with mcp__scheduled-tasks__list_scheduled_tasks and confirm the cron matches icp.json.
Option B — headless cron / Task Scheduler / CI. Add a plain OS-level scheduler entry:
# Linux crontab entry
0 8 * * 1 APIFY_TOKEN=$APIFY_TOKEN /path/to/python /path/to/aggregate.py --config /path/to/icp.json >> /path/to/aggregate.log 2>&1Or a GitHub Actions workflow (.github/workflows/aggregate.yml):
on:
schedule:
- cron: '0 8 * * 1'
jobs:
aggregate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: { python-version: '3.11' }
- env: { APIFY_TOKEN: '${{ secrets.APIFY_TOKEN }}' }
run: python scripts/aggregate.py --config icp.jsonEither runner is safe to invoke more often than weekly — the weekly-idempotency guard skips runs that already have this-week entries. Use --force only during calibration.
aggregate.pyBefore waiting for the schedule to fire, run once manually to confirm the wiring. This also seeds leads.csv so the week-guard has something to compare against next week:
APIFY_TOKEN=$APIFY_TOKEN \
python ${CLAUDE_PLUGIN_ROOT}/scripts/aggregate.py --config ./icp.jsonExpected output shape:
{
"summary": {
"appended": 47,
"fetched_by_signal": {"jobs": 320, "funding": 88, "linkedin_content": 210},
"dropped": {"blacklist": 2, "dup_domain": 156, "dup_url": 401, "post_filter": 12, "unmappable": 0, "linkedin_no_domain": 8},
"linkedin_profile_lookups": 142,
"linkedin_profile_resolved": 134,
"linkedin_company_lookups": 118,
"linkedin_company_resolved": 112,
"linkedin_domain_resolved": 128
}
}
wrote 47 new rows to /abs/path/to/leads.csvThe linkedin_*_lookups / linkedin_*_resolved counters report each hop of
the LinkedIn author-domain enrichment chain (see below). linkedin_domain_resolved
is the count of LinkedIn rows whose domain column was successfully filled in.
linkedin_no_domain is the number of LinkedIn rows dropped because the chain
couldn't resolve a domain — those rows cannot be blacklisted or deduped safely.
If fetched_by_signal is all zeros, either the Apify tasks haven't run yet (check the Console) or the sidecar task registry is missing. Wait for the first Apify run to complete, then rerun.
Use --dry-run to see what would be appended without touching the CSV, and --force to bypass the weekly guard during calibration.
The full catalog with per-signal PICK rules lives in references/actors.md. Condensed summary:
| Signal | Global default | Regional additions |
|---|---|---|
| Jobs | bebity/linkedin-jobs-scraper, johnvc/google-jobs-scraper | Indeed (US/GB/IN/CA), Stepstone (DE/AT/BE), Seek (AU/NZ), France Travail (FR) |
| Funding | nexgendata/startup-funding-tracker, memo23/crunchbase-scraper, complex_intricate_networks/fundraising-and-startup-funding-scraper, signalbase/signalbase-api | Maddyness (FR) |
| LinkedIn content | harvestapi/linkedin-post-search (no cookies, $2/1k posts) | Deep-scrape fallback: curious_coder/linkedin-post-search-scraper (cookie required) |
LinkedIn author → company domain (enrichment, called on-demand from aggregate.py) | harvestapi/linkedin-profile-scraper ($4/1k profiles) + harvestapi/linkedin-company (per-lookup) — two hops | none — profile URL and company LinkedIn URL are the primary keys |
The routing logic in setup_apify_tasks.py::pick_actors mirrors this table — if you edit one, edit the other.
harvestapi/linkedin-post-search returns the author's name and headline but not the employer's website. Without a domain, the aggregator cannot check the blacklist or dedup against previously seen companies for this signal — meaning blacklisted competitors could slip in via LinkedIn posts.
Resolving that domain takes two additional Actor calls, chained inside aggregate.py::enrich_linkedin_domains:
harvestapi/linkedin-profile-scraper on the deduplicated set of author profile URLs whose post rows came back without a domain. Returns currentPosition[0].companyLinkedinUrl and companyName — but not the company website. Input: {profileScraperMode: "Profile details no email ($4 per 1k)", urls: [...]}.harvestapi/linkedin-company on the deduplicated set of company LinkedIn URLs returned by step 1. Returns website. Input: {companies: [...]}.The chain is the aggregator's only synchronous Actor call path — all other data comes from pre-scheduled Task runs. It's the deliberate exception because both enrichment inputs (author profile URLs, then company URLs) can only be known after the previous hop's dataset is read.
Cost.
harvestapi/linkedin-companyThree knobs bound the cost:
canonical_linkedin_profile_url strips ?miniProfileUrn=… so the same author across sample posts collapses to one key)setup_apify_tasks.py uses the Apify REST API directly (no Actor call — it provisions Tasks and Schedules). aggregate.py uses the REST API to pull dataset items from the last successful run of each task. If you want to trigger an Actor manually during troubleshooting (e.g. Step 4 verification), use one of these:
Three flags on every call (--json, --user-agent, 2>/dev/null):
# Manually trigger one campaign task
apify tasks run <task-id> --wait 300 \
--json \
--user-agent apify-awesome-skills/apify-buying-signal-detection \
2>/dev/null
# List tasks provisioned for this campaign
apify tasks list --json 2>/dev/null | \
jq '.[] | select(.name | startswith("<campaign-name>-"))'
# Peek at the latest dataset for a task
apify tasks last-run <task-id> --dataset --format json \
--user-agent apify-awesome-skills/apify-buying-signal-detection 2>/dev/null
# Fetch an Actor's input schema (when you're deciding whether to add it to the routing table)
apify actors info "<actor-id>" --input --json \
--user-agent apify-awesome-skills/apify-buying-signal-detection 2>/dev/nullHosted MCP server at mcp.apify.com. Full docs at docs.apify.com/platform/integrations/mcp.
mcpc)Standalone CLI client. See github.com/apify/mcpc.
| Error / symptom | What to do |
|---|---|
APIFY_TOKEN not found | export APIFY_TOKEN=$(cat ~/.apify_token) or add to .env. Get one at console.apify.com/account/integrations. |
no task registry for campaign '<name>' | You ran aggregate.py before setup_apify_tasks.py. Run setup first — it writes the sidecar the aggregator needs. |
skipped: already run this week on a legitimate re-run | Pass --force. The guard preserves the week's entries and dedupes on top; it does not overwrite. |
Task runs on Apify but aggregate.py reports "fetched_by_signal": {"jobs": 0} | The Actor ran but returned zero items. Check the Actor's run log for schema errors (wrong keyword format, unsupported country code). Post-fix, run the task manually via apify tasks run and re-aggregate. |
| Tasks provisioned but no data ever lands | The Apify Schedule may be disabled. In the Console, open Schedules → <campaign>-schedule and confirm it's enabled. Also check the schedule's cron matches your timezone assumption — schedules are in UTC unless you set timezone. |
| Costs higher than expected | See references/gotchas.md#cost-guardrails. Most common cause: broad LinkedIn search terms multiplying harvestapi/linkedin-post-search cost. Second-most-common: adding all regional job Actors when the ICP only really sells into two countries. |
| Reposts inflate LinkedIn signal counts | The aggregator strips trackingId and utm_* query params to canonicalize URLs before dedup, but LinkedIn's URL scheme changes periodically. If you see the same post appearing twice, check whether the URLs differ only in a param not in the strip list and add it to strip_tracking() in aggregate.py. |
| Duplicate leads after a company rebrand | Dedup is domain-first. If a company changes domains, the aggregator treats it as a new lead. Manual reconciliation only — no automatic fix. |
Multiple machines writing the same leads.csv | Not supported. Single-writer assumption. Put the CSV behind a locking layer (Google Sheets export, flock, etc.) or partition per machine. |
© apify, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 10 other files (scripts, references) in skills/apify-buying-signal-detection of apify/awesome-skills.
Open the folder on GitHubat commit 1eb0cd0
Apify Buying Signal Detection next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Apify Buying Signal Detection this skillapify/awesome-skills | 266 | — | ~5.1k | Automated safety check: Notes | Apache-2.0 | |
| Champion Trackergooseworks-ai/goose-skills | 1.2k | 1 repos | ~1.1k | Automated safety check: Notes | MIT | |
| Linkedin Message Writergooseworks-ai/goose-skills | 1.2k | 1 repos | ~3.4k | Automated safety check: Notes | MIT | |
| Apify Multi-Platform Scraperapify/agent-skills | 2.4k | 2 repos | ~1.4k | Automated safety check: Notes | None | |
| Fullenrich Event AttendeesOthmane-Khadri/YALC-the-GTM-operating-system | 318 | — | ~1.4k | Automated safety check: Warn | MIT | |
| Osintsmixs/osint-skill | 141 | — | ~5.5k | Automated safety check: Pass | MIT |
gooseworks-ai/goose-skills
Track product champions for job changes and qualify their new companies against ICP.
gooseworks-ai/goose-skills
Research LinkedIn profiles and write personalized messages for any LinkedIn message type — connection requests, InMails, DMs, message requests, post comments, and comment replies.
apify/agent-skills
Scrapes public data from social, maps, search and review platforms by choosing from about a hundred Apify Actors and running them through the Apify CLI.
Othmane-Khadri/YALC-the-GTM-operating-system
A skill your agent uses when the user says "enrich this LinkedIn event", "enrich attendees of this event", "enrich this attendees CSV", "scrape and enrich LinkedIn event {URL}", "FullEnrich event…
smixs/osint-skill
Conduct deep OSINT research on individuals. An agent skill from smixs/osint-skill.
gooseworks-ai/goose-skills
Find warm leads by searching LinkedIn for pain-language posts — the frustrations, complaints, and operational struggles your ICP talks about publicly.
apify/awesome-skills
Score and enrich a CSV of B2B leads using Apify Actors. An agent skill from apify/awesome-skills.
apify/awesome-skills
Pull structured Apple App Store and Google Play data — app metadata, price, rating, the 1–5★ ratings histogram, version, developer, and reviews — and watch it for changes over time.
apify/awesome-skills
Scrape Ashby jobs or discover companies using Ashby with the Apify Ashby Job Board API Actor (johnvc/ashby-job-board-scraper).
apify/awesome-skills
Pull structured B2B company data from Clutch.co with the Clutch.co Agency API Actor (johnvc/clutch-agency-api).
apify/awesome-skills
Build a local-business lead database from Google Maps in one Apify pipeline: search by target audience + geography, enrich each place with company contacts from its website, leads enrichment (names…
apify/awesome-skills
Build a marketing agency database from Clutch.co with the Clutch.co Agency API Actor (johnvc/clutch-agency-api).
Set up a recurring buying-signal detection pipeline that finds companies showing buying intent across three signal types — job postings (hiring for the persona), fundraising events (recent raises)…. Apify Buying Signal Detection is an agent skill from apify/awesome-skills, published by the product's own GitHub organization.csv with the signal source, evidence URL, and detection timestamp per row.
Apify Buying Signal Detection fits situations like: the user says find companies with buying signals; detect intent signals for outbound; set up a weekly lead pipeline; monitor hiring signals for lead gen.
Run `npx skills add apify/awesome-skills --skill apify-buying-signal-detection -a claude-code`. Or copy the skill folder (skills/apify-buying-signal-detection in apify/awesome-skills) into .claude/skills/apify-buying-signal-detection in your project. Claude Code loads it when a task matches its description.
Run `npx skills add apify/awesome-skills --skill apify-buying-signal-detection -a codex`. Or copy the skill folder (skills/apify-buying-signal-detection in apify/awesome-skills) into .agents/skills/apify-buying-signal-detection in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add apify/awesome-skills --skill apify-buying-signal-detection -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/apify-buying-signal-detection, .gemini/skills/apify-buying-signal-detection, .github/skills/apify-buying-signal-detection and .opencode/skills/apify-buying-signal-detection in your project.
Going by SKILL.md and its folder, Apify Buying Signal Detection needs Python for the scripts in its folder, the command-line tools its instructions call (python) and credentials named APIFY_TOKEN. Our summary lists: Python 3; A credential in APIFY_TOKEN.
SKILL.md names 5 domains. As links in the text: console.apify.com, apify.com, mcp.apify.com, docs.apify.com and github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Apify Buying Signal Detection is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.1k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Apify Buying Signal Detection: Champion Tracker (gooseworks-ai/goose-skills, 1.2k stars), Linkedin Message Writer (gooseworks-ai/goose-skills, 1.2k stars), Apify Multi-Platform Scraper (apify/agent-skills, 2.4k stars) and Fullenrich Event Attendees (Othmane-Khadri/YALC-the-GTM-operating-system, 318 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
apify (a GitHub organization, an official publisher) maintains it in apify/awesome-skills, which has 266 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on September 22, 2026.
Source: apify/awesome-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.