Express.js

Status page and uptime monitoring for Express apps

Monitor Express routes, middleware chains, and Node workers. Response-time alerts, SSL checks, hosted status page, headless API.

Three ways to ship a status page for Express.js

Pick the level of control you need — zero-code, low-code, or full headless.

Hosted

Add your Express.js endpoint, point a CNAME at status.yourdomain.com, done. Works in 5 minutes.

Headless

Use our public API to build your own UI inside your Express.js app. Full control over design and branding.

See the API

Embedded badges

Drop SVG uptime and status badges into your README or landing page. Auto-updates every 5 minutes.

Drop this health endpoint into your Express.js app

Copy, paste, point PulseAPI at the URL. Returns 200 when healthy, 503 when degraded.

src/routes/health.ts
import { Router } from 'express'
import { db } from '../db'
import { redis } from '../redis'

const router = Router()

router.get('/health', async (_, res) => {
  const checks: Record<string, string> = {}
  try { await db.raw('select 1'); checks.database = 'ok' } catch { checks.database = 'fail' }
  try { const pong = await redis.ping(); checks.cache = pong === 'PONG' ? 'ok' : 'fail' } catch { checks.cache = 'fail' }
  const healthy = Object.values(checks).every((v) => v === 'ok')
  res.status(healthy ? 200 : 503).json({
    status: healthy ? 'healthy' : 'degraded',
    ...checks,
  })
})

export { router as healthRouter }

Mount before auth middleware. Short timeouts on downstream checks keep probes from hanging.

What breaks in Express.js apps — and how to catch it

Unhandled promise rejections

An async bug can crash the process silently on older Node. Uptime checks catch the resulting 502 in seconds.

Middleware order bugs

Reordering middleware can leak 500s on specific paths. Multi-endpoint monitoring surfaces this.

Memory leaks over time

A slow leak only breaks things hours in. Response-time alerts fire when GC pauses show up.

Headless angle

Don't like our status page? Build your own in Express.js.

Our API returns the same data our hosted UI consumes. Full OpenAPI spec documented at api.pulseapi.tech/docs.

Express handler that renders a custom status page.
router.get('/status', async (_, res) => {
  const r = await fetch('https://api.pulseapi.tech/status/acme', {
    signal: AbortSignal.timeout(5000),
  })
  const data = await r.json()
  res.render('status', { data })
})

Express.js monitoring — FAQ

Does it work with Express 4, Express 5, Connect, or Fastify?

Any Node HTTP framework. PulseAPI is external to your app.

Can I monitor BullMQ / Agenda queues?

Yes. Expose an endpoint that checks queue depth and a worker heartbeat. Assert depth under threshold, heartbeat fresh.

Does it handle HTTPS redirects?

Yes. PulseAPI follows the redirect and asserts on the final response.

Can I embed the status page inside Express?

Yes. Hit the public API from a handler, render with EJS/Pug/Handlebars or pipe JSON to a frontend.

Start monitoring your Express.js app in 5 minutes

Free tier. No credit card. Add your endpoint and get alerts when it breaks.