Creative intelligence: what to buy, what to build, and what actually works
Research done 21 Aug 2026, prompted by Alex: "im not convinced your creatives will be good. we need highly specialised content… build heuristics around how we generate creatives and event strategy… based on what you know makes creatives work in the real world. not in theory only."
This document exists because creative-system.md correctly identified the gap — the angle and copy objects carry almost no information — but could not say where the missing information comes from. This says where.
The constraint that settles build-versus-buy
The Meta Ad Library API does not return commercial ads in Singapore. Outside the EU and UK it serves political and social-issue ads only; ad_type=ALL yields regular product ads exclusively when ad_reached_countries names an EU state or the UK. Programmatic access to commercial ads elsewhere requires Meta Content Library, which is researcher-gated, or a paid third party.
This matters more than any feature comparison. Atlas already holds a Meta system-user token, so the obvious plan — build our own competitor scraper against the official API — reads as cheap and sensible. It does not work for our market. Every Singapore client's competitors are invisible to that API.
So the verdict is not close:
| Half of the problem | Verdict | Why |
|---|---|---|
| Competitor / market intelligence (what is running, what keeps running) | Buy | The API cannot serve it here. Vendors have solved the scraping; we would be rebuilding a scraper against a hostile surface, forever |
| Our own performance feedback (which of our creatives worked, and why) | Build | We already have Meta spend and results flowing in. No vendor knows our angle objects, our client dossiers, or our approval history |
Alex's instinct about Konvert was right, and for a stronger reason than the feature list.
The category splits cleanly, and most tools only do one half
- Pre-launch research and briefing — Konvert (Scout + AI Canvas), Foreplay (Swipe File, Discovery, Spyder, Lens, Briefs), Atria, MagicBrief, SwipeKit. Competitor ad history, hooks, angles, landing pages. Turns reference into direction.
- Post-launch creative analytics — Motion. Tracks winning concepts inside your own ad account. No competitor data, no market benchmark.
Neither half is sufficient. Foreplay does not touch testing, analytics or generation; Motion has no view outside your account. The interesting position is the one nobody sells: the loop between them — market evidence in, our creative out, our results back, informing the next brief. That loop is Atlas's, because only Atlas holds all three.
Why Konvert specifically
Not because its generator is better than ours — it is a generic image model with a good context window. Because of two things:
- Scout is the input
creative-system.mdsays does not exist: competitor ad history including what was paused versus scaled, with hooks, USPs, angles and landing pages extracted. What a competitor keeps running is revealed preference. That is the strongest real-world signal available, and it is not theory — it is money already spent by someone else, in our clients' exact market. - It ships an MCP. It exposes finding winning ads in a niche, pulling competitor creative, generating images from top performers, and turning winning-ad data into paste-ready briefs — explicitly positioned as a data layer for Claude agents and Claude Code. We already have
src/lib/mcp/connection.ts, written generically because "every MCP we add will need identical behaviour". Adding Konvert is a config object, not a project.
Plan limits are 50–300 image generations a month depending on tier. We should treat that as a briefing budget, not a production budget: the images are for reference, and Higgsfield renders.
Open question for Alex: pricing. I could not verify Konvert's tiers, and it should be checked against Foreplay, which is the more established tool with a deeper agency workflow. If Foreplay has Singapore coverage and Konvert does not, that flips the choice regardless of MCP convenience — coverage of our market is the only feature that cannot be worked around. Verify before paying.
What actually works, with numbers
These are the load-bearing findings. Each is a heuristic the system can act on, not an observation.
Attention is two gates, not one
| Metric | Definition | Benchmark |
|---|---|---|
| Hook rate (= thumbstop) | 3-second plays ÷ impressions | 18–28% cold feed, median 22–23%; 30% baseline, 40%+ top tier |
| Hold rate | viewers reaching a deeper checkpoint | the point where proof or offer starts carrying the message |
Hook and hold together predict CPA and ROAS better than either alone — that is the finding that matters. And the failure mode is diagnostic rather than vague:
High hook rate with low hold rate means the opening earned attention the body did not pay off — the hook promised something the ad did not deliver.
That is not a copywriting tip. It is a rejection criterion, and it tells us what the angle object has been missing. A hook makes a specific promise; the body must discharge that promise. Two fields with a checkable relationship between them beats two fields with a vibe between them.
Volume and diversity are the 2026 game
- 8–12 conceptually distinct concepts per campaign, 2–3 variations each
- Creative similarity score under 40%
- Refresh every 2–3 weeks
- Refresh mix: 50% new concepts / 30% refined variants / 20% proven performers — the last third is not sentiment, it anchors learning and stops performance collapsing during experimentation
- Low spend: 5–10 ads. High spend: up to ~30
- The expectation moved from shipping 10 statics a month to 100–200
Statics are not the poor cousin
- Statics still drive 60–70% of Meta conversions
- 40–60% lower CPM than video
- Video wins by 20–40% on conversion only where the product needs demonstrating
- Statics remain the highest-throughput format in performance marketing
For a renovation or events client, that is decisive: the product is a decision, not a demo.
Native beats polished
- UGC-style creative — real people, less production — sees +28% engagement and +29% conversion against traditional brand creative
- Excessive image text is still deprioritised, even though the 20% rule is gone. The rule left; the penalty did not
This is uncomfortable for a video agency and worth saying plainly: our production quality is not the performance lever we might assume it is. It is a trust and brand lever, which is a real but different thing. Where the objective is CPL, a rougher-looking execution of a sharper idea usually wins, and the system should be allowed to recommend that.
The advantage nobody else can have
The industry's answer to sameness is Meta's Creative Similarity Score — measured after the ads run, on the pixels. Two problems: it is a lagging indicator, and per our own Andromeda research similarity is not exposed in the API, so we cannot even read it.
Atlas can do strictly better, and the design is already half-written in rules/taste.md: "No two surviving concepts sharing a persuasion mechanism."
Because our angle object carries the persuasion mechanism explicitly, diversity can be enforced at the idea, before generation — a leading structural guarantee instead of a lagging metric we cannot access. Every competitor is measuring pixels after spending money. We can refuse to generate the second copy of an idea.
That is the thing worth building. It is also the honest reason our creatives are currently generic: not because the renderer is weak, but because nothing has been empowered to refuse.
What this changes, in order
- A persuasion-mechanism diversity gate, in code, before generation. Deterministic, free, and the single highest-leverage change. (Started —
src/lib/creative/diversity.ts) - Hook/payoff linkage on the angle model. A hook field that states a specific promise, a payoff field that discharges it, and a gate that rejects when it does not. Derived directly from the hook/hold finding.
- Konvert MCP as a briefing input, once coverage and pricing are verified, feeding Scout evidence into industry research per client.
- The feedback loop — our own hook and hold rates per concept, joined back to the angle that produced them, so the 50/30/20 refresh mix is chosen from evidence rather than guessed.
- Format selection by semantics, as
creative-system.mdalready specifies, now with the statics-versus-video rule above as one of its inputs.
Sources
Konvert: product, AI Canvas, MCP · Ad Library API limits: what the free API covers, seven walls developers hit · Category: Motion vs Foreplay, Foreplay alternatives · Hook and hold: hook rate benchmarks, thumbstop vs hook vs hold, hook rate beats CTR · Diversity and volume: Andromeda creative strategy, creative diversity as the #1 lever · Statics: static ads playbook, creative statistics · Higgsfield: Marketing Studio
The diagnostic feeds generation, or it changes nothing
Built 21 Aug 2026, and worth recording as a pattern rather than a feature.
The gap report could see that all fifteen of one client's angles ran on authority, mechanism_reveal, contrarian and price_anchor — every one a device that supplies proof or reframes, not one that argues from a problem or an aspiration. It had been able to see that for as long as it existed. The generator could not, so it kept producing the next authority angle, including from an insight whose subject was the category's biggest fear.
A diagnostic that only reports afterwards cannot correct a bias in generation. The report was right every time and changed nothing, because nothing read it.
Two biases were structural rather than accidental, which is why prompting alone would not have found them:
- Proof over argument. The schema asks for
proof,proof_factsandproof_rationale, and the standing rule is that every proof must be an approved fact. Provable framing is therefore the path of least resistance, and a pain-led argument feels less defensible even when it is the better ad. Authority, social proof, price anchoring and mechanism reveal answer *why believe you*; none of them answers *why act*. - Differing read as spreading. "Angles must differ by awareness" produced exactly one top-of-funnel, one middle and one bottom on every run — a set that can never converge on a 70-90% top-of-funnel target. Variety and allocation are different instructions and the rule only stated the first.
The fix is accountComposition(): the live mechanism, persona and awareness distribution is passed into the define run as coverage, not a template, alongside explicit instructions that proof is not an argument and that volume should weight top of funnel — pitched at problem_aware rather than unaware, which is how we reconcile Denney's 70-90% target with Perdriau's warning that unaware-stage creative is a poor bet below serious scale.
Measured on the same client, same insight, same count, three consecutive runs:
| Run | Mechanisms | Awareness |
|---|---|---|
| Before | authority, mechanism_reveal, contrarian | 1 top / 1 mid / 1 bottom |
| Composition feed | cost_of_inaction, objection_kill, price_anchor | 1 top / 1 mid / 1 bottom |
| Awareness weighting | fear_avoidance, identity, gain_aspiration | 2 top / 1 bottom |
The account went from four mechanisms across fifteen angles to nine across twenty-one, and painDesire moved from unreadable to a 0.6 pain share — inside the 0.4-0.7 band.
The caveat that matters. Sixteen angles predate the concept axes and carry null persona and mechanism, so they still report as unclassified and still drag top-of-funnel share to 43%. Do not backfill them by inference: declared beats inferred precisely because a stored guess is trusted over inference and would silently corrupt the count. Retire them, or have a person declare them.