taketomarket 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/README.md +34 -11
  4. package/bin/lib/campaign.cjs +12 -8
  5. package/bin/lib/codebase-scan.cjs +86 -0
  6. package/bin/lib/config.cjs +129 -0
  7. package/bin/lib/deploy.cjs +36 -0
  8. package/bin/lib/deviation.cjs +1 -1
  9. package/bin/lib/drift-log.cjs +4 -4
  10. package/bin/lib/health.cjs +32 -31
  11. package/bin/lib/install-detect.cjs +62 -0
  12. package/bin/lib/legacy-folder.cjs +100 -0
  13. package/bin/lib/playwright-check.cjs +26 -0
  14. package/bin/lib/site-location.cjs +22 -0
  15. package/bin/lib/state.cjs +3 -3
  16. package/bin/lib/svg-render.cjs +42 -0
  17. package/bin/ttm-tools.cjs +136 -4
  18. package/gates/base-gates.md +8 -8
  19. package/gates/gate-evaluation.md +8 -8
  20. package/install.js +37 -3
  21. package/package.json +10 -6
  22. package/playbooks/aeo.md +218 -114
  23. package/playbooks/affiliate.md +225 -160
  24. package/playbooks/email.md +236 -174
  25. package/playbooks/events.md +303 -213
  26. package/playbooks/landing-pages.md +305 -0
  27. package/playbooks/linkedin.md +264 -142
  28. package/playbooks/manifesto.md +322 -0
  29. package/playbooks/paid-ads.md +240 -189
  30. package/playbooks/positioning.md +340 -0
  31. package/playbooks/pr-media.md +308 -168
  32. package/playbooks/pseo.md +426 -0
  33. package/playbooks/seo.md +251 -158
  34. package/playbooks/social.md +253 -182
  35. package/playbooks/youtube.md +286 -181
  36. package/references/brand-color-theory.md +48 -0
  37. package/references/codex-image-gen-research.md +58 -0
  38. package/references/context-loading.md +6 -6
  39. package/references/humanizer-patterns.md +433 -0
  40. package/references/inline-education-blurbs.md +461 -0
  41. package/references/landing-page-anatomy.md +64 -0
  42. package/references/linkedin-post-patterns.md +174 -0
  43. package/references/logo-design-principles.md +55 -0
  44. package/references/meta-gate-evaluation.md +3 -3
  45. package/references/obra-superpowers-conventions.md +170 -0
  46. package/references/playbook-leaders.md +472 -0
  47. package/references/playwright-mcp-setup.md +164 -0
  48. package/references/positioning-check-report.md +2 -2
  49. package/references/pseo-page-anatomy.md +56 -0
  50. package/references/pseo-templates/alternative-anatomy.md +31 -0
  51. package/references/pseo-templates/alternative-content-playbook.md +32 -0
  52. package/references/pseo-templates/blog-anatomy.md +28 -0
  53. package/references/pseo-templates/blog-content-playbook.md +36 -0
  54. package/references/pseo-templates/comparison-anatomy.md +29 -0
  55. package/references/pseo-templates/comparison-content-playbook.md +35 -0
  56. package/references/pseo-templates/use-case-anatomy.md +28 -0
  57. package/references/pseo-templates/use-case-content-playbook.md +30 -0
  58. package/skills/ttm-101/SKILL.md +25 -0
  59. package/skills/ttm-aeo-check/SKILL.md +17 -12
  60. package/skills/ttm-affiliate-kit/SKILL.md +5 -0
  61. package/skills/ttm-archive/SKILL.md +5 -0
  62. package/skills/ttm-brand-refresh/SKILL.md +5 -0
  63. package/skills/ttm-brief/SKILL.md +5 -0
  64. package/skills/ttm-competitor-scan/SKILL.md +5 -0
  65. package/skills/ttm-deploy/SKILL.md +22 -0
  66. package/skills/ttm-discover/SKILL.md +17 -0
  67. package/skills/ttm-email-check/SKILL.md +17 -0
  68. package/skills/ttm-email-preflight/SKILL.md +17 -11
  69. package/skills/ttm-fix/SKILL.md +5 -0
  70. package/skills/ttm-health/SKILL.md +6 -1
  71. package/skills/ttm-humanize/SKILL.md +33 -0
  72. package/skills/ttm-icp-refresh/SKILL.md +5 -0
  73. package/skills/ttm-improve-skill/SKILL.md +18 -0
  74. package/skills/ttm-init/SKILL.md +10 -3
  75. package/skills/ttm-keyword-map/SKILL.md +17 -11
  76. package/skills/ttm-landing/SKILL.md +19 -0
  77. package/skills/ttm-learn/SKILL.md +5 -0
  78. package/skills/ttm-linkedin-post/SKILL.md +26 -0
  79. package/skills/ttm-measure/SKILL.md +5 -0
  80. package/skills/ttm-new-campaign/SKILL.md +5 -0
  81. package/skills/ttm-next/SKILL.md +5 -0
  82. package/skills/ttm-playwright-setup/SKILL.md +18 -0
  83. package/skills/ttm-positioning-check/SKILL.md +5 -0
  84. package/skills/ttm-positioning-shift/SKILL.md +5 -0
  85. package/skills/ttm-produce/SKILL.md +5 -0
  86. package/skills/ttm-pseo/SKILL.md +26 -0
  87. package/skills/ttm-repurpose/SKILL.md +5 -0
  88. package/skills/ttm-request-skill/SKILL.md +18 -0
  89. package/skills/ttm-research/SKILL.md +18 -6
  90. package/skills/ttm-resume/SKILL.md +5 -0
  91. package/skills/ttm-review/SKILL.md +5 -0
  92. package/skills/ttm-seo/SKILL.md +64 -0
  93. package/skills/ttm-seo-audit/SKILL.md +17 -12
  94. package/skills/ttm-ship/SKILL.md +5 -0
  95. package/skills/ttm-state/SKILL.md +5 -0
  96. package/skills/ttm-update/SKILL.md +152 -4
  97. package/skills/ttm-verify/SKILL.md +5 -0
  98. package/templates/agents-md.md +14 -4
  99. package/templates/campaign-research.md +6 -6
  100. package/templates/campaign-state.md +1 -1
  101. package/templates/claude-md.md +14 -4
  102. package/templates/linkedin-base-template.md +48 -0
  103. package/templates/next-step-footer.md +13 -0
  104. package/templates/production-manifest.json +4 -4
  105. package/templates/pseo/alternative-cms-schema.json +65 -0
  106. package/templates/pseo/blog-cms-schema.json +55 -0
  107. package/templates/pseo/comparison-cms-schema.json +56 -0
  108. package/templates/pseo/use-case-cms-schema.json +62 -0
  109. package/templates/reference-files/brand.md +51 -0
  110. package/templates/reference-files/product-dna.md +73 -0
  111. package/templates/site-scaffold/app/globals.css +2 -0
  112. package/templates/site-scaffold/app/layout.tsx +17 -0
  113. package/templates/site-scaffold/app/page.tsx +33 -0
  114. package/templates/site-scaffold/app/robots.ts +8 -0
  115. package/templates/site-scaffold/app/sitemap.ts +10 -0
  116. package/templates/site-scaffold/app/tokens.css +21 -0
  117. package/templates/site-scaffold/components/Comparison.tsx +14 -0
  118. package/templates/site-scaffold/components/Faq.tsx +14 -0
  119. package/templates/site-scaffold/components/Features.tsx +14 -0
  120. package/templates/site-scaffold/components/FinalCta.tsx +17 -0
  121. package/templates/site-scaffold/components/Footer.tsx +12 -0
  122. package/templates/site-scaffold/components/Hero.tsx +22 -0
  123. package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
  124. package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
  125. package/templates/site-scaffold/components/Problem.tsx +14 -0
  126. package/templates/site-scaffold/components/SocialProof.tsx +14 -0
  127. package/templates/site-scaffold/components/Solution.tsx +14 -0
  128. package/templates/site-scaffold/components/Testimonials.tsx +14 -0
  129. package/templates/site-scaffold/components/UseCases.tsx +14 -0
  130. package/templates/site-scaffold/content/.gitkeep +0 -0
  131. package/templates/site-scaffold/lib/.gitkeep +0 -0
  132. package/templates/site-scaffold/next.config.mjs +10 -0
  133. package/templates/site-scaffold/package.json +25 -0
  134. package/templates/site-scaffold/postcss.config.mjs +3 -0
  135. package/templates/site-scaffold/public/llms.txt +9 -0
  136. package/templates/site-scaffold/tsconfig.json +21 -0
  137. package/templates/verification-report.md +1 -1
  138. package/workflows/channel/linkedin-post.md +178 -0
  139. package/workflows/discipline/affiliate-kit.md +65 -6
  140. package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
  141. package/workflows/discipline/repurpose.md +82 -31
  142. package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
  143. package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
  144. package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
  145. package/workflows/education/ttm-101.md +114 -0
  146. package/workflows/lifecycle/brief-positioning-check.md +1 -1
  147. package/workflows/lifecycle/brief.md +64 -28
  148. package/workflows/lifecycle/{research.md → discover.md} +61 -19
  149. package/workflows/lifecycle/fix.md +72 -37
  150. package/workflows/lifecycle/humanize.md +280 -0
  151. package/workflows/lifecycle/learn.md +72 -35
  152. package/workflows/lifecycle/measure.md +54 -18
  153. package/workflows/lifecycle/produce.md +88 -37
  154. package/workflows/lifecycle/review.md +71 -25
  155. package/workflows/lifecycle/ship.md +62 -18
  156. package/workflows/lifecycle/verify.md +72 -26
  157. package/workflows/reference-mgmt/brand-refresh.md +50 -13
  158. package/workflows/reference-mgmt/competitor-scan.md +51 -15
  159. package/workflows/reference-mgmt/icp-refresh.md +48 -12
  160. package/workflows/reference-mgmt/positioning-check.md +55 -20
  161. package/workflows/reference-mgmt/positioning-shift.md +53 -17
  162. package/workflows/setup/init-brand-colors.md +75 -0
  163. package/workflows/setup/init-logo.md +113 -0
  164. package/workflows/setup/init-product-dna.md +83 -0
  165. package/workflows/setup/init-questions.md +166 -30
  166. package/workflows/setup/init-validation.md +22 -0
  167. package/workflows/setup/init.md +144 -39
  168. package/workflows/setup/new-campaign.md +48 -12
  169. package/workflows/site/deploy.md +98 -0
  170. package/workflows/site/landing.md +156 -0
  171. package/workflows/site/pseo.md +96 -0
  172. package/workflows/site/quality-gates.md +88 -0
  173. package/workflows/utility/archive.md +45 -9
  174. package/workflows/utility/health.md +77 -3
  175. package/workflows/utility/improve-skill.md +233 -0
  176. package/workflows/utility/next.md +38 -2
  177. package/workflows/utility/playwright-setup.md +128 -0
  178. package/workflows/utility/request-skill.md +218 -0
  179. package/workflows/utility/resume.md +40 -3
  180. package/workflows/utility/state.md +42 -7
