Systems Lab

Agent skill

meta-ads-framework

Table-first operating framework for Meta (Facebook and Instagram) ads.

activeReaches the webInstructions only3,741 words

Filed under ABM and paid.

From lbarberis/gtm-skills · 7 skill entries · 0 · pushed 2026-09-26

What it does when it runs

Table-first operating framework for Meta (Facebook and Instagram) ads. Covers account structure, the four campaigns (Test, Scale, Retarget, Retain), audiences (broad, interest, lookalike, custom), creative-audience fit, creative variants and production quotas, creative fatigue and refresh, learning phase, budget scaling, audits, diagnosis and weekly reviews. Use this skill whenever anyone asks to plan, launch, structure, audit, diagnose, scale or review Meta, Facebook or Instagram ad campaigns, write paid social creative briefs, decide budgets or bids on Meta, or asks why Meta performance changed, even if they never say "framework". Every answer is built from labelled tables, not prose.

Automated analysis of the skill and the 2 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
  • engineering.fb.com
  • library.motionapp.com
  • motionapp.com
  • www.facebook.com
  • www.jonloomer.com
  • www.scalemate.co
Tool permissions it declares
No allowed-tools in the frontmatter. It only issues instructions, so there is nothing to bound.
Actions present in the files
None. Instructions only.

Ask about meta-ads-framework

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/lbarberis/gtm-skills.git /tmp/gtm-skills
git -C /tmp/gtm-skills sparse-checkout set "skills/meta-ads-framework"
mkdir -p ~/.claude/skills/meta-ads-framework
cp -R "/tmp/gtm-skills/skills/meta-ads-framework/." ~/.claude/skills/meta-ads-framework/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

Or take the whole library

This repo ships a .claude-plugin manifest, so Claude Code can install all 7 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.

/plugin marketplace add lbarberis/gtm-skills
/plugin

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from lbarberis/gtm-skills/blob/aba514c75be2102fa8c91074bb978ee36cfa050b/skills/meta-ads-framework/SKILL.md, which is licensed MIT (repository). 3,741 words, 16 headings.

Meta Ads Framework

This skill makes you reason about Meta ads the way the team does: in tables, one decision per row, with every platform claim tagged by where it comes from. The tables are not decoration. Filling a table forces you to cover every case, expose missing inputs, and separate facts from rules of thumb. Build the tables first, then write at most one or two connecting sentences between them.

Platform facts are current as of September 2026. See section 8 before stating any of them as fact to someone else.

1. Table contract

Follow every rule on every output, including quick answers.

RuleWhat it means in practiceWhy it matters
Tables firstDecide which tables the answer needs (section 2), fill them, then add prose only as short connective linesStructure exposes gaps that paragraphs hide
Label every tableThe line above each table reads: Rows: what one row is. Columns: what the columns holdA reader, or another model, must be able to use the table cold
One row, one objectEach row is one campaign, audience, ad, concept, signal or decision. No merged ideas, no lists inside cellsRows become checkable actions
Short cellsAim for under 25 words per cell. Numbers with units (%, x, days, EUR or USD)Tables stay scannable and printable
Tag the evidencePlatform claims carry a tag from section 8: [M] Meta doc, [P] practitioner, [H] heuristic, [A] account data, [?] assumptionHeuristics must never pass as platform rules
Never invent account dataIf an input is missing, write "Unknown" in the cell and add it to the Open questions tableA confident wrong number is worse than a gap
Close with decisionsEvery answer ends with a Decisions table and, if anything is unknown, an Open questions tableThe output is always actionable
House styleNo em dashes. Plain words. Sentence case headersTeam standard
DeliverablesIn chat, use markdown tables. If asked for a report, document or page, build a clean HTML page around the same tablesSame thinking, printable format

2. Pick the mode

Rows: the six request types this skill handles. Columns: how to recognise each, and the tables to produce, in order. Templates are in section 5.

