---
sharksapi_version: p-564b17e330
name: ad-creative-factory
description: Produce and iterate paid-ad creative at scale — Google RSA assets, Meta copy + visual concepts, LinkedIn ads, TikTok/Reels/Shorts hooks and scripts, static concepts and retargeting variants — grouped by strategic angle with an explicit hypothesis per angle, validated against platform character limits, tracked against what was already tested, and routed through draft approval. Production counterpart to the ads-creative audit skill.
allowed-tools: [memory_bootstrap, memory_search, memory_write, get_google_ads, get_meta_ads, get_ga4, get_ga4_events, keyword_planner_ideas, search_serp_google, scrape_website, analyze_competitor_website, trustpilot_get_reviews, g2_get_reviews, capterra_get_reviews, get_google_business_reviews, get_social_mentions, submit_draft, list_drafts, revise_draft, read_dashboard, update_strategy_task]
metadata:
  role: paid channel agent / creative producer
  triggers: [ad creative, write ads, ad copy, rsa headlines, meta ad copy, ad variations, new ad angles, creative refresh, creative fatigue, video ad script, ad concepts, reklaamtekstid]
  sources: "Adapted for SharksAPI from coreyhaines31/marketingskills ad-creative skills (MIT, © 2025 Corey Haines). Synthesis, not verbatim copy."
---

# Ad Creative Factory

Produce paid-ad creative that is grounded in the project's brand context, real customer language and actual performance data — organized by strategic angle, not as dozens of superficial rewrites. This is a **production** skill; `ads-creative.skill.md` (audit) remains the quality-control layer for what's already running.

All JSON snippets are `params` payloads for `POST https://sharksapi.ai/api/v1/a2a`. Inspect the live tool schema (`GET /api/v1/a2a/tools`) before calling tools — review/VoC sources vary per project.

## Modes

- **A. Generate from scratch** — new campaign needs its first asset batch (usually requested by `paid-ads-operator` Phase 2)
- **B. Iterate from performance** — read what's running, keep winning elements, replace losers
- **C. Recurring batch** — scheduled refresh cadence against creative fatigue
- **D. Cross-channel adaptation** — a proven concept re-natived for another platform

## Phase 0: Context first (never skip)

1. `{"tool": "memory_bootstrap", "arguments": {}}` — `context:voice`, `context:icp`, `context:objections`, `context:constraints` (forbidden words/claims), autonomy setting.
2. `{"tool": "memory_search", "arguments": {"query": "voc:"}}` and `{"query": "creative", "scope": "channel:paid"}` — real customer pains/objections/phrases from `voice-of-customer`, plus **what has already been tested** (win/loss lessons). Never re-test a documented loser without saying so.
3. `read_dashboard` (own token) — the request/task and any `action_items` (manager feedback on earlier creative drafts → `revise_draft` first).
4. Missing marketing context → request it (`marketing-context.skill.md`) and label all copy assumptions explicitly.

If VoC memory is thin, mine live evidence directly: `trustpilot_get_reviews` / `g2_get_reviews` / `capterra_get_reviews` / `get_google_business_reviews` (own + competitor products where available), `get_social_mentions`, competitor pages via `analyze_competitor_website` — extract verbatim phrases, pains, objections. Real words beat invented copy. Never fabricate quotes, statistics or claims; every factual claim in ad copy must trace to context memory or a source you read this session.

## Phase 1: Angles before variations

Define 3–6 **strategic angles**, each with an explicit hypothesis tied to evidence:

```
Angle: "Time-to-value" — HYPOTHESIS: trial signups stall on perceived setup effort
(VoC: 9 review mentions of "easy setup"); leading with {concrete time} beats feature-led copy for cold traffic.
Awareness stage: problem-aware. Emotional driver: relief.
```

Cover deliberately (as the brief requires): awareness stages (cold/problem-aware/solution-aware/retargeting), message types (pain-led, outcome-led, proof-led, objection-killer, competitor-switch), and emotional vs rational drivers. Variations exist WITHIN an angle (different hooks/proofs for the same bet) — 3–5 strong variants per angle beat 30 rewrites.

## Phase 2: Produce platform-native assets

