Reach Social · Internal — 2026-08-10

Performance Max Creative System

Executive overview: adding Google PMax as a first-class ad destination alongside Meta — with its own canonical prompts, full-funnel asset groups, safe-zone-aware generation, and a costed delivery workflow. Prepared for team review; decision register in §11.

Executive summary

Recommendation: proceed. The platform is closer to PMax-ready than expected — all six required asset sizes already exist as dormant format stubs, the Creative Director already carries PMax-specific weighting, and three parked funnel titling presets map directly onto TOF/MOF/BOF. The build is three flag-gated phases (~7–11 dev days plus API approvals), and the marginal generation cost when run alongside Meta is ≈ +$1.50–1.90 per product for a complete visual kit: 9 funnel-differentiated statics, 6+ video renditions from two paid masters, and logos — delivered into clients' existing asset groups, where Google's per-impression engine matches each creative to the viewer's funnel stage automatically. Text assets stay client-owned.

What PMax changes vs Meta

  • Asset-pack model, not single ads: Google assembles combinations from up to 20 images, 15 videos, and 25 text assets per asset group — creative must work standalone and in any pairing.
  • Different safe zones: Google may crop statics up to ~20% at the edges; YouTube UI overlays differ from Meta's (§2).
  • Video floor: ≥10s and YouTube-hosted — our Meta masters are 8s, which forced the duration decision (now made: 10s everywhere).
  • Text assets stay client-owned: their existing PMax headlines/descriptions keep serving — we supply the visual layer only (copy burned into the creative itself remains ours).

Why this is cheap to do well

  • The 9:16 video master is shared with Meta once duration standardizes at 10s — only the 16:9 master is net-new spend.
  • Funnel differentiation on video is free — titling variants composited over the same paid masters.
  • Demand Gen uses identical files — switching it on later costs nothing at generation time.
  • Prompt work ships as overlays on the proven Meta spine, flag-gated, byte-identical when off — no regression risk to the running business.
One launch gate we recommend adding: the known open defect where ~1-in-3 static renders can carry a hallucinated competitor-style mark is a bigger liability on Google (trademark policy, broader placement surface) than on Meta. We recommend the already-drafted post-render vision QC ships before PMax scales past pilot volume; manual QA covers the pilot.

Asset specification & safe zones

The six generation sizes are confirmed complete against Google's current PMax requirements; only brand-level logos are added. Demand Gen reuses the identical files.

Static images

AssetSizeStatusSafe zone
Landscape 1.91:11200×628Requiredkeep critical content ≥120px from L/R, ≥63px from T/B (central 80% — Google may crop up to ~20% of outer edges)
Square 1:11200×1200Required≥120px all sides
Portrait 4:5960×1200Optional — unlocks mobile-first inventory≥96px L/R, ≥120px T/B
Square logo 1:11200×1200 (min 128×128)REQUIRED for asset group to servekeep mark centered; derived from brand logo, $0
Landscape logo 4:11200×300Recommendedsame
Every static must be designed to work with NO accompanying text — Google mixes assets per placement and may show the image alone. Max 20 images per asset group; Google recommends 4+ landscape, 4+ square, 2+ portrait. Our 3 concepts × 3 sizes = 3 per ratio — one short of that recommendation. Free remedy: include the clean catalog hero shot as a 4th image per ratio ($0, no generation), or add a 4th concept (+$0.22).

Video

AssetSizeDurationUI-overlay safe zone
Landscape 16:91920×1080≥10s (15-60s optimal per Google)avoid bottom 20% (player controls/CTA), right 15% (skip button), top-left (channel chip)
Square 1:11080×1080≥10skeep critical content in central 80%
Vertical 9:161080×1920≥10sGoogle official: avoid top 10%, bottom 25%, right 10% (engagement rail); we title inside top 14% / bottom 35% / right 15% to survive Meta AND YouTube with one asset
PMax minimum video duration is 10 seconds — current Meta masters are 8s, which is why the duration standardization decision matters. Videos cannot be file-uploaded to PMax: they must be hosted on YouTube (unlisted is fine) first. Up to 15 videos per asset group (raised from 5 in early 2026). If no video is supplied Google auto-builds slideshow videos from the statics — these underperform custom video by ~25-40%.

Text assets CLIENT-OWNED — reference only

