Webhooky takes whatever JSON you send it. Hookfire already knows what 33 providers send, and checks they really sent it.
The difference between these two is the difference between a blank endpoint and a catalogue, and which one is better depends entirely on where your events come from.
Webhooky's shape is an endpoint that accepts what you send it. You point anything at it, you write the title and body with placeholders pulled out of your own payload, and you pick a sound. That is a genuinely good fit when the thing you want alerts about is your own code: a deploy script, a nightly job, a server you wrote the monitor for. Nobody needs to model your payload for you, because you already know it.
Hookfire's shape is the opposite. Thirty-three providers are described in advance: which events exist, what each event's notification should say, where the interesting values live in the body, and how that provider signs its requests, which is the part a generic endpoint structurally cannot do. A generic receiver's defence is a secret in the URL, which proves that whoever posted knew the URL. Hookfire checks Stripe's signature with Stripe's scheme against the raw bytes, so a notification can only come from a payload Stripe actually signed.
One place Webhooky is plainly ahead: sounds. A cash-register noise for a sale is a small feature that people genuinely enjoy, and Hookfire does not send a sound field at all today. What Hookfire has instead is priority: four levels, where critical re-sends every five minutes up to six times until somebody acknowledges it. That answers "wake me up" rather than "which of these buzzes is which", and if the second question is the one you have, that is a real reason to pick the other tool.
The shape of each tool rather than its price list, because that is the part that is still true next quarter.
| Webhooky | Hookfire | |
|---|---|---|
| What you point at it | Any JSON you can POST, from your own code or from a provider | Any of 33 mapped providers, plus custom sources you define in YAML yourself (Max) |
| Writing the notification | You write title and body with placeholders from your payload | Written per event and shipped with the source; editable per integration on Max |
| Proving who sent it | A secret endpoint URL, the usual mechanism for a generic receiver | The provider's own signature scheme, checked against the raw body before anything renders |
| Sounds | A large library, chosen per notification | None yet; priority is what changes how an alert arrives |
| Getting somebody's attention | Sound and, as with any push, the notification itself | Four priorities; critical re-sends every five minutes, up to six times, until acknowledged |
The alert carries a link back to the thing it is about (the Stripe payment, the GitHub pull request), built from the payload and dropped entirely unless it resolves to a plain http(s) URL.
Quiet hours in your own time zone, a snooze that expires by itself, and a mute that covers a whole integration for everyone. None of the three stop the event being recorded; what is suppressed is the interruption.
A condition on the payload decides whether anyone hears about the event at all, which is useful precisely when the source is somebody else's and you cannot edit what it sends.
Every delivery is recorded with its status, there is a view of just the failures, and any one of them can be replayed by hand against whatever the templates say now.
Webhooky is a general endpoint you POST to, with notification text you compose from your own payload and a large library of sounds.
33 providers already mapped and verified, turned into notifications a person can act on.
These two are not mutually exclusive, and the split is obvious once you say it out loud: the generic endpoint keeps your own scripts, Hookfire takes the providers. Both can run on the same phone and neither knows about the other.
If you would rather consolidate, Max's custom sources close the gap from the Hookfire side. A custom source is a small YAML file naming where the event type sits in the payload and what the title and body should say for each one. After that your own scripts POST to Hookfire exactly as they would to any generic endpoint, and get the same filtering, priorities and history as the built-in sources.
Pick one provider, send its test event, and see how much of the setup you did not have to do.