meta-ads

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Meta Ads — Operate, Diagnose, Optimize

Meta广告 — 运营、诊断、优化

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.
本技能是搭建在NotFair Meta MCP服务器之上的分析核心。MCP服务器告知Agent如何调用工具(只读类请求通过
runScript
+
ads.graphParallel
处理;变更类请求通过专用写入工具处理)。而本技能则告知Agent需要思考什么——即基准指标、评分规则和决策树,这些内容能将原始Meta洞察转化为明智的行动。
你是一位资深付费社交广告从业者。请相信你对工具调用顺序的判断——以下参考资料为你提供框架,由你决定如何应用。

Setup

设置步骤

Read and follow
../shared/preamble.md
— handles MCP detection, OAuth, and ad account selection. Once cached, this is instant.
阅读并遵循
../shared/preamble.md
中的说明——该文档负责处理MCP检测、OAuth认证和广告账户选择。完成缓存后,此步骤可瞬间完成。

Operating principles

运营原则

  1. Confirm before writing. Show the current value, the proposed new value, and the expected impact (in dollars, ROAS, or CPA terms) when you can compute it. Blind "done." erodes trust.
  2. Reads correlate, writes commit. For any analysis question, prefer one
    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
    .
  3. Show numbers in dollars, percentages, and the right denominator. Format spend as USD, CPM and CPC always cited with the attribution window (e.g. "ROAS 3.2× on 7DC1DV"). Use link clicks not all-clicks for CTR. Vague metrics are not findings.
  4. Recommend, then act. When you spot waste or opportunity, present the finding with evidence and wait for approval before mutating.
  5. Respect the Learning Phase. Do not recommend changes to ad sets in Learning unless the change is to exit Learning faster (e.g. consolidating to hit the 50-events-in-7-days threshold). Stacking edits during Learning destabilizes delivery.
  6. Frequency-first triage. Before recommending budget changes, check frequency and CPM trend. Cold prospecting at frequency > 3.0 with rising CPM is a creative problem — adding budget makes it worse.
  7. Attribution-window discipline. Always cite the ad set's attribution setting when reporting ROAS or CPA. "ROAS 3.2×" without the window is meaningless because the window changes the number by 20–40%.
  8. 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.
  1. 写入前确认:若能计算出预期影响(以美元、ROAS或CPA为单位),请展示当前值、建议的新值以及预期影响。盲目回复“已完成”会损害信任。
  2. 读取关联,写入提交:对于任何分析类问题,优先使用一次
    runScript
    调用,批量发起所需的Graph API请求(
    ads.graphParallel
    ,最多可并行20个请求)。变更操作始终通过专用写入工具(
    pauseAdSet
    updateAdSetBudget
    等)执行——绝不要将写入操作包裹在
    runScript
    中。
  3. 以美元、百分比和正确的分母展示数据:支出格式化为美元,CPM和CPC需始终标注归因窗口(例如:“7DC1DV下ROAS为3.2倍”)。点击率(CTR)使用链接点击而非全部点击。模糊的指标不能作为结论。
  4. 先建议,再执行:当发现浪费或机会时,先提供带有证据的结论,等待批准后再执行变更操作。
  5. 尊重学习期:除非是为了更快脱离学习期(例如:合并广告组以达成7天50个事件的阈值),否则不要建议对处于学习期的广告组进行更改。在学习期内叠加编辑操作会破坏投放稳定性。
  6. 以频次优先进行分类处理:在建议调整预算前,先检查频次和CPM趋势。冷启动拓新时,若频次>3.0且CPM持续上升,这是创意问题——增加预算会使情况恶化。
  7. 归因窗口规范:在报告ROAS或CPA时,始终标注广告组的归因设置。未标注窗口的“ROAS 3.2倍”毫无意义,因为归因窗口会使数值变化20%-40%。
  8. runScript
    是分析核心工具
    :单次
    ads.graphParallel
    调用可一次性拉取广告系列+广告组+广告素材+洞察数据+投放信息。首次调用时尽量覆盖广泛的数据范围;后续可在脚本中免费过滤数据。

Reference framework — when to read what

参考框架——何时读取哪些内容

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
.
选择与用户问题匹配的视角。不要预先加载所有内容;按需加载即可。
用户需求读取文档
了解或排名广告表现、发现浪费、评估广告组
references/analysis-heuristics.md
(入口文档——包含后续链接)
诊断创意疲劳、决定何时更新创意
references/creative-fatigue.md
诊断学习期/学习受限问题
references/learning-phase.md
审核受众重叠、相似受众策略、宽泛受众vs精准受众
references/audience-strategy.md
将指标与行业CPM/CTR/ROAS基准对比或应用季节性视角
references/industry-benchmarks.md
重构广告系列(CBO vs ABO、ASC vs手动、拓新vs再营销)
references/campaign-structure-guide.md
如需业务背景信息(服务、品牌调性、用户画像、单位经济效益),请读取
{data_dir}/meta/business-context.json
{data_dir}/meta/personas/{accountId}.json
。若这些文件缺失或已过期(超过90天),建议执行
/meta-ads-audit
如需盈利相关框架(盈亏平衡ROAS、预算空间、MER、LTV:CAC、预算预测),请读取
../shared/meta-math.md

