ads-report
Skill3 starsChanged 3 months agoMITView on GitHub
Read ad performance from the connected ads MCP servers (Meta, Google, TikTok, Snap, Reddit) and turn it into a decision about what content to make next, for an agent built with content-agent-kit. Also works with no ad spend at all: paste the numbers the platform shows you and it reports the same way. Use weekly, or when the user asks "how did the ads do", "how did last week do", "what should we post next", or "which campaigns are wasting money". Writes a short report and proposes concrete queue items.
2 other projects use a version of this.
Adopted by
Most recently taken up by
- oivanfelipe/claude-skillstheir own version, first seen Nov 8, 2026
- AgriciDaniel/claude-adstheir own version, first seen Oct 25, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- AgriciDaniel/claude-ads★ 10ksame name
- oivanfelipe/claude-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 repository16 other files it gives its agents.
- AGENTS.mdAGENTS.md
- audit-and-fixSkill
- bootstrap-content-agentSkill
- crawl-and-queueSkill
- create-videoSkill
- daily-runSkill
- daily-topic-videoSkill
- design-campaignSkill
- geo-optimizeSkill
- motion-craftSkill
- new-templateSkill
- repurposeSkill
- research-and-captureSkill
- review-gateSkill
- topic-radarSkill
- video-and-postSkill
The file
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 8 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Do not invent plausible numbers to fill a report.
- Distinctive: line 22
Organic mode: No ads server, which is where most people start and where this skill used to simply stop — leaving anyone not yet buying …
- Very specific: line 37
If mkt-ads-audit is installed (node scripts/install-skills.mjs mkt-ads-audit), read it first — it covers account-level diagnosis in more …
- Distinctive: line 56
Do this before writing anything.
- Distinctive: line 62
One change at a time: If budget, audience and creative all changed, the result cannot be attributed to any of them.
- Distinctive: line 67
Keep it to one screen.
- Very specific: line 97
If the user approves, append with scripts/append.mjs following the schema in docs/04-state-and-dedup.md.
- Distinctive: line 102
Every recommendation names the number behind it.
- Distinctive: line 115
Never change a budget, pause, or launch anything as part of producing a report.
- Distinctive: line 116
If the user asks for a change, state what you are about to do — account, campaign, old value, new value — and wait for a yes.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Ads report → next week's content
Numbers are not the deliverable. A decision about what to write next is. A report that ends at "CTR was 1.4%" leaves the reader exactly where they started.
This skill closes the loop the kit otherwise leaves open: it publishes content, and it schedules content, but nothing tells it which content was worth publishing.
Before you start
Do not invent plausible numbers to fill a report. A fabricated benchmark is worse than no report, because someone will spend money on it. That rule holds in both modes below.
Paid mode. At least one ads MCP server connected — see .mcp.json and
docs/18-ads-and-marketing.md.
Organic mode. No ads server, which is where most people start and where this skill used to simply stop — leaving anyone not yet buying reach with nothing at all, even though they have the same question. Ask the user to paste what the platform shows them: views, reach, shares, comments, saves, watch-through, per post, for a period they choose.
Everything below works the same way on pasted numbers, with three differences worth stating in the report itself:
- Say the numbers are self-reported. They came from a screen, not an API. That does not make them wrong; it makes them worth labelling.
- Shares and saves matter more than views here. Without spend data there is no cost per anything, so the useful signal is what people did deliberately rather than what scrolled past.
- The sample is smaller, so the bar for calling something is higher. Two posts are not a trend. Be readier to write "not enough data" than in paid mode.
If mkt-ads-audit is installed (node scripts/install-skills.mjs mkt-ads-audit), read it
first — it covers account-level diagnosis in more depth than this does. This skill's job is
the handoff from that diagnosis to the content queue.
1. Read
Pull, for the period the user asked for (default: last 7 days, compared with the 7 before):
- spend, impressions, reach, clicks, CTR, CPC, CPM
- conversions and cost per conversion, only if conversion tracking is actually configured — if it is not, say that plainly instead of reporting zeros as a result
- per campaign, per ad set, and per creative, because the creative is the part this kit can change
Record the currency and the timezone the platform reported in. A week boundary in the wrong timezone moves numbers enough to reverse a conclusion.
2. Separate signal from noise
Do this before writing anything.
- Sample size first. Under a few hundred impressions, a CTR difference is noise. Say "not enough data yet" rather than ranking two creatives that differ by a handful of clicks.
- Compare like with like. A creative that ran for two days against one that ran for fourteen is not a fair comparison; normalise or exclude it and say which you did.
- One change at a time. If budget, audience and creative all changed, the result cannot be attributed to any of them. Report it as unattributable rather than guessing.
3. Write brain/ads-report-<YYYY-MM-DD>.md
Keep it to one screen.
# Ads report — <period> (<currency>, <timezone>)
**Spend:** X · **vs previous period:** ±Y%
**Conversion tracking:** configured | NOT configured — the numbers below stop at clicks
## What worked
- <creative / angle / hook>, <metric with the number>, <how much data it is based on>
## What did not
- <creative>, <metric>, <and what you would change about it — not just that it lost>
## Not enough data
- <anything with too few impressions to judge — listing these stops them being re-tested blindly>
## Recommended for the queue
1. <topic / angle> — because <which number supports it>
2. …
## Do not repeat
- <angle that lost, with the number>4. Propose queue items — do not add them
Print the exact queue.json entries you would add, then stop and ask. This skill can
see ad accounts that spend real money; it does not get to decide the content plan on its own.
If the user approves, append with scripts/append.mjs following the schema in
docs/04-state-and-dedup.md.
Writing the recommendations
Every recommendation names the number behind it. "Short hooks did better" is an opinion; "the three posts opening with a question averaged 2.1% CTR against 0.9% for the rest, over ~40k impressions each" is a reason.
Where the data does not support a recommendation, write that. A short honest report gets read next week; a long confident one built on forty impressions does not survive contact with the next set of results.
Safety
The ads MCP servers are read and write. The same connection that reads spend can pause a campaign or change a budget.
- Never change a budget, pause, or launch anything as part of producing a report.
- If the user asks for a change, state what you are about to do — account, campaign, old value, new value — and wait for a yes.
- An irreversible action on a live ad account is spending someone's money. Treat it that way.
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
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.

