Cold Email Personalizer

Personalize email

by explorium-ai · MIT license · ★ 197 on GitHub

Personalize email cover

Cold email personalization skill for Claude Code and Codex: assemble an intent and firmographic signal pack for one prospect so a downstream LLM can compose a truly personalized outbound email. Pulls company firmographics, recent…

---
name: personalize-email
description: "Cold email personalization skill for Claude Code and Codex: assemble an intent and firmographic signal pack for one prospect so a downstream LLM can compose a truly personalized outbound email. Pulls company firmographics, recent business events, funding, workforce trends, LinkedIn posts, website changes, and intent topics. Returns a structured signal brief ready for cold outreach, follow-up, re-engagement, or expansion emails. Use for outbound, lead generation, account-based selling, and signal-led email personalization. Triggers on 'personalize an email', 'draft outreach', 'outbound to X', 'find a hook for this contact', 'build me a personalization brief'. Works in Claude Code, Codex, and Hermes-Agent."
---

# Personalize Email

Gather every personalization signal for a single prospect and their company so the calling model can write a sharp, specific email. This skill does NOT draft the email: it returns a structured brief; the calling model composes copy.

## Input

- Prospect identifier (required): full name + company, full name + company domain, LinkedIn URL, email, or a role at a company ("CFO at Notion") with no name.
- Use case (default `cold_outbound`): one of `cold_outbound`, `discovery_follow_up`, `demo_recap`, `re_engagement`, `renewal`, `expansion`, `objection_handling`. Drives which signals matter most.
- Recency floor (optional): days. Defaults: 14 for intent topics, 30 for executive moves, 90 for company events.
- Sender / offering note (optional): one line on what the user sells, used only to rank signals.
- Prior touchpoint summary (optional, recommended for follow-up, recap, renewal): what was last discussed, when, who was involved.

## Workflow

Overview

Gather every personalization signal for a single prospect and their company so the calling model can write a sharp, specific email. This skill does NOT draft the email: it returns a structured brief; the calling model composes copy.

What you get

  • TL;DRone paragraph with prospect name, title, company, the single strongest anchor signal with age, and the persona tone hint.
  • Prospectfull name, job title, company name, company domain, LinkedIn URL, prospect_id, business_id, email (only if contacts were pulled).
  • Company snapshot2-4 lines covering industry, size bucket, headcount, revenue range, HQ, founding year.
  • Signal ladder (ranked)for each of the top 5, rank, signal type, age in days, source tag, one-line description, why it matters for this persona and use case, anchor / runner-up flag.
  • Persona cuesseniority, department, tenure in seat, last 2 prior employers, tone hint, direct quotes or post themes (up to 3, with date).
  • Proof hook categoriespeer-segment framings the calling model could plug real customer proof into. No invented stats or logos.
Manual install (npx, ZIP)
Claude Codenpx skills add explorium-ai/gtm-skills --skill personalize-email -g -a claude-code
Claude Code (degit)npx degit explorium-ai/gtm-skills/skills/personalize-email#main ~/.claude/skills/personalize-email
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md7.7 KB
Read SKILL.md here
explorium-ai/main1 file shown
SKILL.md
Show the full text53 lines
personalize-email/SKILL.md53 lines · 7.7 KB

Personalize Email

Gather every personalization signal for a single prospect and their company so the calling model can write a sharp, specific email. This skill does NOT draft the email: it returns a structured brief; the calling model composes copy.

Input

  • Prospect identifier (required): full name + company, full name + company domain, LinkedIn URL, email, or a role at a company ("CFO at Notion") with no name.
  • Use case (default cold_outbound): one of cold_outbound, discovery_follow_up, demo_recap, re_engagement, renewal, expansion, objection_handling. Drives which signals matter most.
  • Recency floor (optional): days. Defaults: 14 for intent topics, 30 for executive moves, 90 for company events.
  • Sender / offering note (optional): one line on what the user sells, used only to rank signals.
  • Prior touchpoint summary (optional, recommended for follow-up, recap, renewal): what was last discussed, when, who was involved.

