Launch outreach campaign in ACA
ACA campaigns can run LinkedIn, email, WhatsApp, Instagram, Telegram, and multi-channel sequences. This skill creates a campaign from a lead list and sender account, using ACA's built-in campaign steps for personalization and delivery.
Rules
- Keep campaigns in
draftunless the user explicitly says to launch/start/activate. - Use ACA campaign prompt-mode steps for personalization. Do not reference non-existent per-lead injection tools.
- Prefer
analyze_contactbefore personalized messages when the list has enough company/profile data. - Confirm before activating a campaign, spending import budget, or contacting leads.
- Stop if no sender account exists for the chosen channel.
Workflow
1. Confirm the brief
Restate:
- Lead list
- Channel path
- Goal
- Offer/product
- Tone/brand voice
- Number of touches
Ask one question if the launch would otherwise be ambiguous.
2. Verify prerequisites
Call:
list_lead_listsandget_lead_listlist_productsandlist_icpswhen the campaign should reference a specific offerlist_sender_accountsfiltered by chosen channellist_email_mailboxesfor email-heavy campaignslist_campaignsto avoid name collisions
3. Build the sequence
Use the steps array on create_campaign. Default patterns:
LinkedIn-only
[
{ "type": "analyze_contact", "product_id": "<product_id>", "continue_on_failure": true },
{
"type": "connection_request",
"message_mode": "prompt",
"prompt": "Write a short LinkedIn connection request under 250 characters. Sound like a peer. Mention one specific business reason this person is relevant. No pitch, no emojis."
},
{ "type": "delay", "days": 3 },
{
"type": "if_connected",
"branches": {
"accepted": [
{
"type": "message",
"message_mode": "prompt",
"prompt": "Write a 2 sentence LinkedIn DM. Reference the contact's likely role or company context. Give one useful observation, then ask a low-pressure question. No pitch."
}
],
"not_accepted": [{ "type": "end" }]
}
}
]
Email-only campaign
[
{ "type": "find_email", "provider": "auto", "skip_if_has_email": true, "continue_on_failure": true },
{ "type": "analyze_contact", "product_id": "<product_id>", "continue_on_failure": true },
{
"type": "email",
"message_mode": "prompt",
"subject": "quick question",
"prompt": "Write a concise cold email in HTML paragraphs. Reference the contact's likely situation, connect it to the offer, and end with one soft question. No hype, no fake familiarity."
},
{ "type": "delay", "days": 3 },
{
"type": "email",
"message_mode": "prompt",
"subject": "worth looking at?",
"prompt": "Write a short follow-up with a different angle and one practical proof point. End with a yes/no question."
}
]
Multi-channel
Start LinkedIn, wait for acceptance, then switch to email when available:
analyze_contactconnection_requestdelayif_connectedswitch_channelemailif_reply_receivedend
4. Create the campaign
Call create_campaign with:
namedescriptionlead_list_idsender_account_idscampaign_typeprimary_channelstepsstop_on_reply: true
Keep the campaign in draft unless the user asked to launch.
5. Activate only with approval
If the user explicitly asked to start sending, call update_campaign_status with status: "active".
Then call get_campaign to confirm status and lead summary.
Output format
Campaign created: {campaign_name}
Campaign ID: {campaign_id}
Status: {draft/active}
Channel path: {path}
Lead list: {list_name} ({lead_count} leads)
Senders: {sender_count}
First sends: {when_or_draft_note}
Track: {campaign_url_if_available}
Skill chaining
This skill participates in the ACA chain. Preserve the selected ACA org, relevant IDs, user brief, approval state, and any generated artifacts when continuing into another ACA skill. If the user asked for execution and a downstream condition is met, continue into the next skill automatically; otherwise end with the handoff block.
Upstream
- Called by
aca-kickoff,aca-campaign-strategy,aca-campaign-copywriting,aca-lead-quality, oraca-email-sequence-manager.
Auto-continue conditions
- No lead list -> continue to
aca-find-leads. - Lead list unscored -> continue to
aca-lead-quality. - Missing sender -> continue to
aca-sender-health. - Email channel selected and readiness unknown -> continue to
aca-email-deliverability-audit. - Copy missing or weak -> continue to
aca-campaign-copywriting. - Campaign created -> continue to
aca-pipeline-status.
Stop before chaining when
- Ask before activating campaigns or contacting leads.
Downstream skills
aca-find-leads- source missing audience.aca-lead-quality- clean list before launch.aca-sender-health- resolve sender blockers.aca-email-deliverability-audit- preflight email risk.aca-campaign-copywriting- create missing copy.aca-pipeline-status- confirm launch state.
Handoff block
Chain state: {continue|needs_approval|blocked|complete}
Next skill: {aca-skill-name|none}
Reason: {why this handoff is or is not needed}
Carry forward: {org_id/name, product_id, icp_id, lead_list_id, campaign_id, sequence_id, job_id, approvals, constraints}
ACA tools used
list_lead_lists,get_lead_listlist_products,list_icps,list_brand_voiceslist_sender_accounts,list_email_mailboxeslist_campaigns,create_campaign,get_campaign,update_campaign_status