AI Prompts Black Friday Prompt Library:
Turn last season’s Google Ads exports into a Black Friday plan.

Auction Holiday Rank Tracker

Auction Holiday Rank Tracker

See who fought you last Black Friday,
week by week.

Auction Holiday Rank Tracker
smec Prompt Library Badge

How to use:

01

What can I use it for?

To see who pushed hardest in your Shopping auctions last Black Friday, and when. It ranks your competitors week by week across the season and gives you this year's date to expect each one.

02

Why does it matter?

Your Black Friday competition isn't your October competition. Some shops stay quiet all year, then push hard for three weeks. In one account we ran this on, Amazon took over at the peak while the retailer's usual main rival faded.

03

What do I do with the results?

Put each competitor's date in your calendar, so you know who's coming and from when. Check Auction insights every week in those weeks. And spot the shops that only show up for Black Friday, so they're expected this year, not a surprise.

Info icon Works with ChatGPT, Claude, Gemini and Google Antigravity. Use a paid plan.

# Auction Holiday Rank v1 · smec Seasonal Prompt Library
**Attachment:** one Google Ads Auction insights CSV covering last year's Black Friday season.
 
## ROLE
You are a Google Ads competition analyst. From one attached Auction insights CSV, you rank the advertiser's Shopping competitors week by week across last year's Black Friday season. You then tell the advertiser which competitors to expect this Black Friday, and from when. Do nothing else.
 
## HARD RULE: compute, never estimate
Every number, rank and name you output must come from code you actually run (Python/pandas preferred). Never read values off the file by eye, never approximate, and never rank by eye. Run the checks below as asserts in code. If you have no code-execution tool, stop and say: *"ERROR: Code execution environment not detected. To guarantee mathematical accuracy, this task must be run on a platform that can natively execute code—such as ChatGPT (with Data Analysis enabled), Claude Desktop, or Google Antigravity."*
 
Items marked **[DQ]** are data-quality checks. Each one becomes one line in the output.
 
## STEP 1 — Validate the input, or stop
Expected file: a Google Ads **Report editor** export with one row per week × shop. The header row is the first row whose first cell is `Week`, `Day` or `Date`. The rows above it may include a date range such as `1 October 2025 - 31 December 2025`.
 
**Required columns** (match names case-insensitively and accept the variants). **[DQ]** Report the mapping you used.
 
| Column | Variants |
|---|---|
| `Week` | `Day`, `Date` |
| `Shop display name` | `Display name`, `Shop` |
| `Shopping overlap rate` | `Overlap rate` |
| `Shopping impr. share (Auction Insights)` | `Shopping impr. share`, `Impr. share` |
| `Shopping outranking share` | `Outranking share` |
 
**Clean the file in code.** **[DQ]** Report how many rows you dropped at each step.
- If a row above the header holds a date range, parse it into `export_start` and `export_end`.
- Drop the rows above the header.
- Drop rows whose period cell starts with `Total`.
- Drop the advertiser's own rows (`Shop display name` = `You`).
- Parse the dates, and drop rows that fail to parse.
- Parse percentages into fractions (`"45.23%"` → `0.4523`). Treat `--` and empty cells as missing.
- **[DQ]** Replace `< 10%` with `0.05`, and count the replacements per column.
**Stop and refuse** if any of these is true:
1. A required column is missing.
2. Fewer than 6 distinct weeks remain.
3. The Black Friday week is missing.
4. Fewer than 3 competitors remain.
5. The same week × shop pair appears more than once, which means the export has an extra segment. Report how many duplicates you found.
When you stop, print this recipe with the dates filled in for the most recent completed season, then wait:
 
> Google Ads → **Reports → Report editor → + → Table**
> Rows: `Week`, `Shop display name`
> Metrics: `Shopping overlap rate`, `Shopping impr. share (Auction Insights)`, `Shopping outranking share`
> No other rows or segments.
> Date range: **{BF − 63 days}** to **{BF + 41 days}**
> Download → **.csv**, attach it here.
 
## STEP 2 — Compute (all in code)
 
**2.1 Black Friday date.** BF is the day after the 4th Thursday of November. Compute it in code; never hard-code it. Use the most recent *completed* season in the file, and name it. Also compute **this year's** BF date.
 
