Page on-call when a production service goes down on Render
The moment one of your production services fails on Render, your on-call engineer gets paged and the whole team sees it in Slack.
Run this as a webhook workflow that receives service events from Render. Render sends an event for everything that happens to a service, so the first step is to narrow it down: only continue when the event type is server_failed or server_hardware_failure. Exit immediately and do nothing for every other type, including server_available, server_restarted, service_suspended, and maintenance events.
From the incoming event, read data.serviceId, data.serviceName, data.id (the Render event id, which starts with evt-), the event type, and the timestamp. Those are the only inputs the rest of the workflow needs.
Enrich the event by calling Render's Retrieve service operation with the serviceId. From the response, take the service type (for example web_service, background_worker, or cron_job) and the service's dashboard URL, so the alert can link straight to the service in Render.
Near the top of the workflow, define a plain configuration object that maps production Render service names to PagerDuty service IDs, for example { "api-prod": "PSAA1G5", "checkout-prod": "PT4KHLK" }. This is the allowlist and the routing table in one, and it is the main thing I will edit, so keep it in a single obvious place with a short comment showing the format. Any Render service whose name is not a key in that object is treated as non-production. Also expose the PagerDuty user email as configuration, since PagerDuty write operations require a From header set to the email address of a valid PagerDuty user.
If the failed service name is in that configuration, create a PagerDuty incident using Create Incident against the mapped PagerDuty service, with urgency set to high and a title along the lines of "Render service <serviceName> failed". Then attach the detail to that incident with Create Incident Note, including the Render event id, the service type, and the dashboard link.
If the failed service name is not in that configuration, skip PagerDuty entirely. Do not create an incident and do not page anyone.
In both cases, post exactly one message to a configurable Slack incidents channel. The message should state which service failed, what type of service it is, when it failed based on the event timestamp, and a link to the service in Render. It must be explicit about whether someone was paged: when an incident was created, include the PagerDuty incident number or link; when paging was skipped, say plainly that the service is not on the production list so nobody was paged. The point is that the team can see both the noisy staging failures and the real ones in the same channel, without being woken up for the former.
Keep this deterministic. There is no reasoning, judgement, or summarization step anywhere: a fixed event comes in, the allowlist decides, and the workflow fans out to PagerDuty and Slack.
What does this prompt do?
- Reacts the moment a service stops running on Render, covering both runtime failures and underlying hardware failures.
- Checks the failed service against your own list of production services, so staging and side projects never wake anyone up.
- Pages your on-call engineer for genuine production outages and attaches the service type and a direct link to the service in Render.
- Posts every failure to your incidents channel in Slack, stating which service went down, when, and whether anyone was paged.
What do I need to use this?
- A Render account running the services you want to watch
- A PagerDuty account with an on-call schedule already set up
- A Slack workspace and a channel where incidents are posted
- A short list of which of your service names count as production
How can I customize it?
- Edit the production list, and choose which PagerDuty service each one should page. This is the main knob and it lives in one obvious place at the top of the workflow.
- Change the urgency of the page, the wording of the alert, or the Slack channel it gets posted to.
- Extend it to close the incident automatically when the service comes back up, so nobody has to tidy up after a short blip.
FAQs
Will this wake someone up every time a staging service fails?
How quickly does the page go out?
What happens to services that are not on my production list?
Do I need to change anything in my application code?
Can it also tell us when the service recovers?
Related templates
When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.
Every 15 minutes, forwarded phishing reports get traced back to the server that really sent them, with a verdict in Slack and the worst senders reported.
Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.
Every Monday, rank the week's matches by expected demand, put the big ones on your venue calendar, and post a rota-ready summary to Slack.
Every Tuesday we pull your best new reviews, draft social captions, email testimonials and product page quotes, then stage them in Notion for approval.
Every weekday morning, unfulfilled orders get an address check: harmless typos fixed automatically, risky addresses held with a note to the customer.
Stop hearing about outages from your customers first.
Get your on-call engineer paged the second a production service fails, and keep the noisy failures out of everyone else's night.