UptimeRobot monitor alert notifications on your phone.

Get a Highest-priority push notification when an UptimeRobot monitor goes down, a quiet one when it's back up, and a heads-up before an SSL certificate or domain expires.

How it works

Three steps to your first push

STEP 01

Install the recipe

One click in Studio gives you a personal webhook URL.

STEP 02

Paste your URL into UptimeRobot

Add it as a webhook for Monitor alert.

STEP 03

Get a push on your phone

With the text, sound and buttons from the recipe.

Setup

How to set up the UptimeRobot monitor alert webhook

  1. Click Install in Studio and sign in. The recipe is added to your account and you get a personal webhook URL.
  2. In UptimeRobot, open Integrations > Add Integration and choose Webhook (Team and Scale plans).
  3. Paste your webhook URL as the URL and use the JSON body from the setup notes below.https://••••••••/•••••••• your personal URL, shown after install
  4. Attach the integration to the monitors that should notify you.
  5. In UptimeRobot, open **Integrations → Add Integration → Webhook** (Team and Scale plans only). Paste the URL above, choose **Send as JSON**, and use this body:
  6. ```json
  7. {
  8. "alertType": "*alertType*",
  9. "alertTypeFriendlyName": "*alertTypeFriendlyName*",
  10. "monitorFriendlyName": "*monitorFriendlyName*",
  11. "monitorURL": "*monitorURL*",
  12. "alertDetails": "*alertDetails*",
  13. "alertDuration": "*alertDuration*",
  14. "httpStatusCode": "*httpStatusCode*",
  15. "sslExpiryDate": "*sslExpiryDate*",
  16. "sslExpiryDaysLeft": "*sslExpiryDaysLeft*",
  17. "domainExpireDate": "*domainExpireDate*",
  18. "dashboardUrl": "*dashboardUrl*"
  19. }
  20. ```
  21. Then attach the integration to your monitors.
  22. The recipe also accepts UptimeRobot's **send default variables** option (the values as a query string) if you'd rather not paste a body.
  23. UptimeRobot doesn't escape values in a custom body, so a monitor name with a `"` in it would break the JSON; avoid quotes in monitor names or use the query-string option. Deliveries aren't retried, and they aren't signed, so keep your endpoint URL private.
The code

What runs when the webhook arrives

Studio calls handleRequest(request) with the incoming webhook and sends the message it returns. It's yours after install; change anything.

transform.js
1// UptimeRobot → monitor down, up, or certificate/domain expiring
2// Fires when UptimeRobot calls a Webhook integration for a monitor. Works with the JSON
3// body from INSTALL.md, and with UptimeRobot's "send default variables" query string.
4// Docs: https://help.uptimerobot.com/en/articles/14498593-webhook-integration
5
6// "4m 12s" / "2h 5m" from a number of seconds.
7function duration(seconds) {
8 const s = Math.round(Number(seconds))
9 if (!Number.isFinite(s) || s <= 0) return null
10 if (s < 60) return `${s}s`
11 if (s < 3600) return `${Math.floor(s / 60)}m ${s % 60}s`
12 return `${Math.floor(s / 3600)}h ${Math.floor((s % 3600) / 60)}m`
13}
14
15// Only link to real http(s) URLs.
16function link(url, cta) {
17 return typeof url === "string" && /^https?:\/\//.test(url) ? [{ cta, url }] : []
18}
19
20// UptimeRobot leaves "*variable*" untouched when it has no value; treat that as missing.
21function text(value) {
22 const s = value == null ? "" : String(value).trim()
23 return s && !/^\*\w+\*$/.test(s) ? s : null
24}
25
26function handleRequest(request) {
27 const body = request.body && typeof request.body === "object" ? request.body : {}
28 const data = { ...body, ...(request.query || {}) }
29 const type = text(data.alertType)
30
31 // Guard: only UptimeRobot alerts (1 = down, 2 = up, 3 = SSL or domain expiry).
32 if (!["1", "2", "3"].includes(type)) {
33 console.log("Not an UptimeRobot alert — skipping")
34 return null
35 }
36
37 const name = text(data.monitorFriendlyName) ?? text(data.monitorURL) ?? "Your monitor"
38 const buttons = [...link(text(data.dashboardUrl), "View monitor"), ...link(text(data.monitorURL), "Open site")]
39
40 if (type === "1") {
41 const code = text(data.httpStatusCode)
42 const details = text(data.alertDetails)
43 // Skip the status code when the details already mention it ("HTTP 500 - …").
44 const showCode = code && code !== "0" && !(details ?? "").includes(code)
45 return {
46 title: `🔴 ${name} is down`,
47 message: [details, showCode ? `HTTP ${code}` : null, text(data.monitorURL)]
48 .filter(Boolean)
49 .join(" · ") || "Monitor is down",
50 topic: "UptimeRobot",
51 priority: 2, // Highest — your site or service is unreachable right now
52 buttons,
53 }
54 }
55
56 if (type === "2") {
57 const down = duration(data.alertDuration)
58 return {
59 title: `✅ ${name} is back up`,
60 message: down ? `It was down for ${down}` : text(data.alertDetails) ?? "Monitor is up again",
61 topic: "UptimeRobot",
62 priority: -1, // Low — good news, nothing to do
63 buttons,
64 }
65 }
66
67 // Type 3 covers both SSL certificates and domains; the filled-in date tells which.
68 const days = text(data.sslExpiryDaysLeft)
69 const ssl = text(data.sslExpiryDate)
70 const domain = text(data.domainExpireDate)
71 const what = ssl || days ? "SSL certificate" : domain ? "Domain" : "Certificate or domain"
72
73 return {
74 title: `🔒 ${what} for ${name} expiring`,
75 message:
76 (days ? `Expires in ${days} day${days === "1" ? "" : "s"}` : `Expires ${ssl ?? domain ?? "soon"}`) +
77 (text(data.monitorURL) ? ` · ${text(data.monitorURL)}` : ""),
78 topic: "UptimeRobot",
79 priority: 0, // Normal — renew it before it becomes an outage
80 buttons,
81 }
82}
Payload

The UptimeRobot monitor webhook

This is what UptimeRobot sends to your URL for monitor alert. It is a sample, trimmed to the fields recipes use.

monitor · sample.json
1{
2 "alertType": "1",
3 "monitorURL": "https://acme.example.com",
4 "alertDetails": "Connection Timeout",
5 "dashboardUrl": "https://dashboard.uptimerobot.com/monitors/798123456",
6 "alertDuration": "*alertDuration*",
7 "sslExpiryDate": "",
8 "httpStatusCode": "0",
9 "domainExpireDate": "",
10 "sslExpiryDaysLeft": "",
11 "monitorFriendlyName": "Acme website",
12 "alertTypeFriendlyName": "Down"
13}
FAQ

UptimeRobot monitor alert notifications: questions

Does this work on iPhone and Android?

Yes. Install the JustPush app from the App Store or Google Play and sign in. Every phone signed in to your account gets the notification.

Do I need to write code?

No. Install the recipe in Studio, paste your webhook URL into UptimeRobot and you are done. The code is there if you want to change the text, the sound or the buttons.

Can I change what the notification says?

Yes. After install the recipe's code is yours. Edit it in Studio and test it against the sample payload before you save.

What does it cost?

JustPush is free for 30 days. After that it's $19.99 a year, or $39.99 once. There is no extra charge for recipes.

Ready when you are

UptimeRobot on your phone in two minutes.

Install the recipe, paste one URL, done. Free for 30 days, no credit card required.