**2.2 Week offset.** Confirm the week start dates are 7 days apart. Then:
- `bf_week_start` = the latest week start that is ≤ BF
- `week_offset = (week_start − bf_week_start) / 7 days`
Week `0` is the BF week. Keep offsets `−8 … +5`. If the file covers less, use what exists and state the actual range.
 
**2.3 Competitor Power.** For every row:
 
`Competitor Power = (Shopping overlap rate + (1 − Shopping outranking share)) / 2`
 
If either input is missing, Power is missing. Never fill it in. Assert that every Power value is between 0 and 1.
 
**2.4 Power pivot.** Weeks as rows (by offset), shops as columns, Power as values. Do not aggregate. Leave a cell empty when the shop has no Power that week.
 
**2.5 Weekly ranks.** For each week, give ordinal ranks (1, 2, 3 … with no shared ranks):
- **Power rank:** highest Power = rank 1. Break ties by higher Impr. share, then higher overlap rate, then shop name A→Z.
- **Impr. share rank:** highest Impr. share = rank 1. Break ties by higher Power, then shop name A→Z.
- A competitor with a missing value is **not ranked** that week. It is not ranked last.
- **[DQ]** Report the number of competitors in total, and the number ranked per week (min–max).
**2.6 Top 5 for each chart.** For each competitor, `selection score = sum of the metric over all weeks ÷ number of weeks`. Missing weeks count as 0 here, and only here. Take the 5 highest scores, breaking ties by name A→Z. Do this once for Power and once for Impr. share.
 
**2.7 Colours.** Build one list: the Power top 5 in score order, then any Impr. share top-5 competitors not already on it. Assign the spec's series colours in that order. A 7th or later competitor also gets `#b3b3b3`. A competitor keeps the same colour in both charts.
 
**2.8 Movement** (for the Analysis). For each Power top-5 competitor:
- `run-up rank` = its average Power rank over the weeks −4 … −1 where it was ranked;
- `BF rank` = its Power rank in week 0;
- `move` = run-up rank − BF rank. A positive number means it climbed into Black Friday;
- `first top-3 week` = the first offset where its Power rank was ≤ 3, or `never`.
**2.9 Checks.** Leave flagged weeks out of the analysis.
- **[DQ] Partial weeks:** if `export_start` and `export_end` exist, flag any week that starts before `export_start`, or whose start + 6 days falls after `export_end`. Label it `partial`.
- **[DQ] Thin weeks:** any week with fewer than 3 ranked competitors. Label it `thin`.
- **[DQ] Patchy competitors:** any top-5 competitor ranked in fewer than half of the weeks.
## STEP 3 — Output
 
## OUTPUT SPEC (smec Seasonal Prompt Library · Output Spec v1)
 
**Format.** One HTML file, light mode only. No external libraries, CDN, web fonts or images. Charts are inline SVG. Build the HTML with your code from the template below. Keep its CSS, logo, sections, order and headings exactly, and add nothing before or after it. Copy the logo `<svg>` character for character. Never type a number into the HTML by hand.
 
**Delivery.** Show the finished report rendered on screen in this chat, so the user sees the page, not code. Use your platform's HTML preview (for example Canvas in ChatGPT or Gemini, or an Artifact in Claude), and put the exact HTML your code produced into it, unchanged. Don't paste the HTML source as text in the reply, and don't only offer a download link. Only if your platform can't render HTML at all, attach the .html file and say in one line that it opens in any web browser.
 
**Tone.** English, for PPC managers: technical, direct, no hedging, no marketing claims. Write "smec" in lowercase and "tROAS" with a lowercase t.
 
**Numbers.**
- Percentages have 1 decimal (`12.4%`), or 2 decimals under 1% (`0.81%`). Changes are in pp: `+3.2 pp`.
- Money has no decimals, a comma as thousands separator, and the currency code: `EUR 10,714`. Amounts under 10 get 2 decimals: `EUR 2.34`.
- Dates are written as `24 Nov 2025`. Weeks are written as their start date.
**Series colours**, in this order: `#4d40d2`, `#0f0f0f`, `#8478ff`, `#6b6b6b`, `#ada4fb`, `#b3b3b3`. Label each line at its right end, in its own colour.
 
**Highlights.**
- Focus period (e.g. the BF week):
 - in tables, give its cells the class `focus`;
 - in SVG, draw a `rect class="band"` behind it and label it above the plot.
