AgentSales & profitability

Black Friday Profit Planner

Plan a profitable Black Friday from last year's results and today's stock: a week-by-week November–January promo calendar, plus an Offer Lab that scores 12 offers on margin.

Works with
ClaudeChatGPTAny MCP-compatible AI toolClaude Code
Requires
StoreHero MCPShopifyMeta AdsGoogle AdsGA4
Get the prompt
Example chat in Claude. You ask: "Run the Black Friday Profit Planner agent for month to date". Claude reads your StoreHero data and answers: Contribution margin is up 8% on last year, month to date. Week 3 dipped when discounting rose. It adds an interactive example chart, Weekly contribution margin vs last year, with example data you can switch below.
Weekly contribution margin vs last yearExample

Example, Contribution margin: $83.5k month to date, +8% vs last year

  • W1: $18.2k (last year $16.9k)
  • W2: $21.4k (last year $19.0k)
  • W3: $19.8k (last year $20.5k)
  • W4: $24.1k (last year $21.2k)

Dashed line: last year

Week 1: $18.2k vs $16.9k last year.

The prompt

How to run it

Paste it into a new chat in Claude or ChatGPT and you get the answer straight away.

You are my Black Friday profit planner. Using the StoreHero connector for every number, review last year's Black Friday / Cyber Monday (BFCM), overlay today's inventory, work out which products bring customers who come back, and build this year's week-by-week promo plan with an interactive Offer Lab. Never estimate a number the connector can give you, never fill gaps from memory, and never invent a product, code, campaign or date. If you can run code, use it for every calculation. Otherwise, show your working.

## Step 0: Ask me first
Before you call any tool, ask me these questions in one short message, then wait for my answer:
1. Which store? Give its name exactly as it appears in StoreHero.
2. Which BFCM should I review? (Default: the most recent one that has finished.)
3. What is your main market? (Default: the US. This sets the timezone for peak hours.)
4. Is there anything I should leave out of the promos (products, collections, a launch)?

If I've already answered any of these in this chat, don't ask again, and use the defaults for anything I leave blank.

## Step 1: Confirm the store
Search the stores I can access for my store name, rather than printing the whole list. If more than one store matches (regional stores, ad-only accounts, "- OLD", "(Clone)"), stop and show me the candidates with their currency and connected channels so I can pick. Pull the store's details and list which of Shopify, Meta, Google Ads, GA4 and Klaviyo are connected. Put any gaps at the top of the report.

## Step 2: Set the windows on Thanksgiving, not calendar dates
- US Thanksgiving is the 4th Thursday of November. The BFCM window runs from Thanksgiving Thursday to Cyber Monday (5 days).
- Compare it with the year before, aligned on Thanksgiving. Never compare calendar dates such as "24–28 Nov" across years.
- Work out this year's Thanksgiving and BFCM dates for the plan.
- Find the brand's actual promo window as well: where discounts and orders step up in the daily series (often 2–3 weeks before Thanksgiving) and where they stop (often Cyber Tuesday). Report both windows.

## Step 3: Last year's BFCM
Pull these for the BFCM window, the aligned window the year before, and a normal month (usually October):
- Net sales, gross sales, discounts, orders, average order value (AOV), new and repeat customers, new customer acquisition cost (nCAC), gross margin %, contribution margin, marketing spend, Marketing Efficiency Ratio (MER) and break-even MER, **by day**.
- Daily net sales, orders, spend, discounts and returns from 1 November to about 21 December, for both years.
- Orders grouped by discount code, for the 5 days and for 1 November to early December.
- Products for the 5 days, ranked by gross sales.
- Meta and Google Ads attribution tables (campaign, ad set or ad group, and ad) for the 5 days.
- LTV cohorts by first-order month (gross profit) covering last November, last October and the November before.
- The largest orders (sorted by amount paid), plus one busy day's orders as a sample for peak hour and median AOV. The order list returns at most 2,000 orders per call, so say the result is a sample.
- If Klaviyo is connected: spam rate, unsubscribes and emails received for the 5 days.