ModeTypical requestTables to produce, in order
Build"Set up Meta for X", "structure the account", "launch campaigns"Intake, Campaign plan, Audience map, Concept matrix, Creative quota, Budget split, Decisions, Open questions
Audit"Audit this account", "is our structure right"Intake, Structure gap, Audience check, Creative health, Measurement check, Priority fixes, Open questions
Diagnose"CPA went up", "ROAS dropped", "delivery stalled"Intake, Symptoms, Hypotheses (in section 6 order), Saturation ladder check, Actions, Open questions
Creative plan"Brief new ads", "what should we test", "concepts for Meta"Persona x stage grid, Concept matrix, Creative quota, Refresh calendar, Decisions
Scale"Can we increase budget", "how do we scale"Readiness gates, Marginal CPA, Budget step schedule, Risks, Decisions
Weekly review"Weekly Meta review", "what changed this week"KPI summary, Ad-level saturation ladder, Rules fired, Next week actions

If a request mixes modes, run them in the order listed above and share the Intake table once.

3. Intake

Always start with this table. Fill what the user gave you or what connected tools return; mark the rest Unknown.

Rows: the account facts every recommendation depends on. Columns: the value, where it came from, and whether it blocks the answer.

FieldValueSourceBlocking if unknown?
Business model and offerYes
Optimization event (purchase, qualified lead, trial)Yes
Weekly volume of that eventYes
Target CPA or ROASYes
Monthly Meta spendYes
Markets and languagesNo
Pixel plus Conversions API, deduplicatedYes for Diagnose
Customer list size (for exclusions and seeds)No
Warm pool size (monthly site visitors, engagers)No
Current structure (campaigns, ad sets, ads live)Yes for Audit
Creative production capacity per weekYes for Creative plan
Special ad category (credit, housing, employment, social issues)Yes
Attribution setting in useNo

4. The framework

These are the reference tables. Copy the relevant rows into your answer and adapt them to the account; do not paste them whole.

4.1 The two things that decide performance

Everything else serves these two. Meta matches each ad to each person at delivery time, so creative does most of the targeting, and every winning ad has a shelf life.

Creative matches the audience. Rows: the five ways a creative fits or misses its audience. Columns: what a match looks like, how to check, what to do on a miss.

FitMatch looks likeHow to checkOn a miss
PersonaOne ad speaks to one person with one problem; Scale runs 3-5 personas in one ad setAge, gender, placement and Audience segments breakdowns per adRewrite the hook for the segment it drifted to, or brief a new persona ad
Awareness stageCold ads name the problem or show the outcome; warm ads prove and handle objections; customer ads offer what comes nextMessage vs the campaign it runs inMove or rewrite
DistinctnessEach ad changes angle, persona, messenger or format [M]First frames and first lines side by sideKeep the strongest near-duplicate, brief new angles
Placement fitNative 9:16 and 4:5, captioned, inside safe zonesPlacement preview, Safe Zone GuardrailRe-export per placement
Promise continuityLanding page repeats the ad's promise above the foldGood CTR, weak conversion rate on one adSend that angle to a matching page

Creative is refreshed before it saturates. Meta flags fatigue only once cost per result has doubled, so act on the early rungs. Rows: saturation signals in the order they appear. Columns: threshold, where to see it, action.

SignalThresholdWhereAction
Frequency climbing7-day frequency past ~2-2.5 cold, ~5 warm [P]Ad level, 7 daysBrief 2-3 variants of the concept
Attention fadingCTR down 20-25%+ from the ad's first week while CPM rises [P]Ad level, first vs last 7 daysLaunch variants: new hook or first 3 seconds
Creative limitedCost per result above the ad's past level, under 2x [M]Delivery columnRotate refresh batch in
Creative fatigueCost per result 2x past level or more [M]Delivery columnRetire the ad; if its variants fade within 1-2 weeks, retire the concept
Concentration risk1-2 ads carry most of an ad set's spend and their cost per result is rising [P]Spend share by adFeed new concepts now

Plan production backwards from the hit rate: about 5% of ads become winners [P, Motion 2026], so one new winner takes roughly 20 launched ads.