Workflow

  1. Resolve the prospect. If a LinkedIn URL or email is supplied, match the person directly. Otherwise match the business first to anchor the company, then match the person by full name plus the resolved company. On miss, retry first plus last name. Capture prospect_id, business_id, full_name, job_title, linkedin_url. If either id fails, stop and surface the gap.
  2. Resolve-by-role path (the user named a seat, not a person). Matching by full_name="CFO" silently returns nothing: do NOT use that path. Instead match the business, then sample prospects at that account filtered by canonical job title and seniority. This is the dominant cold-outbound shape when the user knows the seat but not the person.
  3. Domain-variant sanity check at match time. After firmographics land, if the input was a major brand but the resolved entity has headcount 1-50 and looks like a registered-agent shell, retry with the alternate domain (.so vs .com) or the company-name string. Do not proceed with the wrong account.
  4. Discover canonical values for any free-text dimension the user named (industry, technology, city) before applying a filter. Show top matches and wait for the user to pick.
  5. Enrich the company. Firmographics first (industry, size, headcount, revenue range, HQ, age). Then pull recent signals broadly: funding and acquisitions, workforce trends, LinkedIn posts, website changes, stated challenges and strategic priorities. Add technographics only when the offering implies a tech-stack pitch. Add competitive landscape only for objection_handling or competitive displacement framing.
  6. Fetch business events on the last 90 days. Keep every event with a date; drop those older than the use-case recency floor during scoring. Event-attribution sanity check: ensure events tie to the matched business, not blended across a parent / subsidiary tree.
  7. Enrich the prospect. Profile (seniority, department, tenure in seat, last 2 prior employers). Pull contacts only when the user intends to send outreach: default email-only (cheaper), switch to email + phone only when phone is required (SDR dialer flows). Skip contacts entirely otherwise. Fetch prospect events for job-change or promotion moves. Per-prospect post history is a current gap; pull the employer's recent posts as a substitute for company voice.
  8. Score and rank signals. Stamp each with age in days and a source tag. Score recency x persona relevance x use-case fit. Recency: 0-14d = 1.0, 15-30d = 0.7, 31-60d = 0.4, 61-90d = 0.2, older = drop. Persona: CFO maps to funding / earnings / M&A; CRO and VP Sales map to hiring surges, product launches, GTM posts; CTO and VP Eng map to website changes, technographics, engineering hires; CEO maps to all. Use case: cold outbound and re-engagement lean on fresh events; follow-up, recap, renewal, expansion lean on prior touchpoint plus role and company posts; objection handling leans on competitive landscape and strategic insights. Rank top 5; mark the highest anchor_candidate, next runner_up.
  9. Build the persona cue block. Seniority, department, tenure in seat, last 2 prior employers. Tone hint by seat: executive (outcome first, numeric), director / manager (problem then approach then outcome), IC (workflow friction then concrete benefit). Pull 1-3 direct quotes or themes from recent posts when available.
  10. Assemble the proof hook list. Suggest peer-segment framings by industry and size band. Do not invent customer names or stats; flag only categories where the calling model could later plug real customer proof.
  11. Flag gaps and refuse conditions. For cold_outbound or re_engagement, if zero events pass the recency floor and zero relevant posts exist, mark signal_layer: thin and recommend warming via another channel. For follow-up family without a prior touchpoint summary, surface the gap and ask; do not fabricate. If profile last update is older than 12 months or the resolved company does not match the user-named company, add stale_record: true and recommend verifying.

Output Format

  • TL;DR: one paragraph with prospect name, title, company, the single strongest anchor signal with age, and the persona tone hint.
  • Prospect: full name, job title, company name, company domain, LinkedIn URL, prospect_id, business_id, email (only if contacts were pulled).
  • Company snapshot: 2-4 lines covering industry, size bucket, headcount, revenue range, HQ, founding year.
  • Signal ladder (ranked): for each of the top 5, rank, signal type, age in days, source tag, one-line description, why it matters for this persona and use case, anchor / runner-up flag.
  • Persona cues: seniority, department, tenure in seat, last 2 prior employers, tone hint, direct quotes or post themes (up to 3, with date).
  • Proof hook categories: peer-segment framings the calling model could plug real customer proof into. No invented stats or logos.
  • Brief for the drafting model: compact structured block with anchor and age, runner-up, persona block, company block, chosen use case, gaps, and an explicit "do_not_invent" list (customer names, stats not in this brief).
  • Flags: signal_layer (rich | moderate | thin), stale_record, missing_prior_touchpoint (only for follow-up family), competitor_mention_detected.

Limitations

  • Funding and acquisition data has coverage gaps for late-stage privates with no S-1. For CFO personas at private targets, lean on business events (M&A, new funding round, cost cutting, hiring in finance) instead.
  • No native sort by signal recency at the API level; ranking is done client-side.
  • No metro taxonomy; location filtering relies on city autocomplete plus country code.
  • No similar-companies tool; peer framing falls back to industry plus size band.
  • Headcount and revenue are buckets, not exact values.
  • This skill does not draft email copy. The calling model writes subject lines and bodies from the brief.
  • Per-prospect post history is not available; flag as a gap when the use case wants the individual's posting voice.
  • Department is null for many cross-functional senior roles (Chief X Officer, President, Founder). Group these under "Unattributed" in the persona cue block.
