agentleFS
devaimanidevaimani/openai-ads-mcp/skills/ads-audit/SKILL.md

ads-audit

Skill0 starsChanged 2 months agoMITView on GitHub

Analyse running OpenAI Ads campaigns and derive actions — check metrics, assess whether the data supports a judgement, detect regressions. Use this skill for reporting, analysis, performance, how is the campaign doing, optimisation, cost review, or whenever figures from the ad account need interpreting.

13 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use ads-math, ads-test and 4 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • chriswesttSkill

    ads-math

    PPC financial calculator and modeling tool. CPA, ROAS, CPL calculations, break-even analysis, impression share opportunity sizing, budget forecasting, LTV:CAC ratio analysis, and MER (Marketing Efficiency Ratio) assessment. Requires zero API access. Works with pasted data from exports. Use when user says PPC math, ad calculator, break-even, budget forecast, ROAS calculator, CPA calculator, impression share, LTV CAC, or MER.

    Also in 3 projects that use this

  • chriswesttSkill

    ads-test

    A/B test design and experiment planning for paid advertising. Structured hypothesis framework, statistical significance calculator, test duration estimator, sample size calculator, and platform-specific experiment setup guides (Meta Experiments, Google Experiments, LinkedIn A/B). Use when user says A/B test, split test, experiment design, test hypothesis, statistical significance, sample size, or test duration.

    Also in 3 projects that use this

  • +4 more from chriswestt

The file

We split this skill into the rules it gives an agent

4 rules. 0 are common, 3 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 13 edited versions we read keep these.

  • 3

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Check before any assessment.

    line 20
  2. Distinctive:

    If fewer than four of seven are supported, output no overall figure.

    line 31
  3. Distinctive:

    Not industry benchmarks — none exist for this platform.

    line 69
  4. Distinctive:

    Your own maximum tolerable CPA: If the CPA is below it, the campaign works, regardless of how the number compares elsewhere.

    line 71

“Common” is measured: kept by at least 6 in 10 of the 13 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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Reviewing campaigns

First: is there enough data?

Check before any assessment. From ads/references/benchmarks.md:

MetricMinimum
CTR1,000 impressions
CPC100 clicks
Conversion rate100 clicks and 10 conversions
CPA30 conversions
Trend14 days
Comparison of two groups100 clicks each

If fewer than four of seven are supported, output no overall figure. Say this instead:

Overall assessment: NOT POSSIBLE (2/7 metrics supported)
Supported:     impressions (3,400), clicks (47)
Not supported: CTR, CPC, CVR, CPA, ROAS
Reason:        47 clicks is below the threshold of 100.
Recommendation: keep running for another 10 days.

This is the most important part of this skill. A number built on thin data looks like poor performance when data is merely missing — and that is how working campaigns get switched off.

Fetching data

get_insights(scope="account", time_granularity="daily", since=..., until=...)
get_insights(scope="campaign", entity_id=..., time_granularity="daily")
get_insights(scope="ad_group", entity_id=..., time_granularity="none")

For breakdowns: segment="device" or segment="country". Exactly one — the API allows no more, and none in combination with hourly.

Available metrics: impressions, clicks, spend, ctr, cpc, cpm, conversions, cpa, post_click_cvr, order_created_roas.

For ROAS use only order_created_roas — roas and attributed_sales_* are deprecated.

Note: conversions equals click-through conversions. View-through is not added and is a reporting figure only. Bidding and billing follow click-through conversions exclusively. Figures for the current account day are provisional.

What to measure against

Not industry benchmarks — none exist for this platform. Instead:

  1. Your own maximum tolerable CPA. If the CPA is below it, the campaign works, regardless of how the number compares elsewhere.
  2. Your own previous period, once there is one.
  3. The other ad groups in the same campaign, given sufficient data.

Regression rules

Comparison, threshold, action:

ObservationThresholdAction
Spend without conversion3× max CPA spent, 0 conversionsPause the group, check landing page and measurement
CPA rising+25 % week over week, ≥30 conversionsLower the bid, review the weakest group's hints
CTR falling−30 % week over week, ≥1,000 impressionsAd fatigue, introduce a new variant
No delivery0 impressions over 48 h while activeCheck all three status levels, then the bid, then the area
Budget spent earlyDaily budget gone before middayBid too high, or demand higher than expected
Ad rejectedreview_status: rejectedRead reason_code — a crawler_* code points at the landing page
One group dominates>70 % of spendCheck whether the others are scoped too narrowly

What to report

Four things per finding, otherwise it is not a recommendation:

  1. Observation with a number and a period
  2. Dependency — what has to happen first
  3. Falsification — how would you know the action did not work?
  4. Leading indicator — what moves first

Example:

Group "Chatbot website": CPA 210 across 34 conversions (14 days). Above the tolerable 150 for that service. Dependency: none, can be changed immediately. Action: lower the bid from 2.50 to 1.80. Falsification: if the CPA does not drop below 180 within 10 days, the bid is not the cause — look at the landing page. Leading indicator: average CPC within 3 days.

Restraint

  • Do not change several things at once. The effect cannot be attributed.
  • Wait 10 to 14 days after a change.
  • Small differences are noise. 2.1 % versus 2.3 % CTR at 800 impressions each means nothing.
  • When conversion data is missing, check measurement first, not the campaign. A campaign that appears to deliver nothing often has a tracking problem.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

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.