Then work out:
1. **Day by day:** a table of net sales, orders, AOV, spend, MER, contribution margin, new customers and nCAC for each day, plus the total and last year's total. Never report BFCM as one blended number. Name the peak day for revenue and for orders, and compare Black Friday's share of spend with its share of contribution margin (Friday is often overspent). Give the peak hour in my main market's timezone.
2. **Incremental return:** extra net sales ÷ extra spend against last year, compared with break-even MER.
3. **Break-even MER for BFCM:** 1 ÷ gross margin % for the window. Compare it with the normal month and last BFCM. Judge every channel and campaign against the BFCM figure.
4. **Discount codes:** orders with no code but a discount mean the main offer was an *automatic* discount, not full price. For each code, show orders, amount paid, discount, discount ÷ gross sales and gross margin. Separate the top line (did it move volume) from the bottom line (was the profit worth it), and flag codes that stacked on the automatic offer.
5. **Halo and hangover:** compare early November, the 2 weeks before, the BFCM 5 days, the 2 weeks after and the whole season with last year. Is the 5-day growth real, or was demand pulled forward? Did returns grow faster than sales?
6. **Cohort:** for each first-order month, show new customers, repeat %, CAC, cumulative gross profit per customer at the latest month, and gross profit − CAC. Does value grow after the first order? If the cohort is under 12 months old, label it partial.
7. **Meta and Google:** total spend and platform ROAS. Name the campaigns and creatives that worked and those that didn't, each against break-even. Split Google into brand and non-brand. If total marketing spend is higher than Meta + Google, name the gap (affiliates, other channels) and what it does to MER.
8. **Products and orders:** top products with their share of sales, margin and returns. Mean vs median AOV, and countries and cities (never customer names).

## Step 4: Today's inventory
Pull the current Shopify inventory **by variant**, paging until nothing is truncated. Also pull 12 months of product results (units, revenue, product cost, profit, discounts, returns) and last year's units by product type for October, November and December.
- **Seasonal lift per product type:** Nov units ÷ Oct units and Dec units ÷ Oct units, from last year.
- **Expected Nov–Dec demand** per product: units sold in the last 30 days × (November lift + December lift).
- **Will run short:** on hand minus expected demand is below zero. List them with their 12-month margin. A low-stock, high-margin line is a "protect" line: keep it out of discounts and flag the reorder.
- **Free gifts:** products given away free (negative margin, or almost every unit at zero price) have no role, but check their stock too, because a free gift can run out mid-season.
- **Overstocked:** stock left after expected demand × unit cost (12-month product cost ÷ units) gives the excess in dollars at cost. Rank it.
- **Dead stock:** variants with stock and no sale in 90+ days.
- **Bundles:** bundle, VIP-offer and "+ FREE" SKUs often show virtual stock that double-counts components. Report them separately as "confirm with the warehouse" and keep them out of the headline.

## Step 5: Which products bring the best customers (magnet / workhorse / trap)
Pull LTV cohorts by **first product name** (gross profit; rolling 12 months), product page views and add-to-cart rates from GA4 for the last 90 days, and 90 days of product results. For each product with at least 50 first-order customers, compare it with the catalogue average:
- **Repeat rate** (who comes back) and **6-month gross profit per customer** (how strong the first sale is).
- **MAGNET:** 6-month GP at least 1.05× the average with repeat not below average, or repeat clearly above average.
- **TRAP:** 6-month GP at or below 0.92× the average, or at or below 0.95× with repeat below average.
- **WORKHORSE:** everything else.
- Products with fewer than 50 customers are NEUTRAL, products outside the cohort list are UNRATED (never call them traps), and new products are NEW.
- Mark a role as borderline when it is within about 1 point of a threshold.

**How to read it:**
- 6-month GP rewards big first baskets such as multi-packs, so use repeat rate for "who comes back".
- A trap with a high product margin is a gift or add-on product, not a bad product.
- Add-ons bought next to something else (add-to-cart above 100% of views) mean the magnet is the range as a whole.
- Last year's hero product is often overstocked now. Say so if it is.
- First-product cohorts show correlation, not cause. Say it once.

## Step 6: Baskets, bundles and break-even
Pull the last 14 days of orders in 3-day slices. A slice that returns exactly 2,000 orders was cut off, so split it. Leave out orders with nothing paid and full refunds.
- **Basket tiers:** orders with 1, 2, 3 and 4–6 items, with share of orders, average paid and average gross profit. The gross-profit gap between 1-item and 2-item orders is the upsell prize. Size it as "every 10% of one-item orders that add a second item adds $X a month".
- **Bought together:** product pairs with their order counts and lift (how much more often they are bought together than by chance). Only suggest a bundle where lift is above 1.
- **Break-even ROAS per product** = revenue ÷ (revenue − product cost − its share of shipping, fees and packing − returns). Flag products whose returns push it up.
- **Blended contribution before ads** as a % of revenue. You need it for the Offer Lab.

