Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
This skill should be used when the user wants to find leads, prospects, or contacts matching their ICP (Ideal Customer Profile). It searches for companies via Exa and enriches contacts via Apollo, outputting to CSV and optionally syncing to Attio CRM. MANDATORY TRIGGERS: "find leads", "prospecting", "ICP search", "find contacts", "lead generation", "/prospector"
This skill should be used when the user wants to find leads, prospects, or contacts matching their ICP (Ideal Customer Profile). It searches for companies via Exa and enriches contacts via Apollo, outputting to CSV and optionally syncing to Attio CRM. MANDATORY TRIGGERS: "find leads", "prospecting", "ICP search", "find contacts", "lead generation", "/prospector"
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
Find leads matching your ICP via Exa company search + Apollo contact enrichment.
Run /prospector:setup first to configure your API keys: Exa (required): https://exa.ai - company discovery Apollo (required): https://apollo.io - contact enrichment Attio (optional): https://attio.com - CRM sync You can also set keys via environment variables: PROSPECTOR_EXA_API_KEY PROSPECTOR_APOLLO_API_KEY PROSPECTOR_ATTIO_API_KEY (optional)
/prospector:setup Collects and validates API keys, stores securely in ~/.config/prospector/config.json.
/prospector Asks ICP questions, searches Exa, enriches via Apollo, outputs CSV to Desktop.
When the user invokes /prospector, follow this workflow:
First, verify env vars or config exist: python3 -c " import json import os from pathlib import Path config_path = Path.home() / '.config' / 'prospector' / 'config.json' env_exa = bool(os.getenv('PROSPECTOR_EXA_API_KEY')) env_apollo = bool(os.getenv('PROSPECTOR_APOLLO_API_KEY')) env_attio = bool(os.getenv('PROSPECTOR_ATTIO_API_KEY')) if not config_path.exists(): print('NOT_FOUND') else: with open(config_path) as f: config = json.load(f) print('FOUND') print(f'exa: {bool(config.get(\"exa_api_key\"))}') print(f'apollo: {bool(config.get(\"apollo_api_key\"))}') print(f'attio: {bool(config.get(\"attio_api_key\"))}') print(f'env_exa: {env_exa}') print(f'env_apollo: {env_apollo}') print(f'env_attio: {env_attio}') " If NOT_FOUND and env vars are not set, tell user to run /prospector:setup first.
Use AskUserQuestion to collect ICP criteria in order: Question 1: Industry header: "Industry" question: "What industry are you targeting?" options: - label: "SaaS" description: "Software as a Service companies" - label: "Fintech" description: "Financial technology companies" - label: "Healthcare" description: "Healthcare and health tech" - label: "E-commerce" description: "Online retail and marketplaces" - label: "AI/ML" description: "Artificial intelligence and machine learning" - label: "Any" description: "No industry filter" multiSelect: false Question 2: Company Size header: "Size" question: "What company size are you targeting?" options: - label: "1-10" description: "Early stage startups" - label: "11-50" description: "Seed to Series A" - label: "51-200" description: "Series A to B" - label: "201-500" description: "Growth stage" - label: "500+" description: "Enterprise" - label: "Any" description: "No size filter" multiSelect: false Question 3: Funding Stage header: "Funding" question: "What funding stage are you targeting?" options: - label: "Pre-seed" description: "Pre-product market fit" - label: "Seed" description: "Building initial product" - label: "Series A" description: "Scaling product" - label: "Series B+" description: "Growth and expansion" - label: "Any" description: "No funding filter" multiSelect: false Question 4: Geography header: "Geography" question: "What geography are you targeting?" options: - label: "United States" description: "US-based companies" - label: "Europe" description: "European companies" - label: "Global" description: "Worldwide" - label: "Any" description: "No geography filter" multiSelect: false Question 5: Keywords (optional) header: "Keywords" question: "Any specific keywords that should appear in company descriptions? (optional)" options: - label: "Skip" description: "No keyword filter" - label: "Enter keywords" description: "I'll type specific keywords" multiSelect: false If "Enter keywords", ask for the text input. Question 6: Contact Count header: "Count" question: "How many contacts do you want to find?" options: - label: "25" description: "Quick search, lower API usage" - label: "50" description: "Balanced (recommended)" - label: "100" description: "Larger batch, more API usage" multiSelect: false
Execute the Python script with the collected ICP: cd [skill_directory]/scripts python3 -c " from prospector import run_search, export_csv, Config icp = { 'industry': '[INDUSTRY]', 'company_size': '[SIZE]', 'funding_stage': '[FUNDING]', 'geography': '[GEOGRAPHY]', 'keywords': '[KEYWORDS or empty string]' } leads = run_search(icp, num_contacts=[COUNT]) if leads: path = export_csv(leads) print(f'SUCCESS: {len(leads)} leads saved to {path}') else: print('NO_RESULTS: No leads found matching criteria') " Replace placeholders with actual values from questions.
If Attio is configured and leads were found, ask: header: "Attio" question: "Sync leads to Attio CRM?" options: - label: "Yes" description: "Sync companies and contacts to Attio" - label: "No" description: "Just keep the CSV" multiSelect: false If yes: cd [skill_directory]/scripts python3 -c " from prospector import sync_to_attio, Config, Lead import json # Load leads from the CSV we just created (or pass them directly) # For simplicity, re-run with sync leads = [...] # Pass leads from previous step companies, people = sync_to_attio(leads) print(f'SYNCED: {companies} companies, {people} contacts') "
Tell the user: How many leads were found Where the CSV was saved If Attio sync was done, how many records were synced
Config not found: Tell user to run /prospector:setup Invalid API key: Tell user which key failed, suggest re-running setup No results: Suggest broadening ICP criteria Partial failures: Report what succeeded, warn about failures
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.