Catch anything that posts
Point any service at a hooflow URL and it's live. Signatures verified, payloads parsed, nothing dropped while you sleep.
hooflow catches the webhooks your tools already send — commits, deploys, failed payments, alerts — and runs whatever should happen next.
A hook comes in, a flow decides what it means, a run does the work. Everything else is detail you can look at later.
Point any service at a hooflow URL and it's live. Signatures verified, payloads parsed, nothing dropped while you sleep.
Filter on any field of the payload, wait for a second event, retry with backoff, or stop the run cold. Written as code, not as boxes.
Every payload is kept for 90 days. Re-run a flow against the real event that broke it, with your new code, before you ship.
Flows are plain TypeScript. Push, and the next matching event runs against it in under a second.
import { flow, slack, linear } from "hooflow"
export default flow("github.deployment_status", async (e) => {
if (e.state !== "failure") return e.skip()
// who touched it last
const owner = await e.git.lastAuthor(e.sha)
await slack.dm(owner, `deploy ${e.env} failed`)
await linear.issue({ team: "INF", urgent: true })
})
github.deployment_status · production · just now
Invite the whole team on any plan. You only pay for flows that actually execute.
Team
$40per month
Start 14-day trialScale
$190per month
Talk to usPaste a webhook URL into the tool you already use. We'll show you the payload it sends, and you write the rest.
No card. 2,000 runs a month stay free after the trial.