[ OUTBOUND ]
/outreach-onboard
Builds a complete cold outbound campaign folder from scratch for a new IA Outreach client.
ACME Agency, <id> and you@example.com mark values that are per-agency — your install fills them with YOUR clients and accounts. If a section references a helper script you don't have yet, it ships with that workflow's install.Outreach Client Onboarding
Triggers
/outreach-onboard ACME Agency— full build for a named client/outreach-onboard— prompts for required inputs- ClickUp task tagged
claude-codewith name matching: onboard.*client,new.*client.*outreach,build.*campaign.*outreach,setup.*outreach
What this skill does
Builds a complete cold outbound campaign folder from scratch for a new IA Outreach client. Takes ~1 session from blank folder to client-ready deliverables.
- Scaffolds the client folder + subdirectories
- Researches the client (questionnaire + website scrape)
- Defines 2–3 ICPs with pain points, triggers, hooks
- Writes campaign strategy + client CLAUDE.md
- Builds Apollo People Search URLs (clickable, filters pre-applied)
- Writes 4-step email sequences per ICP (ColdIQ framework)
- Writes LinkedIn connection + follow-up sequences
- Writes personalization hooks (5 signal variations per ICP)
- Creates tracking files (campaign log + reply log)
- Creates Google Drive folder + 2 strategy docs (concise + full)
Inputs required at start
Ask the user for these before proceeding (skip any already in the argument):
- Client name — becomes the folder slug (e.g., "ACME Agency" →
ia-outreach/clients/ACME Agency/) - Questionnaire Google Doc URL — client filled this in; fetch with WebFetch or Drive API
- Client website URL — scrape for product, positioning, case studies, reference clients
- Sender name + title — the sales rep whose name goes on emails (e.g., "Megan Taylor, Account Executive, ACME Agency")
- Email CTA — Loom video (default), demo call, or case study send
Template reference (gold standard)
All 10 steps use ACME Agency as the reference template. Before building each piece, read the corresponding ACME Agency file to understand the expected format and depth.
| Step | ACME Agency reference template |
|---|---|
| ICP files | ia-outreach/clients/ACME Agency/icp/icp-A-chemical-vp.md |
| Campaign strategy | ia-outreach/clients/ACME Agency/campaign-strategy.md |
| Client CLAUDE.md | ia-outreach/clients/ACME Agency/CLAUDE.md |
| Apollo search files | ia-outreach/clients/ACME Agency/apollo-searches/<id>.md |
| Email sequences | ia-outreach/clients/ACME Agency/sequences/<id>.md |
| Copy framework | ia-outreach/clients/ACME Agency/sequences/copy-framework.md |
| LinkedIn sequences | ia-outreach/clients/ACME Agency/sequences/linkedin-sequence.md |
| Personalization hooks | ia-outreach/clients/ACME Agency/sequences/personalization-hooks.md |
| Tracking files | ia-outreach/clients/ACME Agency/tracking/campaign-log.md |
| Drive doc script | ia-outreach/clients/ACME Agency/create-docs.mjs |
Step-by-step workflow
Step 1 — Folder scaffold
Create ia-outreach/clients/<slug>/ with these subdirectories:
icp/
sequences/
apollo-searches/
tracking/
Slug = lowercase client name, hyphens for spaces (e.g., "ACME Agency" → ACME Agency, "Vidoris Inc" → vidoris-inc).
Step 2 — Research
Gather all source material before writing anything:
- Questionnaire — fetch the Google Doc URL with WebFetch. Extract: product description, core value prop, reference clients + results, target industries, target titles, deal size, objections, differentiators.
- Website — fetch homepage + /about + /solutions or /products pages. Look for: product screenshots, case study stats, customer logos, industry keywords.
- Synthesis — write an internal research summary (mental context for Steps 3–10, not a file). Key items: what does the product do, who buys it, why do they buy it, what results do they get.
Step 3 — ICP definition
Define 2–3 ICPs ordered by priority (A = highest conversion potential, B = strong secondary, C = opportunistic).
For each ICP, write icp/icp-<letter>-<short-name>.md:
# ICP <Letter> — <Name>
## Target Profile
- Titles: ...
- Industry: ...
- Company size: ...
- Geography: ...
- Tech stack signals: ...
## Pain Points
...
## Buying Triggers (intent signals)
...
## Messaging Hooks
...
## Objection Handling
...
## Reference Customers (from this client)
...
ICP count guidance:
- If research reveals one very clear primary buyer: build ICP A deeply, ICP B as secondary
- If 3 distinct buyer types are clear: build all 3
- Default: A + B
Step 4 — Campaign strategy + CLAUDE.md
campaign-strategy.md — master playbook:
- Segment priority table (ICP A/B/C with rationale)
- Intent signals to watch for per segment (hiring, news, LinkedIn, regulatory)
- Deliverability setup checklist (domains, warm-up schedule)
- Execution timeline (Week 1: setup, Week 2: first batch, Week 3+: monitor + iterate)
- Pipeline commands (personalize.mjs, Instantly push)
- Key metrics to track (reply rate target, positive rate, meeting rate)
CLAUDE.md — Claude Code context for this client:
- Product summary + value prop
- Reference clients + stats
- Target segments summary
- Context string for
personalize.mjs(what Claude should know when writing icebreakers) - Campaign ID placeholders (Instantly, Prosp — fill in after launch)
- Key files index
Step 5 — Apollo search files
Build 3–5 Apollo People Search files. One file per ICP + additional searches if multiple sub-segments.
URL format (URLSearchParams, [ encoded as %5B%5D, comma as %2C):
https://app.apollo.io/#/people?personTitles%5B%5D=VP+Operations&personTitles%5B%5D=Director+Operations&<id>%5B%5D=Chemical&personLocations%5B%5D=United+States&<id>%5B%5D=501%2C1000&<id>%5B%5D=1001%2C5000&<id>%5B%5D=5001%2C10000000
Employee size default: 501+ (501,1000 + 1001,5000 + 5001,10000000)
- Capital-intensive industries (chemical, pharma, manufacturing): 501+ is right — a 600-person company can be $1B+ revenue
- Professional services / SaaS: use 1001+ as primary, add 501+ as second wave
Each search file contains:
- Search name + ICP mapping
- Rationale (why these titles, industries, size ranges)
- Clickable Apollo link
- Manual filters to apply in Apollo UI after opening (Revenue range, SAP/tech filter if relevant, Verified email)
- Exclusions / caveats (e.g., exclude SI partners, pre-revenue biotech)
File naming: apollo-searches/search-1-<short-name>.md, search-2-..., etc.
Step 6 — Email sequences (ColdIQ framework)
One file per ICP: sequences/email-seq-A-<short-name>.md, etc.
Always read ia-outreach/clients/ACME Agency/sequences/copy-framework.md first. These are the non-negotiable rules.
ColdIQ rules summary:
- 50–80 words per email (hard limit — count them)
- 3–5 word lowercase subject (Email 1 only — A/B test 3–4 options)
- Plain text — no HTML, no bold, no bullets, no links in body
- Signal-first — icebreaker before pitch, always
- One point per email — one pain/angle, one ask
- CTA = Loom offer (or whatever CTA was specified) — never "book a call" or "15 minutes"
- Same thread after Email 1 — no subject line on replies
- Sender sign-off: first name only after Email 1
4-email structure:
| Day | Thread | Subject | Words | Purpose | |
|---|---|---|---|---|---|
| 1 | 0 | New | 3–5 word lowercase (A/B test 3–4 options) | 60–80 | Signal icebreaker + pitch + proof + CTA |
| 2 | 3 | Same | None | 45–55 | One proof bump (stat or named reference client) |
| 3 | 7 | Same | None | 60–75 | Pivot angle (different pain point) + new personalization line |
| 4 | 11 | Same | None | 35–45 | Soft goodbye, CTA left open |
Email 1 body structure:
Hey {{firstName}},
{{icebreaker — signal-specific, 1–2 sentences}}
{{problem statement — what most companies in this space miss, 2 sentences}}
{{product + proof — what the client's product does + one reference client result, 1–2 sentences}}
{{CTA — Loom offer, 1 sentence}}
{{sender first name}}
Icebreaker placeholder: use {{icebreaker — signal-specific, see personalization-hooks.md ICP <letter>}} in the file — the actual icebreaker is generated per-contact by personalize.mjs.
Email 3 pivot angle: pick a different pain from Email 1 — if Email 1 was about asset loss, pivot to shipping accuracy or CMO visibility or compliance, etc.
Include 3–4 subject line A/B test options per ICP at the top of Email 1.
Step 7 — LinkedIn sequences
sequences/linkedin-sequence.md
Structure:
- Connection request: 4 versions per ICP (≤300 characters each), one per signal type (hiring, news, post, fallback)
- Step 2 (Day 1–2 after acceptance): ~50-word message, soft and conversational, reference the connection context
- Step 3 (Day 7 breakup): short, no pressure, leave door open
Prosp AI push command (append at bottom of file):
node ia-outreach/scripts/push-linkedin.mjs --client <slug> --icp A
Step 8 — Personalization hooks
sequences/personalization-hooks.md
For each ICP, provide 5 variation templates — one per signal type:
| Variation | Signal type | Source |
|---|---|---|
| 1 | Job posting (SAP/supply chain/ops role) | LinkedIn Jobs / Apify |
| 2 | Company news (expansion, acquisition, new facility) | Google News / Apify |
| 3 | LinkedIn company page recent post | Apify LinkedIn Company Posts |
| 4 | Website initiative (sustainability, transformation, digital ops) | Website scraper |
| 5 | Fallback (no strong signal found) | Generic, ICP-specific |
For each variation, write:
- Email 1 icebreaker (1–2 sentences, signal fills in
[Company]and[specific signal detail]) - Email 3 pivot line (1 sentence, different signal or angle — used as the personalization line in Email 3)
Include at bottom:
# personalize.mjs command template
node ia-outreach/scripts/personalize.mjs \
--client <slug> \
--icp A \
--signal-type job_posting # or: news, linkedin_post, website, fallback
Step 9 — Tracking files
tracking/campaign-log.md:
- Instantly campaign IDs table (one row per ICP sequence — fill in after launch)
- Prosp AI sequence IDs (fill in after launch)
- Domain warm-up tracker (sending domains, start date, current daily limit)
- Lead batch log (date, ICP, source, count, status)
- Weekly performance log (week, emails sent, open rate, reply rate, positive rate, meetings booked)
- Milestones checklist (domains purchased, SPF/DKIM/DMARC set, warm-up done, first batch sent, etc.)
tracking/reply-log.md:
- Reply tracker table (date, contact, company, ICP, reply type, next action)
- Reply type categories: Positive / Timing / Not relevant / Referral / Unsubscribe / Auto-reply
- Pattern tracking (which ICP/email/angle gets most positive replies)
- Copy optimization log (what to test next based on patterns)
Step 10 — Google Drive folder + strategy docs
Create ia-outreach/clients/<slug>/create-docs.mjs by adapting ia-outreach/clients/ACME Agency/create-docs.mjs:
- Change the client name, folder name, and doc titles
- Replace doc content with this client's strategy + overview
- Run:
"/c/Program Files/nodejs/node.exe" ia-outreach/clients/<slug>/create-docs.mjs
Auth: Uses GOOGLE_ADS_CLIENT_ID + <id> + <id> from root .env. No changes needed.
Output:
- Finds or creates "IA Outreach" parent folder in Drive
- Creates
<ClientName>subfolder inside it - Creates 2 docs:
<ClientName> — Campaign Overview (Concise)+<ClientName> — Campaign Strategy (Full)
Doc structure (Concise):
- H1: Client name
- H2: What we're building
- H2: Target segments (ICP table)
- H2: Email strategy (4-step framework summary)
- H2: Apollo searches (list with clickable links)
- H2: Tech stack + integrations
Doc structure (Full):
- Everything in Concise + full ICP details, complete email sequences, personalization framework, execution timeline, KPI targets
Key files
| File | Purpose |
|---|---|
ia-outreach/clients/ACME Agency/ | Gold standard — reference for all 10 steps |
ia-outreach/clients/ACME Agency/sequences/copy-framework.md | ColdIQ rules — read before writing any email |
ia-outreach/clients/ACME Agency/create-docs.mjs | Drive + Docs creation pattern to adapt |
ia-outreach/scripts/personalize.mjs | Icebreaker generation script |
ia-outreach/scripts/push-linkedin.mjs | Prosp AI LinkedIn push script |
Important rules
- Read copy-framework.md before writing a single email — word count, subject format, and CTA rules are non-negotiable
- 50–80 words hard limit — count words before finalizing any email
- Never pitch a call in Email 1 — CTA is always the Loom (or specified alternative)
- Icebreaker is a placeholder in the file — actual text is generated per-contact by personalize.mjs
- Apollo URLs — build them manually using URLSearchParams encoding; test by clicking before saving
- Drive script node path on Windows — use
"/c/Program Files/nodejs/node.exe"notnode(bash PATH issue) - All 4 emails in same Instantly thread after Email 1 — set this in Instantly sequence settings
Example invocations
- "Let's onboard Vidoris as a new outreach client — here's the questionnaire [URL] and website [URL]"
- "Build the outreach campaign folder for Nexus Logistics — sender is Jamie Chen, AE"
/outreach-onboard— starts interactive input collection