skills$openclaw/prospector
slempiam8.5k

by slempiam

prospector – OpenClaw Skill

prospector is an OpenClaw Skills integration for ai ml workflows. |

8.5k stars594 forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026ai ml

Skill Snapshot

nameprospector
description| OpenClaw Skills integration.
ownerslempiam
repositoryslempiam/prospector
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @slempiam/prospector
last updatedFeb 7, 2026

Maintainer

slempiam

slempiam

Maintains prospector in the OpenClaw Skills directory.

View GitHub profile
File Explorer
7 files
.
commands
setup.md
6.8 KB
scripts
prospector.py
16.9 KB
_meta.json
274 B
README.md
3.8 KB
SKILL.md
6.3 KB
SKILL.md

name: prospector description: | 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" version: 1.0.0

Prospector

Find leads matching your ICP via Exa company search + Apollo contact enrichment.

Prerequisites

Run /prospector:setup first to configure your API keys:

You can also set keys via environment variables:

  • PROSPECTOR_EXA_API_KEY
  • PROSPECTOR_APOLLO_API_KEY
  • PROSPECTOR_ATTIO_API_KEY (optional)

Usage

Setup (one-time)

/prospector:setup

Collects and validates API keys, stores securely in ~/.config/prospector/config.json.

Find Leads

/prospector

Asks ICP questions, searches Exa, enriches via Apollo, outputs CSV to Desktop.

Main Command: /prospector

When the user invokes /prospector, follow this workflow:

Step 1: Check Config or Env Vars

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

Step 3: Run Search

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.

Step 4: Attio Sync (if configured)

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')
"

Step 5: Report Results

Tell the user:

  • How many leads were found
  • Where the CSV was saved
  • If Attio sync was done, how many records were synced

Error Handling

  • 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
README.md

Prospector

A Claude Code skill for finding leads matching your ICP (Ideal Customer Profile).

Workflow: Define your ICP → Search companies via Exa → Enrich contacts via Apollo → Export to CSV (+ optional Attio sync)

Installation

  1. Clone this repo:

    git clone https://github.com/YOUR_USERNAME/prospector.git ~/.claude/skills/prospector
    
  2. Install the Python dependency:

    pip install httpx
    
  3. Get API keys:

Usage

First-time Setup

Run the setup command to configure your API keys:

/prospector:setup

This will:

  1. Ask for your Exa API key and validate it
  2. Ask for your Apollo API key and validate it
  3. Optionally ask for your Attio API key
  4. Optionally set environment variables in your shell profile
  5. Save keys securely to ~/.config/prospector/config.json (chmod 600)

Finding Leads

Run the main command:

/prospector

You'll be asked:

  1. Industry - SaaS, Fintech, Healthcare, E-commerce, AI/ML, or Any
  2. Company Size - 1-10, 11-50, 51-200, 201-500, 500+, or Any
  3. Funding Stage - Pre-seed, Seed, Series A, Series B+, or Any
  4. Geography - United States, Europe, Global, or Any
  5. Keywords (optional) - Specific terms to look for
  6. Contact Count - 25, 50, or 100

Results are saved to your Desktop as prospector-leads-YYYY-MM-DD.csv.

CSV Output

The CSV includes:

  • company_name - Company name
  • company_domain - Company website domain
  • company_size - Employee count range
  • industry - Industry vertical
  • location - Contact's location
  • contact_name - Full name
  • contact_title - Job title
  • contact_email - Email address
  • contact_linkedin - LinkedIn profile URL
  • source - Data source (exa+apollo)

Attio CRM Sync

If you configured Attio during setup, you'll be asked after each search if you want to sync the leads. This will:

  • Create/update Companies in Attio (matched by domain to avoid duplicates)
  • Create People linked to their companies

CLI Usage

You can also run the script directly:

cd ~/.claude/skills/prospector/scripts

python prospector.py \
  --industry "SaaS" \
  --size "51-200" \
  --funding "Series A" \
  --geography "United States" \
  --keywords "AI automation" \
  --count 50 \
  --sync-attio

Config is stored at ~/.config/prospector/config.json:

{
  "exa_api_key": "your-exa-key",
  "apollo_api_key": "your-apollo-key",
  "attio_api_key": "your-attio-key"
}

The file is automatically set to chmod 600 (owner read/write only).

Environment Variables (Recommended)

You can set keys as environment variables instead of (or in addition to) the config file:

export PROSPECTOR_EXA_API_KEY="your-exa-key"
export PROSPECTOR_APOLLO_API_KEY="your-apollo-key"
export PROSPECTOR_ATTIO_API_KEY="your-attio-key"  # optional

Environment variables take precedence over the config file.

API Usage

  • Exa: ~1 API call per search (returns up to 100 companies)
  • Apollo: ~1 API call per company (returns up to 3 contacts each)
  • Attio: 1 API call per company + 1 per contact for sync

For 50 contacts, expect roughly:

  • 1 Exa call
  • 17-25 Apollo calls
  • 17-25 Attio company calls + 50 Attio people calls (if syncing)

Troubleshooting

"Run /prospector:setup first"

  • You haven't configured API keys yet. Run /prospector:setup.

"Config has insecure permissions"

  • Run chmod 600 ~/.config/prospector/config.json

"Apollo enrichment failed"

  • Apollo may not have data for that company, or you've hit rate limits.
  • The skill continues with partial data.

"No companies found"

  • Try broadening your ICP criteria (use "Any" for some filters).

License

MIT

Permissions & Security

Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.

Requirements

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)

FAQ

How do I install prospector?

Run openclaw add @slempiam/prospector in your terminal. This installs prospector into your OpenClaw Skills catalog.

Does this skill run locally or in the cloud?

OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.

Where can I verify the source code?

The source repository is available at https://github.com/openclaw/skills/tree/main/skills/slempiam/prospector. Review commits and README documentation before installing.