4.2 Campaigns and budget

Rows: the four campaigns, each with one job. Columns: setup, funding and how each is judged.

CampaignJobSetupShare of spendAd setsAdsJudge on
TestFind winning concepts cheaplyMeta creative testing tool inside the Scale ad set (2-5 ads, up to 20% of budget suggested) [M], or a separate ABO campaign for hard spend control15-20%; up to 30% on new accounts; less when Scale is on target [H]None extra (tool) or one per concept, broad2-5 per testCost per result and spend share; hook rate and CTR only diagnose [P]
ScaleNew customers at target costSales or Leads, campaign budget, highest volume; add a cost goal only once CPA is stable, loosely55-70% [H]1-3: Broad always, Lookalike signal, Interest signal; customer exclusion in audience controls8-15, max 50 [M]Blended CPA or ROAS, new-customer share, marginal CPA
RetargetConvert engaged non-buyersOriginal audience setup, Advantage+ audience off, so the custom audience binds [M]0-15%, default 10% [H]One consolidated warm ad set, recent buyers excluded4-8Cost per result, frequency with CTR, lift over Scale
RetainRepeat, upsell, expansionOriginal audience setup, small fixed budget0-10% [H]Customer list, purchasers 180 days3-6Repeat rate, revenue per customer

Rules that apply across the table:

RuleDetail
Day oneLaunch Test and Scale only. Add Retarget when Audience segments show Scale under-reaches warm users; add Retain when there is a repeat or expansion motion
Check before funding RetargetBroad delivery often already spends 25-35% on engaged people and customers [P, Loomer]. If so and warm frequency is healthy, skip Retarget
Budget floorWeekly ad set budget of about 50x target CPA [H]; if unaffordable, consolidate or optimize for a higher-volume event

4.3 Audiences

Rows: audience types from coldest to customer. Columns: what it is, how Meta treats it, how to build it, where it runs, when to use it.

AudienceWhat it isHow Meta treats itBuild ruleRuns inUse when
BroadAdvantage+ audience, no suggestionsOnly location, minimum age, language and custom audience exclusions bind [M]Customer exclusion goes in audience controls, never suggestionsTest, ScaleAlways the core ad set once the pixel has conversion history
Interest stack3-5 related interests as one suggestionSuggestion; Meta widens when it predicts better results [M]. Interests were consolidated in 2025 [M]Group by theme, never one interest per ad setScale signal ad setNew pixel, niche, tiny budget, new geo
LookalikeSimilar to a seed of best customersSuggestion under Advantage+ audience; hard only in original setup [M]Seed min 100 people in one country, 1,000-5,000 recommended [M]; one tier per ad set, usually 1-3% [P]Scale signal ad setStrong first-party seed, new country
Custom: warmVisitors 30-180 days, engagers 90 days, video viewers 50%+ 30 daysSuggestion under Advantage+ audience; hard with it switched off [M]One combined audience, original setup, exclude purchasers 30 daysRetargetScale under-reaches warm users and the pool can spend without frequency climbing
Custom: hotCart, checkout, lead form open, pricing page, 7-14 daysSame as warmStay inside the warm ad set unless it can carry its own budgetRetargetThousands of abandoners a week
Custom: customersCRM list, purchasers 180 daysBinding as an exclusion in audience controls [M]Sync from CRM or re-upload monthlyRetain; exclusion everywhere; lookalike seedEvery account

4.4 Creative

Rows: the four levels at which a creative can change. Columns: what changes, whether Meta treats it as distinct, how many to make.

LevelWhat changesDistinct for Meta?How many
ConceptPain point, persona, promise, emotional triggerYes [M]4-6 live in Scale; new ones weekly in Test
ExecutionFormat and messenger: UGC, founder, static, carousel, catalogOften, if visually distinct [P]2+ formats per concept
VariantHook or first 3 seconds, headline, thumbnail, primary textUsually grouped with its parent [P]2-3 per winning execution
Micro-tweakColour, one word, music, button textNo [P]None

