agentleFS
Itsme23476Itsme23476/everyday-claude-skills/lead-campaign/SKILL.md

lead-campaign

Skill1 starsChanged 3 months agoMITView on GitHub

Runs the complete outbound pipeline end to end — pulls a targeted lead list from Apollo.io, verifies every email address, writes a 5-email cold sequence (initial + 4 follow-ups), and builds the campaign inside Instantly. Use this skill whenever the user asks to "find leads", "build a lead list", "pull leads from Apollo", "set up a cold email campaign", "create an Instantly campaign", "launch outreach", "write a cold email sequence", "book more calls", or names a niche to target such as "dental clinics in the US and UK". Also trigger when the user wants to go from a target market to a live sending campaign in one pass, even without naming Apollo or Instantly. Ships with a dental-clinic ICP preset and an AI lead-follow-up offer preset.

The file

We split this skill into the rules it gives an agent

10 rules. About 0 are common, 7 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈7

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Default run (dental clinics, US/CA/UK, AI lead-follow-up offer):

    line 20
  2. Distinctive:

    Run the phases in order. Do not skip Phase 0 or Phase 5.

    line 30
  3. Distinctive:

    Read the preset and restate it back in four lines, then proceed unless the user corrects you:

    line 34
  4. Distinctive:

    Never ask more than one clarifying question.

    line 45
  5. Distinctive:

    Search results return masked emails.

    line 62
  6. Distinctive:

    Never push an Apollo list straight into Instantly.

    line 71
  7. Very specific:

    Keep valid only. Drop invalid, disposable, and unknown.

    line 80
  8. Distinctive:

    All 5 emails in full, exactly as they'll send

    line 141
  9. Distinctive:

    Only on an explicit yes:

    line 147
  10. Very specific:

    Write ./campaign/RUN.md: Apollo pulled → verified → pushed, credit spend, per-campaign IDs, and the ramp plan.

    line 156

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Lead Campaign — Apollo → Verify → Instantly

Turns a target market into a running cold email campaign in one pass: Apollo search → email verification → sequence copy → Instantly campaign, built paused and launched only on explicit approval.

When to Use This Skill

  • User asks to find leads, build a prospect list, or pull a list from Apollo
  • User asks to set up, build, or launch a cold email campaign / outreach campaign
  • User asks for a cold email sequence with follow-ups
  • User names a niche + geography + company size and wants to sell into it
  • User says "run the pipeline", "do the full thing", "leads to campaign"

Quick Start

Default run (dental clinics, US/CA/UK, AI lead-follow-up offer):

bash ~/.claude/skills/lead-campaign/scripts/pipeline.sh --icp dental --offer ai-followup --limit 1000

Anything else: read the ICP config, edit it in memory for the new niche, then run the same six phases below.

Procedural Workflow

Run the phases in order. Do not skip Phase 0 or Phase 5.

Phase 0 — Lock the brief (one message, no interrogation)

Read the preset and restate it back in four lines, then proceed unless the user corrects you:

cat ~/.claude/skills/lead-campaign/config/icp.dental.json
cat ~/.claude/skills/lead-campaign/config/offer.ai-followup.json

Restate: niche · geography · company size · titles · volume target · offer.

Defaults if the user gave no detail: dental clinics · US/CA/UK · 2–50 employees (hard ceiling 250) · owner/practice-manager titles · verified emails only.

Never ask more than one clarifying question. If the user already named the niche, the geo, and the size band, ask nothing — go.

Phase 1 — Pull leads from Apollo

Preferred route is the Apollo MCP tools. If they're loaded, use them. Otherwise run the script:

python3 ~/.claude/skills/lead-campaign/scripts/apollo_search.py \
  --icp ~/.claude/skills/lead-campaign/config/icp.dental.json \
  --limit 1000 \
  --out ./campaign/01_apollo_raw.csv

Rules that matter:

  • contact_email_status = ["verified"] is always set. Apollo's "verified" is a starting filter, not a substitute for Phase 2.
  • Employee bands are passed as Apollo ranges (1,10 / 11,20 / 21,50). The 250 ceiling is a fallback band only used if the tight band returns too few leads — tell the user when you widen it.
  • One contact per company by default. Two decision-makers at the same 6-person clinic reads as spam.
  • Search results return masked emails. The script bulk-enriches in batches of 10 to reveal them. That step burns Apollo credits — report the credit spend in the summary.

Full parameter reference:

cat ~/.claude/skills/lead-campaign/references/apollo-search.md

Phase 2 — Verify every address

Never push an Apollo list straight into Instantly. Bounce rate above 3% damages the sending domains.

