lead-generation
This skill uses Exa Agent to research and build enriched lead lists by defining an Ideal Customer Profile, running multi-step web research, and outputting…
Identity proven by GitHub's verified organisation badge (exa-labs)
- Agents
- Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode, claude.ai and API
- License
- MIT (permissive)
- Pin
- 5c3fd25pinned Oct 9, 2026
- Context cost
- about 2,000 tokenswhen the skill loads
- GitHub stars
- 58on exa-labs/agent-skills
- Scripts
- None found
What it does
“Generate enriched lead lists using Exa Agent. Finds companies matching an ICP, enriches with signals/news/scores, and outputs CSV. Use when generating leads, building prospect lists, finding companies to sell to, doing outbound research, or ICP-based company discovery. Triggers on "leads", "lead gen", "prospect list", "find companies", "ICP", "outbound list".”
Generated summary from the skill's own text
This skill uses Exa Agent to research and build enriched lead lists by defining an Ideal Customer Profile, running multi-step web research, and outputting results as CSV. The agent handles query decomposition, company discovery, and structured enrichment automatically without manual orchestration.
When to use it
- Building prospect lists targeting a specific company type or industry vertical
- Researching companies matching defined ICP criteria for outbound sales campaigns
- Discovering potential customers with enrichment signals like funding or hiring activity
- Expanding lead lists incrementally using follow-up runs to avoid duplicates
When not to
- Managing very large continuously maintained lists requiring per-item verification across time
- When generic web search results suffice instead of structured agent-powered research
Install
These commands install from the publisher's repository and need no account.
skills CLI
npx skills add exa-labs/agent-skills --skill lead-generationInstalls from the repository's default branch, which may have changed since the commit we checked.
GitHub CLI 2.90 or later
gh skill install exa-labs/agent-skills lead-generation@5c3fd25c258a34cfaad196fecb1b135a2dc7fa87Installs the commit we checked (5c3fd25).
Copy by hand
Download the folder at 5c3fd25 and put it in .claude/skills/lead-generation for Claude Code and in .agents/skills/lead-generation for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode.
Claude Code plugin
/plugin install exa@claude-plugins-officialThe publisher's plugin in Claude's official marketplace. It may hold more than this skill, and we have not pinned it.
Copy for your agent
A prompt for any coding agent. It installs this skill from GitHub at the pinned commit, copies the files as they are, and runs nothing unless you ask.
Prompt
Install the agent skill "lead-generation" by Exa. Source, pinned to commit 5c3fd25c258a34cfaad196fecb1b135a2dc7fa87: https://github.com/exa-labs/agent-skills/tree/5c3fd25c258a34cfaad196fecb1b135a2dc7fa87/skills/lead-generation 1. Download that folder at exactly this commit. Do not use the default branch. 2. Copy every file unchanged, keeping the folder structure, into .claude/skills/lead-generation/ for Claude Code and .agents/skills/lead-generation/ for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode. Create the folders if they do not exist. 3. Do not edit the files, and do not run any script in the folder unless I ask you to. 4. When you are done, list the files you copied and where you put them. Listing and checks: https://www.agentnative.dev/skills/exa/lead-generation
SKILL.md at the pin
---
name: lead-generation
description: Generate enriched lead lists using Exa Agent. Finds companies matching an ICP, enriches with signals/news/scores, and outputs CSV. Use when generating leads, building prospect lists, finding companies to sell to, doing outbound research, or ICP-based company discovery. Triggers on "leads", "lead gen", "prospect list", "find companies", "ICP", "outbound list".
---
# Lead Generation with Exa Agent
Generate enriched lead lists using the Exa Agent API. An Agent run is an asynchronous, multi-step web research task: you describe the list you want plus an output schema, and Exa handles query decomposition, searching, verification, enrichment, and structured output internally. You do NOT need to orchestrate parallel searches, subagents, or manual deduplication.
For very large or continuously maintained lead lists with per-item verification, consider Exa Websets instead: https://docs.exa.ai/websets/api/overview
## Prerequisites
This skill requires the Exa MCP server with the Agent tool enabled. Use the `agent_tools` URL selection alias to enable `agent_run`.
If the Agent tools are not available, tell the user:
> You need the Exa MCP server installed with the Agent tools and your API key.
> Instructions: https://docs.exa.ai/reference/exa-mcp
Then stop.
## Tool Restriction
Use `agent_run`, plus Write and Bash (for CSV output). Do NOT use generic web search for the lead list itself.
## Workflow
```
1. Confirm the ICP with the user (one small Agent run if research is needed)
2. Call `agent_run` with an outputSchema
3. If the result is still running, call `agent_run` again with its `runId`
4. Read `output.structured` from the `agent_run` result
5. Write the CSV
6. Optional: expand with follow-up runs (previousRunId + input.exclusion)
```
## Step 1: Understand the ICP
When the user says something like "Make a list of 200 leads for [company]", first establish the Ideal Customer Profile. If the user already described the ICP, confirm it. If not, run one small Agent run to research it:
```
agent_run {
"query": "Research {company_name}: what they sell, who their existing customers are, and what their ideal customer profile is.",
"effort": "low",
"outputSchema": {
"type": "object",
"properties": {
"company_description": { "type": "string", "description": "What the company does in 2 sentences or less" },
"icp_description": { "type": "string", "description": "Concise ICP description that clearly defines target companies" },
"sub_verticals": { "type": "array", "maxItems": 10, "items": { "type": "string" }, "description": "Sub-verticals breaking down the ICP" },
"useful_enrichments": { "type": "array", "maxItems": 8, "items": { "type": "string" }, "description": "Enrichment columns useful for filtering high-signal companies" }
},
"required": ["company_description", "icp_description", "sub_verticals", "useful_enrichments"]
}
}
```
Present the ICP to the user and confirm:
- Is the ICP description accurate?
- Any companies to exclude (competitors, existing customers)?
- How many leads do they want? (default 200)
- Any specific enrichment columns they care about?
## Step 2: Create the Lead-Gen Run
Design an `outputSchema` with a bounded `companies` array. Keep schemas small, flat, and explicit; always bound arrays with `maxItems`.
**Core fields to always include:**
- `company_name` (string)
- `website` (string)
- `product_description` (string, "in 12 words or less")
- `icp_fit_score` (integer, 1-10)
- `icp_fit_reasoning` (string, "compelling one-liner in 20 words or less")
Add enrichment fields tailored to the campaign (funding stage, headcount range, headquarters, hiring signals, etc.). Give string fields a length hint in their description to keep CSV output clean.
Use the run inputs for the pieces the old manual pipeline handled by hand:
- `query` — describe the list: the ICP, geography, stage, and how many companies you want
- `outputSchema` — the exact structure back, with `maxItems` bounding the companies array
- `systemPrompt` — scoring rules, source preferences, dedup/exclusion emphasis
- `input.exclusion` — companies to avoid (competitors, existing customers, results from earlier runs)
- `effort` — `"low"` by default; `"auto"`, `"high"`, or `"xhigh"` for large or hard lists
Example:
```
agent_run {
"query": "Find 100 companies matching this ICP: {icp_description}. Prioritize {sub_verticals}. For each company, score ICP fit 1-10 for {user_company}.",
"effort": "low",
"systemPrompt": "Prefer official company sites and recent funding announcements. Do not include duplicates or subsidiaries of the same parent company.",
"input": {
"exclusion": [
{ "company_name": "{competitor_1}" },
{ "company_name": "{existing_customer_1}" }
]
},
"outputSchema": {
"type": "object",
"properties": {
"companies": {
"type": "array",
"maxItems": 100,
"items": {
"type": "object",
"properties": {
"company_name": { "type": "string" },
"website": { "type": "string", "format": "uri" },
"product_description": { "type": "string", "description": "in 12 words or less" },
"icp_fit_score": { "type": "integer", "description": "1-10" },
"icp_fit_reasoning": { "type": "string", "description": "one-liner in 20 words or less" }
},
"required": ["company_name", "website", "product_description", "icp_fit_score", "icp_fit_reasoning"]
}
}
},
"required": ["companies"]
}
}
```
`agent_run` returns the completed result when possible. If it returns `status: "running"` with an `agent_run_...` ID, save the ID and continue with `agent_run` using only `runId`.
## Step 3: Wait and Read Output
1. If the run is still running, call `agent_run` with its `runId` until `outputReady` is true or the run reaches a terminal status (`failed` or `cancelled`).
2. Read the companies from `output.structured`, citations from `output.grounding`, and the run cost from `costDollars` in the `agent_run` result.
Do not paste the full raw output into the conversation — go straight to CSV.
## Step 4: Write the CSV
Write `output.structured.companies` to `{target_company}_leads_{YYYY-MM-DD}.csv`, sorted by `icp_fit_score` descending. Join any array fields with " | ". Use Python's `csv.writer` (handles quoting/escaping) via Bash, or Write directly for small lists.
Print a summary:
```
## Lead Generation Complete
- Total leads: {count}
- ICP score distribution: 8-10: {N} | 5-7: {N} | 1-4: {N}
- Run ID: {agent_run_id}
- Cost: ${costDollars}
- Output: {filename}
```
## Step 5: Expanding the List
If the user wants more leads than one run returned:
- Create a new follow-up run with `previousRunId` set to the completed run's ID, asking for additional companies
- Put the company records already collected into `input.exclusion` so the new run avoids them
- Append the new results to the CSV and re-deduplicate by normalized company name (strip "Inc"/"Ltd"/etc., case-insensitive)
For lists in the many hundreds, run a few runs sequentially this way rather than one giant run, and confirm scope with the user first: "This will require ~{N} Agent runs. Proceed?"
## Handling Failures
- If a run ends `failed`, read the error from the `agent_run` result, adjust the query or schema, and retry once with different wording
- If a client cancellation is needed, abort the in-progress `agent_run` call
- If results are consistently below the requested count, narrow the ICP into 2-3 sub-vertical runs instead of one broad run
## MCP Configuration
Requires an Exa API key. Get yours at https://dashboard.exa.ai/api-keys
```json
{
"servers": {
"exa": {
"type": "http",
"url": "https://mcp.exa.ai/mcp?tools=agent_tools",
"headers": {
"x-api-key": "YOUR_EXA_API_KEY"
}
}
}
}
```
## References
- Exa Agent guide: https://docs.exa.ai/reference/agent-api-guide
- Exa MCP setup: https://docs.exa.ai/reference/exa-mcp
- Websets (verified list-building at scale): https://docs.exa.ai/websets/api/overview
- Full docs for LLMs: https://docs.exa.ai/llms.txt
From exa-labs/agent-skills at 5c3fd25, shown as plain text under its license: MIT (permissive). The license text is in LICENSE.
View SKILL.md on GitHub at 5c3fd25Files
- SKILL.md8.2 KB · 96a57ad18fee
1 file, 8.2 KB in total. Each file has a sha256 in the pin's manifest; the first 12 characters are shown.
Skill folder on GitHub at 5c3fd25More from Exa
Exa Agent
Exa Agent enables multi-step web research and list-building tasks by orchestrating searches and integrating premium data providers like Similarweb, financial…
Claude Code, Codex, Cursor +4 · about 2.3K tokens · pinned 6 days ago
search
This skill coordinates deep research using Exa search by analyzing query complexity, dispatching parallel subagents to search with domain-specific patterns…
Claude Code · about 3.5K tokens · pinned 6 days ago
build-with-exa
Build applications and agents using Exa's web search and content extraction APIs.
Claude Code, Codex, Cursor +4 · about 3K tokens · pinned 6 days ago
company-research
The skill enables agents to research companies using Exa's search and AI capabilities.
Claude Code · about 1.4K tokens · pinned 6 days ago
exa-contents
This skill extracts content from known URLs using Exa's /contents endpoint via HTTP POST requests.
Claude Code, Codex, Cursor +4 · about 2.1K tokens · pinned 6 days ago
exa-search
This skill enables agents to call the Exa Search API directly via HTTP POST for semantic web retrieval without an SDK.
Claude Code, Codex, Cursor +4 · about 3.3K tokens · pinned 6 days ago
Related in Marketing, sales and product
accelo-automation
This skill enables agents to automate Accelo project management tasks by discovering and executing operations through Composio's Accelo toolkit via Rube MCP.
by ComposioOfficial publisher
Agents not labelled yet · about 690 tokens · pinned 6 days ago
acculynx-automation
This skill automates Acculynx operations by discovering and executing available tools through the Rube MCP server.
by ComposioOfficial publisher
Agents not labelled yet · about 690 tokens · pinned 6 days ago
active-campaign-automation
This skill automates ActiveCampaign tasks by discovering and executing tools through Rube MCP and Composio's ActiveCampaign toolkit.
by ComposioOfficial publisher
Agents not labelled yet · about 710 tokens · pinned 6 days ago
adrapid-automation
This skill enables agents to automate Adrapid tasks through Composio's toolkit via Rube MCP.
by ComposioOfficial publisher
Agents not labelled yet · about 690 tokens · pinned 6 days ago
aeroleads-automation
This skill automates Aeroleads tasks by connecting to the Aeroleads toolkit via Composio's Rube MCP server.
by ComposioOfficial publisher
Agents not labelled yet · about 700 tokens · pinned 6 days ago
affinity-automation
This skill automates Affinity CRM operations by executing tools through Rube MCP and Composio's Affinity toolkit.
by ComposioOfficial publisher
Agents not labelled yet · about 690 tokens · pinned 6 days ago
Open roles at Exa
2 open roles on the jobs board
- Software Engineer, Intern
San Francisco, California, United States (On-site)
- Forward Deployed Engineer, APJ
Singapore, Singapore (On-site)