From Sales OS
Source, qualify, enrich, and research a B2B lead list from an Ideal Customer Profile, end to end. Use this skill whenever the user wants to "find leads", "source prospects", "build a lead list", "get me leads for [ICP]", "scrape leads", "find companies that match", "build a prospect list", "/lead-gen", or describes who they sell to and wants a contactable, qualified list back. It picks the right data source for the ICP (Google Maps for local businesses, Sales Navigator or LinkedIn scrapers for B2B roles, a prospecting database otherwise), confirms the tools are connected, sources at the right volume, qualifies every lead with parallel subagents, enriches and verifies contact data (email + phone), runs deep per-lead research, and delivers a clean CSV or Google Sheet. Trigger it even when the user does not name a tool, as long as they want leads that match a profile. The output feeds the `outreach` skill.
How this skill is triggered — by the user, by Claude, or both
Slash command
/sales-os:lead-generationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turn an Ideal Customer Profile into a clean, qualified, enriched, contactable lead list. This skill is the front of the outbound machine: it decides where the right prospects live, pulls them, proves each one actually fits, finds and verifies their contact details, researches them deeply enough to personalize later, and hands a finished list to `outreach`.
Turn an Ideal Customer Profile into a clean, qualified, enriched, contactable lead list. This skill is the front of the outbound machine: it decides where the right prospects live, pulls them, proves each one actually fits, finds and verifies their contact details, researches them deeply enough to personalize later, and hands a finished list to outreach.
The whole point is that a lead list is only as good as the worst decision in it. A great scraper pointed at the wrong source, or a clean list nobody verified, both waste the campaign. So this skill is opinionated about sequence: resolve the ICP, route to the source that actually holds that ICP, confirm the tools work before spending money, then source → qualify → enrich → research → deliver.
0. Resolve the ICP who, offer, where they live, how many, seniority, criteria
1. Route to the source Maps vs Sales Nav/LinkedIn vs prospecting DB vs niche -> references/source-routing.md
2. Preflight confirm the chosen source + enrichment tools are connected -> references/connectors.md
3. Source keyword parse, test batch, pass-rate, volume, full pull -> references/volume-and-batching.md
4. Qualify parallel lead-qualifier subagents, 10 leads each
5. Enrich + verify find + verify email and phone, only verified move on -> references/enrichment.md
6. Research parallel lead-researcher subagents, 5 each, depth by source
7. Deliver CSV always, Google Sheet if gws is available
Read the referenced file when you reach that phase. The SKILL body is the map; the references hold the exact actor IDs, schemas, recovery patterns, and math.
This skill runs both inside the BenAI Sales OS vault and standalone for any client. Detect which at the start and behave accordingly.
Context/config.md (and Context/icp.md, offer.md) exists in or above the working directory, or the user is clearly working inside the Sales OS. Read those docs as ground truth instead of interviewing. This skill is Hybrid: it delivers a list (action) AND updates what the OS knows (brain). So it writes a campaign record under Lead-Gen/campaigns/<name>/ and logs every file it touches to Daily/logs/YYYY-MM-DD.md. Wikilink every entity. Never use em dashes.Context/ docs; if so, prefer reading them over interviewing.If you are unsure which mode you are in, ask once: "Are we working inside your Sales OS vault, or is this a standalone list build?"
Lock these six things before sourcing anything. In vault/client-context mode, read them from Context/icp.md, Context/offer.md, and Context/config.md. Otherwise ask, concisely, in one or two grouped questions.
outreach ties every line back to it.references/source-routing.md.Confirm the six back in two or three lines before moving on. Sourcing spends money; a 20-second confirm is cheap insurance.
Pick the data source from where the ICP resides. The full decision tree, with exact Apify actor IDs, data-richness notes, and the downstream research-depth rule for each source, is in references/source-routing.md. Read it now. The short version:
| ICP lives on... | Primary source | Data richness | What's missing |
|---|---|---|---|
| Local / brick-and-mortar (Google Maps) | Apify Google Maps scraper | Thin (name, site, phone, category, reviews) | Decision-maker name + email; research goes hard |
| LinkedIn (agencies, B2B roles, professional services) | Sales Navigator search scraped, or Apify LinkedIn lead/search scrapers | Rich (name, title, company) | Email almost always; needs enrichment |
| A targetable B2B database | Vibe Prospecting (match-prospects → enrich-prospects → export-to-csv) | Rich, often with contact data | Usually little; built-in enrichment |
| A niche directory or marketplace | Custom scrape pattern (see the Webflow example in the reference) | Varies | Varies |
| Warm: people who engaged with LinkedIn posts | The linkedin-post-engagers skill, then resume here at Phase 4 | Medium, plus an engagement signal | Email; but warmer than cold |
When more than one source could work, prefer the one that returns the richest data for the least cost and manual effort, and say which you picked and why.
Before spending a credit, confirm the chosen source and the enrichment providers are actually reachable. Nothing is worse than sourcing 400 leads and discovering the email finder is not connected. The per-tool checks and what to do when something is missing are in references/connectors.md. If a required tool is missing, stop and tell the user exactly what to connect, do not silently fall back to a worse path.
Read references/volume-and-batching.md for the sourcing patterns. The key moves:
raw_needed = ceil(target / pass_rate * 1.1), capped at a sane safety limit. Pulling exactly target leads always under-delivers because qualification removes some.raw_leads.json or .csv) the moment they land. Large datasets overflow the conversation and are lost on context compaction. Every later phase reads from disk, not from memory.Never trust scraped data alone. Sources (Sales Navigator, Apollo, Maps) are frequently wrong about what a company actually does. Every lead is verified against the criteria with live research.
sales:lead-qualifier subagent per batch, and spawn them all in a single message so they run concurrently. Sequential spawning defeats the whole design.qualified (bool), reason, confidence, plus the identifying fields.Qualified, Qualification_Reason, Confidence, and split a qualified-only file. The merge runs as a small script, not inline, and tolerates the JSON key variations subagents produce (see the reference). Borderline leads qualify; let the user make the final call.If the sales:lead-qualifier agent type is not available (skill used outside the plugin), spawn general-purpose subagents with the same instructions.
Now find and verify the contact data the source did not give you. Read references/enrichment.md for providers, order, and rules. The essentials:
Depth is proportional to how thin the source was. This is the rule that makes the skill work across sources. The exact depth-by-source guidance lives in references/source-routing.md; the batching lives in references/volume-and-batching.md.
sales:lead-researcher subagent per batch, all in one message. Each visits the company site and third-party sources and returns the structured intelligence report (what they do, why, niches, services, case studies, positioning, the person's role, public mentions, content, achievements).sales:linkedin-scraper subagent (it handles all URLs in one Apify call) in the same message as the researchers. It follows the two-step call-actor pattern and the timeout-recovery pattern in the reference.The list is the product. Deliver it where the user can use it.
gws. Run a quick check for the gws CLI (command -v gws). If it is present, ask the user: CSV, or a Google Sheet. If gws is absent, deliver CSV only and say so.outreach.gws (sheets create), upload, and return the shareable link. Name it descriptively, e.g. <keywords>_<geo>_<date>.Lead-Gen/campaigns/<name>/campaign.md (the filters, source, list link, identifier, and a metrics stub the sales-os-campaign-metrics routine will fill) and log every file created or changed to Daily/logs/YYYY-MM-DD.md. Wikilink the prospects, companies, and tools. No em dashes.outreach.These batch sizes are deliberate, not arbitrary: they keep each subagent's context small enough to do careful work, and let the fan-out stay parallel.
| Subagent | Batch size | Job |
|---|---|---|
sales:lead-qualifier | 10 leads | Verify each lead against the ICP with live research |
sales:lead-researcher | 5 leads | Deep per-lead intelligence report |
sales:linkedin-scraper | 1 instance, all URLs | LinkedIn profiles + recent posts via Apify |
The icebreaker writer belongs to outreach, not here.
call-actor (info, then call), expect the ~30s MCP timeout, recover via runId/datasetId. Full pattern in the references.This skill consolidates what used to be the separate lead-qualification and lead-intelligence skills and the outbound-pipeline command, and adds the sourcing front-end they never had. It reuses their proven subagents (lead-qualifier, lead-researcher, linkedin-scraper) unchanged. For the outreach half (copy, personalization, cadence, launch), hand off to the outreach skill.
Guides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.
Synthesizes the current conversation into a structured spec (PRD) and publishes it to the project issue tracker with a ready-for-agent label, without interviewing the user.
2plugins reuse this skill
First indexed Jul 18, 2026
npx claudepluginhub hubert-sys/benai-skills --plugin sales-os