# Launch Campaign

> Pre-flight audit of a Smartlead campaign before going live, then start it. Verifies sequences, mailboxes, leads, schedule, warmup health, and tracking-domain CNAME. Refuses to launch with broken state. Use when the user says they want to launch, start, go live with, or kick off a campaign that's already configured.

- **Type:** Skill
- **Install:** `agentstack add skill-mattsezgin-unofficial-smartlead-cli-launch-campaign`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [MattSezgin](https://agentstack.voostack.com/s/mattsezgin)
- **Installs:** 0
- **Category:** [Communication](https://agentstack.voostack.com/c/communication)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [MattSezgin](https://github.com/MattSezgin)
- **Source:** https://github.com/MattSezgin/unofficial-smartlead-cli/tree/main/.claude/skills/launch-campaign
- **Website:** https://github.com/MattSezgin/unofficial-smartlead-cli

## Install

```sh
agentstack add skill-mattsezgin-unofficial-smartlead-cli-launch-campaign
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

> **Before running:** verify exact flag names with `smartlead  --help`. Flag shapes shown below are illustrative — confirm against the actual CLI.

# /launch-campaign

You're doing pre-flight checks on a campaign that's been built, then starting it.

## What you need from the user

- **Campaign ID** to launch
- (Optional) Permission to auto-fix obvious issues vs. just report them

## Pre-flight checklist

Run these in order. If any check fails, surface it and ASK before proceeding.

### Check 1 — Campaign exists and is in DRAFTING / PAUSED status

```bash
smartlead campaigns get  --output json | jq '{id, name, status}'
```

If status is `ACTIVE` already, tell the user and stop.

### Check 2 — At least 1 sequence step

```bash
smartlead campaigns sequences  --output json | jq 'length'
```

Should return ≥1. Zero = won't send anything.

### Check 3 — At least 1 mailbox assigned

```bash
smartlead campaigns email-accounts  --output json | jq 'length'
```

Should return ≥1. Zero = nothing to send from.

### Check 4 — Leads uploaded

```bash
smartlead leads list  --output json | jq 'length'
```

Should return ≥1. Zero = ask user if empty start is intentional.

### Check 5 — All assigned mailboxes are warmed up

```bash
smartlead campaigns email-accounts  --output json | \
  jq -r '.[].email_account_id' | \
  while read mb_id; do
    smartlead accounts get $mb_id --output json | \
      jq -r --arg id "$mb_id" '{id: $id, warmup: .warmup_details.status, reputation: .warmup_details.warmup_reputation}'
  done
```

Flag any mailbox with `warmup.status != ENABLED` or `reputation 
```

Should resolve to `open.sleadtrack.com.`. If empty, link wrapping and open pixels will fail.

### Check 7 — Settings sanity

```bash
smartlead campaigns get  --output json | jq '.settings'
```

Flag if:
- `enable_ai_esp_matching: true` AND campaign has both Gmail+Outlook senders (see `docs/learnings/esp-matching-analysis.md`)
- `track_settings` includes `DONT_TRACK_*` but recipient list looks audit-aware (Big Tech etc.)
- Schedule looks wrong (sending on weekends, 24/7 window, etc.)

### Check 8 — Schedule timezone matches recipient audience

If campaign timezone is `America/New_York` but lead list is heavy on EU domains, surface it. Sending at 9 AM ET = 3 PM CEST = late afternoon for EU recipients.

## Launch decision

Once all checks pass (or user explicitly waves off warnings):

```bash
smartlead campaigns start 
```

Confirm activation:

```bash
smartlead campaigns get  --output json | jq '.status'
# Should now show "ACTIVE"
```

## First-hour monitoring

After launch, tell the user to check back in 1-2 hours:

```bash
smartlead campaigns analytics 
```

What to watch:
- **Bounce rate**: if it crosses 5% in the first hour, PAUSE immediately and triage
- **Sends per hour**: should match expected throughput from schedule + mailbox count
- **Auto-replies / out-of-office**: Smartlead handles these (stop-on-auto-reply default)

## If something goes wrong post-launch

To **stop** sending (drains queued sends — this is what you usually want):
```bash
smartlead campaigns stop 
```

NOT `pause` — pause doesn't drain queued sends and the analytics endpoint lies about it (see `docs/learnings/settings-api-quirks.md` quirk 6).

## Reference

- `docs/learnings/settings-api-quirks.md` — campaign status verbs, pause-drain behavior
- `docs/learnings/esp-matching-analysis.md` — why to disable AI ESP matching
- `docs/learnings/mailbox-warmup-best-practices.md` — what "warmed up" actually means

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [MattSezgin](https://github.com/MattSezgin)
- **Source:** [MattSezgin/unofficial-smartlead-cli](https://github.com/MattSezgin/unofficial-smartlead-cli)
- **License:** MIT
- **Homepage:** https://github.com/MattSezgin/unofficial-smartlead-cli

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-mattsezgin-unofficial-smartlead-cli-launch-campaign
- Seller: https://agentstack.voostack.com/s/mattsezgin
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
