Alerts & Notifications
Configure how and when Unsparing notifies you. Email, Slack, webhooks, and alert routing for teams.
Alert Channels
Unsparing supports multiple notification channels:
| Channel | Free | Homelabber | Teams | Agency |
|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | |
| Webhooks | — | ✓ | ✓ | ✓ |
| Slack | — | — | ✓ | ✓ |
Email Alerts
Email alerts are enabled by default for all plans. Configure additional email addresses in Settings → Notifications.
Each email alert includes:
- Monitor type — Cron, DNS, SSL, or Uptime
- Monitor name — Which monitor triggered
- Status — Up, down, degraded, recovered
- Timestamp — When the event occurred
- Quick link — Direct link to the investigation timeline
Slack Integration
Available on Teams and Agency plans.
- Go to Settings → Integrations → Slack
- Click Connect Slack and authorize Unsparing in your workspace
- Select the channel for notifications
- Configure which alert types to forward to Slack
Slack alerts include:
- Color-coded severity indicators (🔴 Critical, 🟡 Warning, 🟢 Recovery)
- Actionable buttons to acknowledge or investigate
- Threaded replies for incident discussions
Webhooks
Available on Homelabber plan and above.
Setting Up a Webhook
- Go to Settings → Integrations → Webhooks
- Click Add Webhook
- Enter the URL and select which events to forward
- Optionally add a secret for signature verification
Webhook Payload Format
All webhooks use a consistent JSON payload:
{
"id": "evt_abc123",
"event": "monitor.failed",
"timestamp": "2025-05-18T10:00:00Z",
"data": {
"monitor_id": "mon_xyz789",
"monitor_type": "uptime",
"monitor_name": "Production API",
"previous_status": "up",
"current_status": "down",
"details": {
"url": "https://api.example.com/health",
"status_code": 503,
"response_time_ms": 5230,
"error": "Connection timeout after 10s"
}
}
}Event Types
| Event | Trigger |
|---|---|
monitor.created | New monitor added |
monitor.failed | Monitor check failed |
monitor.recovered | Monitor recovered after failure |
monitor.degraded | Response time exceeded threshold |
ssl.expiring | SSL certificate approaching expiry |
dns.changed | DNS record value changed |
cron.missed | Cron job didn't fire on schedule |
Signature Verification
Webhooks include an X-Unsparing-Signature header. Verify it:
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}Alert Routing (Teams & Agency)
Route alerts to the right person:
- Go to Settings → Alert Routing
- Create rules based on:
- Monitor type — Send all SSL alerts to the security team
- Severity — Send critical alerts to the on-call engineer
- Monitor name — Send client-specific alerts to the account manager
- Each rule can route to email, Slack, or webhooks
Example Routing Rules
| Condition | Route To |
|---|---|
| SSL expiring in 7 days | #infra-alerts Slack channel |
| Uptime monitor down | On-call engineer email |
| DNS record changed | #security Slack channel |
| Any recovery | #monitoring Slack channel |
Alert Severity Levels
| Level | Color | Meaning |
|---|---|---|
| Critical | 🔴 | Service is down or certificate expires in < 7 days |
| Warning | 🟡 | Service is degraded or certificate expires in < 30 days |
| Info | 🔵 | Routine notification, certificate renewal detected |
| Recovery | 🟢 | Service is back up after downtime |
Escalation
On Teams and Agency plans, configure escalation policies:
- Alert fires → notify primary contact
- After 5 minutes → notify secondary contact
- After 15 minutes → notify team lead
- After 30 minutes → notify everyone