1---
2name: personalize-email
3description: "Cold email personalization skill for Claude Code and Codex: assemble an intent and firmographic signal pack for one prospect so a downstream LLM can compose a truly personalized outbound email. Pulls company firmographics, recent business events, funding, workforce trends, LinkedIn posts, website changes, and intent topics. Returns a structured signal brief ready for cold outreach, follow-up, re-engagement, or expansion emails. Use for outbound, lead generation, account-based selling, and signal-led email personalization. Triggers on 'personalize an email', 'draft outreach', 'outbound to X', 'find a hook for this contact', 'build me a personalization brief'. Works in Claude Code, Codex, and Hermes-Agent."
4---
5 
6# Personalize Email
7 
8Gather every personalization signal for a single prospect and their company so the calling model can write a sharp, specific email. This skill does NOT draft the email: it returns a structured brief; the calling model composes copy.
9 
10## Input
11 
12- Prospect identifier (required): full name + company, full name + company domain, LinkedIn URL, email, or a role at a company ("CFO at Notion") with no name.
13- Use case (default `cold_outbound`): one of `cold_outbound`, `discovery_follow_up`, `demo_recap`, `re_engagement`, `renewal`, `expansion`, `objection_handling`. Drives which signals matter most.
14- Recency floor (optional): days. Defaults: 14 for intent topics, 30 for executive moves, 90 for company events.
15- Sender / offering note (optional): one line on what the user sells, used only to rank signals.
16- Prior touchpoint summary (optional, recommended for follow-up, recap, renewal): what was last discussed, when, who was involved.
17 
18## Workflow
19 
201. Resolve the prospect. If a LinkedIn URL or email is supplied, match the person directly. Otherwise match the business first to anchor the company, then match the person by full name plus the resolved company. On miss, retry first plus last name. Capture prospect_id, business_id, full_name, job_title, linkedin_url. If either id fails, stop and surface the gap.
212. Resolve-by-role path (the user named a seat, not a person). Matching by full_name="CFO" silently returns nothing: do NOT use that path. Instead match the business, then sample prospects at that account filtered by canonical job title and seniority. This is the dominant cold-outbound shape when the user knows the seat but not the person.
223. Domain-variant sanity check at match time. After firmographics land, if the input was a major brand but the resolved entity has headcount 1-50 and looks like a registered-agent shell, retry with the alternate domain (.so vs .com) or the company-name string. Do not proceed with the wrong account.
234. Discover canonical values for any free-text dimension the user named (industry, technology, city) before applying a filter. Show top matches and wait for the user to pick.
245. Enrich the company. Firmographics first (industry, size, headcount, revenue range, HQ, age). Then pull recent signals broadly: funding and acquisitions, workforce trends, LinkedIn posts, website changes, stated challenges and strategic priorities. Add technographics only when the offering implies a tech-stack pitch. Add competitive landscape only for objection_handling or competitive displacement framing.
256. Fetch business events on the last 90 days. Keep every event with a date; drop those older than the use-case recency floor during scoring. Event-attribution sanity check: ensure events tie to the matched business, not blended across a parent / subsidiary tree.
267. Enrich the prospect. Profile (seniority, department, tenure in seat, last 2 prior employers). Pull contacts only when the user intends to send outreach: default email-only (cheaper), switch to email + phone only when phone is required (SDR dialer flows). Skip contacts entirely otherwise. Fetch prospect events for job-change or promotion moves. Per-prospect post history is a current gap; pull the employer's recent posts as a substitute for company voice.
278. Score and rank signals. Stamp each with age in days and a source tag. Score recency x persona relevance x use-case fit. Recency: 0-14d = 1.0, 15-30d = 0.7, 31-60d = 0.4, 61-90d = 0.2, older = drop. Persona: CFO maps to funding / earnings / M&A; CRO and VP Sales map to hiring surges, product launches, GTM posts; CTO and VP Eng map to website changes, technographics, engineering hires; CEO maps to all. Use case: cold outbound and re-engagement lean on fresh events; follow-up, recap, renewal, expansion lean on prior touchpoint plus role and company posts; objection handling leans on competitive landscape and strategic insights. Rank top 5; mark the highest `anchor_candidate`, next `runner_up`.
289. Build the persona cue block. Seniority, department, tenure in seat, last 2 prior employers. Tone hint by seat: executive (outcome first, numeric), director / manager (problem then approach then outcome), IC (workflow friction then concrete benefit). Pull 1-3 direct quotes or themes from recent posts when available.
2910. Assemble the proof hook list. Suggest peer-segment framings by industry and size band. Do not invent customer names or stats; flag only categories where the calling model could later plug real customer proof.
3011. Flag gaps and refuse conditions. For cold_outbound or re_engagement, if zero events pass the recency floor and zero relevant posts exist, mark `signal_layer: thin` and recommend warming via another channel. For follow-up family without a prior touchpoint summary, surface the gap and ask; do not fabricate. If profile last update is older than 12 months or the resolved company does not match the user-named company, add `stale_record: true` and recommend verifying.
31 
32## Output Format
33 
34- TL;DR: one paragraph with prospect name, title, company, the single strongest anchor signal with age, and the persona tone hint.
35- Prospect: full name, job title, company name, company domain, LinkedIn URL, prospect_id, business_id, email (only if contacts were pulled).
36- Company snapshot: 2-4 lines covering industry, size bucket, headcount, revenue range, HQ, founding year.
37- Signal ladder (ranked): for each of the top 5, rank, signal type, age in days, source tag, one-line description, why it matters for this persona and use case, anchor / runner-up flag.
38- Persona cues: seniority, department, tenure in seat, last 2 prior employers, tone hint, direct quotes or post themes (up to 3, with date).
39- Proof hook categories: peer-segment framings the calling model could plug real customer proof into. No invented stats or logos.
40- Brief for the drafting model: compact structured block with anchor and age, runner-up, persona block, company block, chosen use case, gaps, and an explicit "do_not_invent" list (customer names, stats not in this brief).
41- Flags: `signal_layer` (rich | moderate | thin), `stale_record`, `missing_prior_touchpoint` (only for follow-up family), `competitor_mention_detected`.
42 
43## Limitations
44 
45- Funding and acquisition data has coverage gaps for late-stage privates with no S-1. For CFO personas at private targets, lean on business events (M&A, new funding round, cost cutting, hiring in finance) instead.
46- No native sort by signal recency at the API level; ranking is done client-side.
47- No metro taxonomy; location filtering relies on city autocomplete plus country code.
48- No similar-companies tool; peer framing falls back to industry plus size band.
49- Headcount and revenue are buckets, not exact values.
50- This skill does not draft email copy. The calling model writes subject lines and bodies from the brief.
51- Per-prospect post history is not available; flag as a gap when the use case wants the individual's posting voice.
52- Department is null for many cross-functional senior roles (Chief X Officer, President, Founder). Group these under "Unattributed" in the persona cue block.
53 
View all files on GitHub →