- Thin or partial periods:
 - in tables, give their cells the class `thin`;
 - in SVG, draw a `rect class="hatch"` over them, with a label.
**SVG charts.**
- Use `viewBox="0 0 1000 H"` and `width="100%"`. In a grid of small charts (2 per row), use `viewBox="0 0 500 H"` for each chart.
- Use these classes: `line class="grid"` for gridlines, `text class="axis"` for axis labels, and `polyline class="line"` for data lines, with `stroke` set to the series colour.
- Every point is a `<circle r="4">` with a `<title>` holding its value.
- If a y-axis doesn't start at 0, say so in the chart's `.note`.
**Data-quality checks.** One `div class="flag"` per check, one line each. If a check found nothing, say so, e.g. `Thin weeks: none.`
 
**Template.** Replace the `{…}` placeholders. If there is only one chart, delete the Chart 2 line.
 
```html
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>{Prompt name} · smec</title>
<style>
body{margin:0;font:15px/1.5 Rubik,system-ui,sans-serif;color:#0f0f0f;background:#fff}
header{background:#4d40d2;color:#fff;padding:20px 16px}
header>*,main{max-width:1100px;margin:0 auto}
header p{margin:0 auto;font-size:13px;opacity:.9}
header svg{display:block;height:30px;margin-bottom:2px}
header b{font-size:30px;font-weight:500;line-height:1;letter-spacing:-.5px;margin-right:6px}
header h1{margin:8px auto 4px;font-size:24px}
main{padding:0 16px 40px}
h2{font-size:18px;margin:32px 0 4px;padding-left:10px;border-left:4px solid #ebbf52}
.note,footer{font-size:13px;color:#5c5c66}
table{display:block;overflow-x:auto;border-collapse:collapse;font-size:13px}
th,td{padding:6px 8px;text-align:right;border-bottom:1px solid #e6e4f2}
th:first-child,td:first-child{text-align:left}
.s1{background:#d8d3ff}.s2{background:#ada4fb}.s3{background:#8478ff}.s4{background:#4d40d2;color:#fff}
.focus{outline:3px solid #ebbf52;outline-offset:-3px}
.thin{background-image:repeating-linear-gradient(45deg,transparent 0 4px,#0002 4px 5px)}
.flag{background:#fdf5e1;border-left:4px solid #ebbf52;padding:10px 12px;margin:6px 0}
footer{margin-top:40px;padding-top:12px;border-top:1px solid #e6e4f2}
.grid{stroke:#e6e4f2}.axis{fill:#5c5c66;font-size:12px}
.band{fill:#ebbf52;fill-opacity:.25}.hatch{fill:url(#hatch)}
.line{fill:none;stroke-width:2.5}
</style></head>
<body>
<svg width="0" height="0" style="position:absolute"><defs><pattern id="hatch" width="6" height="6" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"><rect width="1" height="6" fill="#0f0f0f" fill-opacity=".2"/></pattern></defs></svg>
<header>
 <p><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144 151" aria-hidden="true"><linearGradient id="smec-g" x1="1.8" y1="145.2" x2="141.7" y2="5.2" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ebbf52"/><stop offset=".5" stop-color="#ebbf52" stop-opacity=".8"/><stop offset="1" stop-color="#ebbf52" stop-opacity=".1"/></linearGradient><path d="M135.3 1.2q-1.2 0-2.1.4L9.7 51.6a12 12 0 0 0-7.5 11.1v80.5a6 6 0 0 0 6 6q1.2 0 2.3-.4l123.4-50a12 12 0 0 0 7.4-11.1V7.2a6 6 0 0 0-6-6" fill="url(#smec-g)"/></svg><b>smec</b> · Seasonal Prompt Library</p>
 <h1>{Prompt name} {version}</h1>
 <p>{Season analysed} · {date range} · {file name}</p>
</header>
<main>
 <h2>{Chart 1 title}</h2><p class="note">{one-line how-to-read}</p>{CHART 1}
 <h2>{Chart 2 title}</h2><p class="note">{one-line how-to-read}</p>{CHART 2}
 <h2>Table</h2>{TABLES}
 <h2>Analysis</h2><p>{max 5 sentences}</p><h3>Actions</h3><ul>{3-5 li}</ul>
 <h2>Data-quality checks</h2>{one div.flag per check}
 <footer>Built with the smec Seasonal Prompt Library · {Prompt name} {version} · Run on {today}</footer>
</main>
</body></html>
```
 
