Creative testing

Decide what creative to run next and prove what actually worked.

Two jobs: read what the account already proved, and decide what to try next. Most of the value is in the first one — accounts almost always contain evidence nobody has read.

Prerequisite: the marketing-os foundation skill.

First: is this a creative problem at all?

Run the check before writing anything. From marketing-os/references/thresholds.md:

  • Fatigue — 3-day CTR below 70% of the 30-day CTR, with more than 1,000 impressions in those 3 days. That is a creative problem.
  • Frequency — above 3.5 prospecting, above 6 retargeting. That is an audience problem wearing a creative costume; new creative to the same exhausted audience buys very little.
  • Below 1,000 impressions in the window — there is no creative signal here at all. Say so. Do not read a CTR difference on 300 impressions.
  • Learning phase (under 50 conversions in 7d) — the ad set has not finished learning what it has. Adding creative now muddies it.

If CTR is stable and conversion rate fell, the ads are working and the landing page is not. Send it to marketing-diagnose.

Read the evidence that exists

meta_list_ads (30d and 7d)   # CTR, CPC, CPA, ROAS per ad — the ranking
meta_get_recommendations     # refresh_creative / fix_fatigue, with reasoning
list_marketing_assets        # the copy already written for this business
search_knowledge             # past_campaign items: what was tried, what happened
get_brand_profile            # voice, audience, banned words, required mentions
social_list_posts            # which organic posts went out, and where

search_knowledge for past campaigns is the highest-value call here and the one most often skipped. A business that has recorded its own results has a testing history; use it instead of starting from scratch.

Ranking ads honestly. Rank on the metric the business is actually graded on — ROAS against break-even for ecommerce, CPL against target for lead gen — not on CTR. A high-CTR ad that converts badly is a worse ad, and it is the most common false winner in an account.

A difference is only a difference when both ads have enough volume behind them. Below the 1,000-impression floor, report the numbers and say the comparison is not yet meaningful.

Where the outcome data lives

Marketing OS records, for every agent-drafted asset, whether a human published it, rewrote it first or discarded it — and once live, how the audience responded (reactions + 2 × comments + 3 × shares, matched to the post nightly). That is real human-feedback data, and it is genuinely rare.

It has no MCP tool. Over this connection you can see it only indirectly: which assets exist and at what status (list_marketing_assets), and which posts went out (social_list_posts). Point the user at the Content tab in Marketing OS for the engagement side, and do not describe engagement numbers you cannot read.

What you can do is feed it: when a test concludes, add_knowledge with kind past_campaign, naming the variable, the numbers and the window. That is what makes the next test start from evidence.

Design the next test

One variable at a time. Hook, format, offer, audience — changing two at once means the result cannot be attributed, and an unattributable result is worse than no test, because it gets believed.

Test in this order; the cheap ones first:

OrderVariableWhy first
1Hook / first lineBiggest CTR swing per unit of effort
2Format — static / video / UGC / carouselChanges delivery, not just response
3Offer / angleMoves conversion rate, not clicks
4AudienceLast — it changes what every earlier result meant

Check the angle against the brand profile's AI never-rules and banned words before drafting. The blocked_angle guardrail refuses creative text that matches one, and it names the phrase it matched.

Test organically before you pay for it

This is the move a paid-only workflow cannot make. A hook can be tested on the connected social accounts for nothing:

1  create_marketing_asset_draft (social_post)   # the variants
2  social_create_post           (HIGH)          # one variant per post
3  wait, then social_list_posts / the Content tab
4  take the winner into paid creative

Organic engagement is a weaker signal than paid conversion — say that when you report it — but it is free, it is fast, and it kills bad hooks before they cost anything.

Writing the variants

Read get_brand_profile first, every time. Then, per variant:

  • Primary text — the hook is the first line; roughly 125 characters read before the fold.
  • Headline — 40 characters or fewer.
  • Description — one supporting sentence.
  • Call to action — pick from what the campaign plan offers (SHOP_NOW, LEARN_MORE, SIGN_UP, GET_OFFER, …).

Write 3–5 variants that differ on one axis, and name the axis out loud. Ten variants differing on everything is not a test; it is a shuffle.

Every claim must be traceable to search_knowledge or to something the user said in this conversation. No invented statistics, guarantees, testimonials or prices.

Turning a variant into an ad. meta_create_ad puts one image, video or 2–10-card carousel into an existing ad set, from a library assetId or a Studio variantId. It always waits for approval and lands paused — meta_activate_entity is the separate step that spends. Leave placements out unless the user asked: they rewrite the whole ad set's placements, not just this ad's.

Concluding a test

markdown
**Variable**: <hook | format | offer | audience>
**Window**: <dates> · <impressions per variant>
**Winner**: <variant> — <metric> <x> vs. <y> (<the business's own line>)
**Confidence**: <"both variants cleared 1,000 impressions" | "too early — <n>
impressions on the smaller arm">
**Next**: <the one change to make>

Then write it down with add_knowledge (past_campaign). A test nobody recorded gets re-run in six months.

Do not

  • Call a winner below 1,000 impressions in the window.
  • Rank on CTR when the business is graded on ROAS or CPL.
  • Change two variables and attribute the result to one.
  • Quote an industry-average CTR, CPM or engagement rate. This pack has none.
  • Describe engagement numbers you did not read from a tool.

Something wrong or missing on this page? Tell us and we will fix it.