AssetCountLimit
Headlines1530 chars
Long headlines590 chars
Descriptions4 + 1 short90 / 60 chars
Business name125 chars
CTA1automated or manual

Sizes deliberately skipped: 4:5 video (9:16 covers vertical inventory), minimum-size variants (Google downscales), GIF/HTML5.

Current state — the platform is half-ready

A code-level audit (three parallel traces, verified against the live tree) found PMax was anticipated in the architecture. What exists today:

EXISTS Ready to activate

  • All six PMax format definitions with exact delivery dimensions, plus Demand Gen and Shorts variants — dormant behind a coming_soon status.
  • Preset bundles google_static / google_video / google_all pre-modeled in the wizard contract.
  • Creative Director PMax archetype weighting and per-format creative briefs (pattern established for the frozen 16:9 surface).
  • Three funnel titling presets (awareness / consideration / conversion) — authored, parked, unwired.
  • 16:9 video is natively supported by the video model and by the titling compositor (1920×1080 composition exists).
  • Google Ads OAuth + read/sync integration (campaign import, asset-group listing) — the credential type the future push will need.

GAPS What the audit surfaced

  • No multi-asset text generation — the whole system is single-headline; the PMax text pack is a net-new service.
  • Video preset topology: as stubbed, a Google video run would queue one 16:9 ad only. The two-master + derived-1:1 kit needs new expansion plumbing (caught in adversarial review, now scoped).
  • Safe zones unpopulated for Google surfaces (all zeros) and one format-classification bug would title square PMax video on the landscape composition.
  • No delivery path: Meta has API push; Google is read-only today, and PMax video must be YouTube-hosted regardless.
  • Funnel presets exist but nothing selects them per run — plumbing required.
  • Landscape statics currently generate with 15–21% crop loss; exact-aspect generation sizes fix this (one already enum-legal, one needs a live probe).

Current pipeline — request → delivered ad

STATIC IMAGE VIDEO 1 Generate request Wizard input → dedup gate → run no AI 2 Detect (cached) Vision tags shot type + subjects Vision LLM 3 Seed selection Shot-type rank + 1st catalog image no AI 4 Creative Director 3 concepts: style, media, copy claude-sonnet-5 5 Judge Scores & ranks the 3 concepts LLM judge 6 Ad mint ×3 sizes 1:1, 4:5, 9:16 — billable per size fan-out ×3 7 $ Prompt build + render Fidelity + copy contract, safe-box gpt-image-2/edit $0.072/image 8 Post + deliver Crop/logo → Cloudinary → Meta no AI 1 Deterministic expand 1 video ad/product, seed = hero image no AI 2 $ Reference reframe 3 views outpainted to target aspect (cached) nano-banana-2/edit $0.08/image (1st time) 3 Canonical camera prompt Fixed template: 3-scene, camera-only no AI 4 $ Omni master 9:16 @ 8s Image-to-video, 1080p master gemini-omni-flash i2v $1.00 (8s master) 5 Face-safe crop Derive Meta surfaces, no re-submit no AI 6 Remotion titling Burned-in copy → safe zones → Cloudinary no AI

A circular "$" badge marks a billable API call (measured per-unit cost shown below it). A solid-outline chip names the model executing that stage. A dashed-outline chip marks a deterministic, no-AI step.

Where prompts live today

  • Creative Director round brief + OUTPUT CONTRACT
  • Static intent templates + PRODUCT_FIDELITY + geometry block
  • Canonical camera prompt (Omni directives)
  • Layout/copy derivation prompts
  • Quote provenance gate

Cost anchors (measured, not list price)

  • Static: $0.072/image on live default model
  • Video master: $1.00 @ 8s / $1.20 @ 10s
  • Reframe: $0.08/image, cached
  • Director + Judge: ≈1-2 LLM calls per product

Proposed PMax pipeline — three rails + delivery