Rows: campaigns. Columns: creative quota at any time and refresh cadence.

CampaignConcepts liveVariants per conceptAds per ad setFormat mixRefresh
Test1-5 per test1-32-5 per testGenuinely different ads onlyWeekly batch
Scale4-62-38-153+ of: 9:16 video, 4:5 video, static, carouselWinners in one weekly batch; retire on the ladder
Retarget3-41-24-8Testimonials, demo, catalog, offerMonthly
Retain2-31-23-6Catalog, launch video, offerPer launch or season

Rows: monthly spend tiers (USD, Motion 2026 benchmarks [P]). Columns: average creatives tested per week, hit rate, winners per month that volume yields (derived).

Monthly spendTested per weekHit rateWinners per month
Under $10K2.84.0%~0.5
$10K-50K4.16.4%~1.1
$50K-200K6.68.1%~2.3
$200K-1M11.28.6%~4.2
Over $1M18.88.8%~7.2

Aim for the top quartile, which tests 1.5-3x its tier average [P].

4.5 Decision rules

Rows: recurring decisions. Columns: trigger, action, check cadence, evidence.

DecisionTriggerActionCheckEvidence
Protect learningNew ad set or significant edit: targeting, creative, optimization event, adding an ad, pausing the ad set; budget and bid changes depending on sizeLeave until ~50 optimization events since the edit and at least a week; batch all edits into one weekly windowDaily, no edits[M]
Kill a testSpend 2x target CPA with no conversion, or CPA over 1.5x target after 3x target CPA spentPause, log the learningEvery 2-3 days[H]
Graduate a winnerCPA at or under target over 3x target CPA of spendAdd to Scale in one weekly batch or as a new ad set in the Scale campaign; reuse the post IDWeekly[M] adding an ad resets learning
Scale budgetScale on target 3+ days and marginal CPA under targetRaise 15-20% every 48-72 hoursEvery 2-3 days[H]; Meta publishes no safe %
Refresh creativeAny rung of the saturation ladderBrief, launch variants, rotate, retireWeekly[M] flags, [P] early rungs
Consolidate"Learning limited"Merge ad sets, drop the weakest signal ad set, raise the funnel event, or loosen a tight cost controlWeekly[M]
Cap retargetingWarm 7-day frequency above ~5 with CTR fallingMove Retarget budget to ScaleWeekly[P]

Marginal CPA = (this week's spend minus last week's) divided by (this week's conversions minus last week's). Average CPA hides the cost of the extra customers you are buying.

4.6 Naming

Rows: account levels. Columns: pattern and example.

LevelPatternExample
CampaignStage_Objective_Geo_BudgetScale_Sales_IT_CBO
Ad setAudience_Seed-or-window_DetailLAL_Purch180_1-3pct
AdConceptID_Format_Variant_LaunchC07_UGCvid_H2_260924

Keep the concept ID constant from Test to Scale so reporting can roll up by concept.

5. Output templates

Use these headers exactly. Add rows as needed; never drop a column. Each table still needs its Rows and Columns line.

Campaign plan (Build). Rows: campaigns. Columns as shown.

CampaignJobObjective and eventBudget controlShareDaily budgetAd setsAdsJudge onEvidence

Audience map (Build, Audit). Rows: ad sets.

Ad setCampaignAudience typeControls (hard)Suggestions (soft)ExclusionsEst. sizeEvidence

Persona x stage grid (Creative plan). Rows: personas. Columns: awareness stages. Each cell holds the core message for that pair, or "Gap".

PersonaCold: problem or outcomeWarm: proof and objectionsCustomer: what comes next

Concept matrix (Build, Creative plan). Rows: concepts.

Concept IDPersonaStageAngle (pain or promise)MessengerFormatsVariantsHypothesisCampaignStatus

Structure gap (Audit). Rows: framework elements from section 4.

ElementFramework saysAccount hasGapImpact (High, Med, Low)FixEvidence