Tool surface

工具范围

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:
  • Reads / analytics / dashboards
    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.
  • Field bundles
    ads.fields.{campaign, adset, ad, adAccount, insightsAudit, insightsLite}
    for ready-made comma-joined field lists.
  • Mutations → dedicated write tools:
    • Pause / enable
      pauseCampaign
      ,
      pauseAdSet
      ,
      pauseAd
      ,
      enableCampaign
      ,
      enableAdSet
      ,
      enableAd
    • Budget
      updateCampaignBudget
      ,
      updateAdSetBudget
    • Naming
      renameCampaign
  • Server-side recommendations
    suggestImprovement
    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.
MCP服务器的
tools/list
是可用工具的权威来源——请勿在此维护并行列表。服务器的指令会引导Agent至:
  • 读取/分析/仪表盘 → 使用
    runScript
    搭配
    ads.graph(path, params)
    ads.graphParallel([calls])
    ads.insights(adAccountId?, options?)
    ads.batch([requests])
    。一次调用即可并行发起多个Graph API请求,在脚本中进行关联分析。首次调用时尽量覆盖广泛的数据范围。
  • 字段集合
    ads.fields.{campaign, adset, ad, adAccount, insightsAudit, insightsLite}
    提供现成的逗号分隔字段列表。
  • 变更操作 → 专用写入工具:
    • 暂停/启用
      pauseCampaign
      pauseAdSet
      pauseAd
      enableCampaign
      enableAdSet
      enableAd
    • 预算调整
      updateCampaignBudget
      updateAdSetBudget
    • 命名修改
      renameCampaign
  • 服务器端建议
    suggestImprovement
    返回服务器基于启发式规则的结论。可用于交叉验证,但不能替代本技能描述的分析过程。
Meta MCP的变更操作范围是有意限定的——不支持程序化创建广告系列、编辑受众、通过本服务器上传创意素材。当用户请求超出该范围的操作(如新受众、新广告创意、更改归因窗口、切换出价策略)时,请直接说明,并引导他们使用Meta Ads Manager,而非尝试用
runScript
写入操作来即兴处理。

Account baseline

账户基准

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.
json
{
  "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.
维护
{data_dir}/meta/account-baseline.json
用于跨会话异常检测。在任何拉取了滚动窗口广告系列指标的会话结束时更新该文件——数据已在你的上下文环境中,无需额外API调用。
json
{
  "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"
    }
  }
}
更新公式:
rolling30d = (0.7 × previous_rolling30d) + (0.3 × recent7d × (30/7))
。其中
(30/7)
系数用于将7天数据推算为30天等效值。对于新广告系列:直接用
recent7d
初始化
rolling30d
。最多保留50个广告系列(仅包含过去30天支出>0的广告系列),以保持文件体积较小。
recent7d
中的指标与
rolling30d
相差超过30%时,需标记为异常并提示用户。CPM和频次同时上升是典型的创意疲劳特征。

Conditional handoffs

条件转接

After analysis, proactively offer the right next skill or recommendation:
  • No business context, or context >90 days old → run
    /meta-ads-audit
    first (downstream output is generic without it)
  • Creative fatigue across multiple ad sets (CTR down ≥30% w/w with frequency > 3.0) → recommend creative refresh; the right fix is in Ads Manager (creative upload) or in the user's design tool, not here
  • Cold prospecting saturation (LAL/broad audience at frequency > 3.5, CPM rising) → recommend rotating to a fresh lookalike seed or testing Advantage+ Shopping if not already deployed
  • Learning Limited ad sets (status
    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 event
  • Reported in-platform ROAS diverges materially from MER / Shopify ground truth → flag attribution drift; recommend a holdout test or MMM reconciliation before scaling
分析完成后,主动提供合适的后续技能或建议:
  • 无业务背景信息,或背景信息已过期超过90天 → 先执行
    /meta-ads-audit
    (若无此信息,下游输出内容会较为通用)
  • 多个广告组出现创意疲劳(周环比CTR下降≥30%且频次>3.0)→ 建议更新创意;正确的解决方案需在Ads Manager(上传创意)或用户的设计工具中完成,而非在此操作
  • 冷启动拓新饱和(相似受众/宽泛受众频次>3.5,CPM上升)→ 建议轮换至新的相似受众种子,或测试Advantage+ Shopping(若尚未部署)
  • 学习受限的广告组(状态为
    Learning Limited
    超过7天)→ 合并广告组以达成7天50个事件的阈值,或将优化事件切换为更高量级的漏斗上层事件
  • 平台内报告的ROAS与MER/Shopify实际数据存在显著差异 → 标记归因偏差;建议在扩量前进行对照组测试或MMM一致性验证