What is Webhook Watchtower?
I built the tool I always wished existed when debugging webhook failures. What it does, why I built it, and what's included.
I spent an embarrassing amount of time staring at server logs trying to answer one question: did this webhook actually arrive?
Not "did it get processed correctly" or "did it trigger the right action." Just: did it arrive. That should be a five-second lookup. It never was.
That's what Webhook Watchtower fixes.
Why I built it
Webhooks fail silently. No exception in your logs, no alert, just a customer emailing to say something didn't happen. Then you spend an hour reconstructing what went wrong from two different dashboards and a timeline that doesn't quite add up.
I kept building the same rough solution at every job: a dedicated ingest route, some basic logging, a way to see what arrived. Never quite good enough, always the last thing prioritised.
At some point I decided to build it properly, as a standalone product. Something you could point any webhook provider at and immediately have full visibility into what's arriving, what's failing, and what you need to do about it.
What it does
Webhook Watchtower sits between your webhook providers and your own endpoints. Every event that comes in is captured in full, forwarded to your destination, and tracked through its entire delivery lifecycle.
What that looks like in practice:
- Captured - full headers, raw body, method, and timestamp on every ingest
- Verified - HMAC signature checked against your secret before anything is forwarded
- Forwarded - delivered to your endpoint asynchronously, with automatic retries if it fails
- Tracked - every attempt recorded with the exact response code, response body, and timing
- Replayable - one click to re-send any event, whether it failed last week or just now
"The provider says delivered but we have nothing" becomes a thing of the past.
What's included
Live event stream
Events appear in the dashboard the moment they land at your ingest URL. No polling, no refreshing. You can watch traffic arrive in real time, which is useful when setting up a new integration or debugging something live.
Signature verification
Stripe, GitHub, and Shopify each have their own signature format. Watchtower handles all three natively. For anything else, custom HMAC-SHA256 is supported. Every event is stamped Verified, Failed, or Skipped so you always know whether a request was trusted.
Failed events can be quarantined: stored for inspection but not forwarded to your endpoint until you decide what to do with them.
Delivery retries with exponential backoff
Failed deliveries retry automatically based on your plan. Correction (15 October 2026): the retry schedule uses fixed waits of 1 minute, 5 minutes, 30 minutes, then 2 hours, with no jitter. Current default attempts are Scout 1, Guard 3, Sentinel 5, and Bastion 5, subject to workspace settings and grandfathered plans.
| Plan | Attempts | Schedule |
|---|---|---|
| Scout | 1 | No retries - manual replay only |
| Guard | 3 | 1 min, 2 min |
| Sentinel | 5 | 1 min, 2 min, 4 min, 8 min |
| Bastion | 5 | 1 min, 2 min, 4 min, 8 min |
When all attempts are exhausted, you get an email and an in-app notification. The event stays stored so you can replay it when you're ready.
Delivery status that reflects reality
A delivery in progress shows as Retrying with the current attempt count. You can see at a glance whether the system is still working on something or has genuinely given up. The replay button only appears once retries are exhausted, so you can't accidentally interfere with an in-progress delivery.
Replay - single and batch
Any event can be replayed individually from the detail view. You can also select a range and replay them all at once, which is useful after an outage when you need to push through a backlog. Replay history is logged so there's no ambiguity about what was triggered and when.
Error diagnostics
Every failed attempt records a structured error category: connection error, timeout, HTTP 4xx, HTTP 5xx. Diagnosing failure patterns across a destination takes seconds, not a grep through raw logs.
Audit log
Every action in your workspace is recorded: who created or deleted a source, who rotated a token, who replayed an event, what changed in a destination config. Each entry shows a before/after diff. Sensitive fields like signing secrets are masked.
Sources and destinations use soft delete, so nothing is permanently gone on the first click.
Team workspaces
Invite teammates by email. Role-based access (owner, admin, member) is enforced across the API and the dashboard. New members land directly in your workspace after accepting their invite.
Pricing
Four tiers, monthly or annual. No surprises.
| Plan | Price | Events/month | Retention |
|---|---|---|---|
| Scout | Free | 10,000 | 1 day |
| Guard | £19/mo | 100,000 | 7 days |
| Sentinel | £59/mo | 500,000 | 30 days |
| Bastion | £149/mo | 2,000,000 | 90 days |
Scout is free forever, no card required. It's enough to try the product on a real integration before deciding whether to upgrade.
What's coming
The core is solid. A few things on the roadmap:
- Advanced filtering - search across payloads, filter by header values, response codes, verification status
- Webhook transformations - reshape a payload before forwarding, without needing an intermediate service
- More provider presets - native setup flows for popular providers beyond Stripe, GitHub, and Shopify
- Delivery analytics - success rate trends, latency distributions, reliability metrics over time
Follow the changelog as things ship.
If you want early access or have questions, email hello@webhookwatchtower.co.uk. I read every one.
Share this post
Webhook Watchtower
Stop debugging webhooks in logs.
Capture every event, replay failures, and get alerted when deliveries fail, without changing your existing setup.
Try it free →