Manage Meta Ads (Facebook + Instagram) — performance, ROAS, CPM, frequency, audience overlap, learning phase, creative fatigue, budgets, ad sets, campaigns, ads. Use for any mention of Meta Ads, Facebook Ads, Instagram Ads, ROAS, CPM, ad spend, or campaign settings on Meta.
npx skills add https://github.com/nowork-studio/NotFair --skill meta-ads
This skill is the analytical brain layered on top of the NotFair Meta MCP server. The MCP server tells the agent _how_ to call tools (read-only questions go through runScript + ads.graphParallel; mutations go through dedicated write tools). This skill tells the agent _what to think about_ — the benchmarks, scoring rubrics, and decision trees that turn raw Meta insights into informed action.
You are an expert paid-social practitioner. Trust your judgment on tool sequencing — the references below give you the frameworks, you decide how to apply them.
Read and follow ../shared/preamble.md — handles MCP detection, OAuth, and ad account selection. Once cached, this is instant.
runScript call that fans out the Graph API calls you need (ads.graphParallel, up to 20 in parallel). Mutations always go through dedicated write tools (pauseAdSet, updateAdSetBudget, etc.) — never wrap a write in runScript.runScript is the analytics workhorse. A single ads.graphParallel call can pull campaigns + ad sets + ads + insights + delivery info in one shot. Cast a wide net on the first call; filter in-script for free.Pick the lens that matches the user's question. Don't pre-load all of these; load on demand.
| The user wants to… | Read |
|---|---|
| Understand or rank performance, find waste, evaluate ad sets | references/analysis-heuristics.md (entry point — links onward) |
| Diagnose creative fatigue, decide when to refresh | references/creative-fatigue.md |
| Diagnose Learning Phase / Learning Limited issues | references/learning-phase.md |
| Audit audience overlap, lookalike strategy, broad vs. narrow | references/audience-strategy.md |
| Compare metrics to industry CPM / CTR / ROAS norms or apply seasonal lens | references/industry-benchmarks.md |
| Restructure campaigns (CBO vs ABO, ASC vs manual, prospecting vs retargeting) | references/campaign-structure-guide.md |
For business context (services, brand voice, personas, unit economics), read {data_dir}/meta/business-context.json and {data_dir}/meta/personas/{accountId}.json. If they're missing or stale (>90 days), suggest /meta-ads-audit.
For profitability framing (Break-Even ROAS, Headroom $, MER, LTV:CAC, budget forecasting), read ../shared/meta-math.md.
The MCP server's tools/list is the source of truth for what's available — do not maintain a parallel list here. The server's instructions route the agent to:
runScript with ads.graph(path, params), ads.graphParallel([calls]), ads.insights(adAccountId?, options?), and ads.batch([requests]). One call, many Graph API requests in parallel, correlate in-script. Cast a wide net on the first call.ads.fields.{campaign, adset, ad, adAccount, insightsAudit, insightsLite} for ready-made comma-joined field lists.pauseCampaign, pauseAdSet, pauseAd, enableCampaign, enableAdSet, enableAdupdateCampaignBudget, updateAdSetBudgetrenameCampaignsuggestImprovement returns the server's heuristic take. Useful as a cross-check, not a substitute for the analysis this skill describes.The Meta MCP's mutation surface is intentionally narrow — there is no programmatic create-campaign, no audience editing, no creative upload through this server. When the user asks for an operation outside the surface (new audience, new ad creative, change attribution window, switch bid strategy), say so plainly and route them to Meta Ads Manager rather than improvising with runScript writes.
Maintain {data_dir}/meta/account-baseline.json for anomaly detection across sessions. Update at the end of any session where you pulled rolling-window campaign metrics — the data is already in your context, no extra API call.
{
"metaAccountId": "<from config>",
"lastUpdated": "<ISO 8601>",
"campaigns": {
"<campaignId>": {
"name": "<campaign name>",
"objective": "<OUTCOME_SALES | OUTCOME_LEADS | OUTCOME_TRAFFIC | ...>",
"rolling30d": {
"avgDailySpend": 0,
"totalPurchases": 0,
"purchaseValue": 0,
"avgCpa": 0,
"avgRoas": 0,
"avgCpm": 0,
"avgLinkCtr": 0,
"avgFrequency": 0,
"totalSpend": 0
},
"recent7d": {
"spend": 0,
"purchases": 0,
"purchaseValue": 0,
"cpa": 0,
"roas": 0,
"cpm": 0,
"linkCtr": 0,
"frequency": 0
},
"snapshotDate": "<ISO 8601>",
"attributionWindow": "7d_click_1d_view"
}
}
}
Update formula: rolling30d = (0.7 × previous_rolling30d) + (0.3 × recent7d × (30/7)). The (30/7) factor projects 7-day numbers to a 30-day equivalent. New campaigns: initialize rolling30d from recent7d directly. Cap at 50 campaigns (spend > $0 in last 30 days only) so the file stays small.
When a metric in recent7d differs from rolling30d by more than 30%, that's an anomaly to surface. CPM and frequency rising together is the classic creative-fatigue signature.
After analysis, proactively offer the right next skill or recommendation:
/meta-ads-audit first (downstream output is generic without it)Learning Limited for > 7 days) → consolidate ad sets to clear the 50-events-in-7-days bar, or shift the optimization event to a higher-volume upper-funnel eventA set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).
Extracts and analyzes competitors' ads from ad libraries (Facebook, LinkedIn, etc.) to understand what messaging, problems, and creative approaches are working. Helps inspire and improve your own ad campaigns.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Analyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Complete App Store Optimization (ASO) toolkit for researching, optimizing, and tracking mobile app performance on Apple App Store and Google Play Store
NGS analysis toolkit. BAM to bigWig conversion, QC (correlation, PCA, fingerprints), heatmaps/profiles (TSS, peaks), for ChIP-seq, RNA-seq, ATAC-seq visualization.
Materials science toolkit. Crystal structures (CIF, POSCAR), phase diagrams, band structure, DOS, Materials Project integration, format conversion, for computational materials science.
Transforms vague UI ideas into polished, Stitch-optimized prompts. Enhances specificity, adds UI/UX keywords, injects design system context, and structures output for better generation results.
Take nowork-studio/meta-ads from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.