# /outreach-onboard

> Builds a complete cold outbound campaign folder from scratch for a new IA Outreach client.


# Outreach Client Onboarding

## Triggers

- `/outreach-onboard ACME Agency` — full build for a named client
- `/outreach-onboard` — prompts for required inputs
- ClickUp task tagged `claude-code` with 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.

1. Scaffolds the client folder + subdirectories
2. Researches the client (questionnaire + website scrape)
3. Defines 2–3 ICPs with pain points, triggers, hooks
4. Writes campaign strategy + client CLAUDE.md
5. Builds Apollo People Search URLs (clickable, filters pre-applied)
6. Writes 4-step email sequences per ICP (ColdIQ framework)
7. Writes LinkedIn connection + follow-up sequences
8. Writes personalization hooks (5 signal variations per ICP)
9. Creates tracking files (campaign log + reply log)
10. 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):

1. **Client name** — becomes the folder slug (e.g., "ACME Agency" → `ia-outreach/clients/ACME Agency/`)
2. **Questionnaire Google Doc URL** — client filled this in; fetch with WebFetch or Drive API
3. **Client website URL** — scrape for product, positioning, case studies, reference clients
4. **Sender name + title** — the sales rep whose name goes on emails (e.g., "Megan Taylor, Account Executive, ACME Agency")
5. **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:

1. **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.
2. **Website** — fetch homepage + /about + /solutions or /products pages. Look for: product screenshots, case study stats, customer logos, industry keywords.
3. **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`:

```markdown
# 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:**

| Email | 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):
```bash
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:
```bash
# 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`:

1. Change the client name, folder name, and doc titles
2. Replace doc content with this client's strategy + overview
3. 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"` not `node` (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
