start-vibing-stacks 2.29.0 → 2.30.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 (63) hide show
  1. package/dist/setup.js +15 -1
  2. package/package.json +1 -1
  3. package/stacks/_shared/ads-agents/README.md +452 -0
  4. package/stacks/_shared/ads-agents/RESEARCH-REPORT.md +157 -0
  5. package/stacks/_shared/ads-agents/SKILL.md +210 -0
  6. package/stacks/_shared/ads-agents/SKILLS-UPDATE-REPORT.md +255 -0
  7. package/stacks/_shared/ads-agents/agents/audit-budget.md +116 -0
  8. package/stacks/_shared/ads-agents/agents/audit-compliance.md +131 -0
  9. package/stacks/_shared/ads-agents/agents/audit-creative.md +127 -0
  10. package/stacks/_shared/ads-agents/agents/audit-google.md +113 -0
  11. package/stacks/_shared/ads-agents/agents/audit-meta.md +112 -0
  12. package/stacks/_shared/ads-agents/agents/audit-tracking.md +134 -0
  13. package/stacks/_shared/ads-agents/agents/copy-writer.md +188 -0
  14. package/stacks/_shared/ads-agents/agents/creative-strategist.md +199 -0
  15. package/stacks/_shared/ads-agents/agents/format-adapter.md +175 -0
  16. package/stacks/_shared/ads-agents/agents/visual-designer.md +245 -0
  17. package/stacks/_shared/ads-agents/references/additional-platforms.md +106 -0
  18. package/stacks/_shared/ads-agents/references/benchmarks.md +257 -0
  19. package/stacks/_shared/ads-agents/references/bidding-strategies.md +333 -0
  20. package/stacks/_shared/ads-agents/references/brand-dna-template.md +190 -0
  21. package/stacks/_shared/ads-agents/references/budget-allocation.md +150 -0
  22. package/stacks/_shared/ads-agents/references/compliance.md +280 -0
  23. package/stacks/_shared/ads-agents/references/conversion-tracking.md +246 -0
  24. package/stacks/_shared/ads-agents/references/copy-frameworks.md +187 -0
  25. package/stacks/_shared/ads-agents/references/funnel-content-copy-rules.md +44 -0
  26. package/stacks/_shared/ads-agents/references/gaql-notes.md +49 -0
  27. package/stacks/_shared/ads-agents/references/google-audit.md +217 -0
  28. package/stacks/_shared/ads-agents/references/google-creative-specs.md +119 -0
  29. package/stacks/_shared/ads-agents/references/image-providers.md +133 -0
  30. package/stacks/_shared/ads-agents/references/linkedin-audit.md +141 -0
  31. package/stacks/_shared/ads-agents/references/linkedin-creative-specs.md +129 -0
  32. package/stacks/_shared/ads-agents/references/mcp-integration.md +125 -0
  33. package/stacks/_shared/ads-agents/references/meta-audit.md +141 -0
  34. package/stacks/_shared/ads-agents/references/meta-creative-specs.md +134 -0
  35. package/stacks/_shared/ads-agents/references/microsoft-audit.md +158 -0
  36. package/stacks/_shared/ads-agents/references/microsoft-creative-specs.md +123 -0
  37. package/stacks/_shared/ads-agents/references/platform-specs.md +276 -0
  38. package/stacks/_shared/ads-agents/references/scoring-system.md +169 -0
  39. package/stacks/_shared/ads-agents/references/tiktok-audit.md +165 -0
  40. package/stacks/_shared/ads-agents/references/tiktok-creative-specs.md +139 -0
  41. package/stacks/_shared/ads-agents/references/voice-to-style.md +87 -0
  42. package/stacks/_shared/ads-agents/references/youtube-creative-specs.md +134 -0
  43. package/stacks/_shared/ads-agents/skills/ads-apple/SKILL.md +225 -0
  44. package/stacks/_shared/ads-agents/skills/ads-audit/SKILL.md +108 -0
  45. package/stacks/_shared/ads-agents/skills/ads-budget/SKILL.md +198 -0
  46. package/stacks/_shared/ads-agents/skills/ads-competitor/SKILL.md +198 -0
  47. package/stacks/_shared/ads-agents/skills/ads-create/SKILL.md +198 -0
  48. package/stacks/_shared/ads-agents/skills/ads-creative/SKILL.md +208 -0
  49. package/stacks/_shared/ads-agents/skills/ads-dna/SKILL.md +245 -0
  50. package/stacks/_shared/ads-agents/skills/ads-generate/SKILL.md +173 -0
  51. package/stacks/_shared/ads-agents/skills/ads-google/SKILL.md +192 -0
  52. package/stacks/_shared/ads-agents/skills/ads-landing/SKILL.md +186 -0
  53. package/stacks/_shared/ads-agents/skills/ads-linkedin/SKILL.md +200 -0
  54. package/stacks/_shared/ads-agents/skills/ads-math/SKILL.md +216 -0
  55. package/stacks/_shared/ads-agents/skills/ads-meta/SKILL.md +167 -0
  56. package/stacks/_shared/ads-agents/skills/ads-microsoft/SKILL.md +163 -0
  57. package/stacks/_shared/ads-agents/skills/ads-photoshoot/SKILL.md +220 -0
  58. package/stacks/_shared/ads-agents/skills/ads-plan/SKILL.md +176 -0
  59. package/stacks/_shared/ads-agents/skills/ads-test/SKILL.md +199 -0
  60. package/stacks/_shared/ads-agents/skills/ads-tiktok/SKILL.md +190 -0
  61. package/stacks/_shared/ads-agents/skills/ads-youtube/SKILL.md +199 -0
  62. package/stacks/_shared/memories/funnel-content-copy.md +81 -0
  63. package/templates/CLAUDE-python.md +6 -0
