Forward any webhook to your phone as a push notification
Stripe, GitHub, Shopify, Linear — they all fire webhooks at your server all day. Most of them you'll never care about. But a handful — a payment failing, a specific issue opening, a dispute filed — you want to know about the second they land. Forward just those to your phone with a few lines in the handler you already have.
Webhooks are firehoses; your phone is a signal channel
A provider's webhook payload is built for machines: nested JSON, dozens of fields, every event type on the same endpoint. You don't want all of that on your lock screen — you want one line, for the two or three events that actually change your day. The trick is a thin layer of translation: your handler receives the raw webhook, decides whether it matters, and forwards a human summary to Lert.
Because that translation lives in code you control, you get to filter, format, and route exactly how you like — without a rules engine or a Zapier bill.
The one-line version
Lert gives you a unique URL. Inside your webhook handler, once you've verified the signature and decided the event is worth it, POST a summary:
curl -X POST "https://lert.dev/p/your-id" \ -H "Content-Type: application/json" \ -d '{"title":"Payment failed","body":"acct_42 · $79 · card declined","tag":"stripe"}'
No auth token, no SDK. The tag groups events by source in your in-app history so a week of webhooks stays readable.
A Node webhook handler that forwards to Lert
1. Copy your Lert URL
Open the Lert app and copy your endpoint — https://lert.dev/p/your-id. Store it in an environment variable so it isn't hard-coded, and treat it like a password.
2. Verify, filter, forward
Here's a compact Express handler for Stripe. It verifies the signature, ignores everything except the events you care about, and forwards a clean one-liner to Lert:
import express from "express"; import Stripe from "stripe"; const stripe = new Stripe(process.env.STRIPE_KEY); const LERT = "https://lert.dev/p/your-id"; const app = express(); // raw body is required for signature verification app.post("/webhook", express.raw({ type: "application/json" }), async (req, res) => { let event; try { event = stripe.webhooks.constructEvent( req.body, req.headers["stripe-signature"], process.env.WHSEC ); } catch { return res.sendStatus(400); } // only forward the events worth a buzz if (event.type === "charge.dispute.created") { const d = event.data.object; await notify("⚠️ Dispute opened", `$${(d.amount / 100).toFixed(2)} · ${d.reason}`); } res.sendStatus(200); }); async function notify(title, body) { await fetch(LERT, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ title, body, tag: "stripe" }) }); } app.listen(3000);
3. Keep it to what matters
The whole value is in the if. Forward a Stripe dispute, a GitHub issue with the bug label, a Shopify order over a threshold — and drop everything else on the floor. Your phone becomes a curated feed of the three events you'd actually stop for.
Related flows worth wiring up. A payment webhook is really a new-sale notification; a CI webhook is a deploy notification; a monitoring webhook is a server alert. See the Node guide for the reusable helper, or Python if your handler is a Flask app.
Handler notes
- Always verify first. Check the provider's signature before you trust the payload. Lert sits after that check — it only delivers what you choose to send.
- Respond fast, notify async. Return
200to the provider quickly; the Lert POST takes a few milliseconds and shouldn't hold up your acknowledgement. - Mind the length. Title is capped at 120 characters and body at 2000 — summarize, don't dump the raw JSON.
Why Lert for webhook forwarding
The usual way to get a webhook onto your phone is a chain of third parties — a forwarding SaaS, a chat integration, an automation platform, each with its own account and quota. Lert collapses that to one fetch in code you already run. The endpoint URL is the authentication, so the important events reach your pocket without a single extra credential.
FAQ
Can I forward a webhook without writing a server?
Mostly no. Providers send rich JSON that Lert doesn't parse, so the reliable pattern is a tiny handler that receives the webhook and POSTs a clean summary to your Lert URL. It's a few lines, not a service.
How do I avoid getting notified for every event?
Filter inside your handler. Check the event type and only send a Lert POST for the ones worth interrupting you — a failed payment, a labelled issue, a large order — and ignore the rest.
Should I verify the webhook signature first?
Yes. Verify the provider's signature before you trust or forward anything, exactly as you would normally. Lert sits after that check and just delivers the summary you decide to send.
Do I need an API key or account?
No. Your Lert endpoint URL is the authentication — there's no separate key, token, or login to wire up.
Related use cases
Turn a firehose into a single buzz.
Download Lert, copy your URL, add one fetch to your webhook handler. Only the events that matter reach your phone.