Use this when a marketing campaign has wrapped and the client needs a structured analysis of what worked, what did not, and what to do differently next time. Works for any campaign type: paid media, organic, email, content launches, events, product launches, or multi-channel efforts.
How it works
- You provide the campaign brief, performance data, budget, and any additional context
- The skill compares goals to actuals, breaks down channel performance, analyzes spend efficiency, and surfaces what actually happened and why
- It returns a post-mortem report with metrics tables, what-worked and what-didn't sections, and actionable recommendations for the next campaign
Prompt
You are building a campaign post-mortem for a Kate Makrigiannis consulting engagement. Kate uses post-mortems to help clients move from "that campaign felt good/bad" to "here is exactly what happened, why, and what we should do next." Before writing, read knowledge/voice-tone-guide.md -- use the client-facing voice.
Inputs I will provide:
- Campaign brief: {{CAMPAIGN_BRIEF}} (original campaign plan: goals, target audience, channels, messaging, timeline, and success criteria)
- Performance data: {{PERFORMANCE_DATA}} (actual results by channel: impressions, clicks, conversions, leads, revenue, engagement metrics, email opens/clicks, or whatever the client tracked)
- Budget: {{BUDGET}} (total spend and breakdown by channel, including any in-kind or time costs)
- Context (optional): {{CONTEXT}} (market conditions during the campaign, competitive activity, internal issues, what felt off or surprisingly good)
Step 1: Goals vs. actuals summary
Campaign Scorecard
| Metric | Goal | Actual | Variance | Verdict |
|---|---|---|---|---|
| [Primary KPI] | [target] | [actual] | [+/- X%] | [Hit / Missed / Exceeded] |
| [Secondary KPI 1] | [target] | [actual] | [+/- X%] | [Hit / Missed / Exceeded] |
| [Secondary KPI 2] | [target] | [actual] | [+/- X%] | [Hit / Missed / Exceeded] |
| [Secondary KPI 3] | [target] | [actual] | [+/- X%] | [Hit / Missed / Exceeded] |
Overall campaign verdict: [One sentence summary -- e.g., "Campaign hit its lead generation target but missed on conversion quality, resulting in lower revenue than projected."]
Show the math: For each calculated metric (conversion rates, CAC, ROAS), show the formula and inputs used.
Step 2: Channel performance breakdown
Channel-by-Channel Analysis
For each channel used in the campaign:
[Channel Name]
| Metric | Result | Benchmark | Assessment |
|---|---|---|---|
| Spend | $X | -- | -- |
| Impressions / Reach | X | [benchmark if available] | [Above / At / Below] |
| Engagement (clicks, opens, etc.) | X (X% rate) | [benchmark] | [Above / At / Below] |
| Conversions | X | [benchmark] | [Above / At / Below] |
| Cost per conversion | $X | [benchmark] | [Above / At / Below] |
| Revenue attributed | $X | -- | -- |
| Channel ROI | X% | -- | [Positive / Negative / Break-even] |
Channel-specific observations:
- [What worked in this channel and why]
- [What underperformed and possible causes]
- [Notable patterns in timing, creative, or audience response]
Repeat for each channel.
Channel Comparison
| Channel | Spend | Conversions | CPA | Revenue | ROI | Rank |
|---|---|---|---|---|---|---|
| [Channel 1] | $X | X | $X | $X | X% | [1-N] |
| [Channel 2] | $X | X | $X | $X | X% | [1-N] |
| Total | $X | X | $X | $X | X% | -- |
Step 3: Spend efficiency analysis
Cost Metrics
| Metric | Value | Assessment |
|---|---|---|
| Total spend | $X | -- |
| Cost per lead (CPL) | $X | [formula: total spend / total leads] |
| Cost per acquisition (CPA) | $X | [formula: total spend / total customers acquired] |
| Return on ad spend (ROAS) | X:1 | [formula: revenue / ad spend] |
| Blended campaign ROI | X% | [formula: (revenue - total spend) / total spend x 100] |
| Customer lifetime value ratio | X:1 | [formula: estimated LTV / CPA -- if LTV is available] |
Budget utilization:
- Planned spend: $X
- Actual spend: $X ([over/under] by X%)
- Budget efficiency notes: [Did overspend produce proportional returns? Did underspend leave opportunity on the table?]
Step 4: Audience response analysis
Audience Patterns
- Who responded best: [segment, demographic, or behavioral cohort with strongest engagement/conversion]
- Who responded worst: [segment with lowest engagement or highest cost]
- Surprise audiences: [any unexpected segments that showed up -- positive or negative]
- Audience quality: [Were the leads/conversions the right people? Quality vs. quantity assessment]
Funnel Analysis
| Funnel Stage | Volume | Conversion Rate | Drop-off Cause |
|---|---|---|---|
| Awareness (impressions/reach) | X | -- | -- |
| Interest (clicks/engagement) | X | X% from awareness | [cause of drop-off] |
| Consideration (leads/signups) | X | X% from interest | [cause of drop-off] |
| Conversion (customers/deals) | X | X% from consideration | [cause of drop-off] |
| Revenue | $X | $X per conversion | -- |
Biggest funnel leak: [Where did the most people drop off, and what is the best theory for why?]
Step 5: What worked
Wins
List 3-5 things that worked well, with evidence:
- [Win]: [What happened, specific data that proves it worked, and why it worked]
- [Win]: [Evidence and reasoning]
- [Win]: [Evidence and reasoning]
Step 6: What did not work
Misses
List 3-5 things that underperformed or failed, with honest assessment:
- [Miss]: [What happened, specific data showing underperformance, root cause analysis (not blame)]
- [Miss]: [Evidence and root cause]
- [Miss]: [Evidence and root cause]
For each miss, categorize the root cause:
- Strategy issue: Wrong audience, wrong channel, wrong timing
- Execution issue: Poor creative, technical problems, insufficient budget
- External factor: Market shift, competitive move, seasonal pattern
- Measurement gap: Could not attribute properly, data was incomplete
Step 7: Recommendations for next campaign
Actionable Next Steps
| # | Recommendation | Expected Impact | Effort | Priority |
|---|---|---|---|---|
| 1 | [Specific recommendation] | [What it should improve and by how much] | [Low / Medium / High] | [P1 / P2 / P3] |
| 2 | [Recommendation] | [Impact] | [Effort] | [Priority] |
| 3 | [Recommendation] | [Impact] | [Effort] | [Priority] |
Budget Reallocation for Next Campaign
| Channel | This Campaign | Next Campaign | Change | Rationale |
|---|---|---|---|---|
| [Channel 1] | $X | $X | [+/- $X] | [Based on performance data] |
| [Channel 2] | $X | $X | [+/- $X] | [Based on performance data] |
| Total | $X | $X | -- | -- |
Tests to Run Next Time
- Test 1: [What to test, hypothesis, and how to measure]
- Test 2: [What to test, hypothesis, and how to measure]
Kate's Talking Points
- The headline: "[One-sentence summary of campaign performance suitable for a stakeholder update]"
- The biggest learning: "[The single most valuable insight from this campaign]"
- The next move: "[The highest-priority recommendation for the next campaign]"
Related skills: Uses
/marketing-roi-analyzerfor deeper channel ROI analysis beyond a single campaign. Pairs with/audience-segmentationfor refining audience targeting based on post-mortem learnings. Feeds into/gtm-strategywhen post-mortem insights inform the next launch plan.
Example Output
Input
- Campaign brief: Meridian Health Partners (mid-size regional health system, 12 clinics across the Pacific Northwest) ran a 6-week multi-channel campaign to drive new patient registrations for their expanded primary care services. Goal was 400 new patient signups by end of Q1. Channels: Google Search ads, Meta (Facebook/Instagram), email to lapsed patient list (18,000 contacts), and a local radio buy. Target audience: adults 35–65 within 25 miles of clinic locations, uninsured or privately insured, who had not visited in 18+ months or had no prior relationship. Success criteria: 400 registrations, CPL under $45, email open rate above 22%.
- Performance data: Google Search — 142,000 impressions, 3,840 clicks (2.7% CTR), 188 form completions; Meta — 610,000 impressions, 4,270 clicks (0.7% CTR), 94 form completions; Email — 18,000 sent, 3,420 opens (19% open rate), 612 clicks (17.9% CTOR), 71 completions; Radio — estimated 290,000 listener impressions, no trackable conversions, anecdotal front-desk mentions (~12 calls referenced the ad); Total registrations confirmed after intake screening: 312 (some form completions did not complete intake). Revenue: average new patient LTV estimated at $1,800 over 24 months; 312 patients × $1,800 = $561,600 projected LTV.
- Budget: Google Search $14,200; Meta $8,500; Email (platform + creative) $1,800; Radio $9,000; Creative production (shared) $3,400; Total: $36,900
- Context: Campaign launched Feb 3, overlapping with a severe weather event (ice storms, two clinic closures) during weeks 3–4 that disrupted intake appointments and likely suppressed form-to-registration conversion. A regional competitor, PacificCare Clinics, launched a "no-wait primary care" campaign on Meta during the same window with aggressive creative, increasing CPM costs by an estimated 18–22% on that channel. Internal note: the landing page wasn't mobile-optimized until day 11 of the campaign — the team flagged it late.
Output (abbreviated)
Campaign Post-mortem: Meridian Health Partners — Primary Care Registration Drive
Campaign period: February 3 – March 14 | Prepared by: Kate Makrigiannis Consulting
Campaign Scorecard
| Metric | Goal | Actual | Variance | Verdict |
|---|---|---|---|---|
| New patient registrations | 400 | 312 | -22% | Missed |
| Cost per lead (CPL) | $45.00 | $66.43 | +48% | Missed |
| Email open rate | 22% | 19.0% | -13.6% | Missed |
| Projected LTV generated | $720,000 | $561,600 | -22% | Missed |
| Total form completions | 400 | 353 | -11.75% | Missed |
Overall campaign verdict: The campaign generated meaningful patient volume and strong projected LTV, but a delayed mobile fix, a competitor surge on Meta, and two weeks of weather-driven clinic disruption combined to push registrations 22% below target and blow the CPL goal by nearly half.
Show the math:
- CPL: $36,900 total spend ÷ 353 form completions = $104.54 per form completion; $36,900 ÷ 312 confirmed registrations = $118.27 per confirmed registration
- (Note: $66.43 CPL referenced above uses 353 completions as "leads" — both figures are reported for full transparency)
- Blended ROAS: $561,600 projected LTV ÷ $36,900 ad spend = 15.2:1 on LTV basis; not a traditional ROAS figure — flagged for client interpretation
- Blended campaign ROI (LTV-adjusted): ($561,600 − $36,900) ÷ $36,900 × 100 = 1,422% projected over 24 months
Channel-by-Channel Analysis
Google Search
| Metric | Result | Benchmark | Assessment |
|---|---|---|---|
| Spend | $14,200 | -- | -- |
| Impressions | 142,000 | -- | -- |
| Clicks | 3,840 (2.7% CTR) | 2.1% healthcare avg | Above |
| Form completions | 188 | -- | -- |
| Cost per completion | $75.53 | $80–$120 healthcare | Above (favorable) |
| Revenue attributed (LTV) | $170,640 (est. 94.8 confirmed) | -- | -- |
| Channel ROI | 1,102% (LTV-adj.) | -- | Positive |
Channel-specific observations:
- Search was the strongest performer on conversion volume and cost efficiency — 53% of all form completions from 38% of budget
- "Primary care near me" and "new patient same week" keywords drove the majority of completions; branded terms underperformed (low search volume in new markets)
- The landing page mobile issue affected Search disproportionately — mobile accounts for ~61% of healthcare searches; estimated 15–20% conversion suppression during days 1–11
Meta (Facebook/Instagram)
| Metric | Result | Benchmark | Assessment |
|---|---|---|---|
| Spend | $8,500 | -- | -- |
| Impressions | 610,000 (0.7% CTR) | 0.9% healthcare avg | Below |
| Form completions | 94 | -- | -- |
| Cost per completion | $90.43 | $75–$100 healthcare | At |
| Revenue attributed (LTV) | $76,680 (est. 42.6 confirmed) | -- | -- |
| Channel ROI | 803% (LTV-adj.) | -- | Positive |
Channel-specific observations:
- PacificCare's concurrent Meta campaign measurably compressed performance — CPM rose from $9.20 (week 1) to $11.40 (week 4), a 23.9% increase consistent with client's competitive intelligence
- Instagram stories outperformed Facebook feed placements by 2.1× on click-through but had comparable completion rates — creative was not tailored to placement
- Audience aged 55–65 showed lowest CPL on Meta despite smaller volume; 35–44 segment had highest click volume but worst form completion rate (possible mobile + landing page interaction)
Email (Lapsed Patient List)
| Metric | Result | Benchmark | Assessment |
|---|---|---|---|
| Spend | $1,800 | -- | -- |
| Delivered | 18,000 | -- | -- |
| Opens | 3,420 (19.0%) | 22% goal / 21.5% healthcare avg | Below |
| Clicks | 612 (17.9% CTOR) | 15–18% healthcare avg | Above |
| Form completions | 71 | -- | -- |
| Cost per completion | $25.35 | -- | -- |
| Channel ROI | 3,991% (LTV-adj.) | -- | Positive |
Channel-specific observations:
- Email delivered the lowest absolute volume but by far the best cost efficiency — $25.35 per completion vs. $75–$90 across paid channels
- Open rate missed the 22% goal, likely due to a generic subject line ("We've expanded our primary care services") — no personalization or urgency signal
- CTOR of 17.9% is strong, meaning people who opened were genuinely interested; the bottleneck was getting the open, not converting interest
Radio
| Metric | Result | Benchmark | Assessment |
|---|---|---|---|
| Spend | $9,000 | -- | -- |
| Est. listener impressions | 290,000 | -- | -- |
| Trackable conversions | 0 | -- | -- |
| Anecdotal front-desk mentions | ~12 calls | -- | -- |
| Cost per trackable conversion | Incalculable | -- | -- |
Channel-specific observations:
- Radio produced no measurable attribution; 12 anecdotal front-desk references across 6 weeks does not justify $9,000