@@ -1,157 +1,187 @@
1
1
  ---
2
2
  discipline: paid-ads
3
- asset_types: [search-ad, display-ad, social-ad, video-ad, landing-page-ad]
4
- version: "1.0"
3
+ asset_types: [facebook-ad, google-search-ad, linkedin-ad]
4
+ version: "2.0"
5
5
  ---
6
6
 
7
- # Paid Ads Discipline Playbook
7
+ # Paid Ads Discipline Playbook -- Dennis Yu's Dollar-a-Day
8
8
 
9
9
  This playbook extends the base playbook contract (`base.md`) with paid advertising-specific production guidance, discipline gates, and format rules. It is loaded by ttm-producer during content generation and parsed by ttm-verify for gate evaluation.
10
10
 
11
+ The framework: **Dennis Yu's Dollar-a-Day** -- spend $1/day per ad to discover signal, scale only the winners, and never run a new ad creative that has not already proven itself organically. Combined with the **3×3 Content Grid** (3 audiences × 3 funnel stages = 9 ad sets), this is the testing protocol an engineer can run on a credit card and an evening.
12
+
13
+ If you came here to spend $5,000 a day on a single cold-audience video your agency just produced: close this file. That is not what we do.
14
+
11
15
  ---
12
16
 
13
17
  ## Production Guidance
14
18
 
15
- ### Ad-to-Landing-Page Message Match
19
+ ### Dollar-a-Day: Test Cheap, Scale Winners
20
+
21
+ Every paid-ads campaign starts at **$1/day per ad**. One dollar. Not one hundred. Not five hundred. One.
22
+
23
+ The reason is not frugality -- it is signal. At $1/day, you can run 30 ads for $30/day total and let the platform tell you which 3 are working. At $100/day per ad, you can run one ad and learn one thing, expensively, while burning cash on five other ads that were going to lose anyway. Engineers already know this pattern: it is `git bisect` for ad creative. Test a wide surface area at near-zero cost, then concentrate spend on the commits that didn't break the build.
24
+
25
+ Concrete rules:
26
+
27
+ - **Test phase: $1/day per ad, for 7 days minimum.** Less than a week is statistical noise. More than two weeks without scaling means you have no winners and should kill the set.
28
+ - **Scale ladder: $1 → $30 → $100 → $300 per day.** A winner at $1/day earns $30/day for the next 30 days. Still winning? $100/day. Still winning? $300/day. Each step is a new test -- if the metric breaks at $30, do not go to $100.
29
+ - **Never scale a loser.** "Give it time" is the most expensive sentence in paid ads. If it lost at $1/day, it loses at $100/day -- you just lose 100× faster.
16
30
 
