Agent skill
meta-ads-framework
Table-first operating framework for Meta (Facebook and Instagram) ads.
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-toolsin the frontmatter. It only issues instructions, so there is nothing to bound. - Actions present in the files
- None. Instructions only.
Install it
View source on GitHub ↗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.
The skill
Source on GitHub ↗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.
| Rule | What it means in practice | Why it matters |
|---|---|---|
| Tables first | Decide which tables the answer needs (section 2), fill them, then add prose only as short connective lines | Structure exposes gaps that paragraphs hide |
| Label every table | The line above each table reads: Rows: what one row is. Columns: what the columns hold | A reader, or another model, must be able to use the table cold |
| One row, one object | Each row is one campaign, audience, ad, concept, signal or decision. No merged ideas, no lists inside cells | Rows become checkable actions |
| Short cells | Aim for under 25 words per cell. Numbers with units (%, x, days, EUR or USD) | Tables stay scannable and printable |
| Tag the evidence | Platform claims carry a tag from section 8: [M] Meta doc, [P] practitioner, [H] heuristic, [A] account data, [?] assumption | Heuristics must never pass as platform rules |
| Never invent account data | If an input is missing, write "Unknown" in the cell and add it to the Open questions table | A confident wrong number is worse than a gap |
| Close with decisions | Every answer ends with a Decisions table and, if anything is unknown, an Open questions table | The output is always actionable |
| House style | No em dashes. Plain words. Sentence case headers | Team standard |
| Deliverables | In chat, use markdown tables. If asked for a report, document or page, build a clean HTML page around the same tables | Same 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.
| Mode | Typical request | Tables 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.
| Field | Value | Source | Blocking if unknown? |
|---|---|---|---|
| Business model and offer | Yes | ||
| Optimization event (purchase, qualified lead, trial) | Yes | ||
| Weekly volume of that event | Yes | ||
| Target CPA or ROAS | Yes | ||
| Monthly Meta spend | Yes | ||
| Markets and languages | No | ||
| Pixel plus Conversions API, deduplicated | Yes 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 week | Yes for Creative plan | ||
| Special ad category (credit, housing, employment, social issues) | Yes | ||
| Attribution setting in use | No |
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.
| Fit | Match looks like | How to check | On a miss |
|---|---|---|---|
| Persona | One ad speaks to one person with one problem; Scale runs 3-5 personas in one ad set | Age, gender, placement and Audience segments breakdowns per ad | Rewrite the hook for the segment it drifted to, or brief a new persona ad |
| Awareness stage | Cold ads name the problem or show the outcome; warm ads prove and handle objections; customer ads offer what comes next | Message vs the campaign it runs in | Move or rewrite |
| Distinctness | Each ad changes angle, persona, messenger or format [M] | First frames and first lines side by side | Keep the strongest near-duplicate, brief new angles |
| Placement fit | Native 9:16 and 4:5, captioned, inside safe zones | Placement preview, Safe Zone Guardrail | Re-export per placement |
| Promise continuity | Landing page repeats the ad's promise above the fold | Good CTR, weak conversion rate on one ad | Send 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.
| Signal | Threshold | Where | Action |
|---|---|---|---|
| Frequency climbing | 7-day frequency past ~2-2.5 cold, ~5 warm [P] | Ad level, 7 days | Brief 2-3 variants of the concept |
| Attention fading | CTR down 20-25%+ from the ad's first week while CPM rises [P] | Ad level, first vs last 7 days | Launch variants: new hook or first 3 seconds |
| Creative limited | Cost per result above the ad's past level, under 2x [M] | Delivery column | Rotate refresh batch in |
| Creative fatigue | Cost per result 2x past level or more [M] | Delivery column | Retire the ad; if its variants fade within 1-2 weeks, retire the concept |
| Concentration risk | 1-2 ads carry most of an ad set's spend and their cost per result is rising [P] | Spend share by ad | Feed 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.
| Campaign | Job | Setup | Share of spend | Ad sets | Ads | Judge on |
|---|---|---|---|---|---|---|
| Test | Find winning concepts cheaply | Meta 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 control | 15-20%; up to 30% on new accounts; less when Scale is on target [H] | None extra (tool) or one per concept, broad | 2-5 per test | Cost per result and spend share; hook rate and CTR only diagnose [P] |
| Scale | New customers at target cost | Sales or Leads, campaign budget, highest volume; add a cost goal only once CPA is stable, loosely | 55-70% [H] | 1-3: Broad always, Lookalike signal, Interest signal; customer exclusion in audience controls | 8-15, max 50 [M] | Blended CPA or ROAS, new-customer share, marginal CPA |
| Retarget | Convert engaged non-buyers | Original audience setup, Advantage+ audience off, so the custom audience binds [M] | 0-15%, default 10% [H] | One consolidated warm ad set, recent buyers excluded | 4-8 | Cost per result, frequency with CTR, lift over Scale |
| Retain | Repeat, upsell, expansion | Original audience setup, small fixed budget | 0-10% [H] | Customer list, purchasers 180 days | 3-6 | Repeat rate, revenue per customer |
Rules that apply across the table:
| Rule | Detail |
|---|---|
| Day one | Launch 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 Retarget | Broad delivery often already spends 25-35% on engaged people and customers [P, Loomer]. If so and warm frequency is healthy, skip Retarget |
| Budget floor | Weekly 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.
| Audience | What it is | How Meta treats it | Build rule | Runs in | Use when |
|---|---|---|---|---|---|
| Broad | Advantage+ audience, no suggestions | Only location, minimum age, language and custom audience exclusions bind [M] | Customer exclusion goes in audience controls, never suggestions | Test, Scale | Always the core ad set once the pixel has conversion history |
| Interest stack | 3-5 related interests as one suggestion | Suggestion; Meta widens when it predicts better results [M]. Interests were consolidated in 2025 [M] | Group by theme, never one interest per ad set | Scale signal ad set | New pixel, niche, tiny budget, new geo |
| Lookalike | Similar to a seed of best customers | Suggestion 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 set | Strong first-party seed, new country |
| Custom: warm | Visitors 30-180 days, engagers 90 days, video viewers 50%+ 30 days | Suggestion under Advantage+ audience; hard with it switched off [M] | One combined audience, original setup, exclude purchasers 30 days | Retarget | Scale under-reaches warm users and the pool can spend without frequency climbing |
| Custom: hot | Cart, checkout, lead form open, pricing page, 7-14 days | Same as warm | Stay inside the warm ad set unless it can carry its own budget | Retarget | Thousands of abandoners a week |
| Custom: customers | CRM list, purchasers 180 days | Binding as an exclusion in audience controls [M] | Sync from CRM or re-upload monthly | Retain; exclusion everywhere; lookalike seed | Every 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.
| Level | What changes | Distinct for Meta? | How many |
|---|---|---|---|
| Concept | Pain point, persona, promise, emotional trigger | Yes [M] | 4-6 live in Scale; new ones weekly in Test |
| Execution | Format and messenger: UGC, founder, static, carousel, catalog | Often, if visually distinct [P] | 2+ formats per concept |
| Variant | Hook or first 3 seconds, headline, thumbnail, primary text | Usually grouped with its parent [P] | 2-3 per winning execution |
| Micro-tweak | Colour, one word, music, button text | No [P] | None |
Rows: campaigns. Columns: creative quota at any time and refresh cadence.
| Campaign | Concepts live | Variants per concept | Ads per ad set | Format mix | Refresh |
|---|---|---|---|---|---|
| Test | 1-5 per test | 1-3 | 2-5 per test | Genuinely different ads only | Weekly batch |
| Scale | 4-6 | 2-3 | 8-15 | 3+ of: 9:16 video, 4:5 video, static, carousel | Winners in one weekly batch; retire on the ladder |
| Retarget | 3-4 | 1-2 | 4-8 | Testimonials, demo, catalog, offer | Monthly |
| Retain | 2-3 | 1-2 | 3-6 | Catalog, launch video, offer | Per 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 spend | Tested per week | Hit rate | Winners per month |
|---|---|---|---|
| Under $10K | 2.8 | 4.0% | ~0.5 |
| $10K-50K | 4.1 | 6.4% | ~1.1 |
| $50K-200K | 6.6 | 8.1% | ~2.3 |
| $200K-1M | 11.2 | 8.6% | ~4.2 |
| Over $1M | 18.8 | 8.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.
| Decision | Trigger | Action | Check | Evidence |
|---|---|---|---|---|
| Protect learning | New ad set or significant edit: targeting, creative, optimization event, adding an ad, pausing the ad set; budget and bid changes depending on size | Leave until ~50 optimization events since the edit and at least a week; batch all edits into one weekly window | Daily, no edits | [M] |
| Kill a test | Spend 2x target CPA with no conversion, or CPA over 1.5x target after 3x target CPA spent | Pause, log the learning | Every 2-3 days | [H] |
| Graduate a winner | CPA at or under target over 3x target CPA of spend | Add to Scale in one weekly batch or as a new ad set in the Scale campaign; reuse the post ID | Weekly | [M] adding an ad resets learning |
| Scale budget | Scale on target 3+ days and marginal CPA under target | Raise 15-20% every 48-72 hours | Every 2-3 days | [H]; Meta publishes no safe % |
| Refresh creative | Any rung of the saturation ladder | Brief, launch variants, rotate, retire | Weekly | [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 control | Weekly | [M] |
| Cap retargeting | Warm 7-day frequency above ~5 with CTR falling | Move Retarget budget to Scale | Weekly | [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.
| Level | Pattern | Example |
|---|---|---|
| Campaign | Stage_Objective_Geo_Budget | Scale_Sales_IT_CBO |
| Ad set | Audience_Seed-or-window_Detail | LAL_Purch180_1-3pct |
| Ad | ConceptID_Format_Variant_Launch | C07_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.
| Campaign | Job | Objective and event | Budget control | Share | Daily budget | Ad sets | Ads | Judge on | Evidence |
|---|
Audience map (Build, Audit). Rows: ad sets.
| Ad set | Campaign | Audience type | Controls (hard) | Suggestions (soft) | Exclusions | Est. size | Evidence |
|---|
Persona x stage grid (Creative plan). Rows: personas. Columns: awareness stages. Each cell holds the core message for that pair, or "Gap".
| Persona | Cold: problem or outcome | Warm: proof and objections | Customer: what comes next |
|---|
Concept matrix (Build, Creative plan). Rows: concepts.
| Concept ID | Persona | Stage | Angle (pain or promise) | Messenger | Formats | Variants | Hypothesis | Campaign | Status |
|---|
Structure gap (Audit). Rows: framework elements from section 4.
| Element | Framework says | Account has | Gap | Impact (High, Med, Low) | Fix | Evidence |
|---|
Creative health (Audit, Weekly review). Rows: live ads with meaningful spend.
| Ad | Concept ID | Spend share | Cost per result vs target | 7-day frequency | CTR vs first week | Delivery flag | Ladder rung | Action |
|---|
Measurement check (Audit, Diagnose). Rows: tracking items from references/platform-details.md.
| Item | Expected | Found | Pass or Fail | Fix |
|---|
Hypotheses (Diagnose). Rows: candidate causes in section 6 order.
| # | Cause | Evidence for | Evidence against | Test to confirm | Confidence |
|---|
Readiness gates (Scale). Rows: gates.
| Gate | Threshold | Current | Pass or Fail |
|---|---|---|---|
| On target | CPA or ROAS at target 3+ days | ||
| Learning exited | No ad set in Learning or Learning limited | ||
| Creative runway | 2+ fresh concepts ready to launch | ||
| Saturation | No top-spend ad past rung 2 of the ladder | ||
| Tracking stable | No event drops or dedup issues this week | ||
| Marginal CPA | Last step's marginal CPA under target |
Budget step schedule (Scale). Rows: planned steps.
| Step | Date | Budget from | Budget to | Change % | Stop condition |
|---|
Decisions (every answer). Rows: decisions or actions.
| Decision | Why (evidence) | Owner | By when | Success looks like |
|---|
Open questions (whenever anything is Unknown). Rows: missing inputs.
| Question | Why it matters | Default 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.
| # | Cause | Check | Tell-tale sign |
|---|---|---|---|
| 1 | Tracking | Events Manager volume, dedup, match quality vs last week | Conversions fell but backend sales did not |
| 2 | Attribution or reporting change | Attribution setting, Meta changelog | Reported results moved on a single date across all campaigns |
| 3 | Learning resets | Last significant edit column | Drop starts the day after edits or new ads |
| 4 | Creative saturation | Saturation ladder per top ad | Frequency up, CTR down on the ads carrying spend |
| 5 | Auction pressure | CPM trend vs seasonality | CPM up across all ads, CTR stable |
| 6 | Landing page or offer | Conversion rate by ad and page | CTR stable, conversion rate down |
| 7 | Audience or budget ceiling | Marginal CPA after recent budget steps | CPA 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.
| # | Cause | Evidence for | Evidence against | Test to confirm | Confidence |
|---|---|---|---|---|---|
| 1 | Tracking | Unknown | Unknown | Compare Events Manager purchases with backend orders, last 14 days | Unknown |
| 2 | Attribution or reporting change | Unknown | Unknown | Check whether all campaigns moved on the same date | Unknown |
| 3 | Learning resets | Unknown | Unknown | Check Last significant edit for the week | Unknown |
| 4 | Creative saturation | Unknown | Unknown | Build the Creative health table for the top 5 ads by spend | Unknown |
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.
| Tag | Meaning | Use |
|---|---|---|
| [M] | Meta documentation or Meta engineering blog | State 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 source | Say it is a rule of thumb; adjust to the account |
| [A] | The account's own data | Preferred basis for any decision |
| [?] | Assumption | Must 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.
| File | Contents | Read when |
|---|---|---|
| references/platform-details.md | Tracking, attribution, audience controls, creative specs, delivery settings, reporting hygiene | Audits, measurement checks, spec questions, any setup detail |
| references/sources.md | The vetting table (claim, Meta position, practitioner view, verdict) and source links | Someone 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.
- meta-ads-audit by irinabuht12-oss · 3,698
- meta-ads-expert by Varnan-Tech · 672
- google-ads-youtube-ads-strategist by Ad-Superpowers · 5
- gt-meta-ads by Growth-Today · 4
- meta-ads-builder by ekatasingh1107 · 2
- meta-ads-scraper by Cold-IQ · 1
- meta-ads-campaign-builder by edupegoretti · 0
- ads by coreyhaines31 · 53,460
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.