Skip to content
Sales
Skill

/auto-research-public

Autonomous cold email campaign launcher. Takes one target company domain, scrapes their website, generates an ICP with Claude, pulls matching leads via Prospeo, enriches emails + company descriptions, personalizes each lead with parallel Claude Code Task sub-agents (A/B/C

BOOST
From plugin
coldoutboundskills
76452 skills
Install
$ npx -y skills add growthenginenowoslawski/coldoutboundskills --skill auto-research-public --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/auto-research-public

Context preview

The summary Claude sees to decide when to auto-load this skill.

Autonomous cold email campaign launcher. Takes one target company domain, scrapes their website, generates an ICP with Claude, pulls matching leads via Prospeo, enriches emails + company descriptions, personalizes each lead with parallel Claude Code Task sub-agents (A/B/C

SKILL.md

auto-research-public.SKILL.md
name: auto-research-public
description: Autonomous cold email campaign launcher. Takes one target company domain, scrapes their website, generates an ICP with Claude, pulls matching leads via Prospeo, enriches emails + company descriptions, personalizes each lead with parallel Claude Code Task sub-agents (A/B/C variants), and uploads as a live Smartlead campaign. Uses local JSON files for state (no database required). Use for automated daily campaign launches after you have an initial `client-profile.yaml` from /icp-onboarding. Triggers on "auto-research", "launch an automated campaign", "daily campaign", "run the research loop".

Auto Research (Public)

Automated end-to-end campaign launcher. Feed it one target company domain, get back a live Smartlead campaign with per-lead personalization — in about 20 minutes.

This is the beginner-friendly version of the GEX internal `auto-research-v2`. All state lives in local JSON files; no Supabase, no Trigger.dev.

What you get

  • **Input:** one target company domain + your `client-profile.yaml`
  • **Output:** a running Smartlead campaign with:
  • 200-1,000 leads (depending on targeting tightness)
  • Per-lead personalization: 9 custom variables (situation, value, CTA × 3 variants)
  • A/B/C subject + body variants tested in parallel
  • Campaign assigned to your available inboxes
  • Schedule: Mon-Fri 8am-5pm your timezone

Prerequisites

Before running:

  • [ ] `client-profile.yaml` exists (run `/icp-onboarding` if not)
  • [ ] `SMARTLEAD_API_KEY` in env
  • [ ] `PROSPEO_API_KEY` in env
  • [ ] `MILLIONVERIFIER_API_KEY` in env (for email validation)
  • [ ] At least 20 Smartlead inboxes tagged "active" (run `/smartlead-inbox-manager` first)
  • [ ] At least 1 campaign template in Smartlead (or the script creates a fresh one)

The orchestration (Claude Code runs this)

Unlike the other skills, this skill orchestrates through the Claude Code conversation itself — Claude does the reasoning (ICP generation, copy writing, personalization), and phase scripts do the heavy API I/O. This is the pattern from the GEX v2 internal.

Phase 1: Scrape the target company

npx tsx scripts/phase-scrape.ts --domain=<target.com> --out=/tmp/auto/scrape.json

Output: JSON with `domain` + text content from homepage, /about, /product, /pricing, /customers.

Claude reads the output and writes a short analysis to `/tmp/auto/company-analysis.md`:

  • What the company does
  • Who their likely customers are
  • Social proof signals
  • Potential angles for outreach

Phase 2: Claude generates ICP filters

Reading `/tmp/auto/scrape.json` + `~/cold-email-ai-skills/profiles/<slug>/client-profile.yaml`, Claude writes Prospeo filters to `/tmp/auto/filters.json`:

{
  "job_titles": ["VP Marketing", "Head of Marketing", ...],
  "seniorities": ["Vice President", "Head", "Director"],
  "industries": ["Software Development", "Financial Services"],
  "company_size_min": 50,
  "company_size_max": 500,
  "countries": ["US"],
  "excluded_industries": ["Religious Institutions", "Government Administration"]
}

Claude MUST use exact Prospeo industry names from `~/cold-email-ai-skills/skills/icp-onboarding/references/prospeo-industries.md`.

Phase 3: Prospeo search

npx tsx scripts/phase-prospeo.ts --filters-file=/tmp/auto/filters.json --max-leads=1000 --out=/tmp/auto/leads.json

Output: JSON with `leads` array. Each lead has: `first_name`, `last_name`, `email` (may be empty), `linkedin_url`, `job_title`, `company_name`, `company_domain`, `company_industry`, `company_headcount`, `company_description`.

Phase 4: Email waterfall + description enrichment

npx tsx scripts/phase-enrich.ts --leads-file=/tmp/auto/leads.json --out=/tmp/auto/enriched.json

The script: 1. Checks each lead for email; if missing, hits Prospeo's `enrich-person` endpoint 2. If company_description is thin (<50 chars), scrapes company_domain homepage 3. Runs MillionVerifier on every candidate email 4. Writes enriched leads (only those with valid email) to output

Expect hit rates:

  • Retail/SMB: ~99% email found
  • B2B tech: ~65-80%
  • Healthcare/public sector: ~25-40%
  • MV rejection: ~20-30% of found emails

Phase 5: Copy writing (Claude)

Claude generates 3 copy variants (A, B, C) and writes to `/tmp/auto/variants.json`:

[
  {
    "variant": "A",
    "subject": "<concrete, specific, <60 chars>",
    "angle": "<pain observation>",
    "body_template": "Hi {{first_name}},\n\n{{situation_line_a}}\n\n{{value_line_a}}\n\n{{cta_line_a}}\n\n%signature%\n\nP.S. If this isn't relevant, just let me know and I won't reach out again."
  },
  {
    "variant": "B",
    "subject": "<different angle>",
    "angle": "<compliment + transition>",
    "body_template": "..."
  },
  {
    "variant": "C",
    "subject": "<third angle>",
    "angle": "<question>",
    "body_template": "..."
  }
]

Rules Claude MUST follow (run `/spam-word-checker` on output):

  • No em dashes (—). Use commas or periods.
  • No "leverage", "synergy", "solutions", "world-class", "cutting-edge".
  • Body: 50-90 words max.
  • Subject: under 60 chars, specific, no clickbait.
  • End with `%signature%` on its own line.

Phase 6: Personalization via Task sub-agents

Claude fans out to parallel Task sub-agents (one per variant × batch of 20-30 leads). See `/personalization-subagent-pattern` for the full pattern.

Per lead, each sub-agent writes to `/tmp/auto/personalization-<batch>-variant-<X>.json`:

[
  {
    "lead_id": "...",
    "situation_line": "One sentence about the company.",
    "value_line": "One sentence connecting to our offer.",
    "cta_soft": "One soft ask sentence."
  }
]

After all sub-agents finish, Claude merges by lead_id into `/tmp/auto/personalized.json`. Each lead now has 9 personalization fields.

Phase 7: Upload to Smartlead

npx tsx scripts/phase-upload.ts \
  --leads-file=/tmp/auto/personalized.json \
  --variants-file=/tmp/auto/variants.json \
Read more
Ships withcoldoutboundskills

Open-source Claude Code skills for cold email infrastructure, lead sourcing, copywriting, and operations. Built by GrowthEngineX from patterns across 1,000+ real B2B campaigns. 31 skills that work together.

Get the whole plugin
Stats
766
Stars
269
Forks
Active
Maintenance
TypeScript
Language
MIT
License
9d ago
Last commit
7mo ago
Created
5h ago
Added

Repo: growthenginenowoslawski/coldoutboundskills

Other skills on coldoutboundskills.