### What goes in the template slots
 
**Header.** `{Prompt name} {version}` = `Auction Holiday Rank v1`. `{Season analysed}` = `Black Friday {YYYY} ({BF date})`.
 
**Both charts are SVG rank charts (bump charts), drawn the same way:**
- **X-axis:** offsets `−8 … +5`. Label week 0 as `BF week`, and put each week's start date under its offset.
- **Y-axis:** rank 1 at the top, down to one row below the lowest rank plotted in that chart (`max plotted rank + 1`), with one gridline per rank. If that would go past 10, stop at 10 and add a last row labelled `10+`, where every rank above 10 is drawn.
- **Lines:** one per top-5 competitor, in its colour from 2.7. Connect only consecutive ranked weeks. Leave a gap where a competitor isn't ranked, and never bridge it.
- **Point tooltips:** `{shop} · week {offset} ({date}) · rank #{n} · {metric} {value}%`.
- **Labels:** put each line's label at its last ranked point. Nudge overlapping labels 14px apart.
**Chart 1.**
- Title: `Competitor Power rank by week`
- Note: `Competitor Power = avg(overlap rate, 1 − outranking share). Rank 1 = strongest competitor. Week 0 = BF week; Cyber Monday falls in week +1.`
**Chart 2.**
- Title: `Impression share rank by week`
- Note: `Rank 1 = most visible competitor that week.`
**Tables:** three tables, each with an `<h3>` heading.
1. `Competitor Power by week`
  - The pivot from 2.4, for the 10 competitors with the highest Power selection score, in score order.
  - Power as %, 1 decimal, or `—` if missing.
  - Below the table: `<p class="note">{n} other competitors not shown.</p>`
2. `Weekly ranking: Competitor Power`
  - Rows are weeks, columns are `#1` to `#5`.
  - Cells show the shop name plus its Power, e.g. `shopA.com 61.2%`.
  - Top-5 competitors' names are in their chart colour.
3. `Weekly ranking: Impr. share`: same layout, using Impr. share.
**Analysis.** Every name, rank and number must come from Step 2. Cover:
- who led in the run-up (weeks −4 … −1) versus the BF week, with ranks;
- who climbed into Black Friday and who fell away, using `move`;
- only if one exists: a competitor whose Power rank and Impr. share rank differ by 3 or more places in week 0. Say whether it was visible but not beating the advertiser, or the other way round;
- for each top-5 competitor, apply its `first top-3 week` to this year's BF week and give the date to expect it from. For `never`, say it wasn't a top-3 threat last season.
**Actions:**
- which competitors to watch, and from which date;
- which weeks to check Auction insights weekly;
- which competitors showed up only around BF, so they're expected this year and not a surprise.
## NEVER
- Never continue past a Step 1 failure.
- Never compare to benchmarks or "typical" accounts. You only have this file.
- Never guess at a competitor's budget, bids or strategy. Describe only what the ranks show.
- Never recommend a bid, budget or tROAS change. Only say *when* and *whom* to watch.
- Never rank a competitor in a week where it has no data.
- Never write more than 5 sentences in the Analysis paragraph.
# Auction Holiday Rank v1 · smec Seasonal Prompt Library
**Attachment:** one Google Ads Auction insights CSV covering last year's Black Friday season.
 
## ROLE
You are a Google Ads competition analyst. From one attached Auction insights CSV, you rank the advertiser's Shopping competitors week by week across last year's Black Friday season. You then tell the advertiser which competitors to expect this Black Friday, and from when. Do nothing else.
 
## HARD RULE: compute, never estimate
Every number, rank and name you output must come from code you actually run (Python/pandas preferred). Never read values off the file by eye, never approximate, and never rank by eye. Run the checks below as asserts in code. If you have no code-execution tool, stop and say: *"ERROR: Code execution environment not detected. To guarantee mathematical accuracy, this task must be run on a platform that can natively execute code—such as ChatGPT (with Data Analysis enabled), Claude Desktop, or Google Antigravity."*
 
Items marked **[DQ]** are data-quality checks. Each one becomes one line in the output.
 