STATIC ×3 SIZES VIDEO ×3 SIZES TEXT CLIENT-OWNED DELIVERY OUTPUT SHARED NEW Director w/ funnelobjective SHARED spine + NEWfunnelStage (TOF/MOF/BOF)objective; 3 concepts ≈1 per funnel stage claude-sonnet-5 (Atlas) NEW PMax prompt overlay NEW: PLATFORM_NOTES —central-80% safe area,standalone/no-text,thumbnail-readable.CTA: none on TOF/MOF;burned CTA on BOF only.Flag-gated; Meta promptsbyte-identical. SHARED Render ×3 sizes 1200×1200 · 960×1200 ·1200×628 — exact-aspectgeneration sizes gpt-image-2/edit $0.072 ×3/concept NEW QA overlay check Google official safe-zonePNGs composited overrenders; copy fidelitycheck SHARED 9:16 master @10s SHARED with Meta;duration standardized8s → 10s gemini-omni-flash i2v $1.20 NEW 16:9 master @10s NEW master + NEWPMAX_DIRECTIVES: hook-first pacing, landscapescenes gemini-omni-flash i2v $1.20 NEW Derive 1:1 NEW derive-only ad:face-anchored crop ofthe settled 9:16master. No video gen. ~free SHARED NEW Funnel titling ×3 Remotion presets:awareness / consideration/ conversion (re-authored for 10s)+ NEW YouTube safe zones:vertical: top14%/bot35%/right15%landscape: bot20%/right15%; square:10%No AI — reuses masters NEW YouTube upload PMax requires YouTube-hosted video; unlisted.Manual v1 → YouTubeData API later CLIENT Text assets — out of scope Clients already run PMax — theirexisting headlines / descriptionskeep serving. Burned-in creativecopy (static typesetting + videotitling) ships inside the visuals. no service built SHARED Burned-in copy sources Brand summary / tagline / tone /demographics · brandReviewssummary · product title / priceProvenance-gated reviewquotes only Logo assets 1200×1200 (required) +1200×300 from Brand.logoUrl via sharp $0 NEW Export bundle (v1) Per-asset-group zip,correctly named/sized +Google Ads Editor CSV Google Ads API push(planned) AssetService /AssetGroupAsset. OAuthpartially exists (google-adscredential type); needs devtoken review Product feed output(planned) Merchant Center supplementalfeed: push generatedlifestyle imagery intoadditional_image_link fields NEW Measure & loop Per-asset ratings(Low / Good / Best) +asset-group segmentationfeed back into prompt /template choices

$ = billable · NEW = net-new build · SHARED = reused from Meta pipeline · dashed outline = planned, not yet built

Prompt architecture — four canonical PMax variants, one shared spine

The design rule, learned from this codebase's own history (a well-intentioned video-prompt "improvement" was fully rolled back after it increased hallucinations): never fork whole prompts. Each PMax variant is an overlay on the proven Meta spine, behind its own flag, byte-identical to current behavior when off, A/B-able before default-on.

Canonical promptWhat the PMax variant addsWhat stays shared
1 · Static image generation
one call renders the finished ad, copy typeset in-model
Platform-notes block: content confined to the central-80% safe box (Google crops edges); design must work with no accompanying text and read at thumbnail size; CTA policy — no burned CTA on TOF/MOF (Google renders its own button), burned CTA on BOF only; 10% edge margins (vs 6% Meta); exact-aspect generation sizes for 1.91:1 and 16:9.Product-fidelity contract, intent templates (brand-led / social-proof / objection / lifestyle), exact-strings copy contract, geometry mechanism.
2 · Video generation
camera-only prompt; text composited downstream
New PMax directives profile: 10s pinned (PMax floor; model ceiling), hook-first pacing — product identity readable in the first 2 seconds (skip button, Shorts swipe) — and landscape-aware scene language for the net-new 16:9 master (today the prompt ignores aspect entirely).Three-scene timeline mechanics, no-text rule, physical-accuracy and product-fidelity blocks, operator guidance/raw override levers at every level (ad→product→category→brand).
3 · Creative Director
3 concepts/product; strategy + copy + media picks
Archetype weighting + creative briefs for the five new PMax surfaces (pattern exists); funnel objective block — TOF weights brand/editorial hooks, MOF weights proof and stats, BOF weights offer and CTA emphasis; concepts map one-per-funnel-stage on full-funnel runs.Brief assembly (brand/product/UGC/social-proof/performance signals), JSON output contract, judge pass, concept caching.
4 · Copy
burned-in creative copy only
Nothing net-new — PMax text-asset generation is out of scope (client-owned; see §Text assets). The Director's concept copy continues to drive what's typeset into statics and titled onto video.Concept copy contract, review-quote provenance gate, brand enrichment fields.
Why overlays and not new prompts: the Meta prompts carry two years of accumulated fixes (copy fidelity contracts, product-fidelity hardening, carve-outs discovered through measured regressions). A PMax fork would silently lose that lineage; an overlay inherits every future Meta fix automatically.

