Skip to content
Marketing
Skill

/setup-outreach-campaign-smartlead

Set up a complete outbound email campaign in Smartlead. Asks the user for campaign goal, audience, messaging, schedule, and mailbox allocation. Creates the campaign, adds leads, saves email sequences, sets schedule, and assigns available mailboxes. Use when a user wants to

From plugin
goose-skills
1.2k200 skills
Install
$ npx -y skills add gooseworks-ai/goose-skills --skill setup-outreach-campaign-smartlead --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/setup-outreach-campaign-smartlead

Context preview

The summary Claude sees to decide when to auto-load this skill.

Set up a complete outbound email campaign in Smartlead. Asks the user for campaign goal, audience, messaging, schedule, and mailbox allocation. Creates the campaign, adds leads, saves email sequences, sets schedule, and assigns available mailboxes. Use when a user wants to

SKILL.md

setup-outreach-campaign-smartlead.SKILL.md
name: setup-outreach-campaign-smartlead
description: >
  Set up a complete outbound email campaign in Smartlead. Asks the user for
  campaign goal, audience, messaging, schedule, and mailbox allocation.
  Creates the campaign, adds leads, saves email sequences, sets schedule,
  and assigns available mailboxes. Use when a user wants to launch email
  outreach via Smartlead.
tags: [outreach]

graph:
  provides:
    - smartlead-campaign
    - email-sequence
  requires:
    - lead-list
  connects_to:
    - skill: company-contact-finder
      when: "User doesn't have a lead list and needs to find contacts first"
      passes: nothing (upstream source)
    - skill: contact-cache
      when: "Before adding leads, deduplicate against already-contacted leads"
      passes: lead-list (emails)
    - skill: luma-event-attendees
      when: "User wants event attendees as the lead source"
      passes: person-list
    - skill: conference-speaker-scraper
      when: "User wants conference speakers as the lead source"
      passes: person-list
  capabilities: [smartlead-api]

setup-outreach-campaign-smartlead

Set up a complete outbound email campaign in Smartlead: create the campaign, add leads, write a 2-3 email sequence, configure the schedule, and allocate mailboxes.

Inputs

| Input | Required | Default | Description | |-------|----------|---------|-------------| | campaign_name | Yes | -- | Name for the campaign (e.g., "Truewind - Accounting Firms - Feb 2026") | | campaign_goal | Yes | -- | What outcome the campaign drives (book demos, drive signups, etc.) | | lead_list | Yes | -- | CSV file path OR person-list JSON from upstream skill | | value_proposition | Yes | -- | Core pain point or benefit the emails address | | cta | Yes | -- | Call to action (e.g., "Book a 15-min demo", "Reply to learn more") | | tone | No | semi-formal | Email tone: casual, semi-formal, formal | | personalization_angle | No | -- | Hook for personalization (event attendance, job posting, news mention) | | timezone | No | America/New_York | Timezone for send schedule | | send_days | No | [1,2,3,4,5] | Days of week to send (0=Sun, 6=Sat) | | start_hour | No | 08:00 | Start of send window | | end_hour | No | 18:00 | End of send window | | max_leads_per_day | No | 20 | Max new leads contacted per day | | min_time_btw_emails | No | 10 | Minutes between emails from same mailbox | | num_mailboxes | No | 5 | Number of mailboxes to allocate | | mailbox_selection | No | auto | "auto" (pick free ones) or "manual" (show list to user) |

Setup

Requires a Smartlead account with API access. **This skill does not use the Gooseworks proxy** — the user must supply their own Smartlead API key.

export SMARTLEAD_API_KEY=your_api_key_here

You can find your API key in the Smartlead dashboard under **Settings → API Keys**. If `SMARTLEAD_API_KEY` is not set, ask the user for it before proceeding.

All API calls go to `https://server.smartlead.ai/api/v1` with `?api_key=$SMARTLEAD_API_KEY` appended.

Rate limit: 10 requests per 2 seconds.

Procedure

Step 1: Gather Campaign Info

Ask the user the following questions. Group them conversationally — don't dump all at once.

**Campaign identity:**

  • "What is the name for this campaign?" (e.g., "Truewind - Accounting Firms - Feb 2026")
  • "What is the goal?" (e.g., book demos, drive trial signups, conference follow-up)

**Audience & leads:**

  • "Who is the target audience?" (ICP: title, company type, size, industry)
  • "How are you providing the lead list?" — options: CSV file, output from a prior skill (company-contact-finder, luma-event-attendees), or "I need to find leads first" (chain to company-contact-finder)

**Messaging:**

  • "What is the core value proposition or pain point?"
  • "What is the call to action?" (e.g., "Book a 15-min demo")
  • "What tone — casual, semi-formal, or formal?"
  • "Any personalization angle?" (e.g., reference their job posting, event, industry news)

**Schedule:**

  • "What days should emails be sent?" (default: Mon-Fri)
  • "What hours and timezone?" (default: 8am-6pm ET)
  • "Max new leads per day?" (default: 20)
  • "When should the campaign start?" (default: tomorrow)

**Mailboxes:**

  • "How many mailboxes to allocate?" (default: 5)
  • "Auto-select free mailboxes, or show me a list to choose from?"

After gathering answers, present a summary and confirm before proceeding.

Step 2: Create the Campaign

POST https://server.smartlead.ai/api/v1/campaigns/create?api_key=$SMARTLEAD_API_KEY

Body:
{
  "name": "<campaign_name>",
  "client_id": null
}

**Response:**

{
  "ok": true,
  "id": 3023,
  "name": "Test email campaign",
  "created_at": "2022-11-07T16:23:24.025929+00:00"
}

Capture `campaign_id` from `id`. All subsequent calls use this.

Step 3: Find and Allocate Mailboxes

This step determines which mailboxes are available and assigns them to the campaign.

3a: Fetch all email accounts

GET https://server.smartlead.ai/api/v1/email-accounts/?api_key=$SMARTLEAD_API_KEY&offset=0&limit=100

Returns a list of all email accounts with `id`, `from_email`, `from_name`, `daily_sent_count`, `warmup_details`, `is_smtp_success`, `is_imap_success`.

3b: Identify which mailboxes are currently in use

Fetch all campaigns:

GET https://server.smartlead.ai/api/v1/campaigns?api_key=$SMARTLEAD_API_KEY

For each campaign with `status` = `"ACTIVE"` or `"STARTED"`, fetch its email accounts:

GET https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/email-accounts?api_key=$SMARTLEAD_API_KEY

Build a set of all `email_account_id` values currently assigned to active campaigns.

3c: Filter for free mailboxes

A mailbox is "free" if: 1. Its `id` is NOT in the active-campaign set from 3b 2. `is_smtp_success` = true AND `is_imap_success` = true (account is functional)

Sort free mailboxes by `daily_sent_count` ascending (prefer coolest/least-used mailboxes).

3d: Select and assign

If `mailbox_selecti

Read more
Ships withgoose-skills

Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.

Get the whole plugin

Other skills on goose-skills.