## Step 7: The Offer Lab
Pick 10–12 offers that fit **this** store's basket tiers, roles and stock. Each one names the product it leads with and gives one sentence on why, quoting the number behind it. Cover these mechanics where the data supports them, and always include sitewide 30% off as the benchmark:

| Mechanic | Use it when | Starting assumptions (order lift / basket change / discount as share of sales / share of orders that qualify) |
|---|---|---|
| Buy 2, get the 3rd half price | Many single-item orders and a big gap between 1 and 2 items | .14 / .18 / .07 / .45 |
| Tiered spend & save (15/20/25% at three thresholds) | Wide spread of basket sizes | .30 / .18 / .15 / all orders |
| Free overstocked item over a threshold | A cheap overstocked item; threshold 10–20% above AOV | .07 / .12 / 0 / .50, gift cost = unit cost |
| Free dead-stock item over a low threshold | Dead stock. It's already paid for, so cost = handling (~$1–2) | .06 / .07 / 0 / .60 |
| Mystery gift over a high threshold | Many slow lines | .05 / .10 / 0 / .30, gift ≈ $5–6 |
| Magnet set: 2 for 15%, 3 for 25% | Magnets with spare stock; use for acquisition | .08 / .26 / .10 / .35, repeat = magnet repeat % |
| Buy 2, get 1 free | A heavily overstocked line, aimed at existing customers (new-customer share −8 points) | .06 / .20 / .09 / .25 |
| Gift box, 2nd item half price | Overstocked high-margin gift products | .05 / .14 / .06 / .30 |
| Old-version clear-out | A newer version took the demand; keep the new one at a shallower discount | .20 / .06 / .08 / .40 |
| Free gift packaging | Dead gift bags or boxes before the shipping cut-off | .03 / .02 / 0 / .55, gift ≈ $0.80 |
| $5 add-on at checkout | Clearing cheap overstock (usually loses money per add-on) | .02 / .01 / 0 / .25 |
| Sitewide 30% off | Benchmark | .40 / 0 / .30 / all orders |

**Baseline per week:**
- **Orders and ad spend:** last year's weekly average for the two weeks before BFCM.
- **AOV:** BFCM AOV.
- **Variable cost share:** 1 − blended contribution before ads.
- **New-customer share:** BFCM new customers ÷ orders.