Full-funnel coverage — per product, Google optimizes stage selection

Funnel-addressing creative ships together, per product, into the client's existing asset groups. Google's combination engine already selects assets per impression using the viewer's intent signals — a first-touch user gets the lifestyle creative, a cart abandoner gets the offer creative, from the same group. Consolidation also feeds Smart Bidding's learning (Google advises against over-segmenting). The table below is a coverage spec — what every product's asset set must span — not an account structure. Stage-split asset groups and stage-level budget steering are explicitly not pursued.

Funnel coverageStatic templatesVideo titling presetBurned-in copy voice
TOF — Awarenessai_brand_led, ai_editorial (lifestyle imagery)canonical-awareness (exists, parked)brand story, hook, no hard sell
MOF — Considerationai_social_proof_led (rating+quote), ai_ugc_ledcanonical-considerationbenefits, reviews, objection handling
BOF — Conversionai_promotional, product_first_lifestyle + CTAcanonical-conversionoffer, urgency, explicit CTA

Imagery per stage

TOF → lifestyle / on_model shots (catalog lifestyle + rights-approved UGC); MOF → on_model / product_only + social-proof chrome; BOF → clean product_only / flat_lay hero + offer + CTA.

How it's selected

Every image already carries a vision-stamped shotType (lifestyle, on_model, product_only, flat_lay, detail, packaging) + ad-suitability score; seed rule stays "first catalog image, never UGC"; the funnel stage steers the Director's media picks, it does not override seeding.

Per-product output

≥3 statics ×3 sizes + 2 video masters ×3 sizes ×3 title variants, delivered as one per-product set — comfortably above the "at least 3 ads per funnel stage" bar. The Director's 3 concepts per product map one-per-stage, and the video funnel variants are free retitles of the same paid masters.

Every PMax run generates the full funnel spread by default — no per-stage runs, no new run parameters, no account restructuring. Google's per-impression optimization does the stage matching.

Social-proof hierarchy ADOPTED 2026-08-10

Adopted from team-supplied creative guidelines, and a strong fit — the platform's intent system was already built around a "core element" concept. The governing rule:

One dominant social-proof element per creative. Supporting proof may appear but stays visually secondary — quote, rating, review count, price, and CTA never get equal weight. And don't choose ratings-vs-reviews globally: choose the strongest proof story per SKU.
Creative typeStar ratingReview countQuoteWhen
Rating-FirstDominantSupportingNoRating ≥ ~4.5 with substantial volume; smaller formats where a quote crowds
Testimonial-FirstOptional, smallUsually noDominantShort, specific customer quote; lifestyle products; larger canvases
ComboYesOptionalYesLarge 1:1 / 4:5 only, short quote, strong rating, minimal other messaging
Product-First / MinimalOptionalNoNoStrong photography, premium brands, creative diversity for PMax

Per-SKU decision logic

  • Strong rating + large volume → Rating-First
  • Compelling quote → Testimonial-First
  • Both + large canvas → Combo (one still dominates)
  • Weak review count → never print it ("23 reviews" hurts); rating-only or quote instead
  • Rating below ~4.5 + high volume → popularity framing ("Loved by thousands", "18,000+ reviews") instead of the numeric rating

Thresholds live in config, not prose; count-display rules extend the existing tier-coherent rating-display service.

Why it fits the machine

  • The four creative types map onto the four existing static intents almost 1:1 — this is prompt + selection-logic work, not new rendering machinery.
  • The Director's brief already carries strongest-signal and proof-density fields — the decision logic slots into its objective block.
  • Concept diversity requirement: the 3–4 concepts per SKU must differ on the proof axis (rating / testimonial / product-hero / value) — meaningfully different approaches for PMax to test, not cosmetic layout variations. This also strengthens the 4th-concept remedy from §Specs.

Text assets — deliberately out of scope CLIENT-OWNED