17
- The single most important factor in paid ad performance is message match -- the ad copy promise must match the landing page headline and above-the-fold content exactly. When a user clicks an ad that says "Get 50% Off Your First Month," the landing page H1 must say "50% Off Your First Month" (or semantically equivalent). Any disconnect between ad promise and landing page delivery kills conversion rate and wastes ad spend.
31
+ This is not about being cheap. It is about being honest with your money.
18
32
 
19
- For every ad creative, specify the landing page URL and confirm that:
33
+ ### The 3×3 Content Grid: 3 Audiences × 3 Stages
20
34
 
21
- - The ad headline claim appears in the landing page H1
22
- - The ad CTA matches the landing page primary action button
23
- - The visual style (colors, imagery, tone) is consistent between ad and landing page
24
- - The offer terms visible in the ad are present above the fold on the landing page
35
+ Every campaign produces **9 ad sets** before launch. The grid:
25
36
 
26
- ### Creative Variety
37
+ | | Cold (Awareness) | Warm (Engagement) | Hot (Conversion) |
38
+ |------------------|--------------------------|--------------------------|-------------------------------|
39
+ | **Audience A** (broadest interest) | Awareness ad for A | Engagement ad for A | Conversion ad for A |
40
+ | **Audience B** (look-alike / mid) | Awareness ad for B | Engagement ad for B | Conversion ad for B |
41
+ | **Audience C** (retargeting / hot) | Awareness ad for C | Engagement ad for C | Conversion ad for C |
27
42
 
28
- Never run a single creative. Every campaign must include multiple creative variations for A/B testing:
43
+ A campaign with only conversion ads to cold audiences is what Dennis calls "well-running-dry funnel design" -- you cannot harvest leads from an audience that doesn't know you. A campaign with only awareness ads is a charity. You need all 9 cells -- the awareness ads feed the engagement ads, the engagement ads feed the conversion ads. This is the **Brand → Demand → Lead → Sale (BDLS) flywheel**.
29
44
 
30
- - Minimum 3 distinct variations per ad set
31
- - Each variation should test a different angle: different hook, different value proposition emphasis, different visual approach
32
- - Variations should differ meaningfully -- changing one word does not count as a variation
33
- - Label each variation clearly (e.g., "Pain Point Hook," "Social Proof Hook," "Benefit-First Hook")
45
+ Every ad in the brief must be tagged with its **(audience, stage)** cell. If you cannot place an ad on the 3×3 grid, the ad does not belong in the campaign.
34
46
 
35
- Creative variety enables performance optimization. Without it, you cannot know which message resonates and you are guessing with budget.
47
+ ### Boost Organic Winners; Do Not Make Net-New Ad Creative
36
48
 
37
- ### Audience-Creative Fit
49
+ Pure-ad creatives almost never win. The ones that do are *boosted organic content* -- posts that already performed on your feed, that already proved a human voice resonated, that the platform already has engagement data on.
38
50
 
39
- Match creative angle to the target audience segment:
51
+ The workflow:
40
52
 
41
- - Pull language directly from ICP.md customer language library -- use the words your audience uses, not internal product jargon
42
- - Address specific pain points or jobs-to-be-done (JTBD) relevant to the audience segment
43
- - Adjust tone for platform context: LinkedIn ads are professional, Instagram ads are visual-first, Google Search ads are intent-driven
44
- - If targeting multiple segments, create segment-specific ad sets with tailored creative -- do not use one-size-fits-all copy
53
+ 1. Inventory your organic content from the last 30-90 days (posts, videos, threads, founder LinkedIn updates).
54
+ 2. Filter for posts with above-median organic engagement on their channel.
55
+ 3. Boost those exact posts at $1/day to a defined audience.
56
+ 4. Do **not** rewrite, do not "make it more ad-like," do not add a hard CTA on top. Let the original post run.
45
57
 
46
- ### Bid Strategy Awareness
58
+ This is the "**Goose-and-Gander**" principle: the same voice that worked organically is the only voice you should pay to amplify. Pristine ad-agency creative shot in a studio loses to a founder's iPhone-recorded explainer video, every time, because the audience can smell the difference between humans and brands.
47
59
 
48
- Creative approach must align with the campaign bid strategy and objective:
60
+ If a campaign brief proposes new creative that has never been posted organically, the answer is: post it organically first, measure for 3-7 days, then decide if it earns ad budget.
49
61
 
50
- - **Awareness campaigns** (CPM/reach): Broad messaging, brand-focused, emotional appeal. Creative drives impressions and recall.
51
- - **Consideration campaigns** (CPC/engagement): Educational, value-driven. Creative drives clicks and engagement.
52
- - **Conversion campaigns** (CPA/ROAS): Direct response, clear CTA, urgency. Creative drives specific actions.
62
+ ### Goldilocks Audience Sizing: 1M–10M
53
63
 
54
- Mismatching creative style and bid strategy wastes budget -- brand awareness copy with aggressive "Buy Now" CTAs confuses the audience; conversion campaigns with vague brand messaging fail to drive action.
64
+ Audience too small (<1M) no learning signal, the platform can't optimize, your $1/day buys nothing.
65
+ Audience too large (>10M) → your $1/day spreads to noise, no concentration.
66
+ Audience just right (1M–10M) → the platform has room to find the right people without diffusing your signal.
55
67
 
56
- ### Platform-Specific Copy Constraints
68
+ For each ad set in the 3×3 grid, declare the targeting and the estimated audience size before launch. Audiences outside the Goldilocks band are flagged.
57
69
 
58
- Each platform has strict format requirements. Produce creative within these constraints from the start -- do not write long copy and then truncate:
70
+ ### Platform-Agnostic, Mechanics-Specific
59
71
 
60
- - **Google Search Ads:** Headlines 1-3 (30 chars each), descriptions 1-2 (90 chars each)
61
- - **Meta/Facebook:** Primary text (125 chars above fold), headline (40 chars), description (30 chars), image 1200x628px
62
- - **LinkedIn:** Single image headline (70 chars), intro text (150 chars above fold), image 1200x627px
63
- - **Display ads:** Varies by size (300x250, 728x90, 160x600) -- text must be legible at each size
72
+ The Dollar-a-Day strategy works the same on Meta, TikTok, LinkedIn, YouTube, and Google -- the strategy is platform-agnostic. The *mechanics* are platform-specific:
64
73
 
65
- Write to the constraint, not around it. If the headline must be 30 characters, write a 30-character headline -- do not write 50 characters and hope it fits.
74
+ - **Meta / Facebook:** Boost organic posts directly. Audience builder + lookalikes. Cheapest CPM, best for B2C and SMB B2B.
75
+ - **LinkedIn:** Sponsor founder posts and document posts. Higher CPM (~$30-80) but tighter B2B targeting. Still test at $1-5/day -- LinkedIn's minimum is higher than Meta's.
76
+ - **Google Search:** Intent-driven, not interest-driven. Same scale ladder ($1→$30→$100→$300), but tested by keyword cluster, not by creative. Each keyword cluster is its own ad set.
77
+
78
+ Whatever the platform, the rules don't change: test cheap, boost organic, scale winners, cover the 3×3 grid.
66
79
 