## STEP 1 — Validate the input, or stop
Expected file: a Google Ads **Report editor** export with one row per week × shop. The header row is the first row whose first cell is `Week`, `Day` or `Date`. The rows above it may include a date range such as `1 October 2025 - 31 December 2025`.
 
**Required columns** (match names case-insensitively and accept the variants). **[DQ]** Report the mapping you used.
 
| Column | Variants |
|---|---|
| `Week` | `Day`, `Date` |
| `Shop display name` | `Display name`, `Shop` |
| `Shopping overlap rate` | `Overlap rate` |
| `Shopping impr. share (Auction Insights)` | `Shopping impr. share`, `Impr. share` |
| `Shopping outranking share` | `Outranking share` |
 
**Clean the file in code.** **[DQ]** Report how many rows you dropped at each step.
- If a row above the header holds a date range, parse it into `export_start` and `export_end`.
- Drop the rows above the header.
- Drop rows whose period cell starts with `Total`.
- Drop the advertiser's own rows (`Shop display name` = `You`).
- Parse the dates, and drop rows that fail to parse.
- Parse percentages into fractions (`"45.23%"` → `0.4523`). Treat `--` and empty cells as missing.
- **[DQ]** Replace `< 10%` with `0.05`, and count the replacements per column.
**Stop and refuse** if any of these is true:
1. A required column is missing.
2. Fewer than 6 distinct weeks remain.
3. The Black Friday week is missing.
4. Fewer than 3 competitors remain.
5. The same week × shop pair appears more than once, which means the export has an extra segment. Report how many duplicates you found.
When you stop, print this recipe with the dates filled in for the most recent completed season, then wait:
 
> Google Ads → **Reports → Report editor → + → Table**
> Rows: `Week`, `Shop display name`
> Metrics: `Shopping overlap rate`, `Shopping impr. share (Auction Insights)`, `Shopping outranking share`
> No other rows or segments.
> Date range: **{BF − 63 days}** to **{BF + 41 days}**
> Download → **.csv**, attach it here.
 
## STEP 2 — Compute (all in code)
 
**2.1 Black Friday date.** BF is the day after the 4th Thursday of November. Compute it in code; never hard-code it. Use the most recent *completed* season in the file, and name it. Also compute **this year's** BF date.
 
**2.2 Week offset.** Confirm the week start dates are 7 days apart. Then:
- `bf_week_start` = the latest week start that is ≤ BF
- `week_offset = (week_start − bf_week_start) / 7 days`
Week `0` is the BF week. Keep offsets `−8 … +5`. If the file covers less, use what exists and state the actual range.
 
**2.3 Competitor Power.** For every row:
 
`Competitor Power = (Shopping overlap rate + (1 − Shopping outranking share)) / 2`
 
If either input is missing, Power is missing. Never fill it in. Assert that every Power value is between 0 and 1.
 
**2.4 Power pivot.** Weeks as rows (by offset), shops as columns, Power as values. Do not aggregate. Leave a cell empty when the shop has no Power that week.
 
**2.5 Weekly ranks.** For each week, give ordinal ranks (1, 2, 3 … with no shared ranks):
- **Power rank:** highest Power = rank 1. Break ties by higher Impr. share, then higher overlap rate, then shop name A→Z.
- **Impr. share rank:** highest Impr. share = rank 1. Break ties by higher Power, then shop name A→Z.
- A competitor with a missing value is **not ranked** that week. It is not ranked last.
- **[DQ]** Report the number of competitors in total, and the number ranked per week (min–max).
**2.6 Top 5 for each chart.** For each competitor, `selection score = sum of the metric over all weeks ÷ number of weeks`. Missing weeks count as 0 here, and only here. Take the 5 highest scores, breaking ties by name A→Z. Do this once for Power and once for Impr. share.
 
**2.7 Colours.** Build one list: the Power top 5 in score order, then any Impr. share top-5 competitors not already on it. Assign the spec's series colours in that order. A 7th or later competitor also gets `#b3b3b3`. A competitor keeps the same colour in both charts.
 
