Agent skill
campaign-analyzer
Analyze Instantly email campaign performance by persona, signal type, and copy patterns.
Filed under Analytics and reporting.
From OneGTM/gtm-skills · 9 skill entries · 0 · pushed 2026-09-30
What it does when it runs
Analyze Instantly email campaign performance by persona, signal type, and copy patterns. Use this skill whenever the user wants to review campaign metrics, compare reply rates across personas or signals, determine statistical significance of performance differences, identify winning vs losing copy patterns, get recommendations for improving campaigns, audit outbound email performance, or asks about which campaigns are working best. Also trigger when the user mentions Instantly analytics, campaign A/B testing results, outbound copy analysis, or wants a campaign performance report. Even casual requests like "how are our campaigns doing" or "which personas convert best" should use this skill.
Automated analysis of the skill and the 2 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- shellwrites files
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/OneGTM/gtm-skills.git /tmp/gtm-skills git -C /tmp/gtm-skills sparse-checkout set "skills/campaign-analyzer" mkdir -p ~/.claude/skills/campaign-analyzer cp -R "/tmp/gtm-skills/skills/campaign-analyzer/." ~/.claude/skills/campaign-analyzer/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
Or take the whole library
This repo ships a .claude-plugin manifest, so Claude Code can install all 9 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.
/plugin marketplace add OneGTM/gtm-skills /plugin
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from OneGTM/gtm-skills/blob/36da828338f8062c90f6a4a8ea8b918e4160f1e5/skills/campaign-analyzer/SKILL.md, which is licensed MIT (repository). 1,388 words, 15 headings.
Campaign Analyzer
Analyze Instantly email campaign performance across personas, signal types, and copy patterns. Produces a comprehensive Word document with statistical rigor and actionable recommendations.
Overview
This skill connects to the Instantly MCP API, pulls all campaign and analytics data, and generates a detailed performance analysis. It covers:
- Performance rankings by persona and signal type
- Statistical significance testing (two-proportion z-tests)
- Copy pattern analysis (what works vs what doesn't)
- Cross-tab breakdown (persona x signal matrix)
- Confidence intervals for reply rates
- Specific, actionable improvement recommendations
Prerequisites
- An Instantly MCP connector must be connected. The skill will auto-detect which MCP prefix to use by listing campaigns and finding the workspace with signal-type campaigns (names containing [COLD], [ANNIV], [UPCMG], [LITIG], [M&A], [SHUTDOWN]).
- The
docxskill should also be available for Word document generation, though this skill includes its own document creation script as a fallback.
How It Works
Step 1: Identify the correct Instantly MCP
The user may have multiple Instantly workspaces connected. To find the right one:
- Search deferred tools for Instantly-related MCPs (look for
list_campaignstools) - Call
list_campaignson each MCP and check the campaign names - The correct workspace has campaigns named like
[COLD] Junior Eng,[ANNIV] Senior AE, etc. - with signal prefixes in brackets - If only one Instantly MCP exists, use it directly
Store the MCP prefix (e.g., mcp__<server-id>) for all subsequent calls.
Step 2: Pull campaign data
Fetch all campaigns with pagination:
list_campaigns(limit=100, skip=0) # page 1
list_campaigns(limit=100, skip=100) # page 2 if needed
The response structure is {result: JSON_STRING} where the JSON string parses to {items: [...]}. Each campaign item has id, name, status, and timestamp_created.
Step 3: Parse campaign metadata from names
Campaign names follow the pattern: [SIGNAL] Persona Name
Signal types: COLD, ANNIV, UPCMG, LITIG, M&A, SHUTDOWN
Personas (14 total): Junior Eng, Senior Eng, Staff Eng, Eng Leadership, Junior AE, Senior AE, GTM Leadership, Junior CS, Senior CS, CS Leadership, BDR, FDE, Growth, Solution Architect
Extract signal and persona from each campaign name using regex: \[([A-Z&]+)\]\s*(.+)
Skip campaigns that don't match this pattern (they're not signal-based outbound campaigns).
Step 4: Fetch analytics
Use get_campaign_analytics with a list of all non-archived campaign IDs. The API accepts up to ~100 IDs at a time.
Response structure: {result: JSON_STRING} where the JSON string parses to an array of analytics objects with fields including campaign_id, sent, contacted, new_leads_contacted, replies, unique_replies, bounced, opportunities, opportunity_value, open, unique_opened.
Step 5: Fetch campaign sequences (for copy analysis)
For the top 10 and bottom 10 campaigns by reply rate, call get_campaign with each campaign ID to retrieve the full sequence (email steps with subject lines and body content).
Sequence steps contain variants - most campaigns use A/B testing with 2 variants on steps 1 and 3, and single variants on steps 2 and 4. Variants include subject and body fields. Body content often uses spintax format: {{RANDOM | option1 | option2 | option3}}.
Step 6: Run analysis
Use the bundled Python script to process all data:
python3 <skill-path>/scripts/analyze_campaigns.py \
--data <path-to-merged-json> \
--output <output-directory>
The script produces:
analysis_results.json- Full analysis datastatistical_tests.json- All z-test results with p-values and confidence intervals
If the script is not available, perform the analysis inline using Python with scipy.stats for statistical testing.
Analysis Components
Per-Persona Rollup: Aggregate sent, replies, reply rate, opens, bounces, opportunities, and pipeline value for each persona.
Per-Signal Rollup: Same aggregation by signal type.
Cross-Tab (Persona x Signal): Matrix showing reply rate for each combination, highlighting cells with sufficient volume for statistical inference.
Statistical Significance Testing:
- Two-proportion z-test comparing each persona's reply rate against the overall average
- Pairwise z-tests between signal types
- 95% confidence intervals for each persona's true reply rate
- Flag results as significant at p < 0.05, p < 0.01, or p < 0.001
- Note where sample sizes are too small for reliable inference (fewer than ~200 sends)
- Mention Bonferroni correction awareness for multiple comparisons
Copy Pattern Analysis:
- Compare subject lines and body content between top and bottom performers
- Identify patterns in: subject line length and style, greeting tone, specificity of value proposition, email length, follow-up progression, use of personalization tokens, spintax variety
- Categorize findings into "winning patterns" and "losing patterns"
Subject Line Performance Analysis:
- Extract all step 1 subject lines from campaign sequences (both A/B variants)
- Deduplicate subject lines and associate each with the campaign's reply rate
- Rank by reply rate and output top 10 and bottom 10 subject lines
- Analyze patterns across all subject lines:
- firstName personalization usage rate
- Lowercase vs mixed case frequency
- Short (under 5 words) vs long subject lines
- Role title mentions
- Spintax usage
- Question format usage
- Output pattern summary with counts and percentages
- Note: Reply rates are at campaign level (Instantly API does not expose per-variant analytics)
Opening Sentence Performance Analysis:
- Extract the first 2 lines of body content (after the greeting) from step 1 sequences
- Strip HTML tags and skip greeting lines ("hey {{firstName}}" etc.)
- Deduplicate and associate each opening with the campaign's reply rate
- Rank by reply rate and output top 10 and bottom 10 openings
- Analyze patterns across all openings:
- companyName personalization token usage
- "work with" or "partner with" phrasing
- Founder/founding team mentions
- Compensation or equity mentions
- Short (under 80 chars) vs long openings
- Spintax usage
- Output pattern summary with counts and percentages
Step 7: Generate the Word document
Read the docx skill (at /sessions/gifted-upbeat-shannon/mnt/.claude/skills/docx/SKILL.md or wherever it's installed) and follow its instructions for creating the output document. The document should include:
- Executive Summary - Key metrics, top/bottom performers, headline findings
- Performance by Signal Type - Table with metrics per signal, ranked by reply rate
- Performance by Persona - Table with metrics per persona, ranked by reply rate
- Statistical Significance - Which differences are real vs noise, confidence intervals
- Reply Rate Cross-Tab - Persona x Signal matrix with color coding
- Top/Bottom Campaigns - Lists with campaign names, metrics, and copy excerpts
- Copy Pattern Analysis - What winning copy does differently from losing copy
- Subject Line Performance - Top 10 and bottom 10 subject lines ranked by reply rate, plus pattern analysis table showing which subject line traits correlate with performance
- Opening Sentence Performance - Top 10 and bottom 10 opening sentences ranked by reply rate, plus pattern analysis table showing which opening traits correlate with performance
- Recommendations - Specific, actionable items based on the data
Use color coding in tables:
- Green (#2E7D32) for high performers (top quartile)
- Red (#C62828) for low performers (bottom quartile)
- Navy (#1F4E79) header backgrounds with white text
Save the document to the user's workspace folder.
Step 8: Present findings
After generating the document, provide a brief summary in chat covering:
- The single most important finding
- Any statistically significant surprises
- The top 2-3 recommendations
- A link to the full document
Handling Edge Cases
- No Instantly MCP connected: Tell the user they need to connect their Instantly workspace first.
- Multiple Instantly workspaces: Auto-detect by campaign naming pattern, or ask the user which workspace to analyze.
- Campaigns with zero sends: Exclude from percentage calculations to avoid division by zero.
- Low-volume campaigns: Flag personas or signals with fewer than 200 total sends as having insufficient data for statistical conclusions.
- Missing analytics: Some campaigns may not return analytics data - note these in the report and exclude from calculations.
- API pagination: Always check if more pages exist by comparing returned count to the limit.
Tips for Better Analysis
- Reply rate is the primary metric, but also look at opportunity conversion (replies that become opportunities) as a quality signal
- Pipeline value per send is a useful compound metric for comparing economic efficiency
- When comparing copy, focus on step 1 (initial email) since that's what most recipients see
- Spintax options within a single variant don't have separate tracking, so treat the whole variant as one unit
- A/B variant-level analytics aren't available through the Instantly API, so compare at the campaign level
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- campaign-impact-analyzer by LaGrowthMachine · 43
- campaign-analyzer by ekatasingh1107 · 2
- ad-campaign-analyzer by edupegoretti · 0
- ab-test-analyzer by irinabuht12-oss · 3,698
- campaign-naming-convention-builder by irinabuht12-oss · 3,698
- campaign-copywriting by growthenginenowoslawski · 739
- campaign-strategy by growthenginenowoslawski · 739
- smartlead-campaign-upload-public by growthenginenowoslawski · 739
Need help setting it up?
This page tells you what campaign-analyzer does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.