67
80
  ---
68
81
 
69
82
  ## Discipline Gates
70
83
 
71
- ### DISC-PAID-ADS-01: Message Match -- Tier 1
84
+ ### DISC-PAID-ADS-01: Dollar-a-Day Test Spend Cap -- Tier 1
72
85
 
73
- **Checks:** Ad copy promise matches the landing page headline and above-the-fold content
74
- **Against:** Ad creative and specified landing page content
86
+ **Checks:** Test-phase ads are budgeted at $1/day per ad (within Dollar-a-Day tolerance) and have not been scaled prematurely.
87
+ **Against:** Ad brief budget table per ad set, campaign phase declaration.
75
88
 
76
89
  #### Evaluation Criteria
77
90
 
78
- 1. **Headline-to-landing-page alignment**
79
- - PASS: Ad headline claim appears verbatim or semantically equivalent in the landing page H1, and the CTA matches the landing page primary action
80
- - WARN: Ad and landing page share the same topic but the specific promise differs (e.g., ad says "50% off" but LP says "save big")
81
- - FAIL: Ad copy makes a promise not present on the landing page, or landing page URL is missing from the brief
91
+ 1. **Per-ad daily budget in test phase**
92
+ - PASS: Every ad in the test phase is budgeted at $1-$5/day (LinkedIn allowed up to $10/day given platform minimums), and the brief explicitly labels the phase as "test"
93
+ - WARN: Budget is $5-$15/day per ad without a stated reason, or the test/scale phase is unlabeled
94
+ - FAIL: Any test-phase ad is budgeted above $15/day, or the campaign launches at $100+/day per ad with no prior $1/day testing data
82
95
 
83
- 2. **Offer consistency**
84
- - PASS: Any pricing, discount, or offer terms in the ad are identically present on the landing page above the fold
85
- - WARN: Offer is present on the landing page but requires scrolling or clicking to find
86
- - FAIL: Ad mentions an offer or price not found on the landing page
96
+ 2. **Scale ladder declared**
97
+ - PASS: Brief states the scale ladder explicitly (e.g., "$1/day for 7 days, then $30/day if CTR > X, then $100/day if CPL < Y")
98
+ - WARN: Scale ladder mentioned but thresholds for advancing tiers are not numerical
99
+ - FAIL: No scale ladder; brief jumps from test directly to "$500/day for launch week" with no in-between
87
100
 
88
- ### DISC-PAID-ADS-02: Creative Variety -- Tier 1
101
+ ### DISC-PAID-ADS-02: 3×3 Grid Coverage -- Tier 1
89
102
 
90
- **Checks:** Campaign includes multiple creative variations for testing
91
- **Against:** Ad brief creative set
103
+ **Checks:** Each ad in the campaign maps to exactly one (audience, stage) cell of the 3×3 grid, and the grid has awareness coverage.
104
+ **Against:** Ad brief campaign matrix.
92
105
 
93
106
  #### Evaluation Criteria
94
107
 
95
- 1. **Variation count**
96
- - PASS: At least 3 distinct ad variations (different hooks, visuals, or angles) defined in the brief, each clearly labeled
97
- - WARN: 2 variations defined
98
- - FAIL: Single creative with no variation plan
108
+ 1. **Per-ad grid cell assignment**
109
+ - PASS: Every ad is tagged `(audience: cold|warm|hot, stage: awareness|engagement|conversion)` and lands in exactly one cell of the 3×3 grid
110
+ - WARN: Most ads are tagged but 1-2 are unlabeled or span multiple cells
111
+ - FAIL: Ads are not tagged by audience or stage, or the brief has no grid declared
99
112
 
100
- 2. **Variation distinctiveness**
101
- - PASS: Each variation tests a meaningfully different angle (different pain point, different value prop, different emotional appeal)
102
- - WARN: Variations exist but differ only in minor wording changes (synonym swaps)
103
- - FAIL: "Variations" are identical copy with only formatting changes
113
+ 2. **Awareness layer presence**
114
+ - PASS: At least one ad in the campaign targets a cold audience at the awareness stage (top of the BDLS flywheel)
115
+ - WARN: Cold-awareness exists but is severely underweighted (<10% of campaign budget) -- the well will run dry
116
+ - FAIL: Campaign is 100% conversion ads to warm/hot audiences with no awareness layer feeding it
104
117
 
105
- ### DISC-PAID-ADS-03: Audience-Creative Fit -- Tier 2
118
+ ### DISC-PAID-ADS-03: Boosted Organic Creative -- Tier 1
106
119
 
107
- **Checks:** Creative angle matches the target audience segment's pain points and language
108
- **Against:** ICP.md customer language library and audience segment definition
120
+ **Checks:** Ad creative is repurposed organic content with documented organic performance, not net-new ad-only material.
121
+ **Against:** Per-ad creative provenance and organic engagement reference.
109
122
 
110
123
  #### Evaluation Criteria
111
124
 
112
- 1. **Language alignment**
113
- - PASS: Ad copy uses language from ICP.md customer language library, addresses a specific pain point or JTBD relevant to the audience segment
114
- - WARN: Ad copy addresses the right topic but uses generic rather than ICP-specific language
115
- - FAIL: Ad copy uses internal/product jargon or addresses pain points not in the ICP definition
125
+ 1. **Organic provenance**
126
+ - PASS: Each ad creative is an existing organic post (link or post ID supplied) that has run on the channel for at least 3 days with above-median engagement on that account
127
+ - WARN: Creative is repurposed from organic content but engagement data is not cited, or the post is less than 3 days old
128
+ - FAIL: Creative is net-new, produced specifically for the ad, never posted organically -- spending dollars to validate something free posting could have validated first
116
129
 
117
- 2. **Segment specificity**
118
- - PASS: Creative is tailored to a specific audience segment with named pain points from that segment's profile
119
- - WARN: Creative is broadly relevant to the target market but not tailored to a specific segment
120
- - FAIL: Creative uses one-size-fits-all messaging with no audience segment consideration
130
+ 2. **Original voice preserved**
131
+ - PASS: The boosted post matches the original organic post (same copy, same media); ad version adds nothing the audience did not already see organically
132
+ - WARN: The post has been lightly edited from organic (added one CTA line) -- acceptable but flagged
133
+ - FAIL: The post has been rewritten into "ad voice" with stock imagery, hard CTAs, and corporate polish that the organic post did not have
121
134
 
122
- ### DISC-PAID-ADS-04: Platform Format Compliance -- Tier 2
135
+ ### DISC-PAID-ADS-04: Hook-and-Voice Authenticity -- Tier 2
123
136
 
