# Competitor Creative Audit

> A deep teardown of 3 to 5 named competitor DTC brands. Pulls every active ad, every SERP snippet, every top-performing social post, and classifies them into hook taxonomy, messaging angles, production style, CTA pattern, and whitespace. Hands back a ranked shortlist of 10 to 15 ad angles the client can steal, beat, or own. Runs end-to-end from a single Claude Code prompt. Produces one consolidated report with supporting screenshots in a sibling folder. Feeds the top-ICE starter briefs directly into `{client_folder}/actions.md`.

---

## Purpose

Know exactly what creative angles your top competitors are running, what is working, and where the whitespace is, in under an hour. This is the creative half of the Operating System: Step 3 (Find the Binding Constraint) applied to the creative layer, Step 4 (Launch the Highest-ICE Initiative) hydrated with ready-to-ship briefs, and Step 5 (Review Daily) fuelled by a refreshable swipe file. Compresses a week of manual ad-library scrolling, screenshotting, and theming into a single Claude Code session.

## When to run it

- **Before every new paid-ads engagement.** Audit output becomes the ad-strategy charter for the first 30 days.
- **Quarterly for ongoing clients.** Re-run every 90 days. Creative rotates fast. Stale swipe files are worse than no swipe files.
- **Before any category launch.** Path B (pre-launch). Maps the competitive landscape for a brand with no paid history of its own.
- **When creative fatigue kicks in.** Current ad CTR is down 20% month over month and the team needs fresh angles fast.

## Who this is for (ICP)

Premium DTC brands, AOV $500+ or 2x category median, paid-ads-active on Meta or Google (or planning to go active), founder-led, stuck on stale creative. The playbook works outside that ICP but is tuned for it.

---

## Two paths, four modes

### Path A. Paid-ads-active client needing fresh variations

The brand is running Meta or Google ads today. Creative is fatiguing. The audit produces: a swipe file of winning competitor angles, a whitespace map the brand can own, 10 to 15 ranked starter briefs, and a 30-60-90 test plan for Meta and Google.

### Path B. Pre-launch or new brand mapping the category landscape

No ads running yet. The audit maps the competitive landscape, surfaces the dominant angles and CTAs, identifies the angle the brand can own on day one, and produces the same 10 to 15 ranked starter briefs framed as the launch creative plan.

### Modes (centres of gravity)

| Mode | Path | Scope | Centre of gravity |
|---|---|---|---|
| Full | A or B | 3 to 5 competitors, all 8 sections | Standard engagement. Full teardown. Full synthesis pass. 10 to 15 starter briefs. |
| Quick | A or B | 1 competitor, Meta + hooks only | Sprint-sized. Used when one competitor dominates the category or when the founder flagged one brand by name. Skip social-content audit and production-style audit. |
| Pre-launch | B | Category-level, 5+ competitors, shallow | No brand baseline to compare against. Heavy whitespace mapping. Light on fatigue scoring. |
| Focused | A | 1 competitor, deep teardown | The brand is gaining share fast. The founder needs to understand exactly how, in detail, before countering. |

### Mode detection

