The moment it happens
Get a Slack alert when a scraper fails
When any actor run fails or times out, you get its name and a link to the run in Slack.
- Runs
- The moment it happens
- Apps
- Apify
- AI
- Not needed
- Access
- API token
Send this to your assistant
Create a ClickRuntime automation: give me a webhook link for Apify. When any actor run fails or times out, post the actor name and a link to the run to #scrapers in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A growth analyst relies on an Apify actor that scrapes competitor pricing every night, and a Google Sheet downstream feeds a pricing dashboard. One evening the target site changes its layout, the actor throws errors and the run ends as FAILED. Nothing breaks loudly. The dashboard simply keeps showing stale prices, and the gap is found days later when a colleague asks why a number looks wrong.
When an Apify run finishes with a FAILED, TIMED-OUT or ABORTED status, Apify sends a webhook to ClickRuntime. ClickRuntime picks out the actor name, the run status and the run link, then posts a short message to Slack or sends an email. It reacts as soon as the event arrives, with no polling delay.
Teams running many actors for clients, lead lists or monitoring get the most from it.
What you get out of it
Stale data never reaches reports
Because the failure reaches you the same evening, the dashboard is fixed or flagged before the next morning's meeting. Decisions stop being made on prices that are three days old.
Debugging starts at the right page
The message links straight to the failed run, where the log, input and exit code are already waiting. You skip the hunt through the Apify console for which actor and which run broke.
Client scrapes stay on schedule
If you deliver scraped data to customers, a silent failure becomes a missed delivery. An immediate alert lets you rerun the actor and still hit the agreed time. Your customer hears about a fix, not about a gap.
Timeouts get noticed too
Runs that hit the time limit are easy to overlook because nothing crashes. Treating them as failures catches the slow pages and blocked proxies that quietly shrink your dataset. That keeps the dataset complete.
The whole team sees one signal
Posting to a shared Slack channel means the person on call and the person who wrote the actor see the same message, so ownership gets sorted in the thread instead of by forwarded email.
How it works
What happens, step by step
When an Apify scraper run fails, times out or is stopped, Apify tells ClickRuntime straight away.
ClickRuntime looks up the scraper's name.
It posts to #scrapers in Slack with the scraper name, what happened and a link to the run.
Before it runs live
- Connect Apify
- Paste your automation's link into the other app's webhook settings
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
- Act only on the items that match your own rules, and skip the rest
- 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 Apify steps into one automation
Under the hood
The code that runs this automation
from clickruntime import on_event, credentials, http, notify
FAILED = {"ACTOR.RUN.FAILED", "ACTOR.RUN.TIMED_OUT", "ACTOR.RUN.ABORTED"}
@on_event
def handle(event):
payload = event.json or {}
if payload.get("eventType") not in FAILED:
return {"posted": False}
run = payload.get("resource") or {}
token = credentials.secret("APIFY_TOKEN")
actor = http.get(f"https://api.apify.com/v2/acts/{run['actId']}",
headers={"Authorization": f"Bearer {token}"}).json()["data"]
link = f"https://console.apify.com/actors/{run['actId']}/runs/{run['id']}"
notify.slack(f"Apify run {run.get('status', 'FAILED').lower()}: {actor['name']}\n{link}",
channel="#scrapers")
return {"posted": True, "actor": actor["name"]}FAQ
Common questions
Which Apify events count as a failure?
Do I have to set up the webhook in Apify myself?
What if the actor retries and succeeds?
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 the results when a scrape finishes
Each successful run sends you how many items it collected and a link to the dataset.
See how it worksGet a weekly Apify usage and failures report
Every Monday you see this month's usage so far and the runs that failed last week.
See how it worksPost new orders and sign-ups to Slack
When something happens in your shop, app or form, the details land in the right channel straight away.
See how it worksKeep exploring
Set up “Get a Slack alert when a scraper fails” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
