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 APIEmbedded 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.
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.
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.
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.