Details

License
MIT
Stars on the repo
★ 197
Checked
Source
explorium-ai/gtm-skills ↗
Creator
explorium-ai · 17 listings
View creator

Similar skills

See all →
SkillGrowth Experimentation Programcoreyhaines31/marketingskills · by coreyhaines31When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program," or "experiment playbook." Use this whenever someone is comparing two approaches and wants to measure which performs better, or when they want to build a systematic experimentation practice. For tracking implementation, see analytics. For page-level conversion optimization, see cro.★ 51.1k GitHub starsSkillA/B Test Analyzerphuryn/pm-skills · by phurynAnalyze A/B test results with statistical significance, sample size validation, confidence intervals, and ship/extend/stop recommendations. Use when evaluating experiment results, checking if a test reached significance, interpreting split test data, or deciding whether to ship a variant.★ 26.6k GitHub starsSkillAds Copy Generatornowork-studio/notfair-plugin · by nowork-studioGenerate and A/B test Google Ads copy. Use when asked to write ad copy, headlines, descriptions, create ad variants, test ad messaging, improve CTR, or generate RSA (Responsive Search Ad) components. Trigger on "ad copy", "write ads", "headlines", "descriptions", "RSA", "responsive search ad", "ad text", "ad creative", "improve CTR", "ad A/B test", "ad variants", "write me an ad", "ad variation experiment", or when the user wants to improve click-through rate on existing ads.★ 3.9k GitHub starsSkillExperiment Design Plannermohitagw15856/pm-claude-skills · by mohitagw15856Design statistically rigorous A/B tests for product features, UI changes, onboarding flows, and pricing experiments. Use when asked to set up an experiment, design an A/B test, calculate sample size, or interpret test results. Produces a complete test plan with hypothesis, variant definitions, sample size, duration estimate, guardrail metrics, and a results interpretation guide.★ 1.4k GitHub starsSkillA/B Testing FrameworkOpenClaudia/openclaudia-skills · by OpenClaudiaDesign, plan, and analyze A/B tests with statistical rigor. Use when the user asks about A/B testing, split testing, experiment design, statistical significance, sample size calculation, test duration, multivariate testing, or conversion experiments. Trigger phrases include "A/B test", "split test", "experiment", "statistical significance", "sample size", "test duration", "which version wins", "conversion experiment", "hypothesis test", "variant testing".★ 705 GitHub starsSkillConversion Rate Optimizercoreyhaines31/marketingskills · by coreyhaines31When the user wants to optimize, improve, or increase conversions on any marketing page or form — including homepage, landing pages, pricing pages, feature pages, lead capture forms, or contact forms. Also use when the user says 'CRO,' 'conversion rate optimization,' 'this page isn't converting,' 'improve conversions,' 'why isn't this page working,' 'my landing page sucks,' 'form abandonment,' 'nobody's converting,' 'low conversion rate,' or 'this page needs work.' Use this even if the user just shares a URL and asks for feedback. For signup/registration flows, see signup. For post-signup activation, see onboarding. For popups/modals, see popups.★ 51.1k GitHub stars