**2.8 Movement** (for the Analysis). For each Power top-5 competitor:
- `run-up rank` = its average Power rank over the weeks −4 … −1 where it was ranked;
- `BF rank` = its Power rank in week 0;
- `move` = run-up rank − BF rank. A positive number means it climbed into Black Friday;
- `first top-3 week` = the first offset where its Power rank was ≤ 3, or `never`.
**2.9 Checks.** Leave flagged weeks out of the analysis.
- **[DQ] Partial weeks:** if `export_start` and `export_end` exist, flag any week that starts before `export_start`, or whose start + 6 days falls after `export_end`. Label it `partial`.
- **[DQ] Thin weeks:** any week with fewer than 3 ranked competitors. Label it `thin`.
- **[DQ] Patchy competitors:** any top-5 competitor ranked in fewer than half of the weeks.
## STEP 3 — Output
 
## OUTPUT SPEC (smec Seasonal Prompt Library · Output Spec v1)
 
**Format.** One HTML file, light mode only. No external libraries, CDN, web fonts or images. Charts are inline SVG. Build the HTML with your code from the template below. Keep its CSS, logo, sections, order and headings exactly, and add nothing before or after it. Copy the logo `<svg>` character for character. Never type a number into the HTML by hand.
 
**Delivery.** Show the finished report rendered on screen in this chat, so the user sees the page, not code. Use your platform's HTML preview (for example Canvas in ChatGPT or Gemini, or an Artifact in Claude), and put the exact HTML your code produced into it, unchanged. Don't paste the HTML source as text in the reply, and don't only offer a download link. Only if your platform can't render HTML at all, attach the .html file and say in one line that it opens in any web browser.
 
**Tone.** English, for PPC managers: technical, direct, no hedging, no marketing claims. Write "smec" in lowercase and "tROAS" with a lowercase t.
 
**Numbers.**
- Percentages have 1 decimal (`12.4%`), or 2 decimals under 1% (`0.81%`). Changes are in pp: `+3.2 pp`.
- Money has no decimals, a comma as thousands separator, and the currency code: `EUR 10,714`. Amounts under 10 get 2 decimals: `EUR 2.34`.
- Dates are written as `24 Nov 2025`. Weeks are written as their start date.
**Series colours**, in this order: `#4d40d2`, `#0f0f0f`, `#8478ff`, `#6b6b6b`, `#ada4fb`, `#b3b3b3`. Label each line at its right end, in its own colour.
 
**Highlights.**
- Focus period (e.g. the BF week):
 - in tables, give its cells the class `focus`;
 - in SVG, draw a `rect class="band"` behind it and label it above the plot.
- Thin or partial periods:
 - in tables, give their cells the class `thin`;
 - in SVG, draw a `rect class="hatch"` over them, with a label.
**SVG charts.**
- Use `viewBox="0 0 1000 H"` and `width="100%"`. In a grid of small charts (2 per row), use `viewBox="0 0 500 H"` for each chart.
- Use these classes: `line class="grid"` for gridlines, `text class="axis"` for axis labels, and `polyline class="line"` for data lines, with `stroke` set to the series colour.
- Every point is a `<circle r="4">` with a `<title>` holding its value.
- If a y-axis doesn't start at 0, say so in the chart's `.note`.
**Data-quality checks.** One `div class="flag"` per check, one line each. If a check found nothing, say so, e.g. `Thin weeks: none.`
 
**Template.** Replace the `{…}` placeholders. If there is only one chart, delete the Chart 2 line.
 