@@ -0,0 +1,245 @@
1
+ ---
2
+ name: ads-dna
3
+ version: 1.5.0
4
+ description: "Brand DNA extractor for paid advertising. Scans a website URL to extract visual identity, tone of voice, color palette, typography, and imagery style. Outputs brand-profile.json to the current directory. Run before /ads create or /ads generate for brand-consistent creative. Triggers on: brand DNA, brand profile, extract brand, brand identity, brand colors, what is the brand voice, analyze brand, brand style guide."
5
+ user-invokable: false
6
+ ---
7
+
8
+ # Ads DNA: Brand DNA Extractor
9
+
10
+ Extracts brand identity from a website and saves it as `brand-profile.json`
11
+ for use by `/ads create`, `/ads generate`, and `/ads photoshoot`.
12
+
13
+ ## Quick Reference
14
+
15
+ | Command | What it does |
16
+ |---------|-------------|
17
+ | `/ads dna <url>` | Full brand extraction → `brand-profile.json` |
18
+ | `/ads dna https://acme.com --quick` | Fast extraction (homepage only) |
19
+
20
+ ## Process
21
+
22
+ ### Step 1: Collect URL
23
+
24
+ If the user hasn't provided a URL, ask:
25
+ > "What website URL should I analyze for brand DNA? (e.g. https://yoursite.com)"
26
+
27
+ ### Step 2: Fetch Pages
28
+
29
+ Use the **WebFetch tool** to retrieve each page. For each URL, use this fetch prompt:
30
+ > "Return all visible text content, the full contents of any `<style>` blocks, inline
31
+ > `style=` attributes, `<meta>` tags, Google Fonts `@import` URLs, and any `og:image`
32
+ > values found on this page."
33
+
34
+ Fetch in this order:
35
+ 1. **Homepage** (`<url>`)
36
+ 2. **About page**: try `<url>/about`, then `<url>/about-us`, then `<url>/our-story`
37
+ 3. **Product/Services page**: try `<url>/product`, then `<url>/products`, then `<url>/services`
38
+
39
+ **If `--quick` flag was provided**: fetch the homepage only; skip steps 2 and 3.
40
+
41
+ If a secondary page returns a 404 or redirect error, continue with fewer pages and note:
42
+ "Secondary pages unavailable; extraction based on homepage only. Confidence may be lower."
43
+
44
+ ### Step 2b: Capture Brand Screenshots
45
+
46
+ After fetching pages, capture 3 screenshots for comprehensive brand anchoring.
47
+ These serve as visual style references during `/ads generate`; the same approach
48
+ Pomelli uses to anchor ad images to the actual brand aesthetic.
49
+
50
+ Capture the following:
51
+
52
+ 1. **Homepage hero section** (above the fold):
53
+ ```bash
54
+ python ads-agents/scripts/capture_screenshot.py [url]
55
+ ```
56
+ Saves: `./brand-screenshots/{domain}_homepage.png`
57
+
58
+ 2. **Product or services page**:
59
+ ```bash
60
+ python ads-agents/scripts/capture_screenshot.py [url]/products
61
+ ```
62
+ Saves: `./brand-screenshots/{domain}_product.png`
63
+
64
+ 3. **About page** (brand personality):
65
+ ```bash
66
+ python ads-agents/scripts/capture_screenshot.py [url]/about
67
+ ```
68
+ Saves: `./brand-screenshots/{domain}_about.png`
69
+
70
+ If a page is not found or returns an error, skip it gracefully and continue
71
+ with the remaining pages.
72
+
73
+ **If `--quick` flag was provided**: skip screenshot capture entirely.
74
+
75
+ **If capture fails** (Playwright not installed, network error, JS-heavy SPA that times out):
76
+ - Log: `"Screenshot capture skipped; run: python3 -m playwright install chromium"`
77
+ - Continue without screenshots
78
+ - Do NOT set the `screenshots` field in brand-profile.json
79
+
80
+ ### Step 3: Extract Brand Elements
81
+
82
+ From the fetched HTML, extract:
83
+
84
+ **Colors:**
85
+ - `og:image` meta tag → analyze dominant colors (note 2-3 prominent hex values)
86
+ - CSS `background-color` on `body`, `header`, `.hero`, `.btn-primary`
87
+ - CSS `color` on `h1`, `h2`, `.btn`
88
+ - CSS `border-color` or `background` on `.cta`, `.button`
89
+ - Identify: primary (most prominent brand color), secondary (supporting colors), background, text
90
+
91
+ **Typography:**
92
+ - `@import url(https://fonts.googleapis.com/...)` → extract font names from URL path
93
+ - CSS `font-family` on `h1`, `h2`, `body`, `.headline`
94
+ - If Google Fonts URL contains `family=Inter:wght@...`, heading_font = "Inter"
95
+
96
+ **Voice:**
97
+ Analyze hero headline, subheadline, About page intro, and CTA button text.
98
+ Score each axis 1-10 using these heuristics:
99
+
100
+ | Signal | Score direction |
101
+ |--------|----------------|
102
+ | Uses "you/your" frequently | formal_casual → casual (+2) |
103
+ | Uses technical jargon | expert_accessible → expert (-2) |
104
+ | Short punchy sentences (≤8 words) | bold_subtle → bold (+2) |
105
+ | Data/stats in hero | rational_emotional → rational (-2) |
106
+ | "Transform", "revolutionize", "disrupt" | traditional_innovative → innovative (+2) |
107
+ | Customer testimonials lead | rational_emotional → emotional (+2) |
108
+ | Industry awards, "trusted by X" | traditional_innovative → traditional (-1) |
109
+
110
+ ### Confidence Scoring
111
+ Each voice axis gets a confidence rating based on signal count:
112
+ - **High** (3+ signals): strong evidence for axis position
113
+ - **Medium** (2 signals): moderate evidence, may need validation
114
+ - **Low** (1 signal): weak evidence, treat as estimate
115
+
116
+ Also extract structured data when available: schema.org markup, Open Graph tags (og:title, og:description, og:image), Twitter Card metadata.
117
+
118
+ **Imagery style** (from og:image and any visible hero image descriptions):
119
+ - Photography vs. illustration vs. flat design
120
+ - Subject matter (people, product, abstract, data)
121
+ - Composition style (clean/minimal vs. busy/editorial)
122
+
123
+ **Forbidden elements** (infer from brand positioning):
124
+ - Enterprise/B2B brands → add "cheesy stock photos", "consumer lifestyle imagery"
125
+ - Healthcare → add "unqualified medical claims", "before/after imagery"
126
+ - Finance → add "get rich quick imagery", "unrealistic wealth displays"
127
+ - Consumer brands → usually no forbidden elements
128
+
129
+ ### Step 4: Build brand-profile.json
130
+
131
+ Read `ads-agents/references/brand-dna-template.md` for the exact schema.
132
+
133
+ Construct the JSON object following the schema precisely. Use `null` for any
134
+ field that cannot be confidently extracted; do not guess.
135
+
136
+ Example of a low-confidence field:
137
+ ```json
138
+ "typography": {
139
+ "heading_font": null,
140
+ "body_font": "system-ui",
141
+ "pairing_descriptor": "system default (Google Fonts not detected)"
142
+ }
143
+ ```
144
+
145
+ ### Step 5: Write brand-profile.json
146
+
147
+ Write the JSON to `./brand-profile.json` in the current working directory
148
+ (where the user is running Claude Code).
149
+
150
+ If screenshots were captured successfully in Step 2b, include a `screenshots` field:
151
+ ```json
152
+ "screenshots": {
153
+ "homepage": "./brand-screenshots/{domain}_homepage.png",
154
+ "product": "./brand-screenshots/{domain}_product.png",
155
+ "about": "./brand-screenshots/{domain}_about.png"
156
+ }
157
+ ```
158
+ Include only the screenshots that were successfully captured. If a page was not
159
+ found or errored, omit that key. Omit the `screenshots` field entirely if Step 2b
160
+ was skipped or all captures failed.
161
+
162
+ ### Step 6: Confirm and Summarize
163
+
164
+ Show the user:
165
+ ```
166
+ ✓ brand-profile.json saved to ./brand-profile.json
167
+
168
+ Brand DNA Summary:
169
+ Brand: [brand_name]
170
+ Voice: [descriptor 1], [descriptor 2], [descriptor 3]
171
+ Primary Color: [hex]
172
+ Typography: [heading_font] / [body_font]
173
+ Target: [age_range] [profession]
174
+ Screenshots: [N captured (homepage, product, about) in ./brand-screenshots/] OR [skipped]
175
+
176
+ Run `/ads create` to generate campaign concepts from this profile.
177
+ ```
178
+
179
+ ## Visual Designer Integration
180
+
181
+ The visual-designer agent uses the most relevant screenshot per concept as a style
182
+ reference when generating images via banana. For example, a product-focused concept
183
+ references the product page screenshot, while a brand awareness concept references
184
+ the homepage or about page screenshot.
185
+
186
+ ## Limitations
187
+
188
+ - **Sparse content**: Sites with <200 words of body text produce lower-confidence profiles.
189
+ Note: "Low confidence extraction; limited content available for analysis."
190
+ - **Dynamic sites**: JavaScript-rendered content may not be captured. Playwright is not
191
+ used by default. If the site appears to be SPA/React with no static HTML, note this.
192
+ - **Multi-brand enterprises**: This tool creates one profile per URL. Run separately
193
+ for each brand/product line.
194
+ - **Dark mode sites**: If body background is #333 or darker, swap background/text values.
195
+ - **CSS-in-JS**: Modern React sites may not have extractable CSS. Use og:image colors as fallback.
196
+
197
+ ## brand-profile.json Schema
198
+
199
+ ```json
200
+ {
201
+ "schema_version": "1.0",
202
+ "brand_name": "string",
203
+ "website_url": "string",
204
+ "extracted_at": "ISO-8601",
205
+ "voice": {
206
+ "formal_casual": 1-10,
207
+ "rational_emotional": 1-10,
208
+ "playful_serious": 1-10,
209
+ "bold_subtle": 1-10,
210
+ "traditional_innovative": 1-10,
211
+ "expert_accessible": 1-10,
212
+ "descriptors": ["adjective1", "adjective2", "adjective3"]
213
+ },
214
+ "colors": {
215
+ "primary": "#hexcode or null",
216
+ "secondary": ["#hex1", "#hex2"],
217
+ "forbidden": ["#hex or color name"],
218
+ "background": "#hexcode",
219
+ "text": "#hexcode"
220
+ },
221
+ "typography": {
222
+ "heading_font": "Font Name or null",
223
+ "body_font": "Font Name or system-ui",
224
+ "pairing_descriptor": "brief description"
225
+ },
226
+ "imagery": {
227
+ "style": "professional photography | illustration | flat design | mixed",
228
+ "subjects": ["subject1", "subject2"],
229
+ "composition": "brief description",
230
+ "forbidden": ["element1", "element2"]
231
+ },
232
+ "aesthetic": {
233
+ "mood_keywords": ["keyword1", "keyword2", "keyword3"],
234
+ "texture": "minimal | textured | mixed",
235
+ "negative_space": "generous | moderate | dense"
236
+ },
237
+ "brand_values": ["value1", "value2", "value3"],
238
+ "target_audience": {
239
+ "age_range": "e.g. 25-45",
240
+ "profession": "brief description",
241
+ "pain_points": ["pain1", "pain2"],
242
+ "aspirations": ["aspiration1", "aspiration2"]
243
+ }
244
+ }
245
+ ```
@@ -0,0 +1,173 @@
1
+ ---
2
+ name: ads-generate
3
+ version: 1.5.0
4
+ description: "AI image generation for paid ad creatives. Reads campaign-brief.md and brand-profile.json to produce platform-sized ad images using banana-claude. Requires banana-claude (v1.4.1+) with nanobanana-mcp configured. Triggers on: generate ads, create images, make ad creatives, generate visuals, create ad images, generate campaign images, make the images, generate from brief."
5
+ user-invokable: false
6
+ ---
7
+
8
+ # Ads Generate: AI Ad Image Generator
9
+
10
+ Generates platform-sized ad creative images from your campaign brief and brand
11
+ profile. Uses banana-claude as the image generation provider.
12
+
13
+ ## Quick Reference
14
+
15
+ | Command | What it does |
16
+ |---------|-------------|
17
+ | `/ads generate` | Generate all images from campaign-brief.md |
18
+ | `/ads generate --platform meta` | Generate Meta assets only |
19
+ | `/ads generate --prompt "text" --ratio 9:16` | Standalone generation without brief |
20
+
21
+ ## Environment Setup
22
+
23
+ **Required before running:**
24
+
25
+ - Requires banana-claude (v1.4.1+) with nanobanana-mcp configured
26
+ - Run `/banana setup` to configure API key and MCP
27
+ - Fallback: if banana is not available, use `scripts/generate_image.py` (deprecated)
28
+
29
+ If banana-claude is not installed, this skill will display setup instructions
30
+ and stop. It will never fail silently.
31
+
32
+ If banana-claude is unavailable, alternatives include: OpenAI gpt-image-1 ($0.040/image), Stability SD 3.5 ($0.065), or Replicate FLUX.1 Pro ($0.055). Configure via ADS_IMAGE_PROVIDER env var.
33
+
34
+ ## Process
35
+
36
+ ### Step 1: Verify banana-claude
37
+
38
+ Verify banana-claude is installed (run `/banana setup` to check). If not installed,
39
+ display setup instructions and exit.
40
+
41
+ ### Step 2: Locate Source Files
42
+
43
+ Check for:
44
+ - `campaign-brief.md` → primary source for prompts and dimensions
45
+ - `brand-profile.json` → brand color/style injection (optional but recommended)
46
+
47
+ **If campaign-brief.md is found**: Use `## Image Generation Briefs` section as the
48
+ generation job list.
49
+
50
+ **If no campaign-brief.md**: Enter standalone mode (Step 2b).
51
+
52
+ #### Step 2b: Standalone Mode
53
+
54
+ Ask the user:
55
+ 1. Generation prompt (what should the image show?)
56
+ 2. Target platform (to set correct dimensions)
57
+ 3. Output filename (optional)
58
+
59
+ Then skip to Step 5.
60
+
61
+ ### Step 3: Read Provider Config
62
+
63
+ Load `ads-agents/references/image-providers.md` to confirm:
64
+ - Active provider pricing (show user the cost estimate)
65
+ - Rate limits for current tier
66
+ - Batch API availability
67
+
68
+ ### Step 4: Read Platform Specs
69
+
70
+ For each platform in the campaign brief, load the relevant spec reference:
71
+ - `ads-agents/references/meta-creative-specs.md`
72
+ - `ads-agents/references/google-creative-specs.md`
73
+ - `ads-agents/references/tiktok-creative-specs.md`
74
+ - `ads-agents/references/linkedin-creative-specs.md`
75
+ - `ads-agents/references/youtube-creative-specs.md`
76
+ - `ads-agents/references/microsoft-creative-specs.md`
77
+
78
+ ### Step 5: Prepare banana Configuration
79
+
80
+ Create banana brand preset from brand-profile.json if one does not already exist
81
+ at `.banana/presets/{brand-slug}.json`.
82
+
83
+ Select banana domain mode based on campaign brief content:
84
+ - **Product**: e-commerce, packshots
85
+ - **Editorial**: brand awareness, lifestyle
86
+ - **Cinema**: video thumbnails, dramatic
87
+ - **UI/Web**: app install, SaaS
88
+ - **Portrait**: testimonials, people
89
+
90
+ ### Step 6: Spawn Visual Designer Agent
91
+
92
+ Spawn the `visual-designer` agent using the Task tool with `context: fork`,
93
+ passing the selected domain mode and preset name.
94
+
95
+ The agent will:
96
+ - Parse the image generation briefs from campaign-brief.md
97
+ - Inject brand colors and mood from brand-profile.json
98
+ - Use banana-claude with the configured domain mode for each asset
99
+ - Save to `./ad-assets/[platform]/[concept]/` directory structure
100
+ - Write `generation-manifest.json`
101
+
102
+ ### Step 7: Validate with Format Adapter
103
+
104
+ After the visual-designer completes, spawn the `format-adapter` agent
105
+ with `context: fork` to validate dimensions and report missing formats.
106
+
107
+ ### Step 8: Quality Gate
108
+
109
+ Use Claude vision to assess each generated image against the brief (score 1 to 10
110
+ on brand alignment, composition, platform fit). If any image scores below 6,
111
+ regenerate once with an adjusted prompt.
112
+
113
+ Quality Gate Rubric:
114
+ - 9-10: Professional quality, brand-aligned, platform-optimized, no issues
115
+ - 7-8: Good quality, minor composition or brand alignment improvements possible
116
+ - 5-6: Acceptable but needs regeneration. Text readability issues, poor composition, or brand mismatch
117
+ - Below 5: Reject. Regenerate with adjusted prompt
118
+
119
+ ### Step 9: Aggregate Costs
120
+
121
+ Read banana cost data from `.banana/costs.json` and include total creative spend
122
+ in generation-manifest.json.
123
+
124
+ ### Step 10: Report Results
125
+
126
+ Present a summary:
127
+ ```
128
+ Generation complete:
129
+
130
+ Generated assets:
131
+ ✓ ./ad-assets/meta/concept-1/feed-1080x1350.png
132
+ ✓ ./ad-assets/tiktok/concept-1/vertical-1080x1920.png
133
+ ✗ ./ad-assets/google/concept-1/landscape-1200x628.png [error reason]
134
+
135
+ Format validation: See format-report.md
136
+
137
+ Cost: $[N] total creative spend (from .banana/costs.json)
138
+
139
+ Next steps:
140
+ 1. Review assets in ./ad-assets/
141
+ 2. Check format-report.md for any missing formats
142
+ 3. Upload to your ad platform managers
143
+ ```
144
+
145
+ ## Cost Transparency
146
+
147
+ Before generating, estimate and show the cost:
148
+ - Count the number of image briefs in campaign-brief.md
149
+ - Show estimated cost based on banana pricing tiers
150
+ - If >$1.00, ask for confirmation before proceeding
151
+
152
+ ## Standalone Mode (No campaign-brief.md)
153
+
154
+ When running without a campaign brief:
155
+
156
+ ```
157
+ Platform target → dimensions used:
158
+ meta-feed → 1080×1350 (4:5)
159
+ meta-reels → 1080×1920 (9:16)
160
+ tiktok → 1080×1920 (9:16)
161
+ google-pmax → 1200×628 (1.91:1)
162
+ linkedin → 1080×1080 (1:1)
163
+ youtube → 1280×720 (16:9)
164
+ youtube-short → 1080×1920 (9:16)
165
+ ```
166
+
167
+ Use `/banana generate` directly with the specified prompt and aspect ratio.
168
+
169
+ ## Reference Files
170
+
171
+ - `ads-agents/references/image-providers.md`: provider config, pricing, limits
172
+ - `ads-agents/references/[platform]-creative-specs.md`: per-platform specs
173
+ - `ads-agents/references/brand-dna-template.md`: brand injection schema
@@ -0,0 +1,192 @@
1
+ ---
2
+ name: ads-google
3
+ version: 1.6.0
4
+ description: "Google Ads deep analysis covering Search, Performance Max, Display, YouTube, and Demand Gen campaigns. Evaluates 80 checks across conversion tracking, wasted spend, account structure, keywords, ads, and settings. Use when user says Google Ads, Google PPC, search ads, PMax, Performance Max, or Google campaign."
5
+ user-invokable: false
6
+ ---
7
+
8
+ <!-- Updated: 2026-05-14 | v1.6: AI Max GA + DSA September 2026 auto-upgrade, 7% conversion lift verified (Google blog April 2026), full feature suite (search term matching + text customization + final URL expansion) required for full uplift -->
9
+
10
+ # Google Ads Deep Analysis
11
+
12
+ ## Process
13
+
14
+ 1. Collect Google Ads account data (export, Change History, Search Terms Report)
15
+ 2. **Validate**: confirm data covers ≥30 days and includes Search Terms Report before proceeding
16
+ 3. Read `ads-agents/references/google-audit.md` for full 80-check audit
17
+ 4. Read `ads-agents/references/benchmarks.md` for Google-specific benchmarks
18
+ 5. Read `ads-agents/references/scoring-system.md` for weighted scoring
19
+ 6. Evaluate all applicable checks as PASS, WARNING, or FAIL
20
+ 7. **Validate**: confirm all 80 checks evaluated before calculating score
21
+ 8. Calculate Google Ads Health Score (0-100)
22
+ 9. Generate findings report with action plan
23
+
24
+ ## What to Analyze
25
+
26
+ ### Conversion Tracking (25% weight)
27
+ - Google tag (gtag.js) installed and firing on all pages
28
+ - Enhanced Conversions active (hashed first-party data)
29
+ - Consent Mode v2 implemented (required for EU/EEA)
30
+ - Conversion actions mapped correctly (primary vs secondary)
31
+ - Offline conversion import configured (for lead gen)
32
+ - Server-side tagging via GTM (recommended for accuracy)
33
+ - Attribution model: data-driven preferred (last-click as fallback only)
34
+ - Conversion lag analysis (are conversions still trickling in?)
35
+
36
+ ### Wasted Spend (20% weight)
37
+ - Search Terms Report reviewed (last 30 days minimum)
38
+ - Negative keyword coverage adequate (shared lists + campaign-level)
39
+ - Display placement audit (exclude low-quality sites)
40
+ - Invalid click rate within norms (<10%)
41
+ - Broad Match only used with Smart Bidding (NEVER without it)
42
+ - Brand/non-brand campaigns separated
43
+ - Geographic targeting precise (no wasted international spend)
44
+
45
+ **Negative Keyword Rules (critical: bad negatives kill campaigns):**
46
+ - NEVER suggest Broad Match negatives unless explicitly justified; they block too broadly
47
+ - Default to **Exact Match** `[keyword]` for specific irrelevant queries
48
+ - Use **Phrase Match** `"keyword"` for irrelevant intent patterns
49
+ - Source negatives from actual Search Terms Report irrelevant queries, NOT guesses
50
+ - Group into themed lists: Informational (how-to, DIY, what is), Job-seeker (jobs, careers, salary), Competitor (only if intentionally excluded), Free-intent (free, crack, torrent)
51
+ - Recommend **Shared Negative Lists** at the account level, not just campaign-level
52
+ - Review existing negatives for over-blocking (are any negatives accidentally blocking converting queries?)
53
+
54
+ ### Account Structure (15% weight)
55
+ - Campaign-level organization follows business logic
56
+ - Ad groups themed tightly (15-20 keywords max per group)
57
+ - RSA ad groups have ≥3 active ads
58
+ - PMax campaigns structured correctly (asset groups, signals)
59
+ - SKAGs evaluated (migrate to themed groups if present)
60
+ - Campaign labels/naming conventions consistent
61
+
62
+ ### Keywords (15% weight)
63
+ - Match type strategy appropriate (Exact → Phrase → Broad progression)
64
+ - Quality Score distribution (aim ≥7 average)
65
+ - Low QS keywords flagged (<5 = FAIL, 5-6 = WARNING)
66
+ - Keyword cannibalization check (same keywords in multiple campaigns)
67
+ - Impression share tracked for top keywords
68
+ - Keyword bid adjustments set for devices/locations/audiences
69
+
70
+ ### Ads (15% weight)
71
+ - RSA: ≥8 unique headlines, ≥3 descriptions per ad group
72
+ - RSA: ad strength "Good" or "Excellent" (not "Poor" or "Average")
73
+ - Pin usage minimal and strategic (over-pinning reduces RSA flexibility)
74
+ - Ad extensions: sitelinks (≥4), callouts (≥4), structured snippets, image
75
+ - Dynamic keyword insertion used appropriately
76
+ - Ad copy includes CTA, value proposition, differentiators
77
+
78
+ ### Settings (10% weight)
79
+ - ECPC (Enhanced CPC) flagged as deprecated. Migrate to full Smart Bidding (tCPA/tROAS/Maximize)
80
+ - Bid strategy appropriate for campaign maturity and goals
81
+ - Budget pacing: no campaigns limited by budget (unless intentional)
82
+ - Ad schedule aligned with business hours/conversion patterns
83
+ - Device bid adjustments set based on performance data
84
+ - Location targeting: "Presence" not "Presence or Interest"
85
+ - Network settings: Search Partners reviewed, Display opt-out for Search
86
+
87
+ ## GAQL & Data Accuracy
88
+
89
+ Before analyzing data, read `ads-agents/references/gaql-notes.md` for known GAQL field incompatibilities,
90
+ deduplication patterns, and filter scope best practices. Key rules:
91
+
92
+ - Deduplicate keywords by `(ad_group_id + keyword_text + match_type)` before any analysis
93
+ - Only analyze ENABLED campaigns and ad groups (exclude paused/removed)
94
+ - Filter to keywords with impressions > 0 for theme coherence checks (G03)
95
+ - Apply legacy BMM heuristic: BROAD + Manual CPC = legacy BMM, not intentional broad (G17)
96
+ - Only flag wasted spend on terms with >$10 spend AND 0 conversions (G16)
97
+ - Count shared negative keyword lists alongside campaign-level negatives (G14/G15)
98
+
99
+ ## Google Ads MCP Integration (Optional)
100
+
101
+ For automated data collection, connect the [Google Ads MCP server](https://github.com/googleads/google-ads-mcp):
102
+
103
+ - **Tools available**: `search` (GAQL queries), `list_accessible_customers`
104
+ - **Setup**: Configure in `.mcp.json` or Claude Code MCP settings
105
+ - **Customer ID**: Extract from CLAUDE.md under Accounts > Google Ads, or ask the user
106
+ - **Fallback**: If MCP is not configured, fall back to manual data export (the default workflow)
107
+
108
+ When MCP is available, use it to pull Search Terms Reports, keyword data, conversion actions,
109
+ and campaign structure automatically instead of requiring manual exports.
110
+
111
+ ## PMax Deep Dive
112
+
113
+ If Performance Max campaigns exist, additionally evaluate:
114
+ - Asset group diversity (text, images, video, feeds)
115
+ - Audience signals configured (custom segments, lists, demographics)
116
+ - URL expansion settings reviewed (opt-out of irrelevant pages)
117
+ - Brand exclusions applied (prevent cannibalizing brand search), available for all advertisers
118
+ - Campaign-level negative keywords now available for ALL advertisers
119
+ - Search themes utilized (2024 feature)
120
+ - Final URL expansion: enabled or disabled with justification
121
+ - Insights tab reviewed (search categories, audience segments)
122
+
123
+ ## AI Max for Search (2026 — out of beta)
124
+
125
+ AI Max moved out of beta in April 2026 and layers broad match + keywordless targeting
126
+ on existing Search campaigns. **7% average conversion lift** at similar CPA/ROAS when
127
+ the full feature suite is enabled (search term matching + text customization + final URL
128
+ expansion), per Google internal data April 2026.
129
+
130
+ **DSA upgrade timeline (CONFIRMED):**
131
+ - Voluntary upgrades available now (recommended; preserves manual control)
132
+ - **Auto-upgrades begin September 2026** for all eligible Search campaigns using:
133
+ - Dynamic Search Ads (DSA)
134
+ - Automatically created assets (ACA)
135
+ - Campaign-level broad match setting
136
+ - New DSA creation ends September 2026 (Ads UI, Editor, and API)
137
+ - All upgrades expected to conclude by end of September 2026
138
+
139
+ If AI Max for Search is available/active:
140
+ - Broad Match + AI Max integration evaluated
141
+ - All three AI Max features enabled for full uplift (search term matching, text customization, final URL expansion)
142
+ - Auto-generated headline performance monitored
143
+ - Brand controls, location controls, and text guidelines configured (the "advanced controls" that steer AI precision)
144
+ - Search term categories reviewed for relevance
145
+ - Budget impact assessed (AI Max can shift spend; broader reach)
146
+ - Negative keyword lists reviewed for completeness (AI Max casts wider net; strong negatives are mandatory)
147
+ - DSA campaigns: port historical settings now or wait for September 2026 auto-upgrade
148
+
149
+ ## Demand Gen Campaigns
150
+
151
+ Replaced Video Action Campaigns (April 2026). Video + image = 20% more conversions.
152
+ Frequency capping NOT supported.
153
+
154
+ If Demand Gen campaigns exist, evaluate:
155
+ - Video + image asset mix present (combined format drives 20% more conversions)
156
+ - Audience signals configured (custom segments, lookalikes)
157
+ - Conversion tracking aligned with upper/mid-funnel goals
158
+ - Note: frequency capping is not available. Monitor reach vs frequency manually
159
+
160
+ ## Key Thresholds
161
+
162
+ | Metric | Pass | Warning | Fail |
163
+ |--------|------|---------|------|
164
+ | Quality Score (avg) | ≥7 | 5-6 | <5 |
165
+ | CTR (Search) | ≥6.66% | 3-6.66% | <3% |
166
+ | CVR (Search) | ≥7.52% | 3-7.52% | <3% |
167
+ | CPC (Search) | ≤$5.26 | $5.26-8.00 | >$8.00 |
168
+ | Wasted Spend | <10% | 10-20% | >20% |
169
+ | Ad Strength | Good+ | Average | Poor |
170
+ | Invalid Clicks | <5% | 5-10% | >10% |
171
+
172
+ ## Output
173
+
174
+ ### Google Ads Health Score
175
+
176
+ ```
177
+ Google Ads Health Score: XX/100 (Grade: X)
178
+
179
+ Conversion Tracking: XX/100 ████████░░ (25%)
180
+ Wasted Spend: XX/100 ██████████ (20%)
181
+ Account Structure: XX/100 ███████░░░ (15%)
182
+ Keywords: XX/100 █████░░░░░ (15%)
183
+ Ads: XX/100 ████████░░ (15%)
184
+ Settings: XX/100 ██████████ (10%)
185
+ ```
186
+
187
+ ### Deliverables
188
+ - `GOOGLE-ADS-REPORT.md`: Full 80-check findings with pass/warning/fail
189
+ - Wasted spend estimate (monthly $ value)
190
+ - Quick Wins sorted by impact
191
+ - PMax-specific recommendations (if applicable)
192
+ - Keyword health matrix with QS, CTR, CVR per keyword group