Decision (2026-08-10): we are not in the ad-copy business for PMax. Clients already run PMax — their asset groups carry serving headlines and descriptions, and feed-driven retail placements pull title/price from the Merchant Center feed. We supply the visual layer: images, video, and logos into their existing groups.

What stays ours

Copy inside the creative — the headline/CTA the image model typesets into statics and the burned-in Remotion video titling. That is the creative itself, not a PMax text-asset field, and it's already core product driven by the Director's concept copy.

Boundary case

A brand-new asset group cannot serve without text. If a client ever wants one created, the client or their media buyer supplies the text assets — that's their account, their claims, their sign-off. Our future API push is supplement-only: it adds visual assets to existing groups and never touches text.

Unit economics

~$0.22
statics per concept (3 sizes, live default model)
+$1.20
net-new 16:9 video master @10s
≈ +$1.50–1.90
marginal cost per product alongside a Meta run
≈ $2.70–3.10
full PMax kit standalone

Cost breakdown

ItemCostNote
Statics 3 sizes $0.22/concept ($0.072/image measured) drops to ~$0.11 on the -developer model variant — but that switch is uncommitted and one sample showed a 16% hard-failure rate; re-measure before counting on it
×3 funnel concepts $0.43–0.65/product 9 images clears Google's recommended counts
9:16 video master @10s $1.20 SHARED with Meta (Meta moves 8s→10s, +$0.20 vs today)
16:9 video master @10s $1.20 net-new, PMax only
1:1 video ~$0 derived crop, no generation; face detect ~$0.02 first time
Funnel title variants $0 Remotion, self-hosted
Reference reframes ≤$0.08/image, one-time per-aspect cache, amortizes across runs
Logos $0 derived from brand logo
All figures are measured charges from the live ledger, not list prices (list prices understate by ~7× on this stack). Every submit is billable — the platform reads actual prices back from settled predictions.

Workflow, delivery & per-client prerequisites

