AWS Step Functions
aws/agent-toolkit-for-aws
Authors and edits AWS Step Functions state machines: writes Amazon States Language (ASL) in JSONata, and chooses and structures state types (Task, Choice, Map, Parallel, Pass, Wait, Succeed, Fail).
Agent skill
by growthenginenowoslawski in growthenginenowoslawski/coldoutboundskills
Export your entire Prospeo people search to CSV. An agent skill from growthenginenowoslawski/coldoutboundskills.
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill prospeo-full-export -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install growthenginenowoslawski/coldoutboundskills prospeo-full-export --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/prospeo-full-export .claude/skills/prospeo-full-export && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "prospeo-full-export" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/prospeo-full-export into .claude/skills/prospeo-full-export/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prospeo-full-export", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/prospeo-full-exportType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill prospeo-full-export -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install growthenginenowoslawski/coldoutboundskills prospeo-full-export --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/prospeo-full-export .agents/skills/prospeo-full-export && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "prospeo-full-export" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/prospeo-full-export into .agents/skills/prospeo-full-export/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prospeo-full-export", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill prospeo-full-export -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install growthenginenowoslawski/coldoutboundskills prospeo-full-export --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/prospeo-full-export .cursor/skills/prospeo-full-export && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "prospeo-full-export" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/prospeo-full-export into .cursor/skills/prospeo-full-export/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prospeo-full-export", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/growthenginenowoslawski/coldoutboundskills.git --path skills/prospeo-full-export--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill prospeo-full-export -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install growthenginenowoslawski/coldoutboundskills prospeo-full-export --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/prospeo-full-export .gemini/skills/prospeo-full-export && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "prospeo-full-export" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/prospeo-full-export into .gemini/skills/prospeo-full-export/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prospeo-full-export", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install growthenginenowoslawski/coldoutboundskills prospeo-full-exportInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill prospeo-full-export -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/prospeo-full-export .github/skills/prospeo-full-export && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "prospeo-full-export" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/prospeo-full-export into .github/skills/prospeo-full-export/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prospeo-full-export", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill prospeo-full-export -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install growthenginenowoslawski/coldoutboundskills prospeo-full-export --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/prospeo-full-export .opencode/skills/prospeo-full-export && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "prospeo-full-export" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/prospeo-full-export into .opencode/skills/prospeo-full-export/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prospeo-full-export", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
prospeo-full-exportExport your entire Prospeo people search to CSV. An agent skill from growthenginenowoslawski/coldoutboundskills.
Prospeo Full Export is an agent skill from growthenginenowoslawski/coldoutboundskills. Export your entire Prospeo people search to CSV. Build filters in Prospeo's UI, then use this skill to extract every result via the API — even searches over 25K. Handles pagination, rate limiting, deduplication, and state-by-state splitting automatically. Pair with /icp-prompt-builder on a 50-person sample to tune a qualification prompt BEFORE exporting 25K.
Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering OSINT, Rate limiting and Data cleaning. The repository describes itself as: Open-source Claude Code skills for cold email and outbound sales. Grade campaigns, export Prospeo searches, scrape Google Maps — all from Claude Code. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 25c5d85. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.prospeo.iolinkedin.comAlso links to:
prospeo.ioFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
PROSPEO_API_KEYAPI_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Prospeo Full Export loads about 5k tokens when it runs. Until then it costs about 95 tokens; SKILL.md has 1,248 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from growthenginenowoslawski/coldoutboundskills at commit 25c5d85, republished under its MIT licence (© growthenginenowoslawski). 1,248 words, ~5,003 tokens.
.claude/skills/prospeo-full-export/SKILL.md (or your agent's skills folder).Extract your entire Prospeo people search to a CSV file. Build your search in Prospeo's UI, then let Claude pull every single result via the API — even if the search has more than 25,000 results.
Before exporting more than 500 contacts, run Prospeo on a 50-contact sample, then invoke /icp-prompt-builder to tune a qualification prompt in 3-5 rounds of 10 (with your approval each round). Apply the tuned prompt to the full export to filter out bad fits.
Why required: email enrichment downstream costs $0.05-$0.15 per person. A 25K export that's 40% wrong-fit wastes $500-$1,500 on email-finding that goes nowhere. The ICP prompt builder takes 10-15 min and saves that cost 40-70% of the time.
Safe skip: only if your Prospeo filter is already extremely tight (e.g., 5 exact titles + 1 industry + narrow headcount) AND you've run the same filter successfully before. Even then, run /icp-prompt-builder on 10 samples as a sanity check — it's nearly free to confirm.
Set it as an environment variable so Claude can use it:
# Add to your shell profile (~/.zshrc or ~/.bashrc)
export PROSPEO_API_KEY="your_api_key_here"Then restart your terminal or run source ~/.zshrc.
Security note: Never paste your API key directly into a script file. Always use environment variables.
Go to prospeo.io/app/search and use the filters to build your search. The UI lets you filter by:
Note the total result count shown in the UI — you'll need this to estimate credits.
Just describe what you filtered for. Examples:
"I searched for CEOs and CTOs at companies with 11-500 employees in the US, in the Information Technology industry, with verified emails."
"I'm looking for VP of Sales and Head of Sales at SaaS companies in California with 50-200 employees."
"I need all Marketing Directors in the US at companies using HubSpot, 20-1000 headcount."
Claude will:
These are the exact filter names the Prospeo API accepts. When you describe your search, Claude maps your description to these:
| UI Filter | API Filter Key | Format |
|---|---|---|
| Job Title | person_job_title | { include: ["CEO", "CTO"], exclude: ["Intern"] } |
| Location | person_location_search | { include: ["California, United States #US"] } |
| Industry | company_industry | { include: ["Information Technology"] } |
| Headcount | company_headcount_custom | { min: 11, max: 500 } |
| Technology | company_technology | { include: ["Salesforce", "HubSpot"] } |
| Revenue | company_revenue_custom | { min: 1000000, max: 50000000 } |
| Founded Year | company_founding_year | { min: 2010, max: 2025 } |
| Company Name | company_name | { include: ["Acme"], exclude: ["Test"] } |
| Company Domain | company_domain | { include: ["acme.com"] } |
| Has Email | person_contact_details | { email: ["VERIFIED"] } |
| Has Phone | person_contact_details | { mobile: ["TRUE"] } |
| Exact Title Match | person_job_title | { include: [...], match_only_exact_job_titles: true } |
Locations must follow this exact format:
"United States #US", "United Kingdom #GB", "Canada #CA""California, United States #US", "Texas, United States #US""San Francisco, California, United States #US"| Label | min | max |
|---|---|---|
| 1-10 | 1 | 10 |
| 11-50 | 11 | 50 |
| 51-200 | 51 | 200 |
| 201-500 | 201 | 500 |
| 501-1000 | 501 | 1000 |
| 1001-5000 | 1001 | 5000 |
| 5001-10000 | 5001 | 10000 |
| 10001+ | 10001 | (omit max) |
Endpoint: POST https://api.prospeo.io/search-person
Auth: X-KEY header with your API key
Rate Limit: 2 requests per second (the script handles this automatically)
Pagination: 25 results per page, max 1000 pages = 25,000 results per search
Credits: 1 credit per request that returns at least 1 result. A 25,000-result search costs ~1,000 credits.
const response = await fetch('https://api.prospeo.io/search-person', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-KEY': process.env.PROSPEO_API_KEY!,
},
body: JSON.stringify({
page: 1, // 1-1000
filters: {
person_job_title: { include: ['CEO', 'CTO'] },
person_location_search: { include: ['United States #US'] },
company_headcount_custom: { min: 11, max: 500 },
company_industry: { include: ['Information Technology'] },
person_contact_details: { email: ['VERIFIED'] },
},
}),
});{
error: false,
results: [
{
person: {
person_id: "abc123",
first_name: "Jane",
last_name: "Smith",
full_name: "Jane Smith",
current_job_title: "CEO",
linkedin_url: "https://linkedin.com/in/janesmith",
email: "jane@acme.com",
email_status: "VERIFIED",
phone: "+14155551234",
location: { city: "San Francisco", state: "California", country: "United States" }
},
company: {
name: "Acme Corp",
domain: "acme.com",
linkedin_url: "https://linkedin.com/company/acme",
industry: "Information Technology",
headcount: 150,
headcount_range: "51-200",
technologies: ["Salesforce", "HubSpot"],
location: { city: "San Francisco", state: "California", country: "United States" }
}
}
],
pagination: {
current_page: 1,
total_page: 400,
total_count: 10000,
per_page: 25
}
}Prospeo caps any single search at 25,000 results (1,000 pages x 25 per page). If your US-wide search has more than 25K results, the script automatically splits it into 50 separate state-level searches.
How it works:
total_count"United States #US" with each state (e.g., "California, United States #US")This means you can extract hundreds of thousands of results from a single search definition.
California, Texas, Florida, New York, Illinois, Pennsylvania,
Ohio, Georgia, North Carolina, Michigan, New Jersey, Virginia,
Washington, Arizona, Massachusetts, Tennessee, Indiana, Missouri,
Maryland, Wisconsin, Colorado, Minnesota, South Carolina, Alabama,
Louisiana, Kentucky, Oregon, Oklahoma, Connecticut, Utah, Iowa,
Nevada, Arkansas, Mississippi, Kansas, New Mexico, Nebraska,
Idaho, West Virginia, Hawaii, New Hampshire, Maine, Montana,
Rhode Island, Delaware, South Dakota, North Dakota, Alaska,
Vermont, WyomingWhen Claude generates the export script, it follows this pattern:
import { writeFileSync } from 'fs';
// --- Config ---
const API_KEY = process.env.PROSPEO_API_KEY;
if (!API_KEY) {
console.error('Set PROSPEO_API_KEY environment variable first.');
process.exit(1);
}
const RATE_LIMIT_MS = 500; // 2 requests/sec
const MAX_RETRIES = 5;
// --- Types ---
interface ProspeoFilters {
person_job_title?: { include?: string[]; exclude?: string[]; match_only_exact_job_titles?: boolean };
person_location_search?: { include?: string[]; exclude?: string[] };
company_headcount_custom?: { min?: number; max?: number };
company_industry?: { include?: string[]; exclude?: string[] };
company_technology?: { include?: string[]; exclude?: string[] };
company_revenue_custom?: { min?: number; max?: number };
company_founding_year?: { min?: number; max?: number };
company_name?: { include?: string[]; exclude?: string[] };
company_domain?: { include?: string[]; exclude?: string[] };
person_contact_details?: { email?: string[]; mobile?: string[]; operator?: string };
}
// --- Rate-limited fetch ---
const sleep = (ms: number) => new Promise(r => setTimeout(r, ms));
async function searchPage(filters: ProspeoFilters, page: number, retries = 0): Promise<any> {
await sleep(RATE_LIMIT_MS);
const res = await fetch('https://api.prospeo.io/search-person', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-KEY': API_KEY! },
body: JSON.stringify({ page, filters }),
});
if (res.status === 429 && retries < MAX_RETRIES) {
const backoff = Math.min(2000 * Math.pow(2, retries), 60000);
console.log(` Rate limited, waiting ${backoff / 1000}s...`);
await sleep(backoff);
return searchPage(filters, page, retries + 1);
}
if (!res.ok) throw new Error(`API error: ${res.status} ${res.statusText}`);
return res.json();
}
// --- Deduplication ---
const seenLinkedIn = new Set<string>();
const seenEmail = new Set<string>();
function isDuplicate(person: any): boolean {
const li = person.linkedin_url;
const em = person.email;
if (li && seenLinkedIn.has(li)) return true;
if (em && seenEmail.has(em)) return true;
if (li) seenLinkedIn.add(li);
if (em) seenEmail.add(em);
return false;
}
// --- CSV helpers ---
function escapeCSV(val: any): string {
if (val == null) return '';
const s = String(val);
return s.includes(',') || s.includes('"') || s.includes('\n')
? `"${s.replace(/"/g, '""')}"` : s;
}
function resultToRow(r: any): string[] {
const p = r.person || {};
const c = r.company || {};
return [
p.first_name, p.last_name, p.full_name, p.current_job_title,
p.email, p.email_status, p.phone, p.linkedin_url,
p.location?.city, p.location?.state, p.location?.country,
c.name, c.domain, c.linkedin_url, c.industry,
c.headcount, c.headcount_range,
(c.technologies || []).join('; '),
c.location?.city, c.location?.state, c.location?.country,
];
}
const CSV_HEADERS = [
'first_name', 'last_name', 'full_name', 'job_title',
'email', 'email_status', 'phone', 'linkedin_url',
'person_city', 'person_state', 'person_country',
'company_name', 'company_domain', 'company_linkedin', 'company_industry',
'company_headcount', 'company_headcount_range',
'company_technologies',
'company_city', 'company_state', 'company_country',
];
// --- Main export ---
async function exportSearch(filters: ProspeoFilters, outputFile: string, maxResults?: number) {
console.log('Running initial search to check result count...');
const first = await searchPage(filters, 1);
if (first.error) {
console.error('API error:', first.message);
process.exit(1);
}
const totalCount = first.pagination?.total_count || 0;
const totalPages = first.pagination?.total_page || 0;
console.log(`Found ${totalCount.toLocaleString()} total results (${totalPages} pages)`);
// Check if we need state-by-state splitting
const needsSplit = totalCount > 20000
&& filters.person_location_search?.include?.some(l => l === 'United States #US');
if (needsSplit) {
console.log('Search exceeds 20K — switching to state-by-state mode...');
await exportByState(filters, outputFile, maxResults);
return;
}
// Simple pagination
const rows: string[][] = [];
const pagesToFetch = maxResults ? Math.min(Math.ceil(maxResults / 25), totalPages) : totalPages;
const creditsEstimate = pagesToFetch;
console.log(`Will fetch ${pagesToFetch} pages (~${creditsEstimate} credits)`);
// Process page 1 results we already have
for (const r of first.results || []) {
if (!isDuplicate(r.person)) rows.push(resultToRow(r));
}
console.log(` Page 1/${pagesToFetch} — ${rows.length} contacts`);
for (let page = 2; page <= pagesToFetch; page++) {
if (maxResults && rows.length >= maxResults) break;
const data = await searchPage(filters, page);
for (const r of data.results || []) {
if (!isDuplicate(r.person)) rows.push(resultToRow(r));
}
if (page % 50 === 0 || page === pagesToFetch) {
console.log(` Page ${page}/${pagesToFetch} — ${rows.length} contacts so far`);
}
}
writeCSV(outputFile, rows);
}
// --- State-by-state export ---
const US_STATES = [
'California', 'Texas', 'Florida', 'New York', 'Illinois', 'Pennsylvania',
'Ohio', 'Georgia', 'North Carolina', 'Michigan', 'New Jersey', 'Virginia',
'Washington', 'Arizona', 'Massachusetts', 'Tennessee', 'Indiana', 'Missouri',
'Maryland', 'Wisconsin', 'Colorado', 'Minnesota', 'South Carolina', 'Alabama',
'Louisiana', 'Kentucky', 'Oregon', 'Oklahoma', 'Connecticut', 'Utah', 'Iowa',
'Nevada', 'Arkansas', 'Mississippi', 'Kansas', 'New Mexico', 'Nebraska',
'Idaho', 'West Virginia', 'Hawaii', 'New Hampshire', 'Maine', 'Montana',
'Rhode Island', 'Delaware', 'South Dakota', 'North Dakota', 'Alaska',
'Vermont', 'Wyoming',
];
async function exportByState(filters: ProspeoFilters, outputFile: string, maxResults?: number) {
const rows: string[][] = [];
for (let i = 0; i < US_STATES.length; i++) {
if (maxResults && rows.length >= maxResults) break;
const state = US_STATES[i];
const stateFilters = JSON.parse(JSON.stringify(filters));
stateFilters.person_location_search.include =
stateFilters.person_location_search.include.map((loc: string) =>
loc === 'United States #US' ? `${state}, United States #US` : loc
);
const first = await searchPage(stateFilters, 1);
const stateTotal = first.pagination?.total_count || 0;
const statePages = first.pagination?.total_page || 0;
if (stateTotal === 0) {
console.log(` [${i + 1}/50] ${state}: 0 results, skipping`);
continue;
}
// Process page 1
for (const r of first.results || []) {
if (!isDuplicate(r.person)) rows.push(resultToRow(r));
}
// Paginate remaining
for (let page = 2; page <= statePages; page++) {
if (maxResults && rows.length >= maxResults) break;
const data = await searchPage(stateFilters, page);
for (const r of data.results || []) {
if (!isDuplicate(r.person)) rows.push(resultToRow(r));
}
}
console.log(` [${i + 1}/50] ${state}: ${stateTotal.toLocaleString()} results — ${rows.length.toLocaleString()} total contacts`);
}
writeCSV(outputFile, rows);
}
// --- Write CSV ---
function writeCSV(outputFile: string, rows: string[][]) {
const lines = [CSV_HEADERS.join(',')];
for (const row of rows) {
lines.push(row.map(escapeCSV).join(','));
}
writeFileSync(outputFile, lines.join('\n'), 'utf-8');
console.log(`\nExport complete!`);
console.log(` File: ${outputFile}`);
console.log(` Contacts: ${rows.length.toLocaleString()}`);
console.log(` Credits used: ~${seenLinkedIn.size + seenEmail.size > 0 ? 'see above' : rows.length / 25}`);
}
// --- Entry point ---
// Claude will fill in the filters based on your search description
const filters: ProspeoFilters = {
// FILTERS_GO_HERE
};
const outputFile = 'prospeo-export.csv';
exportSearch(filters, outputFile);Before running, Claude will estimate the credit cost:
| Total Results | Pages | Credits | Approximate Cost (varies by plan) |
|---|---|---|---|
| 1,000 | 40 | 40 | ~$2 |
| 5,000 | 200 | 200 | ~$10 |
| 25,000 | 1,000 | 1,000 | ~$50 |
| 100,000 (state split) | ~4,000 | ~4,000 | ~$200 |
Claude will always tell you the estimated cost and ask for confirmation before running the full export.
Simple search:
"Export all CEOs at 11-50 person companies in California in the SaaS industry with verified emails."
Large US-wide search:
"I need every VP of Sales and Head of Sales in the US at companies with 50-500 employees. The Prospeo UI shows 87,000 results."
With exclusions:
"Marketing Directors in the US, exclude staffing and recruiting industries, 20-200 headcount, must have verified email."
With technology filter:
"CTOs at companies using Shopify in the US, any company size."
Your API key isn't set. Run: export PROSPEO_API_KEY="your_key" in your terminal.
Your API key is invalid. Check it at prospeo.io/app/settings/api.
You're out of credits. Top up your Prospeo account.
Rate limited. The script handles this automatically with exponential backoff. If it persists, you're making too many concurrent requests — only run one export at a time.
#US, #GB, etc.)person_contact_details filter to see all results (not just those with verified emails)The script deduplicates by LinkedIn URL automatically. Some contacts may appear in multiple state searches if they've relocated — the dedup handles this.
fetch support)npm install -g tsx to run .ts files directly)No other dependencies needed — the script uses only built-in Node.js modules.
Run /icp-prompt-builder on a 50-contact sample (required step above). Apply the tuned prompt to your full export, then /list-quality-scorecard to grade.
Next: /campaign-copywriting → /smartlead-campaign-upload-public.
Or wait: if Prospeo returned <500 contacts for your filter, your ICP may be too narrow. Broaden titles (add synonyms) or industries before scaling.
/icp-prompt-builder — required qualification pass before scaling/list-quality-scorecard — grade the filtered list/campaign-copywriting — write the emails/smartlead-campaign-upload-public — launch in DRAFT© growthenginenowoslawski, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/prospeo-full-export of growthenginenowoslawski/coldoutboundskills.
Open the folder on GitHubat commit 25c5d85
Prospeo Full Export next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Prospeo Full Export this skillgrowthenginenowoslawski/coldoutboundskills | 753 | — | ~5k | Automated safety check: Pass | MIT | |
| AWS Step Functionsaws/agent-toolkit-for-aws | 2.8k | — | ~3.4k | Automated safety check: Pass | Apache-2.0 | |
| Education Cloud Course Catalog Migrateforcedotcom/sf-skills | 1.1k | — | ~5.4k | Automated safety check: Pass | Apache-2.0 | |
| Excel Spreadsheet Creation and Editinganthropics/skills | 180k | 4 repos | ~2.1k | Automated safety check: Pass | Proprietary | |
| XLSX Spreadsheet ToolkitXiaomiMiMo/MiMo-Code | 14k | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| API Design Safetydoccker/cc-use-exp | 1.1k | — | ~2.6k | Automated safety check: Pass | Custom licence |
aws/agent-toolkit-for-aws
Authors and edits AWS Step Functions state machines: writes Amazon States Language (ASL) in JSONata, and chooses and structures state types (Task, Choice, Map, Parallel, Pass, Wait, Succeed, Fail).
forcedotcom/sf-skills
A skill your agent uses to migrate course catalog data from external sources (CSV, PDF, website) and bulk-create Learning and LearningCourse records in Education Cloud.
anthropics/skills
Creates, edits and analyzes spreadsheets (.xlsx, .xlsm, .csv, .tsv) with openpyxl and pandas, writing live formulas and recalculating to confirm zero formula errors.
XiaomiMiMo/MiMo-Code
Builds, edits, cleans, recalculates and reads Excel workbooks and CSV files with openpyxl and pandas, plus LibreOffice for recalculation and PDF export.
doccker/cc-use-exp
当设计或修改 REST API 响应结构、处理 API 返回值,或生成 Excel/CSV/PDF/对账文件等下游产物时触发。防止 API 设计缺陷导致的字段错位、类型歧义,以及生成产物时关键字段缺失但静默成功的问题。
sgharlow/claude-code-recipes
Clean and standardize messy tabular data (CSV, spreadsheet paste, system exports) into an analysis-ready dataset — consistent dates and names, typed columns, duplicates identified, missing values…
growthenginenowoslawski/coldoutboundskills
Diagnostic audit for a running cold email program. An agent skill from growthenginenowoslawski/coldoutboundskills.
growthenginenowoslawski/coldoutboundskills
Conversational intake for cold email campaigns. An agent skill from growthenginenowoslawski/coldoutboundskills.
growthenginenowoslawski/coldoutboundskills
META skill — build the largest possible qualified lead list for any request, end to end.
growthenginenowoslawski/coldoutboundskills
Autonomous cold email campaign launcher. An agent skill from growthenginenowoslawski/coldoutboundskills.
growthenginenowoslawski/coldoutboundskills
Use the Blitz API to find decision-makers at specific companies when you already have a list of company domains.
growthenginenowoslawski/coldoutboundskills
Compare reply rates, bounce rates, and positive reply rates broken down by inbox type (SMTP / Gmail / Outlook) for a Smartlead account.
Categories
Export your entire Prospeo people search to CSV. An agent skill from growthenginenowoslawski/coldoutboundskills. Prospeo Full Export is an agent skill from growthenginenowoslawski/coldoutboundskills. Export your entire Prospeo people search to CSV.
Prospeo Full Export fits situations like: extract every result via the API — even searches over 25K; tasks that involve OSINT; tasks that involve Rate limiting.
Run `npx skills add growthenginenowoslawski/coldoutboundskills --skill prospeo-full-export -a claude-code`. Or copy the skill folder (skills/prospeo-full-export in growthenginenowoslawski/coldoutboundskills) into .claude/skills/prospeo-full-export in your project. Claude Code loads it when a task matches its description.
Run `npx skills add growthenginenowoslawski/coldoutboundskills --skill prospeo-full-export -a codex`. Or copy the skill folder (skills/prospeo-full-export in growthenginenowoslawski/coldoutboundskills) into .agents/skills/prospeo-full-export in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add growthenginenowoslawski/coldoutboundskills --skill prospeo-full-export -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/prospeo-full-export, .gemini/skills/prospeo-full-export, .github/skills/prospeo-full-export and .opencode/skills/prospeo-full-export in your project.
Going by SKILL.md and its folder, Prospeo Full Export needs the command-line tools its instructions call (npm) and credentials named PROSPEO_API_KEY and API_KEY. Our summary lists: A credential in PROSPEO_API_KEY; A credential in API_KEY.
SKILL.md names 3 domains. In commands or code: api.prospeo.io and linkedin.com; the agent is likely to contact these when it follows the instructions. As links in the text: prospeo.io. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Prospeo Full Export is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Prospeo Full Export: AWS Step Functions (aws/agent-toolkit-for-aws, 2.8k stars), Education Cloud Course Catalog Migrate (forcedotcom/sf-skills, 1.1k stars), Excel Spreadsheet Creation and Editing (anthropics/skills, 180k stars) and XLSX Spreadsheet Toolkit (XiaomiMiMo/MiMo-Code, 14k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
growthenginenowoslawski (a GitHub user) maintains it in growthenginenowoslawski/coldoutboundskills, which has 753 GitHub stars. The repository holds 49 skills in this directory. The repository was last updated on October 5, 2026.
Source: growthenginenowoslawski/coldoutboundskills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.