How it works
From 41,318 log lines to one page that gets acked.
No agent to install and no SDK to adopt. Anything that can make an HTTP request feeds the pipeline, hosted checks feed the same one, and deduplication, rules and escalation do the rest — until a human acknowledges.
1.0In
Send it a log line. Or add a check.
Create a project, add a source, get a token. One POST with a message, a severity from 100 to 500, and whatever structured keys and tags your rules should match on — from an error hook, a cron job, a shell script, anywhere.
Ingest →Every line kept, every line searchable
What doesn't page you is still there: the lines around an alert, counts by source and level, and a search across every project.
Anywhere you can run curl
No SDK: one request per line, or up to a thousand in a batch. The source token can only send; it can never read your data back.

Or let Pingtower do the asking
Hosted checks — HTTP, TLS, DNS, ping, TCP, gRPC, WebSocket, domain expiry, multi-step API and browser checks — report into the same stream without any code.
2.0Fold
Rules turn the stream into state.
Pingtower strips the variable parts of each message to recover its shape and hashes it. A new problem opens an alert; a repeat bumps the count on the one you already have.
Rules →One rule, read left to right
Which lines count, the conditions on their keys, when it fires, whose phone it rings and which runbooks run — the whole policy in one place, with a preview of the lines it would catch.

Repeats bump a counter
The same failure, forty thousand times, is one alert with a count — not forty thousand notifications. Group by a key like a username to get one alert per account instead.
Thresholds live in the rule
“5 hits in 10 minutes” or “only when 3 different sources see it” — so the slow bleed pages you and the one-off doesn't.
3.0Find a human
The ladder climbs until someone answers.
Each rule carries its own ladder: step one might notify a Slack channel, step two pages whoever's on shift, step three wakes the founder — each on its own delay, repeating until acked.
Alerts & escalation →A ladder, in the rule itself
Per-rule ladders, up to your own paranoia level. Acked alerts hold their place; quiet ones auto-resolve.
It finds whoever's on shift
The on-call rotation picks whose phone rings, with critical push that sounds through Silent mode. One swipe acks it and stops the ladder for everyone.
Every delivery, on the record
Integrations fan out — Slack, Telegram, Discord, signed webhooks, push to the phone apps. Every notification is a durable outbox row, delivered at-least-once and logged per integration.
Runbooks fire on their own
HTTP actions run the moment an alert opens or escalates — restart the worker, flush the queue, open a ticket — and every run is logged with its response.
4.0Where it runs
Hosted or self-hosted — same three steps.
The hosted service runs everything for you at api.pingtower.com. Or run the single Go binary on your own box, and pair it with a pingtower.com account so the iOS app's push rings for your self-hosted alerts too.
Self-host the server →The whole inbound half, on your box
Ingest, dedup, rules, escalation, incidents and status pages, plus webhook, Slack, Telegram and Discord delivery — with each tenant in its own PostgreSQL schema, or a SQLite file.
One static binary
No runtime and no dependencies. Releases are signed, and you verify them before you run them.
Your first page is one POST away.
Sign up, grab a source token, send the curl — or add a check in the web app.