124
- **Checks:** Ad copy respects platform character limits and format rules
125
- **Against:** Platform specifications (Google, Meta, LinkedIn, Display)
137
+ **Checks:** Ad hook reads as something a human actually said on this account -- the Goose-and-Gander check. If the founder wouldn't post it organically, they shouldn't pay to amplify it.
138
+ **Against:** Ad copy hook (first 125 chars on Meta, first 150 on LinkedIn, headline on Google).
126
139
 
127
140
  #### Evaluation Criteria
128
141
 
129
- 1. **Character limits**
130
- - PASS: All headlines under platform limit (Google: 30 chars, Meta: 40 chars, LinkedIn: 70 chars), descriptions under limit (Google: 90 chars, Meta: 125 chars primary text), all copy verified against the target platform
131
- - WARN: Copy is within 10% of limits but could be tighter to avoid truncation on some devices
132
- - FAIL: Copy exceeds platform character limits or uses formats unsupported by the target platform
142
+ 1. **Hook in ≤125 characters**
143
+ - PASS: Hook lands within the first 125 chars (Meta above-fold cutoff) and makes a single concrete promise or asks a single concrete question
144
+ - WARN: Hook lands but slightly exceeds 125 chars on Meta or 150 chars on LinkedIn -- truncation likely
145
+ - FAIL: No hook in the first 125 chars (lede buried), or the "hook" is generic brand throat-clearing ("We are excited to announce…")
133
146
 
134
- 2. **Asset specifications**
135
- - PASS: Image dimensions, video length, and file format match platform requirements (e.g., Meta: 1200x628px, Google Display: specified banner sizes)
136
- - WARN: Specs are close but not exact (e.g., slightly off aspect ratio)
137
- - FAIL: No image/video specs provided, or specs are incompatible with the target platform
147
+ 2. **Voice consistency with the account**
148
+ - PASS: A reader of the founder's organic feed would recognize the ad as written by the same person -- same vocabulary, same cadence, same level of polish
149
+ - WARN: Voice is similar to the organic feed but noticeably more polished or more corporate
150
+ - FAIL: Voice is unrecognizable from organic content; reads as agency-produced or ChatGPT-default-tone
138
151
 
139
- ### DISC-PAID-ADS-05: Bid Strategy Alignment -- Tier 2
152
+ ### DISC-PAID-ADS-05: Goldilocks Audience Sizing -- Tier 2
140
153
 
141
- **Checks:** Creative approach aligns with the stated bid strategy and campaign objective
142
- **Against:** Campaign brief bid strategy and objective declaration
154
+ **Checks:** Each ad set's targeted audience falls in the 1M–10M sweet spot for testing on Meta-style platforms (with platform-appropriate adjustments).
155
+ **Against:** Per-ad-set targeting definition and platform-reported audience size estimate.
143
156
 
144
157
  #### Evaluation Criteria
145
158
 
146
- 1. **Strategy-creative coherence**
147
- - PASS: Awareness campaigns use broad/engagement-focused creative, conversion campaigns use direct-response creative with clear CTA, the brief explicitly states bid strategy
148
- - WARN: Bid strategy stated but creative style does not clearly match the objective (e.g., awareness campaign with aggressive CTA)
149
- - FAIL: No bid strategy stated in the brief, or creative contradicts the campaign objective
159
+ 1. **Audience size band**
160
+ - PASS: Each ad set targets an audience between 1M and 10M (Meta/TikTok), or 50K-2M for LinkedIn given its smaller pool, with the estimated size declared in the brief
161
+ - WARN: Audience is outside the band by ≤30% (e.g., 700K on Meta, 12M on Meta) with a stated reason
162
+ - FAIL: Audience is <100K or >50M, or no estimated audience size is declared in the brief
163
+
164
+ 2. **Targeting basis is declared**
165
+ - PASS: Each ad set declares targeting basis (interest, lookalike %, custom audience source, keyword cluster for Google) and what cell of the 3×3 grid it serves
166
+ - WARN: Targeting basis is declared but rationale for size is missing
167
+ - FAIL: Targeting is "broad" or undeclared -- no learning signal possible
168
+
169
+ ### DISC-PAID-ADS-06: Scale-on-Winners Discipline -- Tier 2
170
+
171
+ **Checks:** Scale decisions are tied to numerical thresholds, not vibes; losers are killed not "given time."
172
+ **Against:** Brief's scaling rules and kill criteria.
173
+
174
+ #### Evaluation Criteria
150
175
 
151
- 2. **CTA appropriateness**
152
- - PASS: CTA strength matches funnel stage -- soft CTAs ("Learn more") for awareness, strong CTAs ("Start free trial") for conversion
153
- - WARN: CTA is present but mismatched to the funnel stage
154
- - FAIL: No CTA in conversion-focused ads, or aggressive sales CTA in awareness-stage ads
176
+ 1. **Win/kill thresholds defined**
177
+ - PASS: Brief states numerical PASS thresholds (e.g., "CTR 1.5% AND CPL ≤ $X to advance from $1/day to $30/day") and numerical kill thresholds (e.g., "kill if CTR < 0.5% after 7 days at $1/day")
178
+ - WARN: Thresholds exist but only for scaling, not for killing -- losers will linger
179
+ - FAIL: No numerical thresholds; scaling decisions are described qualitatively ("if it's doing well…")
180
+
181
+ 2. **Review cadence**
182
+ - PASS: Brief specifies a review cadence (e.g., "review every 7 days, hard cutoff at day 14 for any ad with no winner signal")
183
+ - WARN: Review cadence stated but no hard cutoff date for non-performers
184
+ - FAIL: No review cadence -- ads will run forever on autopilot
155
185
 
156
186
  ---
157
187
 
@@ -159,160 +189,181 @@ Write to the constraint, not around it. If the headline must be 30 characters, w
159
189
 
160
190
  | Base Gate ID | Default Tier | Override Tier | Reason |
161
191
  |-------------|-------------|---------------|--------|
162
- | GATE-05 (Funnel Integrity) | Tier 2 | Tier 1 | Paid traffic with broken funnels wastes ad spend directly -- every click costs money, so the funnel must be verified before launch |
163
- | GATE-06 (UTM Hygiene) | Tier 2 | Tier 1 | Paid channels require precise attribution to justify spend and optimize campaigns. Missing or incorrect UTMs make ROAS unmeasurable. |
192
+ | GATE-05 (Funnel Integrity) | Tier 2 | Tier 1 | Every paid click costs money. A broken funnel at $1/day is annoying; a broken funnel at $300/day is a fire. The funnel must be verified before launch. |
193
+ | GATE-06 (UTM Hygiene) | Tier 2 | Tier 1 | Dollar-a-Day requires per-ad-set ROAS attribution to identify winners. Missing or duplicate UTMs make the scale ladder unmeasurable -- you can't promote a winner you can't see. |
164
194
 
165
195
  ---
166
196
 
