Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/kasper-ai-process-leads
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: sales
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/process-leads
What's inside
- Skill name
process-leads- Description
- Process and qualify existing leads against the user's ICP. Use when user says "process leads", "qualify leads", "score leads against ICP", "re-qualify leads", or "clean lead list".
- License
- MIT
- Instructions
- 143 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- files: referenced but missing: references/qualification-criteria.md, references/storage.md, references/api.md, references/icp-template.md, references/storage-spreadsheet.md
Files (1)
- SKILL.md
SKILL.md (first lines)
Process existing leads and qualify them against the user's saved ICP. This is a lead-cleaning and qualification workflow, not a LinkedIn search workflow.
Critical dashboard rule: lead pipeline movement is stored in the lead `stage` field, not the connection/message `status` field. Newly synced leads enter as `stage: "new"`. When a lead qualifies, move its `stage` from `new` to `qualified`.
Delegate to the **lead-gen** agent in **process-leads mode** with these constraints:
- Do not run LinkedIn people searches.
- Do not ask the user to re-enter ICP, role, industry, geography, company size, exclusions, pitch, or messaging setup.
- Use existing lead data for the first-pass screen, then deep research plausible leads before final qualification.
- Use `references/qualification-criteria.md` for scoring and decision rules.
- Use `references/storage.md` for all fetch and sync behavior.
## Step 1: Load Source Data
Resolve setup in this order:
1. Use the imported "Your Ideal Customer Profile" and onboarding config when available.
2. If `${CLAUDE_PLUGIN_DATA}/config.json` exists, fetch latest dashboard config via `references/api.md`, especially `icp`, `messaging`, `resources`, and `rate_limits`.
3. If dashboard config is missing, use local memory and `references/icp-template.md` as structure guidance.
Then load leads:
**If `${CLAUDE_PLUGIN_DATA}/config.json` exists (Pro plan):**
- Fetch latest new leads from the dashboard API using `references/api.md`: `/v1/gtm/leads?stage=new&page_size=100`.
- The dashboard API is the source of truth for current lead stage, status, notes, and user edits.
- Use browser-tab API fetches only. Do not use Bash, curl, Node, Python, or direct HTTP calls from the agent process.
**If `${CLAUDE_PLUGIN_DATA}/config.json` does NOT exist (Basic plan):**
- Load leads from agent memory.
- If spreadsheet sync is configured, use `references/storage.md` and `references/storage-spreadsheet.md` to read the current Leads tab before processing.
- If no leads are available, report the empty state and suggest running the lead discovery workflow.
## Step 2: Deduplicate and Protect Pipeline State
Deduplicate by normalized LinkedIn URL first, then by API `id` if present.
Never downgrade leads that are already in active or successful pipeline stages:
- `qualified`
- `approved`
- `connecting`
- `connected`
- `outreach_sent`
- `messaged`
- `responded`
- `meeting_booked`
- `closed_won`
- `closed_lost`
For these leads, add missing qualification fields only when safe. Do not reset their `stage` to `new`.
Do not re-add or reactivate records already marked:
- `skipped`
- `excluded`
- `stale`
## Step 3: Deep ICP Qualification
Score every processable lead with a two-pass workflow.
First, use existing fields only to immediately exclude clear non-fits:
- Saved exclusion industries, companies, personas, competitors, or "do not contact" notes.
- Clearly wrong roles or personas with no buying influence for the saved ICP.
- Companies visibly outside the ICP or product/pitch target with no contrary evidence.
Then research remaining plausible leads before assigning final stage or `icp_tier`:
- Visit the person's LinkedIn profile to confirm current title, role authority, company, location, and any relevant person-level signal.
- Visit the company LinkedIn page when available to confirm category/industry, size signals, geography, and exclusion risk.
- Use the company website only when it is clearly linked from LinkedIn or otherwise unambiguous. Do not guess domains.
- Treat discovery fields such as `company_research_summary` and `potential_high_lead` as hints only; verify them before final qualification.
- Stop researching a lead as soon as an exclusion or clear non-fit is confirmed.
For every processed lead, build `qualification_reason` from all available saved context and lead evidence:
- ICP fit: compare role/title against Tier 1 and Tier 2 roles, then check industry, geography, company size, and saved exclusions.
- Product/pitch fit: use the imported profile/pitch sections plus fetched `icp`, `voice`, `messaging`, `resources`, and any product outcome or pitch fields in dashboard config.
- Lead evidence: cite only facts available from the lead record, notes, source, discovery company summary, stored research, company, title, industry, location, LinkedIn profile, company LinkedIn page, or clearly identified company website.
- Uncertainty: if evidence is thin, say what is missing instead of inventing proof, urgency, budget, funding, buying intent, or product claims.
`qualification_reason` must be a compact 2-4 sentence paragraph, not a label. It must explain the decision enough that the user can understand why the lead was qualified, unqualified, or excluded without reopening the agent run.
Assign an ICP tier to every processed lead:
- `icp_tier: 1` = clear Tier 1 role plus strong company/industry/geography fit.
- `icp_tier: 2` = adjacent champion or partial ICP fit worth keeping.
- `icp_tier: 3` = unqualified lead that should not receive outreach.
Apply exclusion rules before positive scoring:
- Saved exclusion industries, companies, personas, competitors, or "do not contact" notes become `status: "excluded"`.
- Include the matched exclusion reason and evidence in `qualification_reason`.
Stage/status updates:
- Tier 1-2 leads in `new`, empty, or missing stage: set `stage: "qualified"` and add a proper `qualification_reason` covering ICP fit, product/pitch relevance, lead evidence, and any uncertainty. This is the required dashboard transition.
- Tier 1-2 leads already in a later/protected stage: keep the existing `stage`; only add/update `icp_tier`, notes, and `qualification_reason` when safe.
- Tier 1-2 leads may also set `status: "qualified"` when a status field is present, but do not rely on `status` for dashboard movement.
- Tier 3 leads: set `stage: "unqualified"` and `status: "unqualified"`; include a specific disqualification reason in `qualification_reason`.
- Excluded leads: set `stage: "excluded"` and `status: "excluded"`; include a specific exclusion reason in `qualification_reason`.
Preserve useful existing notes and keep the concise decision rationale in `qualification_reason` instead of overwriting user-written context.
Examples:
- Qualified: `Tier 1 fit: VP Sales at a SaaS company, matching the saved ICP role and target industry. The lead appears relevant to the product pitch because they likely own pipeline growth and outbound conversion, which aligns with the configured outcome. Evidence is limited to search-card fields, so outreach should validate current priorities before assuming budget or urgency.`
- Unqualified: `Unqualified: the title indicates an individual contributor rather than a buyer or champion from the saved ICP roles. The available company and industry fields do not connect this lead to the configured product pitch, and there is no stored research suggesting relevant ownership or intent.`
- Excluded: `Excluded: the lead matches the saved competitor exclusion. The company/name evidence indicates this account should not enter outreach, regardless of apparent role fit.`
## Step 4: Store and Sync Results
Always write results to persistent agent memory first.
Then sync using `references/storage.md`:
**Pro plan:**
- Sync updated lead records back to the dashboard API with type `leads`.From Kasper-AI/gtm-kit-plugin, MIT.
More from Kasper-AI/gtm-kit-plugin
- 0.524score
connect-requests
Kasper-AI
Send connection requests to qualified leads on LinkedIn.
SkillBFreshness: BClaude Code +9 - 0.524score
sync-sheet
Kasper-AI
Sync agent memory data to a spreadsheet (Google Sheets, Excel Online, or local Excel).
SkillBFreshness: BClaude Code +9 - 0.520score
check-responses
Kasper-AI
Check and handle LinkedIn message responses.
SkillBFreshness: BClaude Code +9 - 0.520score
find-leads
Kasper-AI
Quick lead search on LinkedIn.
SkillBFreshness: BClaude Code +9 - 0.520score
message-new-connections
Kasper-AI
Message recently accepted LinkedIn connections who match your ICP.
SkillBFreshness: BClaude Code +9 - 0.520score
prep-outreach
Kasper-AI
Research prospects and draft outreach messages without sending.
SkillBFreshness: BClaude Code +9 - 0.520score
process-connections
Kasper-AI
Process LinkedIn connections to identify ICPs.
SkillBFreshness: BClaude Code +9 - 0.520score
run-all
Kasper-AI
Run the full GTM pipeline in sequence, pausing for approval before external sends.
SkillBFreshness: BClaude Code +9 - 0.520score
run-outreach
Kasper-AI
Research and draft a complete outreach batch, then send only after user approval.
SkillBFreshness: BClaude Code +9 - 0.520score
send-outreach
Kasper-AI
Send pre-drafted outreach messages on LinkedIn.
SkillBFreshness: BClaude Code +9 - 0.520score
message-connections
Kasper-AI
Message qualified connections from the ICP Connections list.
SkillBFreshness: BClaude Code +9 - 0.519score
setup
Kasper-AI
Configure GTM Kit from a configuration file exported by the Kasper GTM dashboard.
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Aug 12, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Kasper-AI/gtm-kit-plugin
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Kasper-AI
- 0.524score
connect-requests
Kasper-AI
Send connection requests to qualified leads on LinkedIn.
SkillBFreshness: BClaude Code +9 - 0.524score
sync-sheet
Kasper-AI
Sync agent memory data to a spreadsheet (Google Sheets, Excel Online, or local Excel).
SkillBFreshness: BClaude Code +9 - 0.520score
message-connections
Kasper-AI
Message qualified connections from the ICP Connections list.
SkillBFreshness: BClaude Code +9 - 0.520score
check-responses
Kasper-AI
Check and handle LinkedIn message responses.
SkillBFreshness: BClaude Code +9 - 0.520score
find-leads
Kasper-AI
Quick lead search on LinkedIn.
SkillBFreshness: BClaude Code +9 - 0.520score
message-new-connections
Kasper-AI
Message recently accepted LinkedIn connections who match your ICP.
SkillBFreshness: BClaude Code +9
Cite this page
process-leads skill. Agent Mart. https://agentmart.dev/skills/kasper-ai-process-leads (last updated 2026-10-24)