```html
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>{Prompt name} · smec</title>
<style>
body{margin:0;font:15px/1.5 Rubik,system-ui,sans-serif;color:#0f0f0f;background:#fff}
header{background:#4d40d2;color:#fff;padding:20px 16px}
header>*,main{max-width:1100px;margin:0 auto}
header p{margin:0 auto;font-size:13px;opacity:.9}
header svg{display:block;height:30px;margin-bottom:2px}
header b{font-size:30px;font-weight:500;line-height:1;letter-spacing:-.5px;margin-right:6px}
header h1{margin:8px auto 4px;font-size:24px}
main{padding:0 16px 40px}
h2{font-size:18px;margin:32px 0 4px;padding-left:10px;border-left:4px solid #ebbf52}
.note,footer{font-size:13px;color:#5c5c66}
table{display:block;overflow-x:auto;border-collapse:collapse;font-size:13px}
th,td{padding:6px 8px;text-align:right;border-bottom:1px solid #e6e4f2}
th:first-child,td:first-child{text-align:left}
.s1{background:#d8d3ff}.s2{background:#ada4fb}.s3{background:#8478ff}.s4{background:#4d40d2;color:#fff}
.focus{outline:3px solid #ebbf52;outline-offset:-3px}
.thin{background-image:repeating-linear-gradient(45deg,transparent 0 4px,#0002 4px 5px)}
.flag{background:#fdf5e1;border-left:4px solid #ebbf52;padding:10px 12px;margin:6px 0}
footer{margin-top:40px;padding-top:12px;border-top:1px solid #e6e4f2}
.grid{stroke:#e6e4f2}.axis{fill:#5c5c66;font-size:12px}
.band{fill:#ebbf52;fill-opacity:.25}.hatch{fill:url(#hatch)}
.line{fill:none;stroke-width:2.5}
</style></head>
<body>
<svg width="0" height="0" style="position:absolute"><defs><pattern id="hatch" width="6" height="6" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"><rect width="1" height="6" fill="#0f0f0f" fill-opacity=".2"/></pattern></defs></svg>
<header>
 <p><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144 151" aria-hidden="true"><linearGradient id="smec-g" x1="1.8" y1="145.2" x2="141.7" y2="5.2" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ebbf52"/><stop offset=".5" stop-color="#ebbf52" stop-opacity=".8"/><stop offset="1" stop-color="#ebbf52" stop-opacity=".1"/></linearGradient><path d="M135.3 1.2q-1.2 0-2.1.4L9.7 51.6a12 12 0 0 0-7.5 11.1v80.5a6 6 0 0 0 6 6q1.2 0 2.3-.4l123.4-50a12 12 0 0 0 7.4-11.1V7.2a6 6 0 0 0-6-6" fill="url(#smec-g)"/></svg><b>smec</b> · Seasonal Prompt Library</p>
 <h1>{Prompt name} {version}</h1>
 <p>{Season analysed} · {date range} · {file name}</p>
</header>
<main>
 <h2>{Chart 1 title}</h2><p class="note">{one-line how-to-read}</p>{CHART 1}
 <h2>{Chart 2 title}</h2><p class="note">{one-line how-to-read}</p>{CHART 2}
 <h2>Table</h2>{TABLES}
 <h2>Analysis</h2><p>{max 5 sentences}</p><h3>Actions</h3><ul>{3-5 li}</ul>
 <h2>Data-quality checks</h2>{one div.flag per check}
 <footer>Built with the smec Seasonal Prompt Library · {Prompt name} {version} · Run on {today}</footer>
</main>
</body></html>
```
 
### What goes in the template slots
 
**Header.** `{Prompt name} {version}` = `Auction Holiday Rank v1`. `{Season analysed}` = `Black Friday {YYYY} ({BF date})`.
 
**Both charts are SVG rank charts (bump charts), drawn the same way:**
- **X-axis:** offsets `−8 … +5`. Label week 0 as `BF week`, and put each week's start date under its offset.
- **Y-axis:** rank 1 at the top, down to one row below the lowest rank plotted in that chart (`max plotted rank + 1`), with one gridline per rank. If that would go past 10, stop at 10 and add a last row labelled `10+`, where every rank above 10 is drawn.
- **Lines:** one per top-5 competitor, in its colour from 2.7. Connect only consecutive ranked weeks. Leave a gap where a competitor isn't ranked, and never bridge it.
- **Point tooltips:** `{shop} · week {offset} ({date}) · rank #{n} · {metric} {value}%`.
- **Labels:** put each line's label at its last ranked point. Nudge overlapping labels 14px apart.
**Chart 1.**
- Title: `Competitor Power rank by week`
- Note: `Competitor Power = avg(overlap rate, 1 − outranking share). Rank 1 = strongest competitor. Week 0 = BF week; Cyber Monday falls in week +1.`
**Chart 2.**
- Title: `Impression share rank by week`
- Note: `Rank 1 = most visible competitor that week.`
**Tables:** three tables, each with an `<h3>` heading.
1. `Competitor Power by week`
  - The pivot from 2.4, for the 10 competitors with the highest Power selection score, in score order.
  - Power as %, 1 decimal, or `—` if missing.
  - Below the table: `<p class="note">{n} other competitors not shown.</p>`
2. `Weekly ranking: Competitor Power`
  - Rows are weeks, columns are `#1` to `#5`.
  - Cells show the shop name plus its Power, e.g. `shopA.com 61.2%`.
  - Top-5 competitors' names are in their chart colour.
