meta-ads-audit
Skill0 starsChanged 44 days agoMITView on GitHub
Read-only audit of a Meta (Facebook/Instagram) ad account: status, currency, timezone, payment and eligibility, campaign structure, budgets, delivery, spend, pixels and datasets, conversion events, Page and Instagram identity, audiences, tracking health, recent performance, and configuration problems. Use for "audit my account", "what's broken", "review my setup", "why isn't this delivering", or before planning a campaign on an unfamiliar account.
We split this skill into the rules it gives an agent
10 rules. 0 are common, 6 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
Read meta-ads-core first for routing and the safety model.
- Very specific: line 24
1. Meta's official Ads MCP - the execution layer: Look for tools named ads_* in this session.
- Distinctive: line 84
Look for: campaigns with no active ad sets.
- Distinctive: line 105
If an ad set optimises for an event with no recent volume, that is a finding - it will not deliver well, and no amount of creative work …
- Distinctive: line 115
Check for: audiences too small to deliver, stale customer lists, audiences referenced by live ad sets that no longer populate.
- Very specific: line 127
Use meta-ads-report for a real performance readout.
- Distinctive: line 134
If something looks wrong, check whether someone changed it.
- Distinctive: line 142
FACT: - read from Meta. Name the tool and the date range.
- Distinctive: line 173
No mutations: Not even "obviously safe" ones.
- Very specific: line 176
Say "insufficient evidence": when spend or conversions are too thin to support a conclusion.
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Meta Ads account audit
Read-only. Never mutate an account during an audit. A user asking what is wrong has not asked you to fix it. Propose; do not apply.
Read meta-ads-core first for routing and the safety model.
<!-- shared:preflight start - generated from packaging/shared/preflight.md by scripts/sync_skill_blocks.py - edit there -->Preflight: two checks, kept separate
Independent questions; never let one answer stand in for the other.
1. Meta's official Ads MCP - the execution layer. Look for tools named
ads_* in this session. With none, nothing here can reach an account: say so
and help the user connect it - connect-meta-mcp.md under references/ in the
meta-ads-core skill, or
https://github.com/bartlomiejborzucki/meta-ads-agent/blob/master/skills/meta-ads-core/references/connect-meta-mcp.md.
The local CLI does not replace it.
2. The local meta-ads-agent CLI - optional, usually absent. Assume it is
missing until this succeeds:
meta-ads-agent --version"command not found" is the normal answer, not a fault. Show no
meta-ads-agent ... command before that probe has succeeded - a command that
fails at the user's prompt costs more than the step it saves. Say "that step
needs the optional CLI, which is not installed here" and carry on.
The MCP alone covers audits, reporting, Ad Library research, previews,
tracking, creative, optimisation and the changes that follow; .meta-ads/
files can be written directly from the templates in meta-ads-core's
assets/. Only these need the CLI: plan validation (so campaign builds),
local image and video upload, video / existing-post / multi-variant /
carousel creatives, deletion, and the report arithmetic (which has a
by-hand route).
<!-- shared:preflight end -->Order of work
Each step depends on the ones before it, so do not reorder them.
1. Account foundation
ads_get_ad_accounts
Record and report: name, id, currency, timezone_name, account_status,
disable_reason, has_payment_method, is_queryable, is_ads_mcp_enabled,
business, and country.
Currency and timezone are not trivia - every number after this point is meaningless without them. A missing payment method or a reached spend limit explains "nothing is delivering" faster than any performance analysis, so surface it immediately rather than at the end.
2. Identity
ads_get_user_pages or ads_get_ad_account_pages, then ads_get_ig_accounts.
A Facebook Page is mandatory ad identity. No linked Instagram account means no Instagram placements, which quietly changes where budget goes.
3. Structure
ads_get_ad_entities for campaigns, ad sets, and ads.
Report the shape, not every row: how many campaigns, how many are active, which objectives, budget level (campaign/CBO vs ad set/ABO), how many ad sets per campaign, how many ads per ad set.
Look for: campaigns with no active ad sets; ad sets with no active ads; budget set at both levels; several ad sets targeting overlapping audiences; objectives that do not match what the user says they want.
4. Delivery and errors
ads_get_errors, then ads_get_opportunity_score.
Delivery-blocking errors are the highest-value finding in most audits, because they are specific, actionable, and often invisible in the performance numbers. Report Meta's own score and recommendations as Meta's opinion, attributed.
5. Signals
ads_get_datasets, ads_get_dataset_details, ads_get_dataset_stats,
ads_get_dataset_quality, ads_get_customconversions.
A pixel existing is not evidence that tracking works. stats shows whether
events are actually arriving; quality shows Event Match Quality and freshness.
Report configuration and evidence as separate things.
If an ad set optimises for an event with no recent volume, that is a finding - it will not deliver well, and no amount of creative work fixes it.
Deeper: use meta-ads-tracking.
6. Audiences
ads_get_ad_account_custom_audiences, then ads_get_custom_audience for
anything in use.
Check for: audiences too small to deliver, stale customer lists, audiences referenced by live ad sets that no longer populate. Never read or export the contents of a customer-list audience.
7. Recent performance
ads_get_ad_entities with metrics, or ads_insights_performance_trend.
Last 30 days at campaign level: spend, impressions, reach, frequency, CPM, clicks, CTR, CPC, results, cost per result. Note the attribution window if it is available; never compare numbers across different windows.
Use meta-ads-report for a real performance readout. The audit only needs
enough to spot structural problems.
8. Recent changes
ads_account_get_activity_logs
If something looks wrong, check whether someone changed it. "The CPA doubled" and "someone widened the targeting on Tuesday" are the same finding, and without the log you would guess creative fatigue.
How to report
Three labels, never blurred:
- FACT - read from Meta. Name the tool and the date range.
- INTERPRETATION - your reading. Say what would change your mind.
- RECOMMENDATION - what you would do, and what it assumes.
FACT The account bills in PLN, timezone Europe/Warsaw.
FACT 3 of 7 campaigns are active. Spend in the last 30 days:
12,430.00 PLN (ads_get_ad_entities, 2026-08-17 to 2026-09-15).
FACT Dataset 1234567890 received 0 PURCHASE events in the last 28
days (ads_get_dataset_stats).
FACT Ad set "PL retargeting" optimises for PURCHASE.
INTERPRETATION That ad set is optimising for a signal Meta is not receiving,
so its delivery is effectively unoptimised. I have not
confirmed whether the pixel fires on the site - this is read
from Meta's received-event counts only.
RECOMMENDATION Verify the PURCHASE event fires before spending more here.
Nothing needs to change in Ads Manager until that is known.Structure the output as:
- Blocking problems - things stopping delivery or making spend wasteful.
- Configuration risks - things that will hurt but are not blocking.
- Observations - worth knowing, no action implied.
- What I could not check - and why.
That last section is not optional. An audit that hides its gaps invites a false sense of coverage.
Discipline
- No mutations. Not even "obviously safe" ones.
- Do not dump metrics. Ten findings a human can act on beats two hundred rows.
- Say "insufficient evidence" when spend or conversions are too thin to
support a conclusion.
min_conversions_for_decisionandmin_clicks_for_decisionin.meta-ads/brand.yamlare the user's own floors - respect them. - Separate platform constraints from opinions. "Special ad categories must be declared" is a rule. "You should use CBO" is a view - label it as one, or leave it out.
- Do not invent benchmarks.
ads_insights_industry_benchmarkgives real ones; anything else is a number you made up.
Checklist form: references/audit-checklist.md.
Other versions6 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 6
- irinabuht12-oss/marketing-skills★ 6.5ksame name
- nowork-studio/notfair-plugin★ 4.1ksame name
- nowork-studio/toprank★ 4ksame name
- gomarble-ai/marketing-agent★ 15same name
- 1clickreport/skills★ 0same name
- gmmh1/claude-paid-media-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository11 other files it gives its agents.
- meta-ads-audiencesSkill
- meta-ads-campaignSkill
- meta-ads-catalogSkill
- meta-ads-coreSkill
- meta-ads-creativeSkill
- meta-ads-experimentsSkill
- meta-ads-optimizeSkill
- meta-ads-previewSkill
- meta-ads-reportSkill
- meta-ads-researchSkill
- meta-ads-trackingSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

