gooseworks-ai/champion-tracker
> Track product champions for job changes and qualify their new companies against ICP. Takes a CSV of known champions (with LinkedIn URLs), creates a baseline snapshot via Apify enrichment, then detects when champions move to new companies. Scores new companies on a 0-4 ICP fit scale. Outputs a downloadable CSV of movers with qualification verdicts.
npx skills add https://github.com/gooseworks-ai/goose-skills --skill champion-tracker
Detect when product champions change jobs and qualify their new companies against ICP.
Build the initial champion list from public sources. This is done by the agent, not the script.
review-site-scraper skill to pull G2/Trustpilot reviews. Extract reviewer names + companies.linkedin-post-research skill (Apify-based) to find people who posted about the product./v1/kitchen-sink/person (name + company → profile URL) or ContactOut via Orthogonal.champions.csv with required columns.Use champion_tracker.py for ongoing tracking.
APIFY_API_TOKEN in .env (for LinkedIn profile enrichment)name, linkedin_url (required); original_company, original_title, email, source, notes (optional)Initialize baseline (first run):
# Dry run — see cost estimate
python3 skills/champion-tracker/scripts/champion_tracker.py init -i champions.csv --dry-run
# Create baseline
python3 skills/champion-tracker/scripts/champion_tracker.py init -i champions.csv
Check for job changes (subsequent runs):
# Dry run
python3 skills/champion-tracker/scripts/champion_tracker.py check --dry-run
# Detect changes and output CSV
python3 skills/champion-tracker/scripts/champion_tracker.py check -o changes.csv
View status:
python3 skills/champion-tracker/scripts/champion_tracker.py status
| Column | Description |
|--------|-------------|
| champion_name | Full name |
| linkedin_url | LinkedIn profile URL |
| previous_company | Company at baseline |
| previous_title | Title at baseline |
| new_company | Current company (changed) |
| new_title | Current title |
| change_detected_date | Date this check was run |
| position_start_date | When they started the new role |
| days_since_change | Days since new position started |
| icp_score | 0-4 ICP qualification score |
| icp_verdict | Strong Fit / Good Fit / Possible Fit / Weak Fit |
| icp_notes | Scoring breakdown |
| email | Email if available |
| notes | Original notes from champion CSV |
| Signal | Points | What it checks |
|--------|--------|----------------|
| B2B signal | 1.0 | Title contains sales/SDR/revenue/growth keywords |
| Outbound motion | 1.0 | Sales leadership title (VP Sales, Head of Growth, etc.) |
| Company size | 1.0 / 0.5 | SMB/mid-market = 1.0; unknown = 0.5 benefit-of-doubt |
| Seniority | 1.0 | VP, Director, Head of, C-level, Founder |
Verdicts: Strong Fit (>=3) / Good Fit (>=2) / Possible Fit (>=1.5) / Weak Fit (<1.5)
--dry-run always shows cost before any API callsskills/champion-tracker/
SKILL.md # This file
scripts/
champion_tracker.py # Main CLI script
input/
champions_template.csv # Template for manual additions
snapshots/ # Created at runtime
baseline.json # Latest full snapshot
archive/ # Timestamped copies
output/ # Created at runtime
changes-YYYY-MM-DD.csv # Generated output
LinkedInEnricher from skills/lead-qualification/scripts/enrich_leads.pyrequests (Python package), APIFY_API_TOKEN (env var)Take gooseworks-ai/champion-tracker from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.