ngrok is great for throwaway dev tunnels. When the webhook matters in production, you want a persistent URL, a dashboard, replay, and alerting. That's WebhookLens.
| Feature | WebhookLens | ngrok |
|---|---|---|
| Persistent webhook URL | ✓ | Paid reserved domain |
| Real-time live stream dashboard | ✓ | Inspector (local) |
| Event history & search | ✓ (30/60d retention) | Session only |
| Replay | ✓ (1-click + CLI) | Inspector replay |
| Signature validation | 13+ providers | ✕ |
| Payload transforms | ✓ | ✕ |
| Smart routing (fan-out) | ✓ | ✕ |
| Alerting | ✓ | ✕ |
| CLI tunnel for local dev | ✓ (webhooklens-cli listen) | ✓ |
| Self-hosted option | ✓ (ELv2 Docker image) | ✕ |
| Starting price | Free / €12/mo | Free / $8/mo |
If the ngrok muscle memory is ngrok http 3000, WebhookLens is the same vibe — but the webhook URL keeps working after you close the terminal:
webhooklens-cli login --server https://app.webhooklens.cloud
webhooklens-cli listen --port 3000
Anything hitting https://proxy.webhooklens.cloud/wh/<your-slug>/<endpoint> lands in your local app and your dashboard — live. When you close the terminal, webhooks keep arriving; history, replay, transforms all keep working.
go install github.com/webhooklens/webhooklens/cmd/cli@latestwebhooklens-cli login then webhooklens-cli listen --port 3000