1. **Path classification.** If the brand has active Meta or Google ads today (Meta Ad Library shows active ads on the brand's own page, or `.env` has Meta/Google Ads credentials with a live account), default to Path A. Otherwise Path B. Confirm with the user.
2. **Competitor count.** The user names the competitors. If they name 1, offer Focused or Quick. If they name 5+ and the brand is new, offer Pre-launch. Default to Full.
3. **Mode sticker.** Record the mode in the report header.

---

## Tool-availability gate (strict, two layers)

The audit runs in two layers. The External layer always runs. The Internal layer runs when specific ad-tool access has been granted. Both layers honour the same rule: no fabricated data, no placeholders, no guessed numbers. Mark missing checks N/A and file an access-grant item.

### External layer (operator-side API keys, public data, always runs)

| Tool | Used for | Data source |
|---|---|---|
| Meta Ad Library | 30-day competitor ad snapshot. No API key. Public web. | Public ad library |
| Serper | Paid-SERP copy on 10 to 20 commercial queries per competitor | Public SERPs |
| DataForSEO | Ad-copy history snapshots where available (Google Ads copy across 24 months) | Public SERP archive |
| Ahrefs | Domain-level paid-keyword check, competitor Ads History | Public SEO graph |
| WebFetch / WebSearch | Social-content audits across LinkedIn, X, Instagram, TikTok. Competitor homepage + PDP crawl. | Public web |
| Apify (optional) | TikTok and Instagram scraping where WebFetch fails on JS-rendered pages | Public social |
| Keywords Everywhere | Volume checks on ad headlines that look like head-term plays | Public keyword data |
| PageSpeed Insights | Competitor landing-page speed (creative teardown includes LP experience) | Public-facing site |

### Internal layer (logged-in tool access, optional)

| Tool | Used for | Access required |
|---|---|---|
| Meta Ads API | Client's own account fatigue scoring. Benchmark against competitor rotation cadence. | Ad-account partner invite |
| Google Ads | Client's own campaign structure, Quality Scores, auction insights (who they compete against) | MCC invite or user access |
| Meta Pixel / CAPI | Event health on the client's domain (so the brief actually maps to measurable outcomes) | Business Manager asset access |

### Gate behaviour

For every check the audit plans to run:

1. If the check uses External tools only, run it. External tools are always available.
2. If the check uses Internal tools, verify the credential exists in `.env`. If present, run it. If absent, skip that piece and mark: `Requires access. {tool} not yet granted. Unlocks {specific insight}.`
3. Add every missing Internal section to the Access-grant checklist at the end of the report.
4. Never block the audit on a missing Internal tool. Ship the External layer, flag the Internal gaps.

Honest gaps beat invented numbers every time.

### Known-bug notes

- **Meta Ad Library via raw WebFetch returns empty.** The page is JS-rendered. Use, in preference order: (a) a Playwright or headless-browser script if the environment supports it, (b) a third-party Meta Ad Library index (adscan.ai or foreplay.co), (c) an Apify Meta Ad Library scraper if `APIFY_API_TOKEN` is configured, (d) manual browser screenshots of the first 10 to 15 ads per competitor pasted into `data/competitor-creative-audit/{date}/screenshots/`. If none is available, ship the section with "Meta Ad Library: unable to verify via WebFetch; manual screenshot pass required" and file it as an access-grant item for follow-up.
- **Instagram and TikTok require login for most endpoints.** WebFetch against a public profile page sometimes works, sometimes returns a login-wall HTML blob. If Apify is available, use an Instagram/TikTok scraper Actor. Otherwise capture the top-5 posts per competitor via manual screenshots and paste into the screenshots folder.
- **LinkedIn company pages** via WebFetch return richer HTML than Instagram. Usually works for the top-5 posts in the last 30 days.

---

## Inputs the playbook accepts

Prompt the user for these at the start of the run. Accept sensible defaults where possible.

| Input | Required | Example | Notes |
|---|---|---|---|
| Client name | Yes | `Incred Golf` | Used in output paths and headings |
| Client project folder path | Yes | `Claude-Projects/IncredGolf` | Absolute path preferred |
| Brand primary URL | Yes | `https://incred.golf` | Lead domain for cross-reference |
| Primary ad platforms the brand uses | Yes | `Meta, Google` | Informs which section depths to prioritise |
| Competitor list (3 to 5) | Yes | Brand names, URLs, Facebook page names | Facebook page name is mandatory for Ad Library lookup |
| Category head term (1 line) | Yes | `launch monitor` | Drives the paid-SERP scan in Section 2 |
| Differentiators the client thinks they have (1 line) | Yes | `Only short-game launch monitor under $2K` | Feeds the whitespace map in Section 8 |
| Ad spend band | No | `Under $5K/mo` / `$5K to $25K` / `$25K+` | Tunes starter briefs to realistic budgets |
| Current creative pain (1 line) | No | `All our ads are testimonial carousels; CTR dropped 30% this month` | Informs the synthesis pass |
| Mode | Yes | `Full`, `Quick`, `Pre-launch`, `Focused` | Auto-detected, confirmed with the user |

If any required input is missing, ask the user. Never proceed with invented inputs.

---

## Output: one consolidated report plus a screenshots folder

The audit produces **exactly one** report, written in two formats side by side, plus a supporting screenshots folder:

```
{client_folder}/docs/competitor-creative-audit/{YYYY-MM-DD}/competitor-creative-audit-report.md      (canonical source)
{client_folder}/docs/competitor-creative-audit/{YYYY-MM-DD}/competitor-creative-audit-report.docx    (Word deliverable)
{client_folder}/data/competitor-creative-audit/{YYYY-MM-DD}/screenshots/                             (manual-screenshot evidence)
{client_folder}/data/competitor-creative-audit/{YYYY-MM-DD}/raw/                                     (JSON pulls, CSV exports)
```

The `.md` is the source of truth, version-controlled in Git. The `.docx` is the polished Word deliverable. The screenshots folder holds Meta Ad Library snapshots, top social posts, and SERP screenshots the report links to by filename.

**All sections live in this one markdown file.** Sub-agents drafting individual competitor teardowns return their output to the main session for merge. Per-competitor files in the raw data folder are appendix-only material.

Length target: 5,000 to 9,000 words plus the supporting screenshots.

### Word-doc export (pandoc)

After the voice enforcement gate passes on the markdown, run pandoc:

```bash
pandoc {client_folder}/docs/competitor-creative-audit/{YYYY-MM-DD}/competitor-creative-audit-report.md \
  -o {client_folder}/docs/competitor-creative-audit/{YYYY-MM-DD}/competitor-creative-audit-report.docx \
  --toc --number-sections
```

### Report structure (fixed order)

```
# Competitor Creative Audit: {Client Name} ({YYYY-MM-DD})

Mode: {Full / Quick / Pre-launch / Focused}
Competitors covered: {list}

## Executive summary
3 to 4 sentences leading with the narrative the Cross-cutting themes reveal. Names the dominant category angle, the single biggest whitespace, and the top three briefs the client should ship first.

## Cross-cutting themes
3 to 5 bullets. Each bullet names an insight that crosses 2 or more competitors or sections. Produced by the Synthesis pass.

## Key findings
5 to 7 one-sentence bullets, one per major section.

## Top 10 to 15 ad angles (ranked)
The ranked swipe file pulled to the front with a one-line "why this works" per angle. Full starter briefs live in Section 9.

## 1. Competitor profiles
## 2. Meta Ad Library 30-day scan (per competitor)
## 3. Google Ads SERP scan
## 4. Social content audit (LinkedIn, X, Instagram, TikTok)
## 5. Hook and angle taxonomy
## 6. Production-style audit
## 7. CTA pattern analysis
## 8. Whitespace map
## 9. Starter ad briefs (top 10 to 15)
## 10. 30-60-90 test plan

## Access-grant checklist
(Only appears if any Internal-layer data was missing.)

## Conclusion
2 to 3 short paragraphs. What the client ships this week. Book-a-call CTA.
```

### Synthesis pass (mandatory before writing the report to disk)

After drafting all ten sections in first-pass form, **do not write to disk yet**. Read the complete draft end-to-end as one block. Ask:

- What hook or angle is every competitor running, such that it is already a category default and not a differentiator?
- What hook, angle, format, or CTA is no competitor running, such that whitespace is available?
- What does a Section 5 hook pattern imply for a Section 9 brief that Section 9 has not exploited?
- Does any Section 9 brief solve multiple whitespace gaps at once? Promote it to top 3.
- Does any high-ranked Section 9 brief solve only one problem? Consider demoting in favour of multi-leverage plays.

Produce 3 to 5 cross-cutting insight bullets. Revise:

- The **Executive Summary** to lead with the narrative these insights reveal.
- The **Top 10 to 15 ad angles** list to re-rank briefs that hit multiple leverage points.
- Write the bullets into the **Cross-cutting themes** block.

Only after the synthesis pass completes do you write the final consolidated file to disk.

---

## Section 1. Competitor profiles

For each of the 3 to 5 competitors, produce a profile card (300 to 500 words).

| Field | How to populate |
|---|---|
| Brand name, URL, Facebook page name | From user input |
| One-sentence positioning | WebFetch homepage + About page. Paraphrase the positioning line the brand uses itself. |
| Assumed target audience | Synthesise from homepage copy, Meta ad audience cues, review corpus if public |
| Top 10 selling products | Shopify best-seller collection if available. Otherwise the homepage "featured" grid plus any Reviews.io / Yotpo / Loox sort-by-popular view. |
| Price range | PDP scan across the top 10 products |
| Social presence (followers by platform) | LinkedIn, Instagram, TikTok, X profile scrape |
| Creative volume (active ads count) | Meta Ad Library count on date of audit |
| Visible partnerships, PR, influencer tie-ins | Homepage press bar, About page logos, recent social mentions |

Per-competitor supporting data lands in `data/competitor-creative-audit/{date}/raw/{competitor-slug}/`.

---

## Section 2. Meta Ad Library 30-day scan (per competitor)

For each competitor, execute the full teardown. Follow the fallback chain in the tool-availability notes.

### 2A. Active ad inventory

- Active ad count on the date of audit.
- Breakdown by ad type: static image, carousel, video, UGC, collection.
- First-run date distribution: how many ads are under 7 days old, 7 to 30 days, 30+ days (a 30+ day ad is a probable evergreen winner).
- Platform mix: Meta, Instagram, Messenger, Audience Network.

### 2B. Hook taxonomy per competitor

Categorise the opening 3 seconds of each ad (first line of copy for static, first 3 seconds of video) into one of 8 hook types:

| Hook type | Example pattern |
|---|---|
| Social proof | "Over 10,000 golfers are..." |
| Urgency / scarcity | "Last 48 hours before..." |
| Identity / aspiration | "If you're the kind of golfer who..." |
| Authority | "Built by PGA coaches..." |
| Contrarian | "Everything you've been told about wedge distance is wrong..." |
| Transformation | "I went from 12 handicap to 6 in 90 days..." |
| Comparison | "[Brand] vs [Competitor]: here's what we found" |
| Education / curiosity | "The one thing about launch monitors nobody mentions..." |

Count frequency of each hook type per competitor. Flag the dominant hook.

### 2C. Creative copy patterns

- Average headline length (characters).
- Average primary text length (characters).
- Use of bullets, emojis, all-caps, numbers in copy.
- Offer structure: discount %, free trial, bundle, BOGO, no-discount soft-sell.

### 2D. Top 3 ads per competitor (ranked by estimated reach where visible)

For each top ad: screenshot filename, ad format, hook type, full copy, CTA, estimated run duration. Call out why it is likely the winner (run duration, format repetition across ad sets, presence of UGC or testimonial proof).

### 2E. Creative fatigue signals

Any ad running 30+ days with a copy-variant rollout in the last 7 days indicates a working concept the competitor is iterating on. Any ad paused after 7 days indicates a fatigued concept. Flag both patterns.

---

## Section 3. Google Ads SERP scan

For each competitor, pull paid-SERP copy on:

- The competitor's brand name (tests whether the client is bidding on the competitor, or vice versa).
- The category head term (from user input).
- 5 commercial-intent tail terms (derive from Keywords Everywhere related-queries on the head term).

For each query, capture:

- Headline 1, 2, 3.
- Description 1, 2.
- Sitelinks (up to 4) with linked-page type.
- Callout extensions.
- Structured-snippet extensions.
- Price extensions where present.

Synthesise across queries per competitor:

- Dominant headline pattern (e.g. "[Benefit] | [Brand]").
- Offer language repeated across queries.
- Which pages competitors send paid traffic to (homepage, category, PDP, landing page).

If DataForSEO Ads History or Ahrefs Ads History is available, pull the 24-month ad-copy archive and call out which copy variants have survived longest. Long-surviving copy is proven copy.

---

## Section 4. Social content audit

**Step 0 — benchmarking opt-in.** This playbook always runs against a confirmed competitor set (the brief requires it), so the BT decision tree's first branch is satisfied. Render two BTs alongside the narrative below:
- `BT-PAID-meta-google-presence.md` — active Meta/Google ad counts (stats-only refresh: `apify/facebook-ads-scraper` with `maxItems=1` per competitor), average ad lifespan, top angle, % UGC.
- `BT-SOCIAL-channel-strength.md` — IG/TikTok follower counts and posts/wk via the pinned Apify Actors with `maxItems=1`.

Both BTs use the existing pinned Actors from this playbook's prerequisites, so no additional setup is needed. Total cost <$0.05 per refresh.

Per competitor, across LinkedIn, X, Instagram, TikTok.

For each platform:

- Posting cadence (posts per week in the last 30 days).
- Content-theme breakdown (product, founder-voice, UGC repost, educational, behind-the-scenes, community/UGC feature, partnership, PR).
- Top 5 posts by engagement in the last 30 days. Capture: post URL, post type (photo, carousel, reel, video, text), hook line, engagement count, posting date.
- Recurring formats (same template reused, same hook structure, same CTA).

Synthesise across platforms per competitor: where do they invest heaviest, what format is driving their top engagements, is founder voice present.

For the client: cross-reference the competitor content themes against what the client is already posting. The delta becomes input for Section 8 (Whitespace map).

---

## Section 5. Hook and angle taxonomy

Cross-cutting pass. Aggregate hook-type frequency across every competitor, every ad, every top social post. Produce:

- Dominant hook type across all competitors combined (the category default).
- Secondary hook type (the runner-up, frequently paired with the dominant).
- Under-represented hook types (whitespace candidates).

Tie each hook type back to the competitors running it heaviest. The mapping is useful for the founder who wants to know "who is running what".

Produce a single 8-column hook-frequency table: columns are the 8 hook types, rows are the competitors, cells are the count of ads or posts per hook type. Cell shading (bold the dominant per competitor) makes the visual punch.

---

## Section 6. Production-style audit

Classify each competitor into one of 4 production styles, or mixed:

| Style | Signal |
|---|---|
| UGC | Phone-shot, face-to-camera, messy backgrounds, creator-led |
| Studio product | Clean white or brand-colour background, product-hero, controlled lighting |
| Polished brand | High-production lifestyle, director-led, model talent, colour-graded |
| Founder-voice | Founder on camera, talking-head, low-fi or studio-lo-fi |

For each competitor: name the dominant style, the secondary style, and the style they are not using at all. Describe pacing (slow, medium, fast), typical text-overlay treatment, typical colour palette, typical run-time for video ads.

Surface the style gap: if every competitor is in studio-product mode and the client is running UGC, call it out. If every competitor is in UGC and the client is running studio, also call it out. Style arbitrage is a real lever in paid social.

---

## Section 7. CTA pattern analysis

Aggregate CTAs across every ad and every top social post. Count frequency of each CTA pattern:

| CTA pattern | Example |
|---|---|
| Shop Now | Direct commerce |
| Learn More | Consideration / long-funnel |
| Download | Lead-magnet / free tool |
| Subscribe | Email capture |
| Sign Up | Trial / account |
| Get Started | Onboarding-friendly |
| Book a Call | High-ticket / complex-sale |
| Watch Now | Video-content gating |
| Shop the Sale | Promotional urgency |
| See the Review | Social proof / UGC lead |

Flag the dominant CTA per competitor, the dominant across all competitors, and the CTA patterns no competitor is running. The no-one-is-running list is direct whitespace.

Note the offer-coupling patterns (e.g. "Shop Now + 20% OFF at checkout" vs "Shop Now, no discount"). Offer coupling is its own creative lever.

---

## Section 8. Whitespace map

The synthesis output of Sections 5, 6, and 7.

- **Angle whitespace.** Hook types, messaging angles, or claims no competitor is running.
- **Format whitespace.** Ad format + production-style combinations no competitor is running (for example: founder-voice talking-head at 30 seconds, if every competitor runs 15-second UGC).
- **CTA whitespace.** CTA patterns or offer structures no competitor is running.
- **Audience whitespace.** Sub-audiences visible in the social content comments but not addressed directly in ads.
- **Platform whitespace.** Platforms where no competitor is active (for example: LinkedIn, X long-form, TikTok if the category is all on Meta).
- **Price whitespace.** Price anchoring no competitor is using (premium price as signal, or value price as lever).

Rank each whitespace candidate by: Estimated Impact (1 to 10) × Confidence (1 to 10) × Effort to execute (1 to 10 inverse). The top 3 whitespace candidates feed the top 3 starter briefs in Section 9.

---

## Section 9. Starter ad briefs (top 10 to 15)

Every whitespace candidate plus every competitor "steal this" idea plus every cross-cutting theme insight converts into a candidate brief. Score each on ICE. Keep the top 10 to 15.

Each brief is a one-page starter doc the creative team can take straight into production:

```
### Brief N: {hook in 8 words or fewer}

**Hook type:** {from the 8-type taxonomy}
**Angle:** {single-sentence angle statement}
**Competitor precedent:** {"inspired by competitor X's top ad, see screenshot N" or "whitespace, no competitor running"}
**Format:** {static / carousel / video / UGC}
**Production style:** {UGC / studio / polished brand / founder-voice}
**Length:** {seconds for video, or N cards for carousel}
**Primary copy (first 125 characters):** {draft}
**Body copy:** {draft, 3 to 5 sentences}
**CTA:** {from the CTA table}
**Offer:** {discount / free trial / no offer}
**Landing page target:** {URL or "build new LP"}
**Expected KPI band:** {CTR %, CPM $, CPA $, measured how}
**ICE score:** I{x} C{x} E{x} = {product}
```

No P0/P1/P2 labels. Ranked by ICE descending. Group into three buckets:

- **Ship this week** (top 3). Production starts immediately.
- **Ship next 30 days** (next 5 to 7).
- **Ship next 60 to 90 days** (remaining backlog).

---

## Section 10. 30-60-90 test plan

Assemble the ranked briefs into a calendar view:

- **Days 1 to 30.** Top 3 briefs shipped. Each runs against a $50 to $100 per day budget on Meta prospecting (or equivalent on Google). Learning-phase completion criteria: 50+ purchases per ad set or 1,000+ link clicks per ad, whichever comes first.
- **Days 31 to 60.** Top briefs expand if they pass the CPA threshold from the ad spend band. Next 3 briefs enter test.
- **Days 61 to 90.** Winners scale. Losers retire. Next 3 briefs enter test. Refresh the Meta Ad Library scan for competitor movement. Swipe file updates.

Flag the quarterly re-run.

### Handoff to actions.md

Take the top 3 briefs and merge them into `{client_folder}/actions.md` as new items in the Next Actions section. Respect the priority caps. If any tier is over cap, rescore via ICE and demote the weakest before adding.

---

## Access-grant checklist

Appears only when Internal layer tools are missing. Supply the exact steps:

```
## Access-grant checklist

To deepen the next run, grant EntireCommerce:

- **Meta Ads**: ad-account partner invite at the Ad Account level. Unlocks client creative fatigue scoring against competitor rotation cadence.
- **Google Ads**: MCC invite to the EntireCommerce MCC. Unlocks Quality Score diagnostics, auction insights (who competes against the client in the auction), and branded-search defence review.
- **Meta Business Manager**: asset access to the Pixel and the CAPI endpoint. Unlocks event-health diagnostics on the client's own site.
- **Apify**: account with `APIFY_API_TOKEN` in `.env`. Pinned Actors used by this playbook: `apify/facebook-ads-scraper` (Meta Ad Library), `apify/instagram-scraper`, `clockworks/tiktok-scraper`, `apidojo/tiktok-profile-scraper`. Pay-as-you-go (typical full audit runs $1 to $10 with `maxItems` + `maxTotalChargeUsd` caps in place). Unlocks deeper Meta Ad Library + social-content audit coverage on Section 4.

Book a call to wire these up: https://entirecommerce.ai/audit
```

---

## Voice conventions (strict, applied across the report)

- No em-dashes. Use period, comma, or colon.
- No negative parallelisms. Never "X, not Y". Never "rather than X". Never "instead of X". Never "opposite of X". Never "not only X". State the positive.
- Four-word sentence floor. No one- or two-word sentences.
- Spelling: "ecommerce" one word, no hyphen.
- No AI clichés: "Here's the...", "Most people...", "The uncomfortable truth...", curiosity-gap tricks.
- ICP language discipline: "premium DTC", "AOV $500+", "founder-led".
- No unearned claims on the client's own creative performance before the audit has seen live data.
- The report is one markdown file in the client's GitHub repo. Supporting screenshots live alongside.

### Voice enforcement gate (mandatory before writing the report to disk)

Grep the full draft for every banned pattern and rewrite every match:

| Banned pattern | Grep for | Fix |
|---|---|---|
| Em-dash | `—` (U+2014) and `--` (double hyphen used as em-dash) | Replace with period, comma, or colon |
| Negative parallelism | `, not `, ` rather than `, ` instead of `, `opposite of `, `not only ` | Rewrite to state the positive claim alone |
| Banned spelling | `e-commerce`, `E-commerce`, `E-Commerce` | Replace with `ecommerce` |
| AI clichés | `Here's the`, `Here's what`, `Here's why`, `Most people`, `The uncomfortable truth`, `The brutal truth`, `The breakthrough` | Rewrite without the cliché frame |
| Sub-four-word sentence | Sentences of 1 to 3 words standalone | Merge into adjacent sentence or expand |

`not` is permitted only when the negation is genuinely load-bearing.

The voice gate must hit zero matches before the report is written to disk.

---


## Output formatting: bullets over paragraphs (mandatory for every report and summary)

When this playbook generates a report, executive summary, brief, or any deliverable with multiple findings or actions, the default output structure is bullet lists, not prose paragraphs.

- Any time the text enumerates three or more items (findings, fixes, gaps, recommendations, criteria, things-they-do-better) those items become separate bullets. Do not bury enumerated points inside a paragraph.
- Reserve paragraphs for genuinely connected reasoning where prose flow carries the argument. Cap those paragraphs at four sentences.
- Multi-clause sentences with semi-colons or commas separating discrete points are a signal to break into bullets.
- The canonical pattern is: heading + one lead-in sentence + bullet list. The lead-in frames the list; the bullets carry the load.
- Reports ship scannable. The reader skims on a phone between meetings.

Run a paragraph-density check before commit: any paragraph longer than four sentences, or containing three or more enumerated items inside prose, is a candidate for bullet conversion. Convert it.

Applies to: full reports, executive summaries, email overviews, weekly reviews, dashboards, action-item lists, and any narrative deliverable. Does not apply to: opening framing paragraphs (one paragraph allowed), conclusion paragraphs (one or two allowed), or quoted founder/buyer voice.

## Execution cadence (Kanban handoff)

Section 9 is the plan. The top 3 briefs begin production immediately. The ranking refreshes every 90 days with a full re-run of the audit.

- **Week 1.** Audit is the week-1 deliverable. Top 3 briefs in production by day 7.
- **Ongoing.** The weekly review playbook refreshes the swipe file against any newly-launched competitor ads.
- **Quarterly.** Full re-run. Creative rotates fast, stale swipe files mislead.

---

## Reference material

- `gtm-audit.md`: Sections 3.4 and 6D of the GTM audit cover the same Meta Ad Library scan at shallower depth. This playbook is the deep version.

---

## Acceptance criteria

- Runs end-to-end from a single Claude Code prompt. No manual copy-paste between steps.
- Detects the correct mode (Full, Quick, Pre-launch, Focused) and adapts the report.
- Honours the two-layer tool gate. External layer runs every mode. Internal layer runs when credentials exist.
- Skips missing Internal data cleanly. Files unlocks in the Access-grant checklist.
- Writes a single consolidated report to `{client_folder}/docs/competitor-creative-audit/{YYYY-MM-DD}/competitor-creative-audit-report.md`.
- Stores screenshots and raw data under `{client_folder}/data/competitor-creative-audit/{YYYY-MM-DD}/`.
- Every one of the top 10 to 15 briefs is fully populated with hook, angle, format, production style, copy draft, CTA, offer, landing page, KPI band, and ICE score.
- The Whitespace map explicitly names 3+ whitespace candidates across angle, format, and CTA.
- The synthesis pass produces 3 to 5 cross-cutting themes that span multiple competitors or multiple sections.
- Voice enforcement gate runs before write. Zero banned-pattern matches in final output.
- The top 3 briefs merge into `{client_folder}/actions.md` under the priority caps.
