champion-identifier-skill
About champion-identifier-skill
A sales skill that finds and ranks potential internal champions at a target account for Epiphan. It grounds scoring in HubSpot and Apollo records, qualification tiers, and engagement evidence, then produces a DMU map and draft-first outreach.
Key features
- 01Search HubSpot contacts and company records
- 02Find additional people through Apollo
- 03Qualify candidates and apply influence tiers
- 04Score candidates using evidence
- 05Create a DMU map and outreach drafts
Use cases
- 01Identify advocates at a target company
- 02Rank contacts using engagement and role evidence
- 03Map economic buyers and other decision roles
- 04Prepare reviewed outreach as Gmail drafts
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ scientiacapital/ skills --skill champion-identifier-skillAfter installing, type/champion-identifier-skillin Claude Code to confirm it loaded.
Bundled filesconfig.jsonreference/champion-playbook.md
Details
From the project READMEChampion Identifier
Find and rank the real people at a target account who have the pain Epiphan solves, personally gain when a deal closes, and can be reached. Candidates come from HubSpot contacts, engagement history, and Apollo title search; influence and ATL/BTL tier come from `qualify_lead`; the four judgment dimensions are scored from evidence the tools returned. Output is a ranked champion card set, a decision-making-unit (DMU) map, and draft-first outreach for the top candidates. Keywords: `champion`, `internal advocate`, `multi-threading`, `DMU`, `economic buyer access`<quick_start> Trigger: "find potential champions at [Company]" or "who will champion Epiphan internally at [Company]?" Input: target company; optionally the deal id, product focus, and known contacts.
Tool order:
hubspot_search_companies(Epiphan AI) → company id, vertical, device_count, owner.hubspot_find_contacts_by_role+hubspot_search_contacts(by company) → every known contact;activity_get_timelineper contact for engagement evidence (emails, calls, form fills, page views).apollo_mixed_people_api_searchon the company domain with vertical ATL/GRAY titles → people not yet in HubSpot;apollo_people_bulk_matchfor verified email/title/tenure.- Gate Q —
qualify_leadon every candidate. Exclusion verdicts remove them; the ATL/GRAY/BTL tier is the Influence input. Account already a customer → stop and route to account management. - Score the remaining candidates (section below), rank, build the DMU map.
- Deliver: ranked cards in chat;
get_writing_styleonce +check_my_copyper string, thencreate_draftfor the top 1-2 candidates; optionalhubspot_create_contact_noteon the chosen champion (confirm-first). </quick_start>
<house_rules> Customer-facing skill. Before output, run the gates in order (details: ~/.claude/skills/epiphan-house-rules-skill/reference/gates.md): S: search_product_catalog (Epiphan AI) or Epiphan Knowledge search before any product claim. B: check_my_copy on every customer-facing string. Q: qualify_lead right after the candidate pull, before tiering/enrichment/drafts. D: outbound text becomes a Gmail draft, never a send. Identifiers (owner IDs, portal, emails, seats) come from reference/identifiers.md in that skill — do not restate them here. On any gate failure follow reference/self-healing.md (retry, degrade with a flag, alert Tim, halt) and append a line to ~/.claude/skill-runs/.jsonl. </house_rules>
<success_criteria>
- Company resolved in HubSpot; vertical and customer/channel status known before any scoring
- Every candidate traces to a HubSpot contact id or an Apollo person record (no invented names)
- Every candidate passed through
qualify_lead; tier shown on the card; exclusions counted - 3-4 candidates scored on the four evidence dimensions plus the qualify_lead influence tier
- DMU map lists economic buyer (ATL), champion, technical validator, end user, each with a real record or marked
unknown - Top 1-2 outreach messages staged as Gmail drafts after
check_my_copy; nothing sent - "No champion found" path taken explicitly when every candidate scores < 30
- Outcome sidecar and run-log line written </success_criteria>
What makes a champion
- Has Pain: directly affected by the problem Epiphan solves (lecture capture gaps, AV staffing, unreliable streaming, courtroom recording compliance).
- Has Power: can influence the decision or control budget — the
qualify_leadtier (ATL / GRAY / BTL) is the source of truth, never a title guess. - Has Gain: personally benefits when we win.
- Is Accessible: a real engagement trail or a warm path exists.
- Is Willing: shows change-agent behaviour in the record.
Champion = sells for you internally. Coach = helpful but passive. Blocker = loves the incumbent or loses if you win.
Stage 1 — Candidate pull (live)
hubspot_search_companiesby name/domain. Capture id, industry,device_count,lifecyclestage, owner.hubspot_find_contacts_by_role(roles: IT leadership, AV/media, academic technology, facilities, procurement) andhubspot_search_contactsfiltered to the company. Capture title, owner, last activity.activity_get_timelinefor each contact (90 days): emails opened/replied, calls, form fills, demo requests, pricing page views. This is the Engagement evidence.apollo_mixed_people_api_search:q_organization_domains= company domain,person_titles= the vertical's ATL + GRAY titles from CLAUDE.md.apollo_people_bulk_matchfor the top 10 to confirm email, tenure, prior employer.- Prior calls:
search_calls(Epiphan AI) by company → who attended, what they said.
Fewer than 2 candidates after step 4 → widen titles one level (GRAY → senior BTL) and mark partial (stage: pull).
Stage 2 — Gate Q
qualify_lead per candidate. Verdicts: exclude (customer, channel, product-only engager, AE-active, suppressed), STALE AE LEAD (surface separately), or net-new with tier. Do not re-implement the keyword tables; they live in CLAUDE.md and epiphan-house-rules-skill reference/gates.md. If the account itself is a customer, stop: champions inside a customer account belong to account management. qualify_lead unavailable → halt.
Stage 3 — Scoring
| Dimension | Points | Evidence source |
|---|---|---|
| Influence | 0-20 | qualify_lead tier: ATL 20, GRAY 12, BTL 5 |
| Role relevance | 0-10 | title and department vs the pain Epiphan solves |
| Pain evidence | 0-10 | call transcripts, form fills, timeline notes mentioning the problem |
| Personal gain | 0-10 | role start < 12 months, owns the affected program, KPIs tied to the problem |
| Accessibility | 0-10 | replied before, attended a call, warm path via existing contact, verified email |
| Engagement | 0-10 | last-90-day activity count from activity_get_timeline |
Total 0-70. 50-70 ideal champion · 38-49 strong potential · 30-37 possible with work · < 30 not a champion.
Every point must cite a record (contact id, call id, timeline event, Apollo field). If a dimension has no evidence, score it 0 and say no evidence, do not estimate.
Stage 4 — Output
# Champion Identification: [Company] — [vertical] — [date]
Company id [HubSpot id] | device_count [n] | owner [name] | deal [id or none]
## Candidates (ranked)
### #1 [Name] — [Title] — tier [ATL/GRAY/BTL] — score [n]/70
Record: HubSpot [id] / Apollo [id] · tenure [n] mo · last activity [date, type]
Influence [n]/20 (tier) · Relevance [n]/10 · Pain [n]/10 (evidence: …) · Gain [n]/10 · Access [n]/10 · Engagement [n]/10
Why: [pain] / [gain] / [how they can help: intel, EB intro, internal advocacy]
Outreach: [warm intro via <existing contact> | direct] → draft id [Gmail draft id]
### #2 … ### #3 …
## Who NOT to lead with
[Name] — [Title] — [too senior / blocker risk / AE-active] — revisit when [condition]
## DMU map
| Role | Person | Record | Tier | Status |
| Economic buyer | … | HubSpot id or `unknown` | ATL | via champion |
| Champion | … | … | … | draft staged |
| Technical validator | … | … | … | … |
| End user | … | … | … | … |
## Stale AE leads surfaced
[Name] — owner [AE] — last activity [date] — Tim decides
If the DMU has no ATL person, say so: "No economic buyer identified — ask champion #1 for the introduction" and set atl_count: 0.
Stage 5 — Draft-first outreach
For the top 1-2 candidates: get_writing_style once per session, write the warm-intro or direct message, check_my_copy, then create_draft (Gmail) from the Tim mailbox with the candidate's verified email. Return the draft ids. Product claims inside the message go through Gate S first. Never send.
Optional, confirm-first: hubspot_create_contact_note on the chosen champion with the score, evidence, and plan; hubspot_create_contact_task for the follow-up.
Stage 6 — Champion development plan
Phase 1 contact (week 1) → Phase 2 discovery and qualification (weeks 1-2) → Phase 3 tailored demo and ROI (weeks 2-3) → Phase 4 activation: ask for the economic-buyer intro, arm them with a one-pager (weeks 3-4) → Phase 5 deal progression with regular check-ins. Discovery questions, qualification questions, and warning signs are in reference/champion-playbook.md.
Stage 7 — Emit outcome sidecar + run log
Write ~/.claude/skill-analytics/last-outcome-champion-identifier-skill.json:
{"ts":"[UTC ISO8601]","skill":"champion-identifier-skill","version":"<frontmatter version>","variant":"default",
"status":"[success|partial|error]","runtime_ms":[estimated ms from start],
"metrics":{"candidates_pulled":[n],"excluded_by_qualify":[n],"stale_ae_surfaced":[n],"champions_identified":[n],"atl_count":[n],"drafts_staged":[n],"no_champion_found":[true|false]},
"error":null,"session_id":"[YYYY-MM-DD]"}
atl_count is the number of candidates whose qualify_lead tier is ATL. Append one line to ~/.claude/skill-runs/champion-identifier-skill.jsonl.
<self_healing>
partial = a ranking was produced but a stage degraded: Apollo search failed after retry (HubSpot contacts only), activity_get_timeline unavailable (Engagement scored 0 with no evidence), create_draft failed (copy returned in chat). No champion found (all candidates < 30) is a success with no_champion_found: true: report the best coach, the missing ATL, and a next step (ask for intro or route to linkedin-sales-navigator-alt-skill for new-in-role people). error = company not resolvable in HubSpot or Apollo, or qualify_lead unavailable (halt). Ladder per ~/.claude/skills/epiphan-house-rules-skill/reference/self-healing.md: retry once → degrade with a flag → Slack DM Tim → halt with state in ~/.claude/skill-state/champion-identifier/.
</self_healing>
<anti_patterns>
- Naming a "champion" who is not in HubSpot or Apollo results.
- Scoring Influence from the title string; the tier comes from
qualify_lead. - Leading with a BTL technician because they replied once; influence is weighted higher than engagement.
- Putting outreach text in chat instead of a Gmail draft. </anti_patterns>
<reference_guides>
reference/champion-playbook.md— discovery and qualification questions, warning signs, relationship tips~/.claude/skills/epiphan-house-rules-skill/reference/gates.md— Gate Q verdicts, tier semantics~/.claude/skills/epiphan-house-rules-skill/reference/identifiers.md— owner IDs, portal, emails (never restate here)- Siblings:
contact-hunter-skill,linkedin-sales-navigator-alt-skill,meddic-call-prep-auto-skill</reference_guides>