Agent skill
lead-sourcing-web
Source leads from the open web — job boards, news, press releases, RFPs, podcast guest lists, regulatory filings — by translating ICP triggers into web search queries and scraper jobs, normalizing results to the canonical Lead schema with citation-grade provenance.
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 leads from the open web — job boards, news, press releases, RFPs, podcast guest lists, regulatory filings — by translating ICP triggers into web search queries and scraper jobs, normalizing results to the canonical Lead schema with citation-grade provenance. Use when the buying trigger is text-based, when target accounts are stealth-stage or regional, or when database-only sourcing produces empty firmographics.
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
- ATTIO_ACCESS_TOKEN
- ATTIO_API_KEY
- GOOGLE_CSE_API_KEY
- SERP_API_KEY
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- 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-web" mkdir -p ~/.claude/skills/lead-sourcing-web cp -R "/tmp/gtm-agent-skills/lead-sourcing-web/." ~/.claude/skills/lead-sourcing-web/
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, ATTIO_ACCESS_TOKEN, ATTIO_API_KEY, GOOGLE_CSE_API_KEY, SERP_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-web/SKILL.md, which is licensed MIT (skill frontmatter). 1,173 words, 10 headings.
Lead Sourcing — Web
Source leads from the open web by translating ICP trigger criteria into web search queries and scraper jobs. Output: accounts (and sometimes contacts) tagged with citation-grade trigger evidence (permalink + date). Where Apollo and LinkedIn surface databases, this skill surfaces the event.
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 web-research-derived lead CSV records (sourced from job boards, press releases, public web). 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 — web search and job-board scraping 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
- "Find companies hiring Salesforce admins where the job post mentions migration"
- "Companies that issued an RFP for [topic] in last 90 days"
- "Find Directors of Engineering who appeared on technical podcasts"
- Triggers Apollo can't see — RFPs, press releases, job-post text, regulatory filings
- Target accounts are stealth-stage, regional, or niche-vertical
- Database-only sourcing produces empty firmographics
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 (SerpAPI/CSE/Apify) / Manual (queries-only) / BYO (link list) |
| Citation rule | Every signal carries an evidence_url that resolves — no URL, no signal |
| Trigger taxonomy | stack-replacement / funding / leadership-hire / RFP / compliance / podcast-guest / OSS-activity |
| Half-lives | Press: 6mo · Job post: 3mo · Funding: 12mo · RFP: 90d |
| Trigger differentiator | Trigger IS the personalization hook — web-sourced records ship with hooks pre-constructed |
| Boolean precision | Site-restricted queries (site:linkedin.com/jobs, site:sam.gov) → primary sources |
| Output focus | Companies first, contacts rare — pair with data-enrichment / lead-sourcing-linkedin |
| Compliance | robots.txt respected; paywall/login-wall not scraped; aggressive same-domain scraping paced |
Procedure
- Confirm ICP grounding. Read ICP scorecard from
icp-definition. For each trigger, identify canonical web source per taxonomy. Reference${HERMES_SKILL_DIR}/references/for trigger-source mapping. - Determine mode. Search-API + Apify → API mode. Else partial → mode-mix. Else → query-recipe-only output.
- Translate triggers → search queries. Generate Boolean queries with site restrictions per trigger. Store as reproducible
search_query_set. Examples: stack-replacement →site:linkedin.com/jobs "Salesforce admin" ("migrating from" OR "moving off"); RFP →site:sam.gov "vendor risk" (after:<date>). - Pre-flight: discover(). Run sample query (5–10 results) per trigger. Surface samples with provenance + cost. Default behavior: wait for explicit authorization. If the user requests skipping the sample step, trigger Clarification Protocol with options: (A) run sample then confirm (default safe), (B) skip sample and execute full batch within cost cap (flag run as
confidence: low — sample-skipped), (C) raise cap then re-sample. Honor user override on first request; do not re-prompt. 4a. Search-criteria width gate (Clarification Protocol). If sample volume per trigger is far above or below the user's apparent intent, STOP and present options: (A) widen queries / loosen Boolean (warn: more aggregator noise + higher scrape cost), (B) narrow queries / add site restrictions (warn: may miss valid sources), (C) keep current. Recommend based on sample quality and trigger half-life. Honor pick on first response. - Execute search batch + extract. Run queries (API) or instruct user (manual). For each source URL: scrape via Apify; extract company, domain, sometimes contact. Domain resolution falls back to
[unverified — needs check]. - Normalize to Lead schema. Map fields per conventions. Stamp
provenance_company: [verified: <source>:<url>]. Every signal'sevidence_urlis non-negotiable. Constructpersonalization_hookfrom the trigger source. Run${HERMES_SKILL_DIR}/scripts/normalize_lead.py. - Dedup + push + summary. Dedup on
company_domainfor company-only records. Run${HERMES_SKILL_DIR}/scripts/dedup_leads.py. Run${HERMES_SKILL_DIR}/scripts/push_to_crm.py. Summary: queries, trigger breakdown, missing-contact report, recommended next skill (data-enrichment/lead-sourcing-linkedin).
Pitfalls
- Citing an unresolvable URL — re-check at push time; 404 = drop, not fudge
- Generic queries returning aggregators — restrict by site or use canonical-source whitelists
- Missing the trigger time window — 14-month-old "raised Series B" isn't a trigger
- Pushing accounts without contacts as outreach-ready — pair with
data-enrichmentnext - robots.txt violations — default is respect; if user explicitly requests overriding for a specific source, surface options (A) skip the source, (B) use the public cached version (e.g., archive.org), (C) override with
confidence: low — robots-overriddenflag and the user's stated basis recorded inprovenance— do not re-prompt the same source twice in one run - Confusing speculation for citation — "likely a buyer" is not a citation; the URL is
Verification
- Every record's
signals[].evidence_urlresolves to a page describing the trigger as claimed - Every personalization hook's
source_urlmatches the signal evidence URL search_query_setis reproducible — same queries catch new entrants without rebuilddata-enrichmentand/orlead-sourcing-linkedinrecommended as follow-ups[unverified]records routed to review queue with original URL preserved
Output Format
- Sections required: Lead CSV (per schema), Run Summary (queries, trigger breakdown, missing-contact report, recommended next skill), 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
- lead-magnets by coreyhaines31 · 45,947
- lead-dossier by ericosiu · 3,449
- lead-magnet by OpenClaudia · 664
- daily-lead-steward by zapier · 329
- find-lead-account-owner by zapier · 329
- inbound-lead-audit-cx-map by zapier · 329
- lead-scoring by shawnpang · 308
Need help setting it up?
This page tells you what lead-sourcing-web 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.