Skip to content
Sales
Skill

/cold-email-lemlist

Cold email skill for Claude Code and Codex: build a targeted B2B prospect list with Vibe Prospecting, enrich it with firmographics and verified work emails, write a personalized icebreaker and email per prospect from their real company data, and push every lead into a live

BOOST
From plugin
explorium-public-skills
25822 skills
Install
$ npx -y skills add explorium-ai/gtm-skills --skill cold-email-lemlist --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/cold-email-lemlist

Context preview

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

Cold email skill for Claude Code and Codex: build a targeted B2B prospect list with Vibe Prospecting, enrich it with firmographics and verified work emails, write a personalized icebreaker and email per prospect from their real company data, and push every lead into a live

SKILL.md

cold-email-lemlist.SKILL.md
name: cold-email-lemlist
description: "Cold email skill for Claude Code and Codex: build a targeted B2B prospect list with Vibe Prospecting, enrich it with firmographics and verified work emails, write a personalized icebreaker and email per prospect from their real company data, and push every lead into a live Lemlist campaign with personalization variables pre-filled. Use for cold outbound, email personalization at scale, and Lemlist campaign setup. Triggers on 'cold email campaign', 'push leads to Lemlist', 'write personalized outbound emails', 'build a Lemlist sequence'. Works in Claude Code, Codex, Grok, and Claude Cowork."
compatibility: "Requires: Vibe Prospecting CLI (npx @vibeprospecting/vpai@latest) or connector, Lemlist API key"

Cold Email — Vibe Prospecting + Lemlist

Build a targeted prospect list, enrich it with firmographic and contact data, have Claude write personalized emails for each prospect, and push everything to a live Lemlist campaign — ready to send.

**What you'll end up with:**

  • A filtered, enriched prospect list with verified work emails
  • A personalized first-line (icebreaker) and full email per prospect, written by Claude using their actual company data
  • All leads uploaded to a Lemlist campaign with personalization variables pre-filled

---

Step 0 — Credential Check (Claude: always do this first)

Do not start Phase 1 until both checks pass.

Vibe Prospecting

**Cowork mode:** look for a tool matching `mcp__*__fetch-entities` in your tool list.

  • ✅ Found → proceed
  • ❌ Missing → tell the user: *"Please connect the Vibe Prospecting connector from the connector store, then let me know when it's done."* Wait. Do not continue until the tool appears.

**Claude Code / terminal:**

npx @vibeprospecting/vpai@latest --help
  • ✅ Lists tools → proceed
  • ❌ Error → run: `npx @vibeprospecting/vpai@latest config --api-key "YOUR_VP_API_KEY"`

Lemlist API Key

Ask the user: *"Please paste your Lemlist API key. I'll verify it and we'll get started."*

Get it from: Lemlist → Settings → Integrations → API.

Once provided, verify:

export LEMLIST_API_KEY="<key-from-user>"

curl -s "https://api.lemlist.com/api/team" \
  -u ":$LEMLIST_API_KEY" \
  | python3 -c "
import json, sys
d = json.load(sys.stdin)
print('✅ Connected —', d.get('name', 'team found')) if '_id' in d else print('❌ Failed:', d.get('message', 'unknown error'))
"
  • ✅ Connected → tell the user *"Both credentials verified — let's go."* Proceed to Phase 1.
  • ❌ Failed → ask the user to check the API key in Lemlist → Settings → Integrations → API. Do not proceed.

---

Phase 1 — Define Your ICP and Fetch Prospects

Ask the user for their targeting criteria if not already provided: > *"Who are we targeting? Tell me: industry, company size, geography, job titles/levels, and any tech stack or funding signals you want to filter on."*

Then run autocomplete for any controlled-vocab fields before fetching.

# Normalize industry/category values first
npx @vibeprospecting/vpai@latest autocomplete \
  --args '{"field": "linkedin_category", "query": "<user industry>"}' \
  --tool-reasoning 'Normalize industry filter for cold email prospect list'

# Normalize job titles if needed
npx @vibeprospecting/vpai@latest autocomplete \
  --args '{"field": "job_title", "query": "<user job title>"}' \
  --tool-reasoning 'Normalize job title for cold email prospect list'

Sample 5 prospects first (full chain — do not stop after fetch to ask for approval):

npx @vibeprospecting/vpai@latest fetch-entities --all-parameters

npx @vibeprospecting/vpai@latest fetch-entities \
  --args '{
    "entity_type": "prospects",
    "filters": {
      "job_level": {"values": ["<user levels>"]},
      "job_department": {"values": ["<user departments>"]},
      "linkedin_category": {"values": ["<normalized category>"]},
      "company_headcount_range": {"values": ["<user size range>"]},
      "company_country_code": {"values": ["<user geo>"]},
      "has_email": true
    }
  }' \
  --number-of-results 5 \
  --tool-reasoning '<user request verbatim>'

Note the `session_id` and `table_name` from the output — pass these to every subsequent step.

Run the full enrich chain on those 5 (Phase 2), show the result as a table, then ask: *"Does this look right? How many prospects do you want in the full run?"* Only after approval re-run at full scale.

---

Phase 2 — Enrich with Contact Info

Enrich the fetched prospects with verified work email, LinkedIn URL, and direct phone.

npx @vibeprospecting/vpai@latest enrich-prospects --all-parameters

npx @vibeprospecting/vpai@latest enrich-prospects \
  --args '{"enrichments": ["contacts", "profiles"]}' \
  --session-id <SESSION_ID> \
  --table-name <TABLE_NAME_FROM_FETCH_STEP> \
  --tool-reasoning '<user request verbatim>' \
  --csv

Drop any prospects where `work_email` is empty — Lemlist requires a valid email to add a lead.

**Output:** `prospects-enriched.csv` — columns include `first_name`, `last_name`, `work_email`, `linkedin_url`, `job_title`, `company_name`, `company_domain`, `employee_count`, `annual_revenue`, `tech_stack`, `last_funding_type`

---

Phase 3 — Write Personalized Emails

Read `prospects-enriched.csv` and write a personalized email for each prospect using their actual company data. Do not use generic templates — each email should reference something specific to that company.

Ask the user for: > *"What's the core value prop you want to lead with? And is there a specific pain point, use case, or trigger (e.g. recent funding, tech stack) you want to reference?"*

For each prospect, write:

**1. Icebreaker (1 sentence)** — a specific, researched opening line referencing something real about their company. Examples of what to use:

  • Their tech stack (e.g. "Noticed you're running Salesforce + HubSpot...")
  • Company size/growth signal (e.g. "With [X] employees and growing...")
  • Funding event (e.g. "Congrats on the Seri
Read more
Ships withexplorium-public-skills

Open-source B2B data enrichment, prospecting, and outbound skills for Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, Grok, OpenCode, Windsurf, Hermes-Agent, OpenClaw, Claude Cowork, and 60+ other agents — powered by Explorium and Vibe Prospecting.

Get the whole plugin

Other skills on explorium-public-skills.