Promo Post-Mortem
Promo post-mortems for ecommerce teams: settle what the promo actually cost after discount, shipping and returns, then decide keep, kill or restrict before the next one is planned.
Promos get judged on the week they ran, on top-line revenue, by the people who planned them. The full bill arrives later and somewhere else: the return wave two weeks out, the shipping on baskets that only cleared the threshold because of the offer, the margin on the products that actually moved rather than the ones in the creative. By then the next promo is already booked. This skill waits for the return window to close, loads discount, shipping, returns and product cost against the uplift, and returns a verdict: keep it, kill it, or restrict it to the segments and products where it paid.
What It Does
- Measures the promo against a baseline rather than against the prior week.
- Loads discount depth, shipping cost, returns and product cost into the result.
- Waits for the return window to close before calling the number final.
- Separates incremental orders from orders that were coming anyway.
- Breaks the result down by segment and by product so the restriction is specific.
- Returns a verdict: keep, kill, or restrict, with the conditions attached.
Use Cases
- Stop repeating a promo that has lost money three years running.
- Find the two product categories where the sitewide offer actually paid.
- Give the next planning meeting a number instead of a recollection.
- Settle whether the uplift was incremental or pulled forward from the next month.
Example Session
Did the September 20% promo make money once returns came back?
Revenue was up 34% on the week. Contribution margin was down $22k. Here is where it went.
- Line | Amount | Note
- Incremental revenue | $186k | Against a matched baseline
- Discount given | Minus $61k | Including orders that would have converted
- Returns, 30 days | Minus $29k | Return rate 19% against 11% normal
- Shipping on threshold orders | Minus $14k | Baskets built to clear free shipping
- Product cost on incremental units | Minus $104k | Mix skewed to low margin
- Net contribution | Minus $22k |
The promo lost money, and the return rate is why: at 19% against a normal 11%, a third of the discount was spent on orders that came back. Outerwear and footwear both cleared on their own, so restrict rather than kill: same offer, those two categories only, and exclude the segment that returns above 25%.
Why This Beats Prompting It Yourself
Week-Over-Week vs A Matched Baseline: The Hidden Risk
A generic prompt compares the promo week to the week before and reports the uplift. That figure is wrong in both directions: it credits the promo with orders that were coming anyway, and it books none of the returns that arrive three weeks later. Every promo looks like a success in that view, which is precisely why the same losing offer gets repeated each year.
When You Still Need The Return Window Closed
A promo result is not final until the returns are in. This skill holds the verdict until the window closes, then states minus $22k of contribution against a 34% revenue lift, with the 19% return rate that caused it. The breakdown by category is what turns a kill into a restrict, which is usually the better decision and never the one a week-over-week comparison can reach.
Known Limitations
A matched baseline needs enough clean trading history either side of the promo, so a store that runs offers continuously will get a wider confidence band and the output says so. Return attribution assumes returns can be traced to their original order, which most platforms support and some subscription setups do not. It analyzes promos that ran and does not forecast what an untested offer would do.
Install It
- Download the ZIP.
It is free and there is no account to create. - Unzip it into your agent's skills folder.
Claude Code reads ~/.claude/skills/, which is hidden by default: the command in the folder block opens it. Other agents scan their own directory, so drop the same folder there instead. - Ask your agent to use it.
Restart the agent if it was already running, then it picks the skill up with no config.
skills folder
Copy
~/.claude/skills/promo-post-mortem/
SKILL.md
references/baseline-method.md
postmortems/
# one file per promo, held until returns close
# macOS: create the folder and open it in Finder
mkdir -p ~/.claude/skills && open ~/.claude/skills
# Windows: paste in the Explorer address bar
%USERPROFILE%\.claude\skills\Frequently asked questions
How is this different from looking at promo week revenue?
Revenue is the one number a promo always improves. This measures against a matched baseline, loads discount, shipping, returns and product cost, and waits for the return window to close. The verdict often reverses the conclusion the revenue figure supported.
Which agents does the skill run in?
Any agent that supports the open SKILL.md format: Claude Code, Cursor, Codex CLI, GitHub Copilot, Gemini CLI, Manus, Grok and others load it unmodified. The format is portable, the location is not. Each agent scans its own skills directory, so you drop the same folder into whichever one yours uses. There is no config file to edit and no API key to provision.
How long does it wait before giving a verdict?
Until your own return window closes, which it reads from your returns history rather than assuming thirty days. It will give a provisional read earlier and label it provisional, because a promo result quoted before the returns land is the most common way a losing offer gets repeated.
What is a matched baseline?
Comparable trading days chosen for similar demand conditions, not simply the prior week. The prior week is contaminated by people waiting for the promo they knew was coming, which inflates the uplift on both sides of the comparison.
Why does it recommend restricting rather than killing?
Because most promos have a category or a segment where they clearly paid, sitting inside an average that lost money. Killing the offer throws that away. The output names the categories and segments that cleared, so the next run is narrower rather than absent.
What is included with the skill?
The skill itself, the baseline method reference, the post-mortem template, and the cost lines loaded into the verdict. It is free and security scanned. We re-publish the ZIP when the baseline method changes, so download it again if your promo results start moving.
Most promos look good until the margin is counted.
Polar folds discount, shipping, returns and product cost into contribution margin, so keep, kill or restrict is settled with the full bill.
<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"How is this different from looking at promo week revenue?","acceptedAnswer":{"@type":"Answer","text":"Revenue is the one number a promo always improves. This measures against a matched baseline, loads discount, shipping, returns and product cost, and waits for the return window to close. The verdict often reverses the conclusion the revenue figure supported."}},{"@type":"Question","name":"Which agents does the skill run in?","acceptedAnswer":{"@type":"Answer","text":"Any agent that supports the open SKILL.md format: Claude Code, Cursor, Codex CLI, GitHub Copilot, Gemini CLI, Manus, Grok and others load it unmodified. The format is portable, the location is not. Each agent scans its own skills directory, so you drop the same folder into whichever one yours uses. There is no config file to edit and no API key to provision."}},{"@type":"Question","name":"How long does it wait before giving a verdict?","acceptedAnswer":{"@type":"Answer","text":"Until your own return window closes, which it reads from your returns history rather than assuming thirty days. It will give a provisional read earlier and label it provisional, because a promo result quoted before the returns land is the most common way a losing offer gets repeated."}},{"@type":"Question","name":"What is a matched baseline?","acceptedAnswer":{"@type":"Answer","text":"Comparable trading days chosen for similar demand conditions, not simply the prior week. The prior week is contaminated by people waiting for the promo they knew was coming, which inflates the uplift on both sides of the comparison."}},{"@type":"Question","name":"Why does it recommend restricting rather than killing?","acceptedAnswer":{"@type":"Answer","text":"Because most promos have a category or a segment where they clearly paid, sitting inside an average that lost money. Killing the offer throws that away. The output names the categories and segments that cleared, so the next run is narrower rather than absent."}},{"@type":"Question","name":"What is included with the skill?","acceptedAnswer":{"@type":"Answer","text":"The skill itself, the baseline method reference, the post-mortem template, and the cost lines loaded into the verdict. It is free and security scanned. We re-publish the ZIP when the baseline method changes, so download it again if your promo results start moving."}}]}</script>
