Website down notification email

Logdash does not send email alerts itself, so a website down notification email means a Logdash webhook pointed at a 30-line Cloudflare Worker that mails each down and up alert through Resend or Postmark.

Honest version first: Logdash sends alerts to Telegram and to webhooks, and email is not one of them. If you want a website down email alert with zero code, UptimeRobot sends one on its free plan and is the better pick for that job. If you are already on Logdash, or want the email next to a Telegram ping, a small relay does it.

The relay needs Builder at $9 a month. The free Hobby webhook sends a GET with no body, so there is nothing to put in the email. Builder sends a POST with the monitor name, the new status, the URL, the status code and the error.

The website down email alert relay

worker.js
// worker.js - Logdash webhook in, email out through Resend.
// npx wrangler deploy worker.js --name logdash-email \
//   --compatibility-date 2026-01-01
// npx wrangler secret put RESEND_API_KEY --name logdash-email
// npx wrangler secret put RELAY_SECRET --name logdash-email
// npx wrangler secret put ALERT_TO --name logdash-email
// ALERT_TO takes one address or a comma separated list.
export default {
  async fetch(request, env) {
    const secret = request.headers.get('x-relay-secret');

    if (request.method !== 'POST' || secret !== env.RELAY_SECRET) {
      return new Response('forbidden', { status: 403 });
    }

    // { httpMonitorId, newStatus, name, url, statusCode, errorMessage? }
    const alert = await request.json();
    const lines = [
      `${alert.name} is ${alert.newStatus}`,
      `URL: ${alert.url}`,
      `Status code: ${alert.statusCode}`,
    ];

    if (alert.errorMessage) {
      lines.push(`Error: ${alert.errorMessage}`);
    }

    const sent = await fetch('https://api.resend.com/emails', {
      method: 'POST',
      headers: {
        authorization: `Bearer ${env.RESEND_API_KEY}`,
        'content-type': 'application/json',
      },
      body: JSON.stringify({
        from: 'Logdash alerts <onboarding@resend.dev>',
        to: env.ALERT_TO.split(',').map((address) => address.trim()),
        subject: `${alert.newStatus.toUpperCase()}: ${alert.name}`,
        text: lines.join('\n'),
      }),
    });

    return new Response(null, { status: sent.ok ? 204 : 502 });
  },
};

The from address onboarding@resend.dev works without a domain, but Resend only delivers it to the address on your own Resend account. For a solo founder that is enough. To mail anyone else, verify a sending domain in Resend and change from to an address on it. The Resend free plan covers 3,000 emails a month and 100 a day. An alert channel sends two per incident.

Prefer Postmark? Swap the URL for https://api.postmarkapp.com/email, send the key in an X-Postmark-Server-Token header instead of authorization, and add Accept: application/json, and rename the fields to From, To, Subject and TextBody. Postmark wants To as one comma separated string, and From must be a confirmed sender signature. Its free developer plan covers 100 emails a month, and until Postmark approves the account it only delivers to your own domain.

  1. Get a Resend API key Create a Resend account and an API key with sending access. Note the email address on the account, since that is where the test domain can deliver.
  2. Deploy the relay Run the four wrangler commands at the top of the file and paste the API key, a long random secret and your address when asked. The Cloudflare free plan allows 100,000 requests a day.
  3. Wire it and break it Add a Logdash webhook channel with method POST, the workers.dev URL and an x-relay-secret header holding the same secret, attached to the monitor next to Telegram. Stop the app: the email goes out and the Telegram alert reaches your phone on the same check.

What the email says

Subject DOWN: API or UP: API, then plain text: the name and new status, the URL, the status code and, on down, the error, which is either the first part of the response body or a network error such as Timed out after 10s. Plain text on purpose, because it reads the same in every mail client.

An inbox is where alerts go to be read later. A 3am outage email waits next to the newsletters until you next open mail, so it is the record, not the wake-up call. Keep Telegram attached to the same monitor for the ping that reaches you, and let the email be the thread you forward to a client or a co-founder.

Uptime monitoring email alerts: Logdash vs UptimeRobot

Email alerts: Logdash vs UptimeRobot

FeatureLogdashUptimeRobot
Email alertsWebhook plus a relay you deployBuilt in on every plan
Cheapest plan with emailBuilder, $9/month, plus a free Resend accountFree
Free plan check interval5 minutes5 minutes
Telegram alertsFree on HobbyFrom Solo, its cheapest paid plan
App logs and metricsSame service view, eight SDKsNot offered

When UptimeRobot is the better pick

  • Email is the channel you want and you do not want to deploy anything. UptimeRobot sends it on the free plan.
  • You want the email only after the site has been down for a few minutes, with reminders until it is back. UptimeRobot has both from Solo, Logdash sends one alert per state change.
  • You never want to own code in the alert path. A relay is one more thing that can break quietly.
Does Logdash send a website down notification email?
Not natively. Alerts go to Telegram or a webhook. The webhook plus the relay on this page sends the email through Resend or Postmark, and needs the Builder plan because the free webhook has no body.
How do I set up a website down email alert?
Deploy the Worker above with a Resend API key, a shared secret and your address, then add a POST webhook channel in Logdash with the same secret in an x-relay-secret header. The next failed check sends the email.
Which uptime monitoring email alerts are free?
UptimeRobot sends email alerts on its free plan, 5-minute checks included. Logdash does not, but its free Hobby plan sends Telegram alerts for 5 services at the same 5-minute interval.
How fast does a website down email alert arrive?
The webhook leaves Logdash on the check that flips the monitor, so the delay is your interval: up to 5 minutes on Hobby, 1 on Builder, 15 seconds on Pro. After that it is down to Resend and your inbox.

Point it at your own URL and watch it for real.