From opportunity-master
Executes LinkedIn outreach campaigns: sends connection requests and messages to leads, checks status, pauses/resumes. Tracks progress via markdown execution files.
How this skill is triggered — by the user, by Claude, or both
Slash command
/opportunity-master:campaign-executionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Execute LinkedIn outreach campaigns by performing due actions and tracking progress. Uses a manual check-in approach where users invoke this skill periodically to process pending actions.
Execute LinkedIn outreach campaigns by performing due actions and tracking progress. Uses a manual check-in approach where users invoke this skill periodically to process pending actions.
If campaign_id not provided:
.business_growth/sales/campaigns/Load the campaign's CAMPAIGN.md and LIST.md files from the campaign folder (.business_growth/sales/campaigns/<campaign_id>/).
Based on action parameter or ask user:
| Action | Description |
|---|---|
run | Execute all due actions for leads |
status | Show campaign progress without actions |
pause | Set campaign status to paused |
resume | Set campaign status to running |
Display campaign summary:
Process each lead in the target list:
For each lead, check if execution file exists at:
.business_growth/sales/campaigns/campaign_<name>/leads/<lead_name>/execution.md
Lead Naming: Generate meaningful snake_case names for leads based on their name and company (e.g., john_smith_acme, sarah_jones_techcorp). Keep names concise, lowercase with underscores.
If not exists, create it:
# Execution: <Lead Name>
## Lead Info
- **Name**: <name>
- **LinkedIn**: <url>
- **Company**: <company>
- **Campaign**: campaign_<name> # e.g., campaign_q1_outreach_fintech
## Status
- **Current**: pending
- **Current Step**: 1
- **Next Action**: connection_request
- **Next Action Time**: <now>
## Action Log
<!-- Actions will be logged here -->
Read execution file and check:
pending or in_progress?If all true, action is due.
Based on action type:
Connection Request:
Message:
Important: Replace template tokens with lead data:
{{first_name}} → Lead's first name{{company}} → Lead's company{{title}} → Lead's title{{custom}} → Custom personalization from research.md if existsUpdate execution.md:
## Status
- **Current**: in_progress
- **Current Step**: 2
- **Next Action**: message
- **Next Action Time**: <calculated based on sequence timing>
## Action Log
### <timestamp>
- **Step**: 1
- **Type**: connection_request
- **Content**: <actual message sent>
- **Outcome**: sent
- **Screenshot**: <reference if taken>
Connection Accepted (see references/CHECK_CONNECTION_ACCEPTS.md for full procedure):
Reply Received:
repliedFailed Action:
failed with reasonTrack actions taken and advise on limits:
When approaching limits:
After processing all due actions, provide summary:
## Campaign Execution Summary
**Campaign**: <name>
**Execution Time**: <timestamp>
### Actions Taken
- Connection Requests Sent: X
- Messages Sent: Y
- Total Actions: Z
### Lead Status Breakdown
- Pending: X leads
- In Progress: Y leads
- Replied: Z leads (🎉)
- Completed: W leads
- Failed: V leads
### Next Check-In
Recommend checking back in: <calculated time>
Reason: <rate limit cooldown / sequence timing>
### Leads Requiring Attention
- <Lead Name>: <reason - e.g., "Replied to connection request">
Update CAMPAIGN.md performance metrics section with current counts.
| Status | Meaning |
|---|---|
pending | Not yet started |
in_progress | Sequence in progress, awaiting next step |
replied | Lead replied, stop automation |
completed | All steps executed |
failed | Error occurred, needs review |
| Tool | Purpose |
|---|---|
tabs_context_mcp | Get browser context |
navigate | Go to LinkedIn profiles |
read_page | Verify page state |
find | Locate buttons and inputs |
form_input | Enter message text |
computer | Click, scroll, screenshot |
Common issues and responses:
| Issue | Response |
|---|---|
| Profile not found | Mark as failed, log reason |
| Connect button unavailable | May already be connected, verify |
| Rate limit warning | Stop execution, report to user |
| Login required | Ask user to log in manually |
| Message failed to send | Retry once, then mark failed |
This skill is designed for periodic manual invocation:
This approach:
npx claudepluginhub zuttam/business-growth-mpRuns end-to-end B2B cold-email outreach: enriches prospects via Apollo, scrapes signals from company sites and LinkedIn, drafts personalized emails with proven hook frameworks, sends via Gmail, and routes replies into labeled folders.
Automates Lemlist multichannel outreach: manage campaigns, enroll leads, add personalization variables, export campaign data, and handle unsubscribes via the Composio MCP integration.
Generates personalized multi-channel outreach sequences (email, LinkedIn, phone) from a buying signal, outputting 4-6 touchpoints over 10-14 days with optional Gmail drafting via Composio.