167
197
  ## Format Rules
168
198
 
169
- ### Google Search Ads
199
+ ### Meta / Facebook (Boosted Post Format)
170
200
 
171
201
  ```
172
- Headline 1: {30 characters max -- primary keyword + value prop}
173
- Headline 2: {30 characters max -- differentiator or benefit}
174
- Headline 3: {30 characters max -- CTA or brand}
175
- Description 1: {90 characters max -- expand on the promise, include keyword}
176
- Description 2: {90 characters max -- social proof, urgency, or secondary benefit}
177
- Display URL path: {15 chars}/{15 chars}
202
+ Post type: Boosted existing organic post (post ID required in brief)
203
+ Primary text: {original organic post copy -- DO NOT REWRITE for ad voice}
204
+ Hook in first 125 chars (above "See more" fold)
205
+ Media: Original post's image/video -- do not swap for stock
206
+ CTA button: Optional. Default "Learn More" or "Sign Up"; omit on awareness ads
207
+ Budget: $1/day in test phase
208
+ Audience: 1M-10M people
209
+ Placement: Auto (let the platform decide)
178
210
  ```
179
211
 
180
- ### Meta / Facebook Ads
212
+ ### LinkedIn (Sponsored Founder Post)
181
213
 
182
214
  ```
183
- Primary text: {125 characters visible above fold -- hook + value prop}
184
- Extended text: {up to 500 chars total, but only 125 visible before "See more"}
185
- Headline: {40 characters max}
186
- Description: {30 characters max -- appears below headline}
187
- CTA button: {Select from platform options: Learn More, Sign Up, Shop Now, etc.}
188
- Image: 1200x628px (1.91:1 ratio), max 20% text overlay
189
- Video: 1:1 or 4:5 for feed, 9:16 for Stories/Reels, 15-60 seconds
215
+ Post type: Boost existing organic post from founder's personal profile or company page
216
+ Intro text: {original post copy -- 150 chars above fold}
217
+ Headline: ≤70 chars
218
+ Media: Native LinkedIn document, carousel, or video from the original post
219
+ CTA button: Optional; omit on awareness ads
220
+ Budget: $5-$10/day in test phase (LinkedIn platform minimum)
221
+ Audience: 50K-2M (LinkedIn's pool is smaller than Meta's)
190
222
  ```
191
223
 
192
- ### LinkedIn Ads
224
+ ### Google Search Ads (Intent-Tested, Not Creative-Tested)
193
225
 
194
226
  ```
195
- Single Image:
196
- Intro text: {150 characters visible above fold, up to 600 total}
197
- Headline: {70 characters max}
198
- Image: 1200x627px (1.91:1 ratio)
199
- CTA button: {Platform options: Learn More, Sign Up, Download, etc.}
200
-
201
- Carousel:
202
- Cards: 2-10 cards
203
- Card headline: {45 characters max}
204
- Card image: 1080x1080px (1:1 ratio)
227
+ Ad group structure: 1 ad group per intent cluster (e.g., "comparison queries", "high-intent buyer queries", "problem-aware queries")
228
+ Headlines: 3-15 variations per ad (30 chars each), let RSA test combinations
229
+ Descriptions: 2-4 variations (90 chars each)
230
+ Budget: $1/day per ad group in test phase
231
+ Bidding: Manual CPC for test, switch to Target CPA only after $1/day phase identifies winners
232
+ Negative keywords: Required before launch -- exclude branded competitors, irrelevant intent terms
205
233
  ```
206
234
 
207
- ### Display Ad Sizes
208
-
209
- | Size | Use Case | Text Guidelines |
210
- |------|----------|-----------------|
211
- | 300x250 | Medium rectangle -- sidebars and in-content | Max 2 lines of headline text, 1 line CTA |
212
- | 728x90 | Leaderboard -- page headers | Single headline + CTA, horizontal layout |
213
- | 160x600 | Wide skyscraper -- sidebars | Stacked layout, headline on top, CTA at bottom |
214
- | 320x50 | Mobile banner | Ultra-short: 5-7 word headline + CTA |
215
- | 300x600 | Half page -- high impact | More room for messaging, image-heavy |
216
-
217
- ### Video Ad Specs
235
+ ### Creative Constraint (All Platforms)
218
236
 
219
- | Format | Duration | Platform | Notes |
220
- |--------|----------|----------|-------|
221
- | Bumper | 6 seconds | YouTube, Meta | Single message, no CTA click-through |
222
- | Short | 15 seconds | All platforms | Hook in first 2 seconds, CTA at end |
223
- | Standard | 30 seconds | YouTube, Meta, LinkedIn | Full structure: hook, value, CTA |
224
- | Long-form | 60+ seconds | YouTube (skippable) | Hook in first 5 seconds before skip option |
237
+ | Constraint | Rule |
238
+ |------------|------|
239
+ | Mobile-first | All creative reviewed on a phone screen first. Desktop preview is secondary. |
240
+ | Hook length | ≤125 characters above the fold on Meta; ≤150 on LinkedIn; in Headline 1 on Google. |
241
+ | Text overlay (Meta) | ≤20% of image area (legacy rule, still affects reach). |
242
+ | Vertical video | 9:16 for all video placements in 2026 -- Reels, Shorts, Stories, TikTok. |
225
243
 
226
244
  ---
227
245
 
228
246
  ## Examples
229
247
 
230
- ### Good: Strong Message Match Pair
248
+ ### Good: Dollar-a-Day Campaign Brief (Meta, B2B SaaS)
231
249
 
232
250
  ```
233
- Google Search Ad:
234
- Headline 1: "50% Off First 3 Months" (25 chars)
235
- Headline 2: "Marketing OS for Startups" (27 chars)
236
- Headline 3: "Start Free Trial Today" (23 chars)
237
- Description 1: "Ship marketing campaigns with built-in quality gates. No more guessing." (73 chars)
238
- Description 2: "Trusted by 500+ startups. Cancel anytime. No credit card required." (68 chars)
239
-
240
- Landing Page H1: "Get 50% Off Your First 3 Months"
241
- Landing Page CTA: "Start Free Trial"
242
- Above fold: Pricing table showing the 50% discount, feature highlights, "No credit card required"
251
+ Campaign: takeToMarket launch -- 3x3 test
252
+ Phase: Test ($1/day per ad, 7 days)
253
+ Total daily spend: $9/day (9 ad sets × $1)
254
+
255
+ 3x3 Grid:
256
+ Cold-Awareness: Boost founder's "what I built in 4 weekends" post (organic CTR: 4.2%)
257
+ Cold-Engagement: Boost demo video that hit 12K organic views
258
+ Cold-Conversion: Boost "ship in 9 phases" carousel (organic comments: 47)
259
+ Warm-Awareness: Same posts, retargeted to past site visitors
260
+ Warm-Engagement: Same posts, retargeted to past site visitors
261
+ Warm-Conversion: Same posts, retargeted to past site visitors
262
+ Hot-Awareness: Light-touch update post, retargeted to email subscribers
263
+ Hot-Engagement: "What's new" thread, retargeted to email subscribers
264
+ Hot-Conversion: "Get 50% off" offer post, retargeted to email subscribers
265
+
266
+ Scale ladder:
267
+ $1/day → $30/day if (CTR ≥ 1.5% AND CPL ≤ $40) after 7 days
268
+ $30/day → $100/day if metrics hold for 14 days
269
+ $100/day → $300/day if metrics hold for 30 days
270
+
271
+ Kill criteria:
272
+ Any ad with CTR < 0.5% after 7 days at $1/day → kill, do not scale.
273
+ Any ad with no conversion at $30/day after 14 days → kill.
274
+
275
+ Audience sizing:
276
+ Cold: 4.2M people (developer-adjacent interests)
277
+ Warm: 38K site visitors over 90 days
278
+ Hot: 1,200 email subscribers
243
279
  ```