Per angle, produce only the formats the brief/campaign needs, honoring **platform specs — validate lengths before submitting**:

- **Google RSA**: up to 15 headlines (≤30 chars each), up to 4 descriptions (≤90 chars); headlines must mix-and-match without repetition; include keyword-relevant headlines (`keyword_planner_ideas`, `search_serp_google` for SERP language)
- **Meta**: primary text (hook in first ~125 chars), headline (~40 chars), description (~30 chars) + visual concept per variant
- **LinkedIn**: intro text (hook before "…see more" ≈ 150 chars), headline (~70 chars)
- **TikTok/Reels/Shorts**: 2-second hook, beat-by-beat script (15–30s), on-screen text, native-feel direction
- **Static image concepts**: layout, visual metaphor, overlay text, CTA
- **Retargeting variants**: objection-killers and proof-led follow-ups per angle

Where direct image/video generation isn't available, deliver a **creative brief** per visual (composition, mood, text overlay, format sizes) or a generation prompt — clearly labelled as a brief for a designer/tool.

Count characters for every asset; anything over limit is a defect, not a nitpick.

## Phase 3: Test plan + approval

Package each batch WITH its test plan — angles, variants per angle, where they run, the success metric and decision date (agree these with `paid-ads-operator` / the measurement conventions in `campaign-analytics-agent` memory). Then submit for approval:

```json
{"tool": "submit_draft", "arguments": {
  "type": "ad_text", "channel": "meta_ads",
  "title": "Creative batch: {campaign} — {n} angles × {m} variants",
  "body": "{angles with hypotheses, all assets with char counts, visual briefs, test plan, already-tested log}",
  "priority": "high"
}}
```

Process feedback via `revise_draft`. No creative goes live unapproved. Record the batch in memory:

```json
{"tool": "memory_write", "arguments": {"scope": "channel:paid", "type": "task_state",
 "title": "creative-batch: {campaign} v{n}",
 "content": "2026-07-10 submitted: angles [{a1},{a2},{a3}], {m} variants each, draft #{id}. Decision date {date}. Untested angles remaining: {list}."}}
```

Mark the strategy task complete only when the batch is approved and handed over (and, where the task says "live", verified live in `get_google_ads`/`get_meta_ads` by the operator). Producing copy alone is not completion.

## Phase 4: Learn from results (modes B/C)

When results exist (from `paid-ads-operator` monitoring or directly via `get_google_ads`/`get_meta_ads` + `get_ga4_events`):

1. Judge on conversions/CPA/ROAS per angle — CTR only as a diagnostic (high CTR + no conversions = message/landing mismatch, hand to `ads-landing`).
2. Attribute wins/losses to **elements** (hook style, proof type, emotional driver, format), not just "ad A beat ad B" — that's what transfers to the next batch.
3. Check data sufficiency before calling winners (small samples → "inconclusive", extend or stop the test).
4. Write lessons:

```json
{"tool": "memory_write", "arguments": {"scope": "channel:paid", "type": "lesson",
 "title": "Proof-led beats pain-led for retargeting",
 "content": "2026-07: {campaign}: proof angle CPA €{x} vs pain angle €{y} (n={conv}). Reuse customer-count proof in retargeting; retire pain-led there. Fatigue: refresh needed ~3 weeks."}}
```

5. Mode C cadence: refresh when frequency climbs and CTR/CPA decay vs the batch's own baseline — propose the refresh batch before fatigue bites.

## Failure & fallback

- No performance data (new account) → mode A on VoC + context evidence, framed as hypotheses with a deliberately diverse first test.
- No VoC/review sources connected → mine site + competitor pages + SERP language; label the evidence as weaker and recommend `voice-of-customer.skill.md`.
- Draft tools unavailable → deliver the batch as a document marked NOT APPROVED.
- Brief demands claims you cannot source → refuse those lines and propose sourced alternatives; never launder invented claims into ads.

## Sources & attribution

Angle-first batch structure adapted from Corey Haines' *marketingskills* ad-creative skills (MIT, license verified 2026-07-10), rebuilt on SharksAPI context memory, VoC evidence, draft approvals and test-plan handoffs to the paid-ads-operator loop.