More from explorium-ai

SkillABM Campaign Playbookexplorium-ai/gtm-skills · by explorium-aiABM campaign skill for Claude Code: run a full Account-Based Marketing campaign end-to-end — from ICP definition to live LinkedIn Ads. Builds targeted account lists with Vibe Prospecting, enriches and scores companies with real-time B2B data, generates personalized ad creatives with Claude Code and Figma, pushes matched audiences to LinkedIn Ads, and monitors campaigns daily at scale. The complete GTM skill for AI-driven account-based marketing in Claude Code, Codex, Hermes-Agent, and OpenClaw. No agency needed.★ 197 GitHub starsSkillDecision-Maker Shortlistexplorium-ai/gtm-skills · by explorium-aiContact data skill for Claude Code and Codex: build a ranked shortlist of decision-makers and contacts at a target company for outbound prospecting, deal acceleration, or renewal/expansion plays. Returns verified contact data including email, phone, LinkedIn profile, title, seniority, and department. Provide a company name or domain plus optional seniority focus or use case. Use for contact data enrichment, LinkedIn profile lookup, and building outbound contact lists. Works in Claude Code, Codex, Hermes-Agent, and OpenClaw.★ 197 GitHub starsSkillAccount Fit Scorerexplorium-ai/gtm-skills · by explorium-aiLead scoring and buying signals skill for Claude Code and Codex: rank a list of accounts by ICP fit, buying intent, real-time trigger events, and workforce momentum. Returns composite score (0-100), tier (A/B/C), and a 'why now' signal per account. Use for account-based selling, ABM list prioritization, territory planning, signal-based selling, and buyer-intent ranking. Triggers on 'score these accounts', 'rank by ICP fit and intent', 'prioritize this account list', 'which accounts have the strongest buying signals', 'ICP scoring', 'account prioritization'. Works in Claude Code, Codex, Hermes-Agent, OpenClaw, and Claude Cowork.★ 197 GitHub starsSkillCompany Intelligence Briefexplorium-ai/gtm-skills · by explorium-aiAccount research skill for Claude Code and Codex: generate a high-signal company intelligence brief including firmographics, technographics, funding history, hiring signals, business events, recent website and LinkedIn moves, and a peer cohort. Identify the account by business_id, company name, or domain. Use for pre-call research, QBR prep, competitive analysis, cold outbound targeting, and renewal risk assessment. The go-to account research skill for Claude Code, Codex, Hermes-Agent, and OpenClaw.★ 197 GitHub starsSkillB2B Data Cleanerexplorium-ai/gtm-skills · by explorium-aiData cleaning, entity matching, and deduplication skill for Claude Code and Codex: triage, standardize, and validate a CSV, Excel, or JSON list of B2B companies or contacts before enrichment. Normalizes company names and domains, validates emails and phone numbers, matches and deduplicates records, and tags invalid rows non-destructively. Run before enrichment or CRM import to avoid paying for noisy records. Use for CRM enrichment prep, company name and website matching, entity matching, and contact deduplication. Works in Claude Code, Codex, and n8n via MCP.★ 197 GitHub starsSkillVibe-Lemlist Outreachexplorium-ai/gtm-skills · by explorium-aiCold 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.★ 197 GitHub stars