244
280
 
245
- Why it works: Ad headline promise ("50% Off First 3 Months") matches LP H1 exactly. CTA matches. Offer terms are consistent. No surprises after the click.
281
+ Why it works: 9 ad sets across the full 3×3 grid. Every ad is a boosted organic post with cited engagement. Budget starts at $9/day total. Scale ladder is numerical. Kill criteria are explicit. Audiences are sized.
246
282
 
247
- ### Bad: Broken Message Match
283
+ ### Bad: The Agency $10K-Day Cold Campaign
248
284
 
249
285
  ```
250
- Meta Ad:
251
- Primary text: "The #1 marketing tool for growing teams"
252
- Headline: "Try It Free"
253
- CTA: Sign Up
254
-
255
- Landing Page H1: "Enterprise Marketing Platform"
256
- Landing Page CTA: "Request a Demo"
257
- Above fold: Enterprise features, case studies from Fortune 500 companies
286
+ Campaign: Big Launch Week
287
+ Total daily spend: $10,000/day
288
+ Creative: One agency-produced 30-second hero video, never posted organically.
289
+ Audience: 50M people, "all marketers"
290
+ Bidding: Conversion-optimized, target CPA $50
291
+ Phase: Skipping test, going straight to scale.
292
+ Kill criteria: None stated.
258
293
  ```
259
294
 
260
- Why it fails: Ad targets "growing teams" but LP targets "enterprise." Ad says "Try It Free" but LP says "Request a Demo." The user who clicked expecting a free trial for a small team lands on an enterprise sales page. Conversion rate: near zero.
295
+ Why it fails: Single new creative with no organic validation -- $10K to learn what $1/day would have learned. Audience is 50M (off the Goldilocks chart -- signal will spread to noise). No 3×3 grid -- one ad, one cell. No scale ladder (already at the top). No kill criteria. By Friday, the campaign has spent $50K and produced a "we need more time" Slack message.
261
296
 
262
- ### Good: Creative Variety Set
297
+ ### Good: The Boosted Founder Tweet
263
298
 
264
299
  ```
265
- Variation A - Pain Point Hook:
266
- "Tired of marketing campaigns that ship without quality checks?"
267
-
268
- Variation B - Social Proof Hook:
269
- "500+ startups use this to ship marketing 3x faster"
270
-
271
- Variation C - Benefit-First Hook:
272
- "Ship campaigns with built-in quality gates -- no more guessing"
300
+ Original post: Founder's LinkedIn post -- "I shipped 9 paid-ads frameworks this month, here's what stuck."
301
+ Organic stats: 23K impressions, 4.8% CTR, 312 comments over 5 days.
302
+ Boost: $1/day for 7 days to a 2M-person developer-tooling audience.
303
+ Hook (first 125 chars): "I shipped 9 paid-ads frameworks this month, here's what stuck. (3 worked, 6 didn't. Here's the rule that separated them.)"
304
+ Media: Original carousel from the post.
305
+ CTA: None -- awareness stage, no hard CTA needed.
273
306
  ```
274
307
 
275
- Why it works: Each tests a fundamentally different angle (pain, proof, benefit). Clear labels. Measurable differences in CTR will reveal which angle resonates.
308
+ Why it works: Organic provenance documented. Hook in first 125 chars. Voice = founder's actual voice. $1/day budget. Goose-and-Gander principle honored.
276
309
 
277
- ### Bad: Monotone Creative Set
310
+ ### Bad: The "Ad-Voice" Rewrite of an Organic Winner
278
311
 
279
312
  ```
280
- Variation A: "Great marketing tool for your team"
281
- Variation B: "Amazing marketing tool for your team"
282
- Variation C: "Excellent marketing tool for your team"
313
+ Original post: Founder tweet -- "Stop guessing at marketing. Use a quality gate."
314
+ Organic stats: 18K impressions, 5.1% CTR.
315
+ Boost version (rewritten by agency):
316
+ "Introducing takeToMarket -- the revolutionary AI-powered marketing platform
317
+ that empowers go-to-market teams to ship campaigns with confidence.
318
+ Schedule your demo today!"
319
+ Media: Stock photo of a team high-fiving.
283
320
  ```
284
321
 
285
- Why it fails: Only the adjective changes. No meaningful test. CTR differences will be noise, not signal.
322
+ Why it fails: Original was a 9-word punchy line in the founder's voice. Rewrite is corporate filler with no hook. Stock imagery replaces what the organic audience already responded to. The boost spends money to make the post *less* effective than it was for free.
286
323
 
287
324
  ---
288
325
 
289
326
  ## Anti-Patterns
290
327
 
291
- 1. **Sending all ad traffic to the homepage** -- Homepage is not a landing page. It serves multiple audiences and purposes. Paid traffic needs a dedicated landing page with a single message and CTA that matches the ad.
328
+ 1. **Skipping the $1/day test, launching at $100+/day per ad** -- The most expensive shortcut in paid advertising. If the creative doesn't work, you lose 100× more. If it does work, you would have found out at $1/day anyway. Test cheap is non-negotiable.
329
+
330
+ 2. **All conversion ads, no awareness layer** -- The funnel runs dry. Conversion ads only convert people who already know you. Without an awareness layer feeding the pipeline, you exhaust your warm audience in weeks and CPL skyrockets.
292
331
 
293
- 2. **Single creative with no A/B variants** -- Running one ad creative means you cannot optimize. You are paying for traffic with no ability to learn what works. Always launch with 3+ variations.
332
+ 3. **Net-new ad creative that has not been posted organically** -- You are spending money to test what you could have tested for free. Post it organically first. If it bombs organically with zero spend, paid spend will not save it.
294
333
 
295
- 3. **Awareness creative with conversion bid strategy** -- Running brand awareness copy ("Introducing our new platform") with a CPA bid tells the algorithm to optimize for conversions, but the creative is not designed to convert. Match creative intent to bid strategy.
334
+ 4. **Agency-produced ad voice on a founder account** -- The audience can tell. Corporate-polished creative on a personal-brand account triggers a "this isn't really her" reflex and CTR collapses. Goose-and-Gander: if the founder wouldn't post it organically, don't pay to amplify it.
296
335
 
