Daily
Spot tired ads and wasted ad spend
Each morning you see which Meta ads are wearing out and which placements cost far more than your average.
- Runs
- Daily
- Apps
- Facebook Pages
- AI
- Yes, uses the built-in AI allowance
- Access
- ads_read
Send this to your assistant
Create a ClickRuntime automation: every morning at 7am, look at the last 14 days of my Meta ad results, flag ads where click-through is dropping while frequency climbs, list placements costing over 50% above my average, and email me the list ranked by wasted spend.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Meta ad accounts quietly leak money. An ad that worked at first shows to the same people again and again until frequency climbs and click-through falls, a placement spends budget with no conversions, and a campaign keeps running because nobody looked at ad-level numbers. Ads Manager has the data, but reading breakdowns ad by ad is slow, so many advertisers only check totals. The result is a rising cost per result that no one can explain.
Each morning, ClickRuntime fetches ad-level daily insights and breakdowns, compares each ad with account benchmarks, flags fatigue signals such as rising frequency and falling click-through, and finds spend with no results. Optionally its built-in AI adds a short plain-language commentary, then everything is emailed to you.
It helps freelancers and in-house marketers who manage several campaigns and cannot study every ad each day.
What you get out of it
Stop paying for tired ads
When frequency rises while click-through falls, the audience is bored. Seeing that on the morning report lets you swap the creative before another week of budget produces fewer clicks. Refreshing creative early keeps costs per result steadier.
Find wasted spend by placement
Breakdowns reveal that one placement or age group spends heavily without conversions. Cutting it redirects money to what works, which lifts results without raising the total budget. Small shifts in placement can change the whole month's return.
Compare ads against account benchmarks
An ad's numbers mean little alone. Measuring each against account averages tells you which are truly under- or over-performing, so you make decisions based on the context of your own account.
Review in minutes, not an hour
One email replaces opening Ads Manager, applying breakdowns and exporting. Optional commentary turns the numbers into two or three sentences saying what to look at first. That makes daily monitoring realistic alongside other work.
Back budget requests with evidence
When a client asks why you changed creative, the dated reports show the fatigue signs. That record supports your decisions and shows the value of active optimization. Clients value that kind of paper trail.
How it works
What happens, step by step
Every morning ClickRuntime pulls the last 14 days of results for your Meta ads.
It spots tired ads, where people are seeing them more often but clicking much less than they did at the start.
It also finds placements where each click costs more than 1.5 times your average.
You get an email ranking those ads and placements by how much they cost you, with a short note on what to pause first.
Before it runs live
- Connect Facebook Pages
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Facebook Pages steps into one automation
Under the hood
The code that runs this automation
from collections import defaultdict
from clickruntime import on_trigger, credentials, http, ai, notify
G = "https://graph.facebook.com/v21.0"
AD_ACCOUNT = "act_1234567890"
@on_trigger
def run(event):
token = credentials.connection("facebook", "work")
base = {"access_token": token, "date_preset": "last_14d", "level": "ad", "limit": 500}
daily = http.get(f"{G}/{AD_ACCOUNT}/insights", params={**base, "time_increment": 1,
"fields": "ad_name,ctr,frequency,spend"}).json()["data"]
by_ad = defaultdict(list)
for d in sorted(daily, key=lambda d: d["date_start"]):
by_ad[d["ad_name"]].append(d)
fatigued = [(name, sum(float(x["spend"]) for x in rows)) for name, rows in by_ad.items() if len(rows) >= 6
and float(rows[-1]["ctr"]) < 0.8 * float(rows[0]["ctr"]) and float(rows[-1]["frequency"]) > float(rows[0]["frequency"])]
places = http.get(f"{G}/{AD_ACCOUNT}/insights", params={**base, "level": "account",
"breakdowns": "publisher_platform,platform_position", "fields": "spend,clicks"}).json()["data"]
avg = sum(float(p["spend"]) for p in places) / max(sum(int(p["clicks"]) for p in places), 1)
costly = [(f"{p['publisher_platform']}/{p['platform_position']}", float(p["spend"]) - int(p["clicks"]) * avg)
for p in places if int(p["clicks"]) and float(p["spend"]) / int(p["clicks"]) > 1.5 * avg]
ranked = sorted(fatigued + costly, key=lambda x: -x[1])
report = "\n".join(f"${waste:,.0f} {name}" for name, waste in ranked) or "Nothing flagged."
note = ai.generate(f"In two sentences, what should I change first?\n{report}", max_output_tokens=120).text
notify.email_me("Meta ads: waste and fatigue", f"{note}\n\n{report}")
return {"flagged": len(ranked)}FAQ
Common questions
How does it decide an ad is fatigued?
Do I need the AI commentary?
Does it change or pause my ads?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Publish an AI-written post with an image every day
Your Page gets a fresh post with a picture each day on topics you chose, and you get the link by email.
See how it worksGet your Page's weekly reach by email
Every Monday you see last week's reach, engagement and follower change for your Page.
See how it worksGet a weekly table of post engagement
Every Friday you see each post from the week with its reactions, comments and shares.
See how it worksKeep exploring
Set up “Spot tired ads and wasted ad spend” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.