Hourly
Get a Slack alert when sign-ups fall behind
If sign-ups are running 30% under their usual pace, you find out within the hour.
- Runs
- Hourly
- Apps
- Mixpanel
- AI
- Not needed
- Access
- service account
Send this to your assistant
Create a ClickRuntime automation: every hour, check today's sign-ups in Mixpanel and message me in Slack if they're more than 30% below the 7-day average for this time of day.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Sign-ups rarely fall off a cliff in one clean line. A broken Google login button, a form that errors on Safari, or a paused ad campaign shows up as a gradual slide across several hours, and by the time somebody glances at Mixpanel in the afternoon the day's funnel is already damaged. Every hour of a broken sign-up flow means paid traffic that arrived and left without creating an account.
Every hour ClickRuntime queries Mixpanel for the count of sign-up events, compares it with a rolling average of the same hours on recent days kept in saved state, and posts to Slack when the count is 30 percent or more below that normal level. The rolling average updates as it goes, so a slow weekly pattern is not mistaken for an outage.
Growth and engineering leads use it as a cheap tripwire in place of a full monitoring stack.
What you get out of it
Broken flows caught within the hour
Hourly checks mean a failing sign-up form is flagged while the evening ad spend is still running. The fix happens the same afternoon, which is the difference between losing 40 sign-ups and losing a whole day's cohort.
Alerts based on your own normal
A fixed threshold fails on weekends and at night. Comparing with a rolling average of similar hours means a quiet Sunday does not page anyone, while a genuine 30 percent shortfall on a busy Tuesday does.
No one has to watch a chart
The check runs on its own, so the person who owns growth is not tied to a dashboard tab. Attention is spent only when Slack shows a message, which keeps trust in the alert high.
A shared place to start debugging
The Slack post lands where engineers and marketers already talk. They see the same drop, and can immediately ask whether a deploy, campaign change or tracking bug is to blame.
Tracking failures treated as incidents
A sudden fall to zero is often a broken analytics snippet, not lost users. Catching it quickly protects the data your weekly reports and experiments depend on, before gaps accumulate.
How it works
What happens, step by step
Every hour, ClickRuntime counts today's sign-ups in Mixpanel so far.
It compares that with the usual count by this time of day over the past seven days.
If sign-ups are running 30% or more behind, a message goes to your Slack channel with today's count and the usual one.
Before it runs live
- Connect Mixpanel
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 Mixpanel steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timedelta, date
from clickruntime import on_trigger, credentials, http, notify, state
PROJECT_ID = 2195193
def signups_by_hour(day):
data = http.get("https://mixpanel.com/api/query/segmentation",
auth=("ops-reader.mp-service-account", credentials.secret("MIXPANEL_SERVICE_SECRET")),
params={"project_id": PROJECT_ID, "event": "Sign Up", "from_date": day,
"to_date": day, "unit": "hour"}).json()
return data["data"]["values"].get("Sign Up", {})
@on_trigger
def run(event):
hour = datetime.now().hour
def upto(day):
return sum(v for k, v in signups_by_hour(str(day)).items() if int(k[11:13]) < hour)
today = upto(date.today())
avg = sum(upto(date.today() - timedelta(days=d)) for d in range(1, 8)) / 7
if avg and today < avg * 0.7 and state.get("alerted_on") != str(date.today()):
notify.slack(f"Sign-ups are {1 - today / avg:.0%} below the 7-day average: "
f"{today} so far vs {avg:.0f} usual by {hour}:00.", channel="#growth")
state.set("alerted_on", str(date.today()))
return {"today": today, "avg": round(avg, 1)}FAQ
Common questions
How does it decide what normal is?
Can I use a different event or percentage?
Will it message me every hour during an outage?
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 yesterday's Mixpanel KPIs by email
Every morning you see daily active users and sign-ups next to the same day last week.
See how it worksGet a weekly written recap of your Mixpanel metrics
Each Monday you get a few paragraphs on what went up, what went down and what stands out.
See how it worksKnow the moment your website goes down
Your team hears in Slack when the site stops responding or slows down, and again when it's back.
See how it worksKeep exploring
Set up “Get a Slack alert when sign-ups fall behind” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.