Weekly
Get a weekly Meta Ads campaign report
Every Monday you get a table of last week's spend, clicks, conversions and cost per result for each campaign.
- Runs
- Weekly
- Apps
- Meta Ads
- AI
- Not needed
- Access
- ads_read
Send this to your assistant
Create a ClickRuntime automation: every Monday at 8am, email me last week's Meta Ads spend, clicks, conversions and cost per result for each campaign in ad account act_123456789, highest spend first.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A freelancer who runs Meta ads for six local businesses spends Friday afternoons exporting reports from Ads Manager, one account and one date range at a time, then pasting figures into a document. The export columns never match what the client asked for, someone forgets to change the date preset, and the report goes out late with a spend figure that does not agree with the invoice from Meta.
Every week, ClickRuntime calls the Meta insights API at campaign level for the date preset you choose, such as last 7 days, arranges spend, results and cost per result into a table with one row per campaign, and emails it to you. The numbers come straight from Meta, so there is no copying between screens.
Agencies, in-house marketers and shop owners who need identical numbers at a fixed time each week tend to use it.
What you get out of it
The same columns every time
A fixed layout of spend, results and cost per result means you read the report in seconds, and a client who receives it weekly learns where to look. Nothing shifts between exports.
Numbers that match Meta's own
Pulling figures directly from the insights API avoids transcription errors. When a client compares your report with their invoice or Ads Manager, the two agree, which protects your credibility. That also makes it easy to check against the invoice.
Bad campaigns are spotted sooner
A campaign that spent $400 and produced two results stands out in a table of ten rows. You can pause or rework it on Monday rather than discovering the waste at month-end.
Reporting hours are returned to you
If each client report takes 20 minutes by hand, six clients cost two hours every week. A scheduled email replaces that work, leaving time for the optimizing the report is supposed to inform.
Date ranges are never mixed up
Because the preset is defined once, nobody exports last 30 days by accident and sends it as last week. Comparisons from week to week remain honest. Your week-on-week comparisons stay trustworthy for the client.
Easy to forward as a client update
The table is formatted for email, so you can send it as it is or add two lines of your own commentary. Clients get a prompt, tidy update without a login to Ads Manager.
How it works
What happens, step by step
Every week (or every day, if you prefer), ClickRuntime pulls the results of each Meta Ads campaign for the period.
For each campaign it lists spend, clicks, purchases and cost per purchase.
You get the table by email.
Before it runs live
- Connect Meta Ads
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
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Meta Ads steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_trigger, notify, http, credentials
ACCOUNT = "act_123456789"
def action(rows, kind):
return float(next((a["value"] for a in rows or [] if a["action_type"] == kind), 0))
@on_trigger
def run(event):
token = credentials.connection("meta-ads", "main")
rows = http.get(f"https://graph.facebook.com/v21.0/{ACCOUNT}/insights", params={
"level": "campaign", "date_preset": "last_7d", "limit": 200, "access_token": token,
"fields": "campaign_name,spend,clicks,actions,cost_per_action_type",
}).json()["data"]
rows.sort(key=lambda r: float(r["spend"]), reverse=True)
lines = [f"{'Campaign':30} {'Spend':>9} {'Clicks':>7} {'Conv':>5} {'CPA':>7}"]
for r in rows:
conv = action(r.get("actions"), "purchase")
cpa = action(r.get("cost_per_action_type"), "purchase")
lines.append(f"{r['campaign_name'][:30]:30} ${float(r['spend']):>8,.2f} {int(r['clicks']):>7,} {conv:>5.0f} ${cpa:>6.2f}")
notify.email_me("Meta Ads: last 7 days by campaign", "\n".join(lines))
return {"campaigns": len(rows)}FAQ
Common questions
Which Meta metrics are included?
Can it cover several ad accounts?
What date range does it use?
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
Get alerted when ad spend or CPA runs high
If today's spend or cost per purchase passes your limit, Slack hears about it once, not every two hours.
See how it worksSpot tired ad creatives each morning
Ads that people have seen too often and click less are flagged before they waste more budget.
See how it worksGet a plain-English read on this week's ads
A Monday email compares this week with last and explains which campaigns moved and what to look at.
See how it worksKeep exploring
Set up “Get a weekly Meta Ads campaign report” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.