Daily
Get alerted when campaign conversions drop
You hear in Slack when a campaign's conversions drop sharply against its recent average.
- Runs
- Daily
- Apps
- Google Ads
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every morning, post to #ads in Slack any campaign whose conversions yesterday were 40% below its 7-day average.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
An ecommerce marketer is at a trade show when click-through rate on her best campaign halves because a competitor started outbidding on the main phrase. The account looks fine at a glance: spend is on budget and impressions are steady. Only the conversion count is sliding, and she will not see it until the following week's report, after hundreds of dollars went to clicks that did not turn into orders.
Each day, ClickRuntime pulls eight days of Google Ads data for each campaign and compares the latest day's click-through rate and conversions with the earlier seven. If either has fallen sharply, a message is posted to Slack naming the campaign and the size of the drop.
Teams with a dedicated Slack channel for ads often tag the campaign owner so the right person sees it first.
What you get out of it
Drops found on day one
A sharp decline appears the morning after it starts. Responding within a day, by checking bids, ads or competitor activity, limits the cost of a problem that otherwise runs for a week.
Competitor moves become visible
A fall in click-through rate with steady impressions often points to new competitor ads. Knowing which campaign was hit first helps you decide whether to refresh the copy or adjust bids.
Tracking failures are caught
Conversions falling to zero while clicks hold up usually means a broken tag after a site release. The alert pushes you to check before days of conversion data are lost for good.
Fewer reasons to log in daily
You do not need to open the interface just to be reassured. Silence means normal, and an alert means look now, which frees time for work that improves results. Noticing something wrong is the whole point, and quiet days stay quiet.
The team shares the same signal
Posting to Slack means the marketer, the developer and the owner all see the drop together. That shortens the back-and-forth when a fix involves more than one person. Everyone sees the same numbers at the same moment.
How it works
What happens, step by step
Every day, ClickRuntime pulls the last eight days of conversions for each Google Ads campaign.
It compares yesterday with each campaign's recent daily average.
If any campaign dropped sharply, it posts them to your #marketing Slack channel, such as "Generic – Search: 3 conversions yesterday vs 11.4/day". Otherwise nothing is sent.
Before it runs live
- Connect Google 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 Google Ads steps into one automation
Under the hood
The code that runs this automation
from collections import defaultdict
from datetime import date, timedelta
from clickruntime import on_trigger, credentials, http, notify
CUSTOMER_ID = "1234567890"
def gaql(query):
headers = {"Authorization": f"Bearer {credentials.connection('google', 'ads')}",
"developer-token": credentials.secret("GOOGLE_ADS_DEVELOPER_TOKEN")}
batches = http.post(f"https://googleads.googleapis.com/v21/customers/{CUSTOMER_ID}/googleAds:searchStream",
headers=headers, json={"query": query}).json()
return [row for b in batches for row in b.get("results", [])]
@on_trigger
def run(event):
start, end = date.today() - timedelta(days=8), date.today() - timedelta(days=1)
rows = gaql("SELECT campaign.name, segments.date, metrics.conversions FROM campaign "
f"WHERE segments.date BETWEEN '{start}' AND '{end}' AND campaign.status = 'ENABLED'")
conv = defaultdict(dict)
for r in rows:
conv[r["campaign"]["name"]][r["segments"]["date"]] = float(r["metrics"].get("conversions", 0))
alerts = []
for name, days in conv.items():
y = days.pop(str(end), 0)
avg = sum(days.values()) / 7
if avg >= 2 and y < avg * 0.5:
alerts.append(f"{name}: {y:.0f} conversions yesterday vs {avg:.1f}/day")
if alerts:
notify.slack("Google Ads conversions dropped\n" + "\n".join(alerts), channel="#marketing")
return {"alerts": len(alerts)}FAQ
Common questions
How big a fall counts as a sharp drop?
Does it compare against the same weekday last week?
What does the Slack message include?
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 last week's results per campaign
Every Monday you see spend, clicks, conversions and cost per conversion for each campaign.
See how it worksCatch campaigns that overspend
You get an email when a campaign spent far more yesterday than it usually does.
See how it worksFind keywords spending with no conversions
Each week you get the keywords that cost money for a month without converting, and can have them paused.
See how it worksKeep exploring
Set up “Get alerted when campaign conversions drop” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.