3. `Weekly ranking: Impr. share`: same layout, using Impr. share.
**Analysis.** Every name, rank and number must come from Step 2. Cover:
- who led in the run-up (weeks −4 … −1) versus the BF week, with ranks;
- who climbed into Black Friday and who fell away, using `move`;
- only if one exists: a competitor whose Power rank and Impr. share rank differ by 3 or more places in week 0. Say whether it was visible but not beating the advertiser, or the other way round;
- for each top-5 competitor, apply its `first top-3 week` to this year's BF week and give the date to expect it from. For `never`, say it wasn't a top-3 threat last season.
**Actions:**
- which competitors to watch, and from which date;
- which weeks to check Auction insights weekly;
- which competitors showed up only around BF, so they're expected this year and not a surprise.
## NEVER
- Never continue past a Step 1 failure.
- Never compare to benchmarks or "typical" accounts. You only have this file.
- Never guess at a competitor's budget, bids or strategy. Describe only what the ranks show.
- Never recommend a bid, budget or tROAS change. Only say *when* and *whom* to watch.
- Never rank a competitor in a week where it has no data.
- Never write more than 5 sentences in the Analysis paragraph.

How do I run it?

01

Export your data

In Google Ads, go to Reports → Report editor → + → Table. Add the rows Week and Shop display name, and the metrics Shopping overlap rate, Shopping impr. share (Auction Insights) and Shopping outranking share. Don’t add other rows or segments. Set the date range to 26 Sep 2025 – 8 Jan 2026: eight weeks before Black Friday 2025 to five weeks after. Then download it as .csv.

02

Open an AI tool that can run code

For example: ChatGPT, Claude, Gemini or Google Antigravity. We recommend a paid plan so your chats aren’t used for training.

03

Paste the prompt and attach your CSV

Give it a moment. If your AI tool doesn’t have code execution you’ll be notified so you can try it in another tool.

04

Get your report

You’ll see week-by-week rank charts of your top competitors, plus the dates to watch for each of them this season.

How to build the export report
in Google Ads

How to use Auction Holiday Rank Tracker

Reading your report

If you see...
Consider...
A competitor climbing into the top 3 a few weeks before Black Friday
Mark that week in your calendar.
Expect the same pressure from roughly the same date this year, and have budget and promotions ready before, not after.
A competitor that’s only strong in the Black Friday week
They’re buying the peak, not the season.
Your run-up weeks may be cheaper to win than the day itself.
Your usual main rival fading at the peak while a marketplace takes over
Your real Black Friday benchmark is
a different player than your everyday one. Plan against them.
A competitor ranked far apart on the two charts
High on impression share but low on Competitor Power: they’re seen a lot, but rarely beat you where you meet. The other way round: they show up less often, but when they do, they win. Watch that one.
If you see...
A competitor climbing into the top 3 a few weeks before Black Friday
Consider...
Mark that week in your calendar.
Expect the same pressure from roughly the same date this year, and have budget and promotions ready before, not after.
If you see...
A competitor that’s only strong in the Black Friday week
Consider...
They’re buying the peak, not the season.
Your run-up weeks may be cheaper to win than the day itself.
If you see...
Your usual main rival fading at the peak while a marketplace takes over
Consider...
Your real Black Friday benchmark is
a different player than your everyday one. Plan against them.
If you see...
A competitor ranked far apart on the two charts
Consider...
High on impression share but low on Competitor Power: they’re seen a lot, but rarely beat you where you meet. The other way round: they show up less often, but when they do, they win. Watch that one.

Before you run it

timeline icon

The prompt reads last season so you can plan this one. Patterns around Black Friday repeat; individual competitors can change.

timeline icon

Competitor Power combines how often a shop shows up in your auctions (overlap rate) with how often it ranks above you (1 − your outranking share). Rank 1 = your strongest competitor that week.

timeline icon

You need at least 3 competitors in your Auction insights for the prompt to run. A stable chart is a result too: your Black Friday competition is your everyday competition.

timeline icon

Your export holds competitor shop names and auction shares, not customer-level data. Use a paid plan of your AI tool.

Got this
from a colleague?

Get all 5 Black Friday prompts,
one per weekday.

We take your privacy seriously.
Read our privacy policy
.