297
- 4. **Ignoring platform character limits** -- Writing 50-character headlines for Google Ads (30-char limit) means the platform truncates your message. Write to the constraint from the start.
336
+ 5. **Audience too broad ("all marketers", "small businesses")** -- 50M-person audiences spread $1/day across noise. The platform can't optimize. Target tightly: 1M-10M for Meta, 50K-2M for LinkedIn.
298
337
 
299
- 5. **Same copy across all platforms** -- LinkedIn professional audience, Instagram visual-first audience, and Google search-intent audience require different creative approaches. Cross-posting identical copy shows audience blindness.
338
+ 6. **"Give it time" on a losing ad** -- 7 days at $1/day is enough signal. Two weeks is excessive. If CTR is below 0.5% at $1/day, it will be below 0.5% at $100/day -- you'll just lose 100× faster. Kill losers on schedule.
300
339
 
301
- 6. **Missing landing page URL in brief** -- An ad brief without a specified landing page cannot be verified for message match. The landing page is half the ad -- always include it.
340
+ 7. **No 3×3 grid -- ad sets pointing at the same cell** -- Running three "cold-conversion" ads with no awareness or engagement layer is not a campaign, it's a scattergun. Place every ad on the grid before launch.
302
341
 
303
- 7. **No bid strategy declaration** -- If the brief does not state whether this is an awareness, consideration, or conversion campaign, the creative cannot be evaluated for strategy alignment. Always declare the objective.
342
+ 8. **Scaling a winner straight from $1 → $300/day** -- The ladder exists because each step is its own test. Performance at $1/day does not guarantee performance at $300/day. Step through $30, $100, then $300, validating at each rung.
343
+
344
+ 9. **No UTM hygiene per ad set** -- You cannot identify which ad won if every ad shares the same UTM. ROAS attribution per (audience, stage) cell is the whole point of the 3×3 grid.
304
345
 
305
346
  ---
306
347
 
307
348
  ## Metrics
308
349
 
309
- Track these indicators for paid ad campaigns after launch:
350
+ Track these indicators for paid ad campaigns after launch. The Dollar-a-Day framework measures by 3×3 cell, not by overall campaign aggregate -- aggregates hide which cells are winning and which are losers being subsidized.
351
+
352
+ - **CPM by 3×3 cell** -- Cost per thousand impressions per (audience, stage) cell. Cold-awareness CPM should be lowest; hot-conversion CPM is allowed to be highest. Diverging from this hierarchy indicates targeting or creative mismatch.
353
+ - **CTR by 3×3 cell** -- Click-through rate per cell. PASS threshold per cell varies: cold-awareness >1.5%, warm-engagement >2.5%, hot-conversion >4%. Lower-than-expected CTR at a cell signals a creative-audience mismatch for that cell specifically.
354
+ - **Cost per lead (CPL) by 3×3 cell** -- Per-cell lead acquisition cost. The conversion-stage cells should produce the lowest CPL; awareness cells produce few or no leads (that's expected -- their job is feeding the funnel).
355
+ - **ROAS by 3×3 cell** -- Revenue per ad dollar, per cell. Only conversion-stage cells will have meaningful ROAS. Aggregate-only ROAS lies because the awareness cells (with $0 revenue) drag the number down even when they're doing their job.
356
+ - **Scale-ladder progression rate** -- What % of $1/day ads earn promotion to $30/day? What % survive to $100/day? Healthy campaigns promote ~10-30% of $1/day ads; >50% means thresholds are too loose, <5% means thresholds are too tight (or creative inventory is weak).
357
+ - **Frequency** -- Average impressions per user per ad set. Above 3-5/week per cold audience = creative fatigue is incoming, refresh from the organic inventory.
358
+ - **Quality score (Google) / Relevance ranking (Meta)** -- Platform-assigned creative-audience-fit scores. Low scores at a cell mean the boosted post does not match the audience -- usually a Goose-and-Gander violation.
359
+ - **Organic-to-paid lift ratio** -- For each boosted post, paid CTR / organic CTR. Healthy boosts should be within ±30% of organic CTR. A boost performing far below organic is a signal the audience is wrong; far above suggests the organic post was under-distributed and the paid layer is just unlocking reach.
360
+
361
+ ---
362
+
363
+ ## Sources
310
364
 
311
- - **Cost per click (CPC)** -- Average cost per click. Compare against industry benchmarks and historical campaign data.
312
- - **Click-through rate (CTR)** -- Impressions to clicks. Measures ad creative effectiveness. Google Search benchmark: 3-5%. Display benchmark: 0.5-1%.
313
- - **Conversion rate** -- Clicks to desired action (signup, purchase, download). Measures landing page effectiveness post-click.
314
- - **Return on ad spend (ROAS)** -- Revenue generated per dollar spent. Primary efficiency metric for conversion campaigns.
315
- - **Cost per acquisition (CPA)** -- Total spend divided by conversions. Measures efficiency of the full funnel.
316
- - **Quality Score (Google)** -- 1-10 rating based on expected CTR, ad relevance, and landing page experience. Higher scores reduce CPC.
317
- - **Relevance Score (Meta)** -- Ad relevance diagnostics: quality ranking, engagement rate ranking, conversion rate ranking. Low scores indicate audience-creative mismatch.
318
- - **Impression share** -- Percentage of eligible impressions captured. Low impression share may indicate budget or bid constraints.
365
+ - [Dennis Yu -- Dollar-a-Day category archive](https://dennis-yu.com/category/dollar-a-day/) -- The canonical home of the Dollar-a-Day strategy, with case studies and current updates from Dennis Yu directly.
366
+ - [Flowster -- Dennis Yu's $1/Day Strategy](https://flowster.app/dollar-a-day/) -- Step-by-step operationalization of the Dollar-a-Day framework with the scale ladder and 3×3 grid mechanics.
367
+ - [Bolder Future -- 30 Days with Dennis Yu's Dollar-a-Day](https://www.bolderfuture.com/blog/case-study-30-days-with-dennis-yus-dollar-a-day-ad-strategy) -- Practitioner case study running the strategy for 30 days, with metrics by cell.
368
+ - [Fitness Business Podcast -- Dollar-a-Day with Dennis Yu](https://fitnessbusinesspodcast.com/280-the-dollar-a-day-facebook-ad-strategy-with-dennis-yu/) -- Dennis explaining the strategy and the BDLS flywheel in his own words.
369
+ - [Hustle and Flowchart -- Dennis Yu on $1 ads](https://hustleandflowchart.com/how-to-build-a-recognizable-brand-using-1-ads-dennis-yu/) -- Goldilocks audience sizing and Goose-and-Gander principles, plus the scale-ladder discipline.