Agent skill
lead-sourcing-apollo
Source B2B leads from Apollo by translating an ICP scorecard into firmographic and persona filters, quoting cost before pulling, normalizing to the canonical Lead schema, and pushing companies + persons + run-history interactions to the CRM.
Filed under Prospecting and list building.
From devangk003/gtm-agent-skills · 32 skills · 0 · pushed 2026-06-18
What it does when it runs
Source B2B leads from Apollo by translating an ICP scorecard into firmographic and persona filters, quoting cost before pulling, normalizing to the canonical Lead schema, and pushing companies + persons + run-history interactions to the CRM. Use when the user wants to build an outbound list grounded in a defined ICP, has an Apollo seat or API key, has an Apollo CSV export, or has any list to ingest and normalize.
Read from the skill and the 5 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- AGENTIC_APP_TOKEN
- APOLLO_API_KEY
- ATTIO_ACCESS_TOKEN
- ATTIO_API_KEY
- Hosts it reaches
- app.apollo.io
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- writes files
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/devangk003/gtm-agent-skills.git /tmp/gtm-agent-skills git -C /tmp/gtm-agent-skills sparse-checkout set "lead-sourcing-apollo" mkdir -p ~/.claude/skills/lead-sourcing-apollo cp -R "/tmp/gtm-agent-skills/lead-sourcing-apollo/." ~/.claude/skills/lead-sourcing-apollo/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
Before you install: this skill will not complete its job on a bare agent. It needs AGENTIC_APP_TOKEN, APOLLO_API_KEY, ATTIO_ACCESS_TOKEN, ATTIO_API_KEY, which you have to obtain separately.
The skill
Source on GitHub ↗Reproduced in full from devangk003/gtm-agent-skills/blob/6b9a1b0094ffd83d6c02bc03b7ce1610661a1644/lead-sourcing-apollo/SKILL.md, which is licensed MIT (skill frontmatter). 1,193 words, 10 headings.
Lead Sourcing — Apollo
Translate a defined ICP into an Apollo search, pull a cost-quoted batch of contacts, normalize to the canonical Lead schema, and push to CRM. Operates in three modes — API, manual export, or BYO CSV — degrading gracefully.
Clarification Protocol
When you encounter any of the following, STOP and ask the user — do NOT make a silent assumption, and do NOT flatly refuse:
- Ambiguous or missing input
- A fork in approach (multiple valid frameworks, segments, scopes, or sources)
- A rule that would block progress
- An assumption that materially shapes the output
- Unverified data that a downstream step depends on
Present 2–4 concrete options with trade-offs and your recommendation.
Format:
Decision needed: <what's being decided> Options:
- A) <option> — trade-off
- B) <option> — trade-off
- C) <option> — trade-off My recommendation: <X> because <reason>. Confirm or pick a different option before I continue.
Refusing to proceed is NEVER the final answer. Every "block" must come with an override option. If the user picks an override, honor it on the first request — do not re-prompt the same block multiple times in one run.
Scope
This skill ONLY produces Apollo-sourced lead CSV records (people + companies matching ICP filters). Do not expand into adjacent topics. If the user's request implies adjacent scope, trigger Clarification Protocol with options to (A) stay in scope, (B) note the adjacent need as a follow-up, (C) hand off to a different skill.
Verification Requirements (Derived Details Only)
The search action itself does NOT require web verification — Apollo returns are first-party for sourcing. However, every derived person/company detail that this skill or downstream skills will state as fact (titles, seniorities, company size, technographics, funding) MUST be verified or marked [UNVERIFIED] before push.
- Tag derived details inline as
[H/M/L][Sn]. - Source URL goes in the lead record's
provenancefield. - Unverified derived details belong in
## Assumptions to Validate, NOT in the lead's main fields.
Sources are mandatory for derived claims. If you cannot cite a source, mark [UNVERIFIED].
When to Use
- User wants to build an outbound list grounded in a defined ICP
- User has an Apollo seat or API key and wants to pull contacts
- User has an Apollo CSV export to ingest and normalize
- "Source SDRs at Series B SaaS companies in the US"
- User needs search filters to run manually in Apollo
- User has a BYO list from another CRM to clean up and push
Legend — Confidence Score (Derived Fields)
- [H] High — verified by ≥2 independent primary sources within last 6 months
- [M] Medium — single primary source, OR multiple secondary sources agree
- [L] Low — inferred / single secondary source / older than 12 months
Quick Reference
| Concept | Value |
|---|---|
| Modes | API (key set) / Manual export (seat, no key) / BYO (any list) |
| Adapter contract | discover() → count + cost; pull() → records; normalize() → Lead schema |
| Quote-before-pull | Mandatory — never pull() without discover() + user confirm |
| First-batch default | ≤500 records — validate filter quality before expanding |
| Cost cap | gtm.sourcing_run_usd_cap (default $25); record cap 2000 |
| Dedup priority | linkedin_url > email > phone (person); company_domain (company) |
| Apollo "verified" email | Hint, not verdict — always pair with data-enrichment verifier |
| Provenance tags | [verified: apollo-api] / [user-provided] / [unverified — needs check] |
| Compliance | EU → gdpr_basis: legitimate-interest; role-addresses → sidecar; DNC → strip |
Procedure
- Confirm ICP grounding. Read ICP scorecard from
icp-definition. Extract firmographic, role map, triggers, anti-ICP. If absent → flag ICP-ungrounded,confidence: low. - Determine mode.
APOLLO_API_KEYset → API. Else seat → manual export. Else any list → BYO. Else → filter recommendations only. - Translate ICP → Apollo filter set. Map industry →
organization_industries; size →organization_num_employees_ranges; geography →person_locations; funding →organization_latest_funding_stage; tech →currently_using_any_of_technology_uids; titles →person_titles; seniority →person_seniorities; anti-ICP →not_organization_*. Store as reproduciblesource_query. - Pre-flight: discover(). Surface candidate count, estimated USD, sample of 5. Default behavior: wait for explicit authorization before
pull(). If the user requests skipping the quote step, trigger Clarification Protocol with options: (A) run discover() then confirm (default safe), (B) skip discover() and pull immediately within cost cap (flag run asconfidence: low — quote-skipped), (C) raise cost cap then re-quote. Honor user override on first request; do not re-prompt. Reference${HERMES_SKILL_DIR}/references/for Apollo filter mapping details. 4a. Search-criteria width gate (Clarification Protocol). If candidate count is far above or below the user's apparent intent, STOP and present options: (A) widen filters (warn: higher volume + higher cost + likely lower precision), (B) narrow filters (warn: reduced reach, may miss valid accounts), (C) keep current. Recommend based on count vs. ICP target. Honor pick on first response. - Pull. Page through results, respect rate limits (~60 req/min, backoff on 429), cap at
gtm.sourcing_run_record_cap. Stampsource_run_idandsource: apollo-apion every record. - Normalize. Map to Lead schema. Tag provenance per field. Construct
personalization_hookONLY with citable URL — never invent. Run${HERMES_SKILL_DIR}/scripts/normalize_lead.pyper record. - Dedup against CRM. Merge by
linkedin_url>email>phonefor person;company_domainfor company. Run${HERMES_SKILL_DIR}/scripts/dedup_leads.py. Log every merge. - Apply compliance filters. EU →
gdpr_basis: legitimate-interest. Role-address emails → sidecar. DNC phones → strip. - Push to CRM + emit run summary. Run
${HERMES_SKILL_DIR}/scripts/push_to_crm.py. Pushcompany+person+interaction:researchfor verified/user-provided;interaction:researchonly for unverified. Emit one-screen run summary.
Pitfalls
- Pulling without a quote — default is
discover()first; if cost cap is hit, surface options (A) stop, (B) raise cap and re-quote, (C) override and pull at current cap withconfidence: low — cap-overriddenflag — do not re-prompt the same cap twice in one run - Trusting Apollo's "verified" email flag — pair with real verifier in
data-enrichment - Inventing personalization hooks — hooks ship with citable URLs or they don't ship
- Ignoring company-size-adjusted seniority — "VP" at 50 people ≠ "VP" at 5,000
- Blasting role addresses —
info@,sales@→ sidecar, never active push - Filters too tight then over-loosened — loosen one dimension at a time and re-discover
Verification
source_queryfilter object is reproducible — running it again returns the same candidates ± new entrants- Every record carries provenance tags on every named field — no untagged fields
- Run record's costs match Apollo's billing dashboard ± rounding
[unverified — needs check]records landed in review queue, not active prospect list
Output Format
- Sections required: Lead CSV (per schema), Run Summary (counts, dedup stats, source query), Assumptions to Validate
- Tables / fields: see
references/csv-schema.mdfor the canonical Lead CSV column list and encoding - Length target: depends on query scope (cost-capped per
gtm.sourcing_run_record_cap); Run Summary ≤300 words by default - File type: CSV (lead records) + markdown (run summary)
- Mandatory closing sections: Verification Notes, Assumptions to Validate, Next Step
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- no-lead-left-behind-lead-treatment-audit by zapier · 329
- apollo-lead-gen by composio-community · 2
- apollo-lead-finder by edupegoretti · 0
- lead-magnets by coreyhaines31 · 45,947
- lead-dossier by ericosiu · 3,449
- apollo-outreach by OpenClaudia · 664
- lead-magnet by OpenClaudia · 664
- daily-lead-steward by zapier · 329
Need help setting it up?
This page tells you what lead-sourcing-apollo does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.