Creative health (Audit, Weekly review). Rows: live ads with meaningful spend.

AdConcept IDSpend shareCost per result vs target7-day frequencyCTR vs first weekDelivery flagLadder rungAction

Measurement check (Audit, Diagnose). Rows: tracking items from references/platform-details.md.

ItemExpectedFoundPass or FailFix

Hypotheses (Diagnose). Rows: candidate causes in section 6 order.

#CauseEvidence forEvidence againstTest to confirmConfidence

Readiness gates (Scale). Rows: gates.

GateThresholdCurrentPass or Fail
On targetCPA or ROAS at target 3+ days
Learning exitedNo ad set in Learning or Learning limited
Creative runway2+ fresh concepts ready to launch
SaturationNo top-spend ad past rung 2 of the ladder
Tracking stableNo event drops or dedup issues this week
Marginal CPALast step's marginal CPA under target

Budget step schedule (Scale). Rows: planned steps.

StepDateBudget fromBudget toChange %Stop condition

Decisions (every answer). Rows: decisions or actions.

DecisionWhy (evidence)OwnerBy whenSuccess looks like

Open questions (whenever anything is Unknown). Rows: missing inputs.

QuestionWhy it mattersDefault assumed until answered

6. Diagnosis order

Work through causes in this order and stop only when evidence confirms one. Cheap, common causes come first.

Rows: candidate causes of a performance drop. Columns: what to check and the tell-tale sign.

#CauseCheckTell-tale sign
1TrackingEvents Manager volume, dedup, match quality vs last weekConversions fell but backend sales did not
2Attribution or reporting changeAttribution setting, Meta changelogReported results moved on a single date across all campaigns
3Learning resetsLast significant edit columnDrop starts the day after edits or new ads
4Creative saturationSaturation ladder per top adFrequency up, CTR down on the ads carrying spend
5Auction pressureCPM trend vs seasonalityCPM up across all ads, CTR stable
6Landing page or offerConversion rate by ad and pageCTR stable, conversion rate down
7Audience or budget ceilingMarginal CPA after recent budget stepsCPA rose right after a budget increase

7. Worked mini example

Request: "CPA on our Scale campaign went from 40 to 58 EUR this week, what happened?"

Rows: candidate causes. Columns: evidence and next step.

#CauseEvidence forEvidence againstTest to confirmConfidence
1TrackingUnknownUnknownCompare Events Manager purchases with backend orders, last 14 daysUnknown
2Attribution or reporting changeUnknownUnknownCheck whether all campaigns moved on the same dateUnknown
3Learning resetsUnknownUnknownCheck Last significant edit for the weekUnknown
4Creative saturationUnknownUnknownBuild the Creative health table for the top 5 ads by spendUnknown

Then the Open questions table asks for the backend order count, the edit log and ad-level data, rather than guessing a cause.

8. Evidence tags and freshness

Rows: evidence tags. Columns: meaning and how to use it.

TagMeaningUse
[M]Meta documentation or Meta engineering blogState as platform fact, with the date checked
[P]Published practitioner or benchmark (Jon Loomer, Motion, Common Thread Collective)State as expert consensus or data, name the source
[H]Heuristic used by practitioners with no Meta sourceSay it is a rule of thumb; adjust to the account
[A]The account's own dataPreferred basis for any decision
[?]AssumptionMust also appear in Open questions

Platform facts in this skill were checked in September 2026. Meta changes features often. If web search is available and a [M] item matters to the decision, re-verify it before presenting it as current. If search is unavailable and the fact is load-bearing, say it was last checked September 2026.

9. References

Rows: bundled reference files. Columns: contents and when to read.

FileContentsRead when
references/platform-details.mdTracking, attribution, audience controls, creative specs, delivery settings, reporting hygieneAudits, measurement checks, spec questions, any setup detail
references/sources.mdThe vetting table (claim, Meta position, practitioner view, verdict) and source linksSomeone challenges a rule, or you need to cite where a number comes from

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what meta-ads-framework does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.