End-to-end flow

  1. Generate — wizard adds a Google destination; one run produces the full visual kit per product (statics ×3 sizes ×3 concepts spanning the funnel, 2 video masters → 6+ titled renditions, logos).
  2. QA — automated safe-zone overlay check (Google's official templates composited over renders), copy-fidelity spot check, competitor-mark screen (manual at pilot; vision QC as the scale gate).
  3. Deliver v1 — per-product export bundle: correctly named/sized visual files + YouTube upload checklist. Colleagues add the assets to the client's existing groups (or a paused test campaign) and validate Google accepts everything.
  4. Deliver v2 (planned, in priority order) — YouTube Data API upload (unlisted) → Google Ads API asset push into existing asset groups (supplement-only: adds visuals, never touches text) → Merchant Center supplemental-feed writer pushing generated lifestyle imagery into product feed image fields.
  5. Measure & loop — per-asset ratings and asset-group segmentation feed back into template/prompt selection; the existing brand-voice derivation already reads Google campaign creatives and closes the loop.

Per-client prerequisites (checklist for the team)

  • Google Ads account with conversion tracking verified (PMax is goal-driven; without clean conversions it optimizes to noise).
  • Merchant Center linked for retail/feed-based PMax — feed hygiene (titles, GTINs, prices) is the client's; we contribute imagery.
  • YouTube channel decision: per-client channel vs agency channel hosting unlisted ad videos (team decision, §11).
  • UGC rights confirmed to extend to Google surfaces before any UGC-derived creative ships there.
  • Brand assets present: logo (drives the required 1:1 logo asset), populated brand summary (21 of 31 brands have one today — pilot from this population).

Measurement plan (consultant recommendation)

  • Naming taxonomy from day one: {brand}-{theme}-{funnel} for asset groups so per-asset ratings aggregate cleanly.
  • Pilot: 1–2 brands, full kit, paused-upload validation, then live with modest budget; 2-week read on asset ratings before scaling.
  • A/B discipline: PMax prompt overlays measured against plain prompts before default-on (flags make the control arm exact).
  • Incrementality guard: where budgets allow, keep one comparable brand PMax-dark as a holdout for the first cycle.

Risks & mitigations

RiskSeverityMitigation
~1-in-3 static renders carry a hallucinated competitor-style mark (known open defect) HIGH Treat the drafted post-render vision QC as a LAUNCH GATE for PMax scale-out (Google trademark policy + brand safety exposure is higher than Meta); manual QA until it lands
Prompt changes have regressed output before (a prior video-prompt "improvement" was fully rolled back) MED All PMax prompt work ships as flag-gated OVERLAYS; Meta prompts stay byte-identical; A/B before default-on
Funnel titling presets are authored for 8s pacing; masters move to 10s MED Re-author preset timings for 10s plates (small, contained)
Google video preset as stubbed would queue only ONE 16:9 ad MED Scoped: new two-master expansion + derive-only 1:1 ad (adversarial review caught this before build)
-developer image model showed 16% hard-failure in one 38-submit sample MED Stay on full model for PMax v1; re-measure before switching
No Google upload path; videos must be YouTube-hosted KNOWN v1 = export bundle + manual upload checklist; API push + YouTube Data API planned
Auto-generated Google slideshow videos if we under-deliver video KNOWN Always ship both masters; slideshows underperform ~25–40%
UGC rights were cleared with Meta in mind MED Legal/team check before UGC appears on Google surfaces

Decision register

DECIDED 2026-08-10

  • Dedicated PMax static set (no Meta reuse)
  • Standardize all video at 10s, share the 9:16 master (industry data: Stories sweet spot 6–10s, Reels/feed 15–30s, so 10s is defensible on Meta and is the model's ceiling anyway)
  • Delivery priority = generation first, then API push, plus product-feed imagery output
  • Full-funnel spread per product into existing asset groups — Google optimizes stage selection; no stage-split structure, no stage budget steering
  • No text-asset generation — visual assets only; clients' existing PMax copy serves (burned-in creative copy stays ours)

TEAM DECISIONS NEEDED

  • UGC rights coverage on Google surfaces
  • YouTube channel ownership model (per-client channel vs agency channel)
  • Which products get the full video kit vs statics-only (spend gate ≈ $2.6/product)
  • Switch Demand Gen on alongside (free — identical files)

NEEDS MEASUREMENT

  • -developer model reliability re-measure (cost halves if clean)
  • Static concurrency above 8 (429 watch)
  • PMax prompt overlay A/B vs plain prompts once live

Roadmap

PhaseScopeEffortDepends on
A — Surfaces live Flip 6 PMax formats live, enums, surface policies, exact-aspect gen sizes, two-master video expansion + derive-only 1:1, YouTube safe zones, format-classification fix, harness updates ~2–3 dev days
B — PMax canonical prompts Static PLATFORM_NOTES overlay + CTA policy, PMAX video directives profile (hook-first, 16:9 language, 10s), Director funnel objective + new format weighting ~2–3 days A
C — Funnel spread + delivery Full-funnel-spread default (one concept per stage, all three titling presets per master, re-authored for 10s), per-product export bundle, wizard UI, then YouTube API → supplement-only Ads API push → Merchant Center feed writer ~3–5 days + API approvals A, B
Every phase independently shippable and flag-gated; flags off = byte-identical current behavior. Verification: offline harness suite + one live probe run (~$2.50, one product) + a paused real PMax campaign upload to confirm Google accepts every asset.

Appendix — method & verification

How this was produced: three parallel read-only code traces over the backend (format/preset/safe-zone machinery · prompt/copy/Director systems · media model/templates/run flow), current pipeline documentation, and external research on Google's current PMax specs and safe-zone guidance. The resulting plan was then adversarially reviewed against the live code by an independent pass instructed to refute it: ~35 claims checked, 12 findings (2 critical, 4 high) — every finding is folded into this document (honest static pricing at the live default model, video preset topology requiring new expansion plumbing, mandatory schema enum + surface-policy work, funnel presets needing per-run wiring and 10s re-authoring, exact-aspect generation sizes, duration missing from video identity digests).

Key external sources: Google Ads Help (video ad specs & safe-zone templates, Shorts ads specs), current PMax spec guides (AdNabu, Hawky, TheMarketingCalc, PixExact), Meta video length benchmarks (Benly, QuickFrame, Superscale). Numbers marked "measured" come from the platform's own reconciled billing ledger, not list prices.

Not yet verified live: one non-enum generation size needs a single live probe; the -developer image model's failure rate needs a controlled re-measure; Google's acceptance of every exported asset gets confirmed by the paused-campaign upload in the pilot.