Pages go to incident.io
If it needs a human right now, it should open an incident, not post into a channel and hope somebody sees it.
Ping Bouncer is the doorman between your alert sources and your people. Point every webhook and alert email at one door, write the house rules, and only the pings that matter get past the rope.
For SREs, DevOps and Security engineers who are tired of #alerts-prod-2.
The problem
Every tool you own ships a Slack integration. None of them ship judgement. So the page that mattered at 03:12 is wedged between a staging CPU warning, a vendor status email and the same flapping monitor for the seventeenth time, in a channel half the team muted months ago.
somewhere in here is a real outage ↑
How it works
Each workspace gets one webhook URL and one email address. Datadog, CloudWatch, Grafana, Alertmanager, Sentry, Vanta, status pages and the uptime monitor that can only send email all knock on the same door.
Workflows shape every alert in order: label it, rewrite it, filter it, rate limit it, group the repeats. Then routes decide where it goes. Test your rules on real payloads before anything goes live.
Pages go where people get woken up. Real work becomes a ticket someone owns. Noise goes to the archive, where you can still search it. Any destination, or your own HTTPS endpoint.
House rules
Every team's noise is different. Pick one and see how Max handles its night.
staging
{{payload.tags.service}}{{alert.title}} for 30m{{labels.team}}A typical night at the door (illustrative)
1,200 pings never touched a phone.
security, owner =
{{payload.owner}}{{payload.finding.severity}}informational
{{payload.control}} for 24hA typical week at the door (illustrative)
Two real incidents. Zero missed.
digest
{{labels.from_domain}}{{labels.vendor}} for 2h{{labels.vendor}}A typical week at the door (illustrative)
Nobody paged for a vendor's bad day.
Strong opinions, loosely held
If it needs a human right now, it should open an incident, not post into a channel and hope somebody sees it.
Real but not urgent means a ticket with an owner and a team, not a Slack message nobody gets to.
Resolved, staging, FYI and duplicates go to the archive. Nobody gets notified, and you can still search them in the events log.
It's a perfectly good destination. It just shouldn't be the only place alerts end up. Route what belongs there, and nothing else.
Don't like our taste? Every route is yours to rewrite. ✎
Single purpose, on purpose
Ping Bouncer isn't here to replace your stack. Keep Datadog. Keep PagerDuty. Keep your SIEM, your status pages and your incident process. We just work the door between all of them and your people.
Built by people who read raw payloads
Built-in types for Datadog, CloudWatch, SNS, Grafana, Alertmanager, Sentry, Vanta, Oneleet and email. Unknown payloads show up as shapes you can name as your own event types.
The workflow editor runs your rules over recent real events as you edit. Click a field to turn it into a filter, label or route, and see per-step counts before you save.
Changes are drafts until you publish. Releases roll out 10% → 50% → 100%, the error rate is watched, and a bad release rolls itself back.
Every request, including the ones Max turned away. Drag across the histogram to zoom, and get suggestions as you type.
Custom destinations run your JavaScript for each alert in a sandbox that can only call the HTTPS hosts you allow. Sign a webhook, post to Discord, do whatever your team needs.
export default {
async deliver(alert, ctx) {
await fetch(ctx.settings.url, {
method: "POST",
body: JSON.stringify(alert),
});
return ctx.delivered();
},
};
Route to a destination before anyone has its credentials. Send a single-use setup link to whoever holds the keys, and they fill in only the fields you ask for.
If a delivery can't go out, it's recorded as skipped, with the reason. It never gets replayed hours later, because a late page does more harm than none.
Each workspace's events run in its own isolated Cloudflare Worker, built from its own published settings. It runs on the edge, close to wherever your alerts come from.
Integrations
Knocking at the door
Shown to the right room
Meet Max
Max has worked the door at every noisy club in town. Now he works yours. He's polite, he's consistent, and he has never once said “it's probably fine.”
Questions at the door
No. Ping Bouncer decides which alerts reach your incident tool, your tracker and your channels, and where they land. It doesn't run incidents, schedules or status pages. Keep the tools you have. Max just works the door in front of them.
No. Point your sources at Ping Bouncer instead of straight at the channel or the pager, and route to whatever you already use. You can move one source at a time.
If it can send a JSON webhook or an email, it can knock. Payloads Ping Bouncer doesn't recognise show up as shapes you can name, and they become custom event types with their own labels and routes.
Yes. Custom code destinations run your JavaScript for each alert, in a sandbox that can only reach the HTTPS hosts you list. There are templates for a signed webhook to your own endpoint and for Discord.
The delivery is recorded as skipped, with the reason, and you can see it in the events log. It's never replayed later, because a page that arrives hours late does more harm than good.
On Cloudflare. Every workspace's events are processed by that workspace's own worker, built from its own published settings. A team that needs harder separation can create another workspace.
It was. Same product, same one-door idea, new name, and now it has a bouncer. Existing workspaces, webhook URLs and email addresses keep working.
Point one source at the door tonight. Max will take it from there.