smartlead-campaign-upload-public
Skill759 starsChanged 28 days agoMITView on GitHub
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.
- Reads credentials
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 0 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 84
Tag must exist and be applied to inboxes first: Use /smartlead-inbox-manager to tag inboxes as active before running this upload.
- Very specific: line 85
Inbox count: If inbox_selection.count exceeds tagged inboxes, the script attaches all available and warns.
- Very specific: line 87
Variants.yaml mismatch: If /campaign-copywriting didn't produce the exact schema, the script fails fast with a clear error pointing at the …
- Very specific: line 95
Wait 21 days, then run /positive-reply-scoring on the campaign to measure.
- Very specific: line 96
Every Monday: run /email-deliverability-audit --days=7 (see /cold-email-weekly-rhythm).
- Very specific: line 98
Or wait: if the best-practice check flagged issues, go back to /campaign-copywriting and revise before uploading.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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:
emailfirst_namelast_namecompany_name
Optional columns (passed through to Smartlead as custom fields):
company_domaintitlelinkedin_urlsituation_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
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.yamlOutput:
✓ Campaign created: #12345678
✓ Sequence saved (3 steps, 3 variants on step 1)
✓ 20 inboxes attached (tag=active, LRU by daily_sent_count)
✓ 1,847 leads uploaded (20 batches)
✓ Schedule set (M-F 08:00-17:00 EST, 30/day/inbox)
Campaign is in DRAFT. Review + Start:
→ https://app.smartlead.ai/app/email-campaign/12345678Script flow
- Load env (
SMARTLEAD_API_KEYrequired) - Parse
leads.csv— validate required columns, count rows - Parse
variants.yaml— built-in minimal parser (~30 lines, no external dep) POST /campaigns/create→ get campaignIdPOST /campaigns/{id}/sequenceswith all A/B/C variants- Query
/email-accounts?limit=100, filter bytag, sort bydaily_sent_countASC (LRU), attach top N - Batch-upload leads (100 per batch) with standard custom fields mapped from CSV
POST /campaigns/{id}/settings(track off, stop on reply)POST /campaigns/{id}/schedulewith YAML values- Print campaign URL. Do NOT activate.
Gotchas
- Tag must exist and be applied to inboxes first. Use
/smartlead-inbox-managerto tag inboxes asactivebefore running this upload. - Inbox count. If
inbox_selection.countexceeds tagged inboxes, the script attaches all available and warns. - Leads CSV size. Tested up to 10K rows; larger runs may hit API rate limits. Script has built-in retry with exponential backoff.
- Variants.yaml mismatch. If
/campaign-copywritingdidn't produce the exact schema, the script fails fast with a clear error pointing at the offending field. - Email duplicates. Smartlead deduplicates per campaign server-side. Still, dedupe your CSV first with
/list-quality-scorecard.
What to do next
Open the Smartlead URL printed at the end. Review the campaign. Hit Start when satisfied. The script deliberately does not auto-activate.
After Start:
- Wait 21 days, then run
/positive-reply-scoringon the campaign to measure. - Every Monday: run
/email-deliverability-audit --days=7(see/cold-email-weekly-rhythm).
Or wait: if the best-practice check flagged issues, go back to /campaign-copywriting and revise before uploading.
Related skills
/campaign-copywriting— producesvariants.yaml/smartlead-inbox-manager— required prep: inboxes must be taggedactivebefore upload/list-quality-scorecard— dedupe + verify leads.csv before upload/positive-reply-scoring— run 21 days post-launch to measure/cold-email-weekly-rhythm— operational cadence after launch
Files
scripts/upload.ts— the upload scriptreferences/variants-schema.yaml— blank schema reference (no example copy content)references/leads-csv-schema.md— column spec
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- automatewithuday/GTM-Skills★ 176% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository51 other files it gives its agents.
- auto-research-publicSkill
- blitz-list-builderSkill
- campaign-copywritingSkill
- campaign-strategySkill
- cold-email-kickoffSkill
- cold-email-starter-kitSkill
- cold-email-weekly-rhythmSkill
- competitor-engagersSkill
- deliverability-incident-responseSkill
- deliverability-test-publicSkill
- disco-likeSkill
- email-deliverability-auditSkill
- experiment-designSkill
- google-maps-list-builderSkill
- icp-onboardingSkill
- icp-prompt-builderSkill
- inbox-lifecycle-managerSkill
- lead-magnet-brainstormSkill
- list-builderSkill
- list-expanderSkill
- list-quality-scorecardSkill
- perfect-company-listSkill
- personalization-subagent-patternSkill
- clay-playbooksSkill
- playbook-ad-librarySkill
- playbook-ai-specificitySkill
- playbook-case-study-pageSkill
- playbook-company-name-cleaningSkill
- playbook-creative-ideasSkill
- playbook-first-name-cleaningSkill
- playbook-fundraisingSkill
- playbook-google-site-searchSkill
- playbook-hiring-surgeSkill
- playbook-job-posting-languageSkill
- playbook-linkedin-engagementSkill
- playbook-lookalikesSkill
- playbook-name-to-other-prospectsSkill
- playbook-new-in-roleSkill
- playbook-pricing-pageSkill
- playbook-social-link-findingSkill
- playbook-social-postsSkill
- playbook-tech-on-websiteSkill
- playbook-warm-introsSkill
- positive-reply-scoringSkill
- prospeo-full-exportSkill
- prospeo-search-apiSkill
- smartlead-apiSkill
- smartlead-inbox-managerSkill
- smartlead-spintaxSkill
- spam-word-checkerSkill
- zapmail-domain-setup-publicSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