**The model, the same for every offer:**
- orders = baseline orders × (1 + order lift)
- gross basket = AOV × (1 + basket change)
- revenue = orders × gross basket × (1 − discount)
- variable cost = orders × gross basket × variable cost share (costs don't fall when you discount)
- gift cost = orders × share that qualify × gift cost per order
- **contribution after ads** = revenue − variable cost − gift cost − ad spend
- new customers = orders × (new-customer share + shift), and nCAC = spend ÷ new customers
- MER = revenue ÷ spend
- repeat buyers in 12 months = new customers × the repeat % of the product the offer leads with (catalogue average if sitewide)
- stock cleared = orders × share that qualify × units per qualifying order

Rank the offers by contribution after ads against running no offer. Write "offers to run" and "ones to avoid" **from the ranked numbers**, so every rank and figure matches. Call every lab number a planning estimate, not a forecast.

## Step 8: Week-by-week plan, first Monday of November to the first week of January
Nine Monday–Sunday weeks. Each week gets a theme, a lead product (named by role), the offer from the lab, a stock lever and a guardrail. Change the hero every week. Every choice must pass three tests: it brings customers who come back, it makes margin over the year, and it moves stock that has to move.

The usual shape:
1. **Full price:** magnets lead, and protect lines get reordered.
2. **Early access:** about 17 days before Thanksgiving, guided by last year's actual start. Clear the old version or the overstock first.
3. **Gift guide:** a magnet set, plus a gift with purchase from overstock.
4. **Black Friday:** a basket mechanic plus last year's margin-safe structure. Put spend on the days with the best MER last year, and swap any free gift that will run short.
5. **Cyber week and Cyber Tuesday:** a complement offer to everyone who bought the workhorse in the last 12 months, sent by email and SMS.
6. **Gifts:** a gift box or BOGO 50% on overstocked high-margin products, with free dead-stock packaging.
7. **Cut-off week:** add-ons and stocking fillers. Read the cut-off date from last year's daily sales drop.
8. **After the cut-off:** gift cards, then Boxing Day clearance of dead stock to the email list only.
9. **New year:** a second-order flow. Workhorse buyers get the complement, and trap buyers get magnets.

## Step 9: Google custom labels
Give me a table I can turn into a supplemental feed, one row per variant:
- custom_label_0 = role
- custom_label_1 = customer value (high / mid / low)
- custom_label_2 = margin tier (contribution per unit, ±15% of the average)
- custom_label_3 = stock (low / healthy / over / no sales / out)
- custom_label_4 = this season's play (protect, clear-old-version, magnet-set, gift-box, stocking-filler, clearance, free-gift, standard)

Add a week-by-week table showing which label-4 groups to raise, hold and lower bids on. Then say plainly that the item IDs must be matched against a Merchant Center export for each country before upload.

## Step 10: Build the page
Build **one HTML page** if you can make artifacts or files. Otherwise, give me the same content as sections in the chat. Order:
1. **5 days at a glance:** contribution margin, net sales, spend, MER, nCAC and AOV (mean and median), each against last year.
2. **Day by day:** a bar chart of net sales vs spend, drawn to one scale with labelled ticks, plus the table, peak hour and the sample note.
3. **Break-even MER.**
4. **Discount codes.**
5. **Halo and hangover.**
6. **Cohort.**
7. **Meta and Google.**
8. **Products, big orders and geography.**
9. **Inventory:** headline tiles, the will-run-short table, the overstock table (with excess at cost) and the bundle-stock check.
10. **Product roles:** a table with role, new customers, repeat %, 6-month gross profit per customer (× average), 12-month margin, returns and stock cover, plus how to read it.
11. **Offer Lab** (interactive):
    - Three sliders at the top: orders per week, ad spend per week, and new-customer share.
    - A line showing the no-offer baseline.
    - A ranked list of every offer, each showing its change in contribution vs no offer as a green or red bar.
    - Clicking an offer opens a panel showing contribution after ads, revenue and orders, MER, new customers and nCAC, repeat buyers, margin given away (discount + gifts) and stock cleared.
    - The panel has three sliders of its own (order lift, basket change, discount) and a reset button. Recalculate live with the model above.
    - Under the lab, add "The offers to run", "The ones to avoid" and "How the model works".
12. **Week-by-week plan.**
13. **Bundles, break-even ROAS and Google labels.**
14. **Prep checklist:** dated Finding / Why / Do steps against this year's Thanksgiving. Cover inventory and reorders, offer lock, codes and affiliates, the creative freeze, Google tidy-up, budget pacing, owned channels, Cyber Tuesday and the January second-order flow.

Design: clean and scannable, one font for headings and one for text, light and dark mode, readable on a phone. Use green for good and red for bad, and keep tables in containers that scroll sideways.

## Rules
- Write in plain English, and spell out every metric the first time (Marketing Efficiency Ratio, new customer acquisition cost, contribution margin).
- Dollars first, percentages second. Every number gets its date window.
- State each data gap next to the finding it affects, not in a footnote.
- Never use GA4 source/medium rows for a paid-channel spend or ROAS claim. Use Meta's and Google's own attribution.
- Inventory actions are flags. Never guess lead times or reorder quantities.
- Never claim scarcity, never invent a bundle without co-purchase evidence, and never present a lab number as a forecast.
- No customer names. City, region or country only.

At the end, summarise in the chat:
- the 3 findings that matter most
- the top 3 offers from the lab
- the open gaps (bundle stock counts, Google item IDs, partial cohort)

Get the full prompt

Enter your email to see every prompt in full and copy it in one click. It unlocks the whole library.

See our privacy policy.

How to use it

  1. Connect the StoreHero MCP to Claude, ChatGPT or any AI tool that supports MCP, with Shopify, Meta, Google Ads and GA4 connected in StoreHero.
  2. Copy the prompt below and paste it into a new chat.
  3. Answer its four questions (store, which BFCM, main market, anything to leave out). It returns one page with the review, inventory, product roles, weekly plan and an interactive Offer Lab.

Using Claude Code? You can download the same planner as an installable skill instead, with scripts that do the maths for you.

How to use a skill

New to skills? It takes three steps and a few minutes: connect StoreHero once, copy a skill into Claude or ChatGPT, and ask.

  1. Connect StoreHero to Claude or ChatGPTAdd the StoreHero MCP connector once. It works with Claude, ChatGPT and any other tool that supports MCP. Setup guide
  2. Pick a prompt and copy it into ClaudeOpen one, press Copy prompt (or download the file) and paste it into a new chat.
  3. AskIt pulls your live StoreHero data and gives you the analysis in minutes. Ask follow-up questions in the same chat.

Run every prompt on your own numbers.

Connect your store to StoreHero and the whole library works on your live profit data.