Hand an AI a folder of ads and get back consistent tags on every creative choice — how each ad opens, what it argues, what proof it shows, how it looks, what it asks for.
flowchart LR
A["<b>1 · Your ad library</b><br/>images, video, carousels<br/>+ their captions"]
B["<b>2 · The tagger</b><br/>dedupe → visual pass<br/>→ argument pass"]
C["<b>3 · A tagged sheet</b><br/>33 traits per creative<br/>ready to join to spend"]
A --> B --> C
style A fill:#f6f8fa,stroke:#57606a,color:#1f2328
style B fill:#ddf4ff,stroke:#0969da,color:#1f2328
style C fill:#dafbe1,stroke:#1a7f37,color:#1f2328
Once your creative is tagged, performance data can be grouped by creative decision instead of by ad name. That is the difference between "these five ads did well" and "soft CTAs with a customer quote outperform on LinkedIn decision-stage by 39%."
Built on the Creative Intelligence Trait Taxonomy (CITT) v4 — 33 traits, 164 defined values, every value written with an explicit rule separating it from its nearest neighbour.
- Put
SKILL.mdin your AI tool's instructions field — Claude Project, Custom GPT, Gemini Gem, or an API system prompt. - Put
reference/citt-taxonomy.csvin its knowledge base or file uploads. - Send it a creative with its caption and the computed counts.
No code required. If you are tagging more than a few hundred ads, use reference/output-schema.json
with your provider's structured-output mode and batch it.
| Required | |
|---|---|
asset_id |
The deduplicated creative ID — run duplicate-ad-creative-finder first |
| The creative | Image, video file, or the full ordered carousel |
caption_text |
Verbatim |
platform |
|
| Computed counts | Word count, slide count, duration — measured, not estimated |
The skill halts rather than guessing if any of these are missing. That is deliberate.
- Preflight — five checks, each of which halts the run. The most important confirms your input is keyed by creative, not by platform ad ID.
- Visual pass — everything visible in the creative itself, walked through the taxonomy layers in order.
- Argument pass — everything in the caption, tagged separately so the copy cannot contaminate the visual traits and vice versa.
- Resolution — where two values could apply, the taxonomy's own disambiguation rule decides.
- Flagging — genuine ambiguity gets flagged, never silently resolved.
- Defect detection — after a full library, check the value distributions for impossible results. They usually indicate a delivery bug, not a finding.
reference/tagging-rules.md — every operational rule for getting
a vision model to classify a large asset library reliably, and what each one cost to learn.
Deduplicate before tagging and 1,006 vision calls become 202. Sample video keyframes at
(i + 0.5) / n, because the exact first and last frames of an ad are usually a fade. Downscale to
1280px — full resolution costs 3–5× the tokens for no accuracy gain, but below 1000px small CTA
text starts dropping out. Send the whole carousel deck, not slide 1, or proof traits read as absent
on 73% of your carousels and you will believe it.
None of this is specific to advertising. It is how you make a vision model classify any large library consistently.
| File | What it is |
|---|---|
SKILL.md |
The skill. Goes in your AI tool's instructions field |
reference/citt-taxonomy.csv |
33 traits, 164 values, each with a definition and a disambiguation rule |
reference/output-schema.json |
JSON schema for structured-output mode. Enums generated from the taxonomy — never retyped |
reference/tagging-rules.md |
The operational manual. Every rule, and what it cost to learn |
duplicate-ad-creative-finder → run before this · creative-pattern-miner → run after this ·
winning-ad-formula-finder · creative-diversity-audit
MIT © Raneq Barber