# Smartlead Campaign Upload Public

Upload a CSV of leads + a variants YAML (produced by /campaign-copywriting) to...

- Repository: https://github.com/growthenginenowoslawski/coldoutboundskills (797 stars)
- Category: Design
- License: MIT
- Last updated: 2026-10-05
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add growthenginenowoslawski/coldoutboundskills --skill smartlead-campaign-upload-public -g -a claude-code -y`
Codex: `npx skills add growthenginenowoslawski/coldoutboundskills --skill smartlead-campaign-upload-public -g -a codex -y`
Cursor: `npx skills add growthenginenowoslawski/coldoutboundskills --skill smartlead-campaign-upload-public -g -a cursor -y`
Gemini CLI: `npx skills add growthenginenowoslawski/coldoutboundskills --skill smartlead-campaign-upload-public -g -a gemini-cli -y`

## Description

Upload a CSV of leads + a variants YAML (produced by /campaign-copywriting) to Smartlead as a DRAFT campaign. Handles tag-scoped inbox selection, A/B/C variant assembly, custom field mapping, schedule config, and batch lead upload. ALWAYS creates in DRAFT, you review in Smartlead UI and hit Start manually. Use after /campaign-copywriting, just before the campaign goes live.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Smartlead Campaign Upload

Takes a `variants.yaml` (written by `/campaign-copywriting`) and a `leads.csv` (from your list-building skills) and creates a DRAFT campaign in Smartlead. You review the result in the Smartlead UI and press Start manually.

**This skill does NOT ship any email copy.** Copy comes from `/campaign-copywriting`. This skill is the mechanical upload layer, API calls only.

## Why DRAFT only

Cold email launches should never happen from a script. You hit Start in the Smartlead UI after reviewing:
- Subject lines + body previews
- Inbox assignments (correct tag? correct count?)
- Lead count and a few random lead rows
- Schedule (timezone + hours + throttle)

The script sets all of this up in DRAFT so the review is trivial, verify and click Start.

## Inputs

### `leads.csv`

Required columns:
- `email`
- `first_name`
- `last_name`
- `company_name`

Optional columns (passed through to Smartlead as custom fields):
- `company_domain`
- `title`
- `linkedin_url`
- `situation_line` (AI-generated per-lead context)
- `value_line` (AI-generated value mapping)
- `cta_line` (AI-generated CTA angle)

Additional AI variable columns produced by `/campaign-copywriting` or `/personalization-subagent-pattern`, named fields only. The script does NOT accept arbitrary columns; this is intentional. If you need to add a field, update this skill.

### `variants.yaml`

Produced by `/campaign-copywriting`. Schema is in `references/variants-schema.yaml`.

Minimum required: `name`, `schedule`, `inbox_selection`, `sequences` with at least one step.

## Usage

```bash
export SMARTLEAD_API_KEY=xxx
npx tsx scripts/upload.ts \
  --leads=profiles/<slug>/campaigns/<campaign-slug>/leads.csv \
  --variants=profiles/<slug>/campaigns/<campaign-slug>/variants.yaml
```

The rest: https://github.com/growthenginenowoslawski/coldoutboundskills/blob/HEAD/skills/smartlead-campaign-upload-public/SKILL.md
