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.
- package/dist/setup.js +15 -1
- package/package.json +1 -1
- package/stacks/_shared/ads-agents/README.md +452 -0
- package/stacks/_shared/ads-agents/RESEARCH-REPORT.md +157 -0
- package/stacks/_shared/ads-agents/SKILL.md +210 -0
- package/stacks/_shared/ads-agents/SKILLS-UPDATE-REPORT.md +255 -0
- package/stacks/_shared/ads-agents/agents/audit-budget.md +116 -0
- package/stacks/_shared/ads-agents/agents/audit-compliance.md +131 -0
- package/stacks/_shared/ads-agents/agents/audit-creative.md +127 -0
- package/stacks/_shared/ads-agents/agents/audit-google.md +113 -0
- package/stacks/_shared/ads-agents/agents/audit-meta.md +112 -0
- package/stacks/_shared/ads-agents/agents/audit-tracking.md +134 -0
- package/stacks/_shared/ads-agents/agents/copy-writer.md +188 -0
- package/stacks/_shared/ads-agents/agents/creative-strategist.md +199 -0
- package/stacks/_shared/ads-agents/agents/format-adapter.md +175 -0
- package/stacks/_shared/ads-agents/agents/visual-designer.md +245 -0
- package/stacks/_shared/ads-agents/references/additional-platforms.md +106 -0
- package/stacks/_shared/ads-agents/references/benchmarks.md +257 -0
- package/stacks/_shared/ads-agents/references/bidding-strategies.md +333 -0
- package/stacks/_shared/ads-agents/references/brand-dna-template.md +190 -0
- package/stacks/_shared/ads-agents/references/budget-allocation.md +150 -0
- package/stacks/_shared/ads-agents/references/compliance.md +280 -0
- package/stacks/_shared/ads-agents/references/conversion-tracking.md +246 -0
- package/stacks/_shared/ads-agents/references/copy-frameworks.md +187 -0
- package/stacks/_shared/ads-agents/references/funnel-content-copy-rules.md +44 -0
- package/stacks/_shared/ads-agents/references/gaql-notes.md +49 -0
- package/stacks/_shared/ads-agents/references/google-audit.md +217 -0
- package/stacks/_shared/ads-agents/references/google-creative-specs.md +119 -0
- package/stacks/_shared/ads-agents/references/image-providers.md +133 -0
- package/stacks/_shared/ads-agents/references/linkedin-audit.md +141 -0
- package/stacks/_shared/ads-agents/references/linkedin-creative-specs.md +129 -0
- package/stacks/_shared/ads-agents/references/mcp-integration.md +125 -0
- package/stacks/_shared/ads-agents/references/meta-audit.md +141 -0
- package/stacks/_shared/ads-agents/references/meta-creative-specs.md +134 -0
- package/stacks/_shared/ads-agents/references/microsoft-audit.md +158 -0
- package/stacks/_shared/ads-agents/references/microsoft-creative-specs.md +123 -0
- package/stacks/_shared/ads-agents/references/platform-specs.md +276 -0
- package/stacks/_shared/ads-agents/references/scoring-system.md +169 -0
- package/stacks/_shared/ads-agents/references/tiktok-audit.md +165 -0
- package/stacks/_shared/ads-agents/references/tiktok-creative-specs.md +139 -0
- package/stacks/_shared/ads-agents/references/voice-to-style.md +87 -0
- package/stacks/_shared/ads-agents/references/youtube-creative-specs.md +134 -0
- package/stacks/_shared/ads-agents/skills/ads-apple/SKILL.md +225 -0
- package/stacks/_shared/ads-agents/skills/ads-audit/SKILL.md +108 -0
- package/stacks/_shared/ads-agents/skills/ads-budget/SKILL.md +198 -0
- package/stacks/_shared/ads-agents/skills/ads-competitor/SKILL.md +198 -0
- package/stacks/_shared/ads-agents/skills/ads-create/SKILL.md +198 -0
- package/stacks/_shared/ads-agents/skills/ads-creative/SKILL.md +208 -0
- package/stacks/_shared/ads-agents/skills/ads-dna/SKILL.md +245 -0
- package/stacks/_shared/ads-agents/skills/ads-generate/SKILL.md +173 -0
- package/stacks/_shared/ads-agents/skills/ads-google/SKILL.md +192 -0
- package/stacks/_shared/ads-agents/skills/ads-landing/SKILL.md +186 -0
- package/stacks/_shared/ads-agents/skills/ads-linkedin/SKILL.md +200 -0
- package/stacks/_shared/ads-agents/skills/ads-math/SKILL.md +216 -0
- package/stacks/_shared/ads-agents/skills/ads-meta/SKILL.md +167 -0
- package/stacks/_shared/ads-agents/skills/ads-microsoft/SKILL.md +163 -0
- package/stacks/_shared/ads-agents/skills/ads-photoshoot/SKILL.md +220 -0
- package/stacks/_shared/ads-agents/skills/ads-plan/SKILL.md +176 -0
- package/stacks/_shared/ads-agents/skills/ads-test/SKILL.md +199 -0
- package/stacks/_shared/ads-agents/skills/ads-tiktok/SKILL.md +190 -0
- package/stacks/_shared/ads-agents/skills/ads-youtube/SKILL.md +199 -0
- package/stacks/_shared/memories/funnel-content-copy.md +81 -0
- package/templates/CLAUDE-python.md +6 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: visual-designer
|
|
3
|
+
version: 1.6.0
|
|
4
|
+
description: >
|
|
5
|
+
Visual ad creative specialist. Reads campaign-brief.md and brand-profile.json
|
|
6
|
+
to construct 5-component image generation prompts via banana MCP, organizes
|
|
7
|
+
outputs into ad-assets/ directories, and writes generation-manifest.json
|
|
8
|
+
for the format-adapter agent.
|
|
9
|
+
model: sonnet
|
|
10
|
+
maxTurns: 30
|
|
11
|
+
tools: Read, Write, Bash, Glob
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<!-- Updated: 2026-05-14 | v1.6: banana MCP marked explicitly as external dependency, 2026 platform copy zones verified (TikTok safe box X:40-940 Y:150-1470, Meta Reels 1080×1300 center, Shorts 1080×1420 center) -->
|
|
15
|
+
|
|
16
|
+
> **External dependency:** This agent requires the **banana MCP** server connected (custom image-generation MCP wrapping Gemini/Nano-Banana). If banana MCP is not available, the agent falls back to `scripts/generate_image.py` (deprecated) which requires `GOOGLE_API_KEY`. The fallback supports only 2 variants per brief instead of 3 and has no reference-image consistency anchor.
|
|
17
|
+
|
|
18
|
+
You are a visual ad creative specialist who translates campaign strategies into generated image assets. You use banana MCP to produce each asset and track everything in a manifest.
|
|
19
|
+
|
|
20
|
+
<example>
|
|
21
|
+
Context: campaign-brief.md and brand-profile.json exist. Banana MCP is available.
|
|
22
|
+
user: Generate the ad images from the campaign brief.
|
|
23
|
+
assistant: I'll read the brief and brand profile, then generate each image asset via banana.
|
|
24
|
+
[Reads campaign-brief.md, finds ## Image Generation Briefs section]
|
|
25
|
+
[Reads brand-profile.json, extracts colors.primary (#1A2E4A), mood_keywords]
|
|
26
|
+
[Reads ads-agents/references/voice-to-style.md to map brand voice axes to visual attributes]
|
|
27
|
+
[Reads ads-agents/references/meta-creative-specs.md for safe zone constraints]
|
|
28
|
+
[Constructs 5-component banana prompt for each brief]
|
|
29
|
+
[Generates hero image first as consistency anchor]
|
|
30
|
+
[Generates 3 variants per brief via banana MCP]
|
|
31
|
+
[Saves outputs to ./ad-assets/meta/concept-1/feed-1080x1350-v1.png etc.]
|
|
32
|
+
[Writes generation-manifest.json with all results + consistencyAnchor]
|
|
33
|
+
commentary: Parse ## Image Generation Briefs precisely; the **Prompt:** and **Dimensions:** lines are the data contract. Build every prompt using banana's 5-component formula. Generate hero first for visual consistency.
|
|
34
|
+
</example>
|
|
35
|
+
|
|
36
|
+
<example>
|
|
37
|
+
Context: Banana MCP is unavailable.
|
|
38
|
+
user: Generate images.
|
|
39
|
+
assistant: Banana MCP is not available. I'll check for the fallback script.
|
|
40
|
+
[Checks banana MCP availability; not connected]
|
|
41
|
+
[Reports to user: "Banana MCP is unavailable. Fallback: scripts/generate_image.py (deprecated). Ensure GOOGLE_API_KEY is set."]
|
|
42
|
+
commentary: Never silently fail. Check banana MCP first; fall back to generate_image.py only when necessary.
|
|
43
|
+
</example>
|
|
44
|
+
|
|
45
|
+
## Your Workflow
|
|
46
|
+
|
|
47
|
+
1. **Check banana MCP availability** first. Verify the banana MCP server is connected and responsive. If unavailable, report to the user and note that the deprecated fallback (`scripts/generate_image.py`) requires a `GOOGLE_API_KEY`.
|
|
48
|
+
|
|
49
|
+
2. **Read campaign-brief.md**: find the `## Image Generation Briefs` section. Extract each brief block by parsing:
|
|
50
|
+
- `**Prompt:**` line (the base generation prompt)
|
|
51
|
+
- `**Dimensions:**` line (WxH, e.g., `1080x1920`)
|
|
52
|
+
- `**Safe zone notes:**` line (composition constraint)
|
|
53
|
+
- `**Banana domain mode:**` line (Product, Portrait, UI/Web, Abstract, etc.)
|
|
54
|
+
- `**Copy framework:**` line (if present, note for context)
|
|
55
|
+
|
|
56
|
+
3. **Read brand-profile.json** (if present):
|
|
57
|
+
- Extract `colors.primary`, `colors.background`, `aesthetic.mood_keywords`, `imagery.forbidden`
|
|
58
|
+
- Check `screenshots.homepage`; note the path for style reference
|
|
59
|
+
|
|
60
|
+
4. **Read `ads-agents/references/voice-to-style.md`**: map brand voice axis scores to visual style attributes (camera angle, lighting, color temperature, texture).
|
|
61
|
+
|
|
62
|
+
5. **Read platform creative spec reference** for each platform in the brief:
|
|
63
|
+
- `ads-agents/references/meta-creative-specs.md`
|
|
64
|
+
- `ads-agents/references/tiktok-creative-specs.md`
|
|
65
|
+
- `ads-agents/references/google-creative-specs.md`
|
|
66
|
+
- etc.; load only the platforms being generated
|
|
67
|
+
|
|
68
|
+
6. **Check for banana brand preset**: look for `.banana/presets/{brand-slug}.json`. If it exists, activate it to inherit brand colors, typography, and style defaults.
|
|
69
|
+
|
|
70
|
+
7. **Construct the output path** for each asset:
|
|
71
|
+
```
|
|
72
|
+
./ad-assets/[platform]/[concept-slug]/[format]-[WxH]-v[N].png
|
|
73
|
+
```
|
|
74
|
+
Example: `./ad-assets/meta/pain-point-hook/feed-1080x1350-v1.png`
|
|
75
|
+
|
|
76
|
+
8. **Apply Banana 5-Component Prompt Construction** to every prompt before generation. See the section below.
|
|
77
|
+
|
|
78
|
+
9. **Generate images via banana MCP** following the Image Generation via Banana process below.
|
|
79
|
+
|
|
80
|
+
10. **Write generation-manifest.json** to the current directory after all generations complete.
|
|
81
|
+
|
|
82
|
+
## Banana 5-Component Prompt Construction
|
|
83
|
+
|
|
84
|
+
Build each prompt using banana's formula. Never pass raw brief text to the API.
|
|
85
|
+
|
|
86
|
+
1. **[SUBJECT]**: Extract from brief's visual direction + brand-profile.json product/service
|
|
87
|
+
2. **[ACTION]**: From brief's concept + platform context (what is happening in the scene)
|
|
88
|
+
3. **[LOCATION/CONTEXT]**: From brand DNA aesthetic + campaign mood keywords
|
|
89
|
+
4. **[COMPOSITION]**: Platform safe zones + selected aspect ratio + camera framing
|
|
90
|
+
5. **[STYLE]**: Read `ads-agents/references/voice-to-style.md`, map brand voice axis scores to visual attributes. Add camera/lens spec and prestigious reference.
|
|
91
|
+
|
|
92
|
+
### Prompt Cleanup Rules
|
|
93
|
+
|
|
94
|
+
Apply these rules after constructing the 5-component prompt:
|
|
95
|
+
|
|
96
|
+
- **Lead with brand colors**: `"[colors.background] background, [colors.primary] accent glow"` at the start
|
|
97
|
+
- **Strip font names**: Remove Noto Serif, Inter, Helvetica, etc. (causes hallucinated text)
|
|
98
|
+
- **Replace UI text with abstractions**: "dashboard showing keyword ranking" becomes "abstract dashboard silhouette with anonymous data"
|
|
99
|
+
- **Append no-text constraint**: `", no text, no labels, no readable words, no UI text, no data labels anywhere in image"`
|
|
100
|
+
- **Append platform copy zone**:
|
|
101
|
+
|
|
102
|
+
| Platform | Append to prompt |
|
|
103
|
+
|-----------------|---------------------------------------------------------------------------|
|
|
104
|
+
| TikTok (9:16) | `", active visual centered in middle 70%, top 15% and bottom 20% minimal"` |
|
|
105
|
+
| Meta Feed (4:5) | `", primary visual in upper 65%, bottom 30% minimal for copy overlay"` |
|
|
106
|
+
| LinkedIn (1:1) | `", centered composition with generous 20% margin all sides"` |
|
|
107
|
+
| Google PMax | `", focal point left-center, right third lighter for text overlay"` |
|
|
108
|
+
| YouTube (16:9) | `", main subject left-center, right 40% clean for copy overlay"` |
|
|
109
|
+
|
|
110
|
+
- **Append mood**: `", [mood_keywords] atmosphere, no [forbidden joined by comma]"`
|
|
111
|
+
- **Cap at 80 words**: condense if needed; keep composition, colors, shapes, mood; drop redundant adjectives
|
|
112
|
+
|
|
113
|
+
### Example 5-Component Construction
|
|
114
|
+
|
|
115
|
+
**Input brief:** SaaS pain-point hook for Meta Feed (4:5)
|
|
116
|
+
|
|
117
|
+
**Constructed prompt:**
|
|
118
|
+
```
|
|
119
|
+
[SUBJECT] #09090B dark background, #22C55E accent glow, abstract SEO dashboard silhouette
|
|
120
|
+
[ACTION] anonymous rising data curve emerging from empty void
|
|
121
|
+
[LOCATION/CONTEXT] dark minimalist digital environment, stark contrast
|
|
122
|
+
[COMPOSITION] primary visual in upper 65%, bottom 30% minimal for copy overlay, 4:5 ratio
|
|
123
|
+
[STYLE] cinematic low-key lighting, 85mm f/1.4 depth of field, intelligent precise powerful
|
|
124
|
+
atmosphere, no cheesy stock photos, no bright white backgrounds, no text, no labels,
|
|
125
|
+
no readable words, no UI text, no data labels anywhere in image
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Image Generation via Banana
|
|
129
|
+
|
|
130
|
+
1. Activate banana brand preset (if exists at `.banana/presets/{brand-slug}.json`)
|
|
131
|
+
2. Generate the "hero" image first (strongest concept from brief)
|
|
132
|
+
3. Save hero path as consistency anchor
|
|
133
|
+
4. For each remaining brief:
|
|
134
|
+
a. Call banana MCP `set_aspect_ratio` with platform-appropriate ratio
|
|
135
|
+
b. Call banana MCP `gemini_generate_image` with constructed 5-component prompt
|
|
136
|
+
c. Pass hero image as reference for visual consistency (if banana supports reference input)
|
|
137
|
+
5. Generate 3 variants per brief (not 2):
|
|
138
|
+
- v1: base composition
|
|
139
|
+
- v2: alternative angle/perspective
|
|
140
|
+
- v3: different lighting or mood variation
|
|
141
|
+
6. Save to `./ad-assets/[platform]/[concept-slug]/[format]-[WxH]-v[N].png`
|
|
142
|
+
7. Write generation-manifest.json with all results + consistencyAnchor path
|
|
143
|
+
|
|
144
|
+
**Fallback:** if banana MCP is unavailable, use `scripts/generate_image.py` (deprecated). This requires `GOOGLE_API_KEY` and only supports 2 variants per brief.
|
|
145
|
+
|
|
146
|
+
## Visual Consistency
|
|
147
|
+
|
|
148
|
+
- Generate hero concept first (the strongest concept in the brief)
|
|
149
|
+
- Save hero image path as the consistency anchor for the entire campaign
|
|
150
|
+
- Pass hero as reference to all subsequent generations in the same campaign
|
|
151
|
+
- Track in manifest: `consistencyAnchor` field pointing to the hero image path
|
|
152
|
+
- All images in a campaign should share the same color palette, lighting direction, and visual tone
|
|
153
|
+
|
|
154
|
+
## generation-manifest.json Format
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"generated_at": "ISO-8601 timestamp",
|
|
159
|
+
"provider": "banana",
|
|
160
|
+
"consistencyAnchor": "./ad-assets/meta/pain-point-hook/feed-1080x1350-v1.png",
|
|
161
|
+
"total_assets": 9,
|
|
162
|
+
"successful": 8,
|
|
163
|
+
"failed": 1,
|
|
164
|
+
"assets": [
|
|
165
|
+
{
|
|
166
|
+
"index": 0,
|
|
167
|
+
"concept": "Pain Point Hook",
|
|
168
|
+
"platform": "meta",
|
|
169
|
+
"format": "feed",
|
|
170
|
+
"ratio": "4:5",
|
|
171
|
+
"variation": "v1",
|
|
172
|
+
"isHero": true,
|
|
173
|
+
"width": 1080,
|
|
174
|
+
"height": 1350,
|
|
175
|
+
"file": "./ad-assets/meta/pain-point-hook/feed-1080x1350-v1.png",
|
|
176
|
+
"prompt": "full 5-component prompt used",
|
|
177
|
+
"bananaDomainMode": "UI/Web",
|
|
178
|
+
"reference_image": null,
|
|
179
|
+
"generation_success": true,
|
|
180
|
+
"error": null
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"index": 1,
|
|
184
|
+
"concept": "Pain Point Hook",
|
|
185
|
+
"platform": "meta",
|
|
186
|
+
"format": "feed",
|
|
187
|
+
"ratio": "4:5",
|
|
188
|
+
"variation": "v2",
|
|
189
|
+
"isHero": false,
|
|
190
|
+
"width": 1080,
|
|
191
|
+
"height": 1350,
|
|
192
|
+
"file": "./ad-assets/meta/pain-point-hook/feed-1080x1350-v2.png",
|
|
193
|
+
"prompt": "5-component prompt, alternative angle/perspective",
|
|
194
|
+
"bananaDomainMode": "UI/Web",
|
|
195
|
+
"reference_image": "./ad-assets/meta/pain-point-hook/feed-1080x1350-v1.png",
|
|
196
|
+
"generation_success": true,
|
|
197
|
+
"error": null
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"index": 2,
|
|
201
|
+
"concept": "Pain Point Hook",
|
|
202
|
+
"platform": "meta",
|
|
203
|
+
"format": "feed",
|
|
204
|
+
"ratio": "4:5",
|
|
205
|
+
"variation": "v3",
|
|
206
|
+
"isHero": false,
|
|
207
|
+
"width": 1080,
|
|
208
|
+
"height": 1350,
|
|
209
|
+
"file": "./ad-assets/meta/pain-point-hook/feed-1080x1350-v3.png",
|
|
210
|
+
"prompt": "5-component prompt, different lighting/mood variation",
|
|
211
|
+
"bananaDomainMode": "UI/Web",
|
|
212
|
+
"reference_image": "./ad-assets/meta/pain-point-hook/feed-1080x1350-v1.png",
|
|
213
|
+
"generation_success": true,
|
|
214
|
+
"error": null
|
|
215
|
+
}
|
|
216
|
+
]
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Error Handling
|
|
221
|
+
|
|
222
|
+
- **Banana MCP unavailable**: Report to user. Offer fallback via `scripts/generate_image.py` (deprecated) if `GOOGLE_API_KEY` is set.
|
|
223
|
+
- **Rate limit (429)**: Wait and retry with backoff. If still failing after retries, report: "Rate limit persisting. Try again in 60 seconds or check your API quota."
|
|
224
|
+
- **Generation blocked (safety filter)**: Note the blocked prompt in the manifest with `generation_success: false, error: "safety_filter"`. Suggest rephrasing: remove any policy-sensitive terms and retry.
|
|
225
|
+
- **Partial success**: Complete all generations. Write manifest including failures. Report summary: "Generated 7/9 images. 2 failed (see generation-manifest.json for details)."
|
|
226
|
+
- **Consistency anchor failed**: If the hero image fails, select the next best concept as anchor. Note the substitution in the manifest.
|
|
227
|
+
|
|
228
|
+
## Output Summary
|
|
229
|
+
|
|
230
|
+
After all generations, report to the user:
|
|
231
|
+
```
|
|
232
|
+
Generated [N] ad assets ([N/3] briefs x 3 A/B/C variations):
|
|
233
|
+
Hero: ./ad-assets/meta/concept-1/feed-1080x1350-v1.png (1080x1350) [consistency anchor]
|
|
234
|
+
✓ ./ad-assets/meta/concept-1/feed-1080x1350-v2.png (1080x1350) [alt angle]
|
|
235
|
+
✓ ./ad-assets/meta/concept-1/feed-1080x1350-v3.png (1080x1350) [lighting variation]
|
|
236
|
+
✓ ./ad-assets/tiktok/concept-1/vertical-1080x1920-v1.png (1080x1920)
|
|
237
|
+
✗ ./ad-assets/google/concept-1/landscape-1200x628-v1.png: ERROR [reason]
|
|
238
|
+
|
|
239
|
+
Variants: Upload v1, v2, and v3 to your ad platform. Run them in rotation to find the best performer.
|
|
240
|
+
Consistency: All images anchored to hero for cohesive campaign look.
|
|
241
|
+
Provider: banana MCP
|
|
242
|
+
|
|
243
|
+
Next: Run format-adapter to validate dimensions and check safe zones.
|
|
244
|
+
See generation-manifest.json for full details.
|
|
245
|
+
```
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Additional Advertising Platforms
|
|
2
|
+
|
|
3
|
+
<!-- Created: 2026-04-13 | v1.5 -->
|
|
4
|
+
<!-- Purpose: Overview of platforms beyond the core 7 for strategic planning -->
|
|
5
|
+
|
|
6
|
+
## When to Consider These Platforms
|
|
7
|
+
|
|
8
|
+
Use the decision tree below to determine if additional platforms are relevant:
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
High intent + Business audience → LinkedIn (already covered) or Reddit
|
|
12
|
+
High intent + Consumer purchase → Google (covered) or Pinterest
|
|
13
|
+
Low intent + Visual discovery → TikTok (covered) or Pinterest/Snapchat
|
|
14
|
+
Brand awareness + Premium → CTV/OTT or YouTube (covered)
|
|
15
|
+
Niche community + Discussion → Reddit
|
|
16
|
+
Professional software → G2, Capterra (directory ads)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Reddit Ads
|
|
20
|
+
|
|
21
|
+
**Best for:** Community-driven brands, SaaS, gaming, finance, education
|
|
22
|
+
**Audience:** 1.7B+ monthly active users, highly engaged niche communities
|
|
23
|
+
|
|
24
|
+
**Key features:**
|
|
25
|
+
- Subreddit targeting (precision by interest community)
|
|
26
|
+
- Conversation placement ads (native to discussions)
|
|
27
|
+
- Free-form ads (blend into Reddit feed)
|
|
28
|
+
- Conversation ads (promoted comments)
|
|
29
|
+
|
|
30
|
+
**Benchmarks (approximate):**
|
|
31
|
+
- CPM: $2-5 (lower than Meta/LinkedIn)
|
|
32
|
+
- CPC: $0.50-2.00
|
|
33
|
+
- CTR: 0.5-1.5%
|
|
34
|
+
|
|
35
|
+
**When to recommend:** Brand has community presence, product benefits from social proof/discussion, budget allows testing ($1K+/month minimum)
|
|
36
|
+
|
|
37
|
+
## CTV/OTT Advertising
|
|
38
|
+
|
|
39
|
+
**Best for:** Brand awareness, broad reach, upper funnel
|
|
40
|
+
**Reach:** 230M+ US CTV users (2025)
|
|
41
|
+
|
|
42
|
+
**Key platforms:**
|
|
43
|
+
- YouTube CTV (covered in ads-youtube)
|
|
44
|
+
- Microsoft CTV (Netflix, Max, Hulu, Roku, discovery+)
|
|
45
|
+
- The Trade Desk (programmatic)
|
|
46
|
+
- Amazon Fire TV / Freevee
|
|
47
|
+
|
|
48
|
+
**Key considerations:**
|
|
49
|
+
- Non-skippable 15-30s format (high completion rates)
|
|
50
|
+
- Limited conversion tracking (no click-through, attribution challenges)
|
|
51
|
+
- CPM-based pricing ($15-35 CPM typical)
|
|
52
|
+
- Best measured with: Brand Lift studies, search lift, incrementality
|
|
53
|
+
|
|
54
|
+
**When to recommend:** Brand awareness goal, budget >$10K/month, strong creative assets available
|
|
55
|
+
|
|
56
|
+
## Pinterest Ads
|
|
57
|
+
|
|
58
|
+
**Best for:** E-commerce (home, fashion, food, beauty, DIY), visual discovery
|
|
59
|
+
**Audience:** 500M+ monthly active users, 85% use for purchase inspiration
|
|
60
|
+
|
|
61
|
+
**Key features:**
|
|
62
|
+
- Shopping Ads (catalog integration)
|
|
63
|
+
- Standard Pins, Video Pins, Carousel Pins
|
|
64
|
+
- Interest + keyword targeting hybrid
|
|
65
|
+
- Visual search (Lens)
|
|
66
|
+
|
|
67
|
+
**Benchmarks:**
|
|
68
|
+
- CPC: $0.10-1.50
|
|
69
|
+
- CPM: $2-5
|
|
70
|
+
- CVR: higher than average for visual/inspiration categories
|
|
71
|
+
|
|
72
|
+
**When to recommend:** E-commerce with strong visuals, home/fashion/food categories, audiences that plan purchases
|
|
73
|
+
|
|
74
|
+
## Snapchat Ads
|
|
75
|
+
|
|
76
|
+
**Best for:** Gen Z / young millennial audiences, mobile-first brands
|
|
77
|
+
**Audience:** 850M+ monthly active users, skews 13-34
|
|
78
|
+
|
|
79
|
+
**Key features:**
|
|
80
|
+
- Snap Ads (full-screen vertical video)
|
|
81
|
+
- Collection Ads (product catalog)
|
|
82
|
+
- Story Ads, Spotlight Ads
|
|
83
|
+
- AR Lenses and Filters (interactive)
|
|
84
|
+
- Dynamic Product Ads
|
|
85
|
+
|
|
86
|
+
**Benchmarks:**
|
|
87
|
+
- CPM: $2-5 (competitive with TikTok)
|
|
88
|
+
- Swipe-up rate: 0.3-1.0%
|
|
89
|
+
- CPI (app installs): $1-3
|
|
90
|
+
|
|
91
|
+
**When to recommend:** Target audience is under 30, mobile app promotion, AR/interactive creative fits brand
|
|
92
|
+
|
|
93
|
+
## Directory / Review Platform Ads
|
|
94
|
+
|
|
95
|
+
**Best for:** B2B SaaS, professional services
|
|
96
|
+
**Platforms:** G2, Capterra, TrustRadius, Software Advice (Gartner Digital Markets)
|
|
97
|
+
|
|
98
|
+
**Key features:**
|
|
99
|
+
- High-intent buyers actively comparing software
|
|
100
|
+
- Category page sponsorship
|
|
101
|
+
- Competitor comparison placement
|
|
102
|
+
- Review-driven credibility
|
|
103
|
+
|
|
104
|
+
**Pricing:** CPL model ($15-75 per lead typical for mid-market SaaS)
|
|
105
|
+
|
|
106
|
+
**When to recommend:** B2B SaaS with sufficient reviews (20+), high-value deals (ACV >$5K), want to capture bottom-funnel comparison shoppers
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# Industry Benchmarks 2026
|
|
2
|
+
|
|
3
|
+
<!-- Updated: 2026-05-14 | v1.6 -->
|
|
4
|
+
<!-- Sources: Claude Research (WordStream/LocaliQ 16K campaigns, Triple Whale 2025), Gemini Research, SplitMetrics 2025, 2026 Verification Pass -->
|
|
5
|
+
|
|
6
|
+
## Google Ads: Search Benchmarks
|
|
7
|
+
|
|
8
|
+
### All Industries Average (WordStream/LocaliQ 2025, 16K campaigns)
|
|
9
|
+
| Metric | Average | YoY Change |
|
|
10
|
+
|--------|---------|------------|
|
|
11
|
+
| CTR | 6.66% | +3.74% |
|
|
12
|
+
| CPC | $5.26 | Up for 87% of industries (fifth consecutive year of increases) |
|
|
13
|
+
| CVR | 7.52% | Up for 65% of industries |
|
|
14
|
+
| CPL | ~$70 | +5% |
|
|
15
|
+
|
|
16
|
+
### By Industry (Search)
|
|
17
|
+
| Industry | CPC | CTR | CVR | CPL |
|
|
18
|
+
|----------|-----|-----|-----|-----|
|
|
19
|
+
| Arts & Entertainment | $1.60 | 13.10% | N/A | N/A |
|
|
20
|
+
| Travel | $2.12 | N/A | N/A | N/A |
|
|
21
|
+
| Restaurants | $2.05 | N/A | N/A | N/A |
|
|
22
|
+
| E-commerce | $1.15 | 4.13% | 2.81% | N/A |
|
|
23
|
+
| B2B SaaS | $4.50-$8.00 | 4.28% | 1.65% | $100-$200 |
|
|
24
|
+
| Education | $6.23 | N/A | N/A | N/A |
|
|
25
|
+
| Local Services | $7.85-$15.00 | 5.50%-6.37% | 7.33%-15.0% | $90.92 |
|
|
26
|
+
| Dental | $7.85 | 5.44% | N/A | N/A |
|
|
27
|
+
| Healthcare | $40+ | 4.90% | 3.10% | N/A |
|
|
28
|
+
| Legal | $8.58-$9.21 | 5.20%-5.97% | 4.60%-5.09% | N/A |
|
|
29
|
+
| Finance | $3.46-$3.77 | 4.65%-8.33% | 2.55%-3.50% | N/A |
|
|
30
|
+
| Real Estate | $1.55-$2.53 | 8.43% | 3.28% | N/A |
|
|
31
|
+
|
|
32
|
+
### E-commerce Specific (Triple Whale 2025)
|
|
33
|
+
| Metric | Median | YoY Change |
|
|
34
|
+
|--------|--------|------------|
|
|
35
|
+
| CPA | $23.74 | +12.35% |
|
|
36
|
+
| CPM | $12.79 | +10.01% |
|
|
37
|
+
| ROAS | 3.68 | -10.03% |
|
|
38
|
+
|
|
39
|
+
Note: CTR improved across all 14 tracked industries while CVR declined in 13 of 14.
|
|
40
|
+
|
|
41
|
+
### Smart Bidding & Demand Gen (2025-2026)
|
|
42
|
+
| Metric | Value |
|
|
43
|
+
|--------|-------|
|
|
44
|
+
| Smart Bidding Exploration | 18% more unique query categories, 19% more conversions |
|
|
45
|
+
| Demand Gen video+image | 20% more conversions vs video-only |
|
|
46
|
+
| CTV ad spend share | 75% of YouTube ad spend now on CTV |
|
|
47
|
+
|
|
48
|
+
## Meta Ads Benchmarks
|
|
49
|
+
|
|
50
|
+
### By Objective (WordStream 2025, 1K campaigns)
|
|
51
|
+
| Objective | CTR | CPC | CVR | CPL |
|
|
52
|
+
|-----------|-----|-----|-----|-----|
|
|
53
|
+
| Traffic (all) | 1.71% | $0.70 | N/A | N/A |
|
|
54
|
+
| Leads (all) | 2.59% | $1.92 | 7.72% | $27.66 |
|
|
55
|
+
|
|
56
|
+
### ROAS Benchmarks
|
|
57
|
+
| Segment | ROAS |
|
|
58
|
+
|---------|------|
|
|
59
|
+
| All industries median | 2.19:1 |
|
|
60
|
+
| Retargeting | 3.61:1 |
|
|
61
|
+
| Advantage+ Sales | 4.52:1 |
|
|
62
|
+
|
|
63
|
+
### CPM by Industry
|
|
64
|
+
| Industry | CPM |
|
|
65
|
+
|----------|-----|
|
|
66
|
+
| Arts & Entertainment | $5.82 (lowest) |
|
|
67
|
+
| Most industries | $6-$8 |
|
|
68
|
+
| E-commerce | $12.50 |
|
|
69
|
+
| Local Services | $18.00 |
|
|
70
|
+
| Healthcare | $28.00 |
|
|
71
|
+
| B2B SaaS | $35.00 |
|
|
72
|
+
| Healthcare (highest) | $36.82 |
|
|
73
|
+
| Legal | $45.00 |
|
|
74
|
+
| Finance | $50.00 |
|
|
75
|
+
|
|
76
|
+
### CPC Trend
|
|
77
|
+
- January 2026: $0.85 (24% below prior January)
|
|
78
|
+
- November 2025 peak: $1.32 (Q4 surge)
|
|
79
|
+
|
|
80
|
+
### Andromeda & Advantage+ (2025-2026)
|
|
81
|
+
| Metric | Value |
|
|
82
|
+
|--------|-------|
|
|
83
|
+
| 25 diverse creatives | 17% more conversions at 16% lower cost |
|
|
84
|
+
| Creative Similarity Score >60% | Triggers retrieval suppression (Andromeda penalty) |
|
|
85
|
+
| Advantage+ Sales ROAS | 22% higher ROAS |
|
|
86
|
+
| Advantage+ Sales CPA | 11.7% CPA improvement |
|
|
87
|
+
| Creative fatigue lifespan | Compressed to 2-4 weeks (was 6-8 weeks) |
|
|
88
|
+
|
|
89
|
+
### Creative Fatigue Thresholds
|
|
90
|
+
| Signal | Warning | Fail |
|
|
91
|
+
|--------|---------|------|
|
|
92
|
+
| Frequency (prospecting) | >3 | >5 |
|
|
93
|
+
| Frequency (retargeting) | >8 | >12 |
|
|
94
|
+
| CTR decline over 14 days | N/A | >20% |
|
|
95
|
+
| Exposures before conversion drop (~45%) | 4 | N/A |
|
|
96
|
+
| TOF creative lifespan | 3-4 weeks | N/A |
|
|
97
|
+
| BOF creative lifespan | 6-7 weeks | N/A |
|
|
98
|
+
|
|
99
|
+
## LinkedIn Ads Benchmarks
|
|
100
|
+
|
|
101
|
+
| Metric | Benchmark |
|
|
102
|
+
|--------|-----------|
|
|
103
|
+
| Average CPC | $5-$7 globally; median $3.94 |
|
|
104
|
+
| Average CPM | $31-$38 |
|
|
105
|
+
| CTR (Sponsored Content) | 0.44%-0.65% |
|
|
106
|
+
| CTR (exceptional) | >1.0% |
|
|
107
|
+
| Average CPL | $60-$150+ |
|
|
108
|
+
| Lead Gen Form CVR | 13% (3.25× higher than landing pages) |
|
|
109
|
+
| Message Ads CTR | 3% (30% open rate) |
|
|
110
|
+
| Conversation Ads | 50-60% open rates, 2-5% CTR (far exceeds feed ad benchmarks of 0.3-0.5% CTR) |
|
|
111
|
+
| B2B ROAS | 113% ($1.13 per $1) |
|
|
112
|
+
| Document Ads engagement rate | 7.00% (14% YoY increase), leading all LinkedIn content formats |
|
|
113
|
+
| TLA CPC | $2.29-$4.14 (vs $13.23 standard, 2-5x cheaper) |
|
|
114
|
+
| TLA CTR | 1.7× higher than standard |
|
|
115
|
+
| Predictive Audiences | 21% CPL reduction |
|
|
116
|
+
| Min daily budget | $10/day |
|
|
117
|
+
|
|
118
|
+
### CPL by Industry
|
|
119
|
+
| Industry | CPL |
|
|
120
|
+
|----------|-----|
|
|
121
|
+
| Education | $64 |
|
|
122
|
+
| Media | $65 |
|
|
123
|
+
| Retail | $80 |
|
|
124
|
+
| Manufacturing | $100 |
|
|
125
|
+
| Finance | $100 |
|
|
126
|
+
| Software & IT | $125 |
|
|
127
|
+
| Healthcare | $125 |
|
|
128
|
+
|
|
129
|
+
### Cost Factors
|
|
130
|
+
- Senior decision-makers (VP/Director/C-suite): $6.40+ CPC
|
|
131
|
+
- North America premium: 40-50% above global averages
|
|
132
|
+
- CPC YoY trend: +8% (2025)
|
|
133
|
+
- Q3 highest CPC ($15.72); Q4/Q1 typically lower
|
|
134
|
+
|
|
135
|
+
## TikTok Ads Benchmarks
|
|
136
|
+
|
|
137
|
+
| Metric | Range | Average |
|
|
138
|
+
|--------|-------|---------|
|
|
139
|
+
| CPM | $3.21-$10 | ~$4.26 |
|
|
140
|
+
| CPC | $0.20-$2.00 | ~$1.00 |
|
|
141
|
+
| CTR | 0.5%-1.5% | ~0.84% |
|
|
142
|
+
| CVR | 0.3%-1.0% | ~0.46% |
|
|
143
|
+
| Engagement Rate | 5-16% | Far exceeds FB 0.09%, IG 1.22% |
|
|
144
|
+
|
|
145
|
+
### Format Comparison
|
|
146
|
+
| Format | CTR | CPA |
|
|
147
|
+
|--------|-----|-----|
|
|
148
|
+
| Spark Ads | ~3% | ~$60 |
|
|
149
|
+
| Standard In-Feed | ~2% | ~$100 |
|
|
150
|
+
|
|
151
|
+
### Spark Ads vs Non-Spark
|
|
152
|
+
| Metric | Spark Ads Impact |
|
|
153
|
+
|--------|-----------------|
|
|
154
|
+
| Completion rate | +30% |
|
|
155
|
+
| Engagement rate | +142% |
|
|
156
|
+
| CVR | +43% |
|
|
157
|
+
| CPM | -4% (cheaper) |
|
|
158
|
+
|
|
159
|
+
### Search Ads & Creative Lifecycle
|
|
160
|
+
- Search Ads: 20% conversion uplift when combined with In-Feed
|
|
161
|
+
- Creative lifespan: 7-10 days average (plan for high-volume creative rotation)
|
|
162
|
+
|
|
163
|
+
### Key Thresholds
|
|
164
|
+
- Minimum campaign budget: $50/day
|
|
165
|
+
- Minimum ad group budget: $20/day
|
|
166
|
+
- Learning phase exit: ~50 conversions in 7 days
|
|
167
|
+
- TikTok Shop CVR: >10% (vs 0.46-2.4% standard)
|
|
168
|
+
- CPM advantage: 40-60% cheaper than Meta
|
|
169
|
+
|
|
170
|
+
### Smart+ Performance
|
|
171
|
+
- Median ROAS: 1.41-1.67
|
|
172
|
+
- Adoption: 42% of US TikTok performance campaigns
|
|
173
|
+
|
|
174
|
+
## Microsoft Ads Benchmarks
|
|
175
|
+
|
|
176
|
+
| Metric | Value | vs Google |
|
|
177
|
+
|--------|-------|-----------|
|
|
178
|
+
| Average CPC | $1.20-$1.55 | 20-35% discount |
|
|
179
|
+
| Average CTR | 2.83-3.1% | Higher than Google ~2.0% |
|
|
180
|
+
| Copilot CTR | 73% higher | vs traditional search |
|
|
181
|
+
| Copilot CVR | 16% stronger | vs traditional search |
|
|
182
|
+
| Users click paid ads | 25% more often | vs Google users |
|
|
183
|
+
| Higher ROAS reported | 37% of advertisers | vs Google |
|
|
184
|
+
|
|
185
|
+
### LinkedIn Profile Targeting & Copilot
|
|
186
|
+
| Metric | Value |
|
|
187
|
+
|--------|-------|
|
|
188
|
+
| LinkedIn Profile Targeting CTR | 16% greater than standard |
|
|
189
|
+
| LinkedIn Profile Targeting CVR | 64% greater than standard |
|
|
190
|
+
| CPCs vs LinkedIn Ads directly | 30-70% cheaper |
|
|
191
|
+
| Copilot placement CTR | 73% higher than traditional search |
|
|
192
|
+
|
|
193
|
+
### Copilot Checkout (January 2026)
|
|
194
|
+
- Users discover, compare, and purchase within Copilot conversations
|
|
195
|
+
- 194% more likely to purchase when shopping intent is present
|
|
196
|
+
- Ads in Copilot must be clearly labeled
|
|
197
|
+
|
|
198
|
+
### User Demographics
|
|
199
|
+
- ~50% in top 25% household incomes
|
|
200
|
+
- 34% hold degrees
|
|
201
|
+
- 45-64 age group: 38% of searches
|
|
202
|
+
- US all-devices share: 8.78% (record)
|
|
203
|
+
- US desktop share: 16.75-17.58%
|
|
204
|
+
- With Yahoo/AOL partners: ~25% US desktop
|
|
205
|
+
|
|
206
|
+
## Apple Ads Benchmarks
|
|
207
|
+
|
|
208
|
+
### Overall Averages (SplitMetrics 2025)
|
|
209
|
+
| Metric | Average |
|
|
210
|
+
|--------|---------|
|
|
211
|
+
| TTR (Tap-Through Rate) | 9.7% |
|
|
212
|
+
| CR (Conversion Rate) | 66.2% |
|
|
213
|
+
| CPT (Cost Per Tap) | $2.25 |
|
|
214
|
+
| CPA (Cost Per Acquisition) | $3.76 |
|
|
215
|
+
|
|
216
|
+
### International Markets
|
|
217
|
+
- International markets deliver 3-5x better CPI than US
|
|
218
|
+
|
|
219
|
+
### Category Benchmarks (CPT)
|
|
220
|
+
| Category | CPT Range |
|
|
221
|
+
|----------|-----------|
|
|
222
|
+
| Games | $0.50-$1.00 |
|
|
223
|
+
| Health | $1.50-$3.00 |
|
|
224
|
+
| Finance | $2.00-$5.00 |
|
|
225
|
+
|
|
226
|
+
## ROAS Benchmarks by Industry (Cross-Platform)
|
|
227
|
+
|
|
228
|
+
| Industry | Google | Meta | LinkedIn | TikTok |
|
|
229
|
+
|----------|--------|------|----------|--------|
|
|
230
|
+
| E-commerce | 3.68 | 2.19-4.52 (ASC) | N/A | 1.41-1.67 |
|
|
231
|
+
| B2B SaaS | N/A | N/A | 1.13 | N/A |
|
|
232
|
+
| Legal | 3.0 | N/A | N/A | N/A |
|
|
233
|
+
| Finance | 3.5 | N/A | N/A | N/A |
|
|
234
|
+
| Healthcare | 2.8 | N/A | N/A | N/A |
|
|
235
|
+
| Local Services | 5.0 | N/A | N/A | N/A |
|
|
236
|
+
|
|
237
|
+
## Landing Page Benchmarks
|
|
238
|
+
|
|
239
|
+
| Metric | Value |
|
|
240
|
+
|--------|-------|
|
|
241
|
+
| Mobile traffic share | 82.9% |
|
|
242
|
+
| 1s load → CVR vs 5s load | 3× higher |
|
|
243
|
+
| 1s delay | -7% conversions |
|
|
244
|
+
| Median CVR across industries | 6.6% |
|
|
245
|
+
| Top 10% CVR | 20%+ |
|
|
246
|
+
| QS landing page high → CPC impact | 50% discount |
|
|
247
|
+
| QS landing page low → CPC impact | 400% extra |
|
|
248
|
+
|
|
249
|
+
## Minimum Viable Ad Budgets
|
|
250
|
+
|
|
251
|
+
| Platform | Minimum Monthly | Rationale |
|
|
252
|
+
|----------|----------------|-----------|
|
|
253
|
+
| Google Ads | $1,000+ | Need 15+ conversions/month for Smart Bidding |
|
|
254
|
+
| Meta Ads | $600-$800 | Need 50 conv/week per ad set for learning |
|
|
255
|
+
| LinkedIn Ads | $3,000+ | High CPCs ($5-$35) require scale |
|
|
256
|
+
| TikTok Ads | $300+ | Low CPMs but need creative volume |
|
|
257
|
+
| Microsoft Ads | 20-30% of Google budget | Proportional to search volume |
|