Uptime monitoring for Heroku apps
Heroku manages your dynos. SitePulse monitors whether users can actually reach them. External 1-minute checks on your production URLs, with email alerts when dynos crash, cold starts break your API, or a deploy introduces a regression. Free for 5 monitors.
The downtime Heroku doesn't tell you about
Heroku restarts a crashed dyno automatically. But during the restart window — typically 30–60 seconds — every user request fails with a 502 or connection refused. Your dashboard shows “Running” moments later. Nobody emailed you about the downtime.
SitePulse probes your URL every minute from outside Heroku. The moment a probe fails, you get an email. When the dyno recovers, you get a recovery email with the exact downtime duration.
The same applies to Eco dynos that sleep after 30 minutes of inactivity: the first request after sleep triggers a cold start that can take 5–30 seconds. During that window, your users get a blank screen or a timeout. SitePulse catches it.
What to monitor on a Heroku app
Production web dyno
Your main app URL. Catches dyno crashes, out-of-memory kills, failed boot sequences, and broken environment variables — all within one probe interval.
/health endpoint
Add a route that queries your database (SELECT 1) and returns 200 or 503. Catches Heroku Postgres degradation, connection pool exhaustion, and Redis downtime before users hit an error.
Worker dynos
Expose a lightweight HTTP endpoint on your worker process that returns 200 while healthy. Workers silently die more often than web dynos — often from unhandled exceptions or memory leaks.
Scheduled jobs
If you use Heroku Scheduler, expose an endpoint that your job hits on success. Monitor it. Know within minutes when a daily report, data sync, or cleanup job starts failing silently.
Heroku Postgres
Monitor through a /health endpoint that runs a test query. Heroku Postgres maintenance windows and degradation events don't always generate user-visible errors immediately — a health endpoint catches them fast.
Public status page
Enable SitePulse's free status page. During a Heroku platform incident, point customers to your status page so they know it's not just them — and you're on top of it.
Adding a /health endpoint to your Heroku app
In a Node.js / Express app, add a lightweight health route:
// Express example
app.get("/health", async (req, res) => {
try {
// Replace with your DB client
await db.query("SELECT 1");
res.json({ ok: true });
} catch (err) {
res.status(503).json({ ok: false });
}
});Point SitePulse at https://yourapp.herokuapp.com/health (or your custom domain). Now if Heroku Postgres goes down or your connection pool exhausts, you'll know within one probe interval.
Set it up in 60 seconds
- Sign up — free, no credit card.
- Add your Heroku app URL (custom domain or *.herokuapp.com).
- Add /health if you have one, plus any critical API routes.
- Check interval: 5 min on Free, 1 min on Pro ($9/mo).
- Email alert fires the moment any monitor goes red.
What you get
1-minute checks
On Pro plan ($9/mo). Free plan checks every 5 minutes — enough for side projects and low-traffic apps.
SSL expiry alerts
Email 14 days before your TLS certificate expires. Heroku handles SSL for *.herokuapp.com but not custom domain renewal.
Public status page
Free on every plan. Custom slug, shareable URL, 30-day uptime history for your users.
Add monitoring before your next Heroku deploy
5 monitors, 5-minute checks, email alerts, public status page — free forever. No credit card.
Frequently asked questions
Does Heroku alert me when a dyno crashes?+
Not proactively. Heroku will restart a crashed dyno automatically, but it doesn't email you about the crash. Your app shows as 'Running' in the dashboard 30–60 seconds later, and you find out from a user complaint or a log you happen to check. SitePulse catches that restart window — the moment your dyno is unavailable, a probe fails and you get an email.
Can SitePulse keep my Eco dyno from sleeping?+
Indirectly, yes. SitePulse makes HTTP requests to your app on every check interval. If your interval is short enough (1 minute on Pro), those requests keep your Eco dyno active during business hours. But SitePulse is primarily a monitoring tool, not a keep-alive service — if preventing sleep is your main goal, Heroku's paid dynos (Basic and above) don't sleep. Use SitePulse for the alert when your dyno does sleep or crash unexpectedly.
My Heroku app has a long cold start — will SitePulse false-alarm?+
Possibly, if the cold start exceeds your alert timeout. The fix: set SitePulse's failure threshold to 2 consecutive failures before alerting. A single slow response won't trigger it; two consecutive failures will. This filters cold-start blips while still catching real outages (which persist across multiple probe intervals).
How do I monitor my Heroku Postgres database?+
Don't expose Postgres publicly. Instead, add a /api/health or /health route to your app that runs a cheap database query (SELECT 1 or a simple row count) and returns 200 or 503 accordingly. Point SitePulse at that route. If Heroku Postgres goes degraded or your connection pool exhausts, SitePulse catches it within one probe interval.
What's the best URL to monitor on Heroku?+
Monitor your custom domain if you have one, not the *.herokuapp.com URL. The herokuapp.com URL is stable across deploys, but if you've set up a custom domain, that's what your users access — monitor what they experience. If you don't have a custom domain, the *.herokuapp.com URL is fine.
I deploy to Heroku multiple times a day. How does monitoring help?+
Deploy regression detection is one of the highest-value use cases for frequent deployers. If a deploy introduces a bug that causes 500s or crashes, a 5-minute monitor might not catch it before you ship the next deploy on top. A 1-minute monitor catches it within 30 seconds on average. On Pro at $9/mo, you get 1-minute intervals — the upgrade pays for itself the first time it catches a regression before your users do.