python3 ~/.claude/skills/lead-campaign/scripts/verify_emails.py \
  --in ./campaign/01_apollo_raw.csv \
  --out ./campaign/02_verified.csv \
  --provider instantly

Keep valid only. Drop invalid, disposable, and unknown. Route catch_all/accept_all to a separate file and hold it back from the first send — offer it to the user as a second-wave list.

Report the pass rate. Below 70% means the Apollo filters were too loose; say so.

cat ~/.claude/skills/lead-campaign/references/email-verification.md

Phase 3 — Write the sequence

Load the offer preset and the copy playbook, then write 5 emails: initial + 4 follow-ups.

cat ~/.claude/skills/lead-campaign/references/copywriting.md
cat ~/.claude/skills/lead-campaign/assets/sequence.dental-ai-followup.json

Structure (day offsets are gaps from the previous email):

#DayJobSubject
10Name the leak (speed-to-lead), soft askfresh subject
2+3Mechanism — how it works in 3 linesblank (threads)
3+4Proof / specific outcomeblank
4+4Kill the top objectionblank
5+5Breakup, permission closeblank

Hard rules:

  • Under 90 words each. Email 1 under 75.
  • One ask per email. Interest-based CTA ("worth a look?"), never "book a 30-minute call" on email 1.
  • Blank subject on steps 2–5 so Instantly threads them into the original.
  • Never invent client names, clinic names, or results. Proof placeholders stay as {{proofPoint}} until the user fills them in. Ask for one real number before writing email 3.
  • Two variants on email 1 for A/B. One variant is enough on the rest.
  • Spintax uses single braces {a|b}; Instantly variables use double {{firstName}}. Don't nest them.

Phase 4 — Build the campaign in Instantly

Split by region — one campaign for US + CA (America/New_York), one for UK (Europe/London). A single campaign can't send at 9am in both.

python3 ~/.claude/skills/lead-campaign/scripts/instantly_push.py \
  --leads ./campaign/02_verified.csv \
  --sequence ./campaign/03_sequence.json \
  --name "Dental · AI Follow-Up · US-CA" \
  --region us \
  --daily-limit 40

The script creates the campaign paused and uploads leads. It never activates. Settings it applies:

  • stop_on_reply: true, text_only: true
  • link tracking off, open tracking off (pixel/redirect hurts inbox placement on cold)
  • email_gap: 10 minutes, daily limit split across connected mailboxes
cat ~/.claude/skills/lead-campaign/references/instantly-api.md

Phase 5 — Approval gate (never skip)

Print for the user before anything sends:

  1. Lead count per campaign, after verification
  2. All 5 emails in full, exactly as they'll send
  3. Sending schedule, daily limit, and mailbox count
  4. Est. days to work the full list at that limit

Then ask plainly: "Activate, or change something first?"

Only on an explicit yes:

python3 ~/.claude/skills/lead-campaign/scripts/instantly_push.py --activate <campaign_id>

Cold email at volume is outward-facing and hard to unsend. One approval covers one campaign — a second campaign needs a second yes.

Phase 6 — Report

Write ./campaign/RUN.md: Apollo pulled → verified → pushed, credit spend, per-campaign IDs, and the ramp plan. Then read the deliverability guide and hand the user the first-two-weeks ramp:

cat ~/.claude/skills/lead-campaign/references/deliverability-compliance.md

Tool Usage

NeedRead
Apollo filters, employee bands, enrichmentreferences/apollo-search.md
Verifier statuses, what to dropreferences/email-verification.md
Instantly payload shapes, schedule objectreferences/instantly-api.md
Cold email frameworks, subject lines, spam wordsreferences/copywriting.md
Ramp schedule, CAN-SPAM / CASL / GDPRreferences/deliverability-compliance.md
Dental sequence, ready to pushassets/sequence.dental-ai-followup.json

Examples

See examples/ for a full dental run and a swapped-niche run.

Notes / Edge Cases

  • Under 200 leads after verification — the ICP is too narrow. Widen the employee ceiling to 250 or add adjacent titles before adding countries.
  • Over 5,000 leads — don't push it all. Cap the first campaign at what the mailboxes can work in 30 days and hold the rest.
  • New sending domains — do not launch at full volume. 20/day per mailbox for week one, then step up. The ramp table is in the deliverability reference.
  • UK sole traders and partnerships are treated as individuals under PECR, not corporate subscribers. The compliance reference covers what that changes.
  • Catch-all domains are common in healthcare. Expect 15–25% of a dental list to land there; that's normal, not a broken run.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.