Everything included
Crontify covers the three failure modes that nothing else catches — missed runs, hung jobs, and jobs that complete successfully but do nothing useful.
Crontify knows when each job is supposed to run based on its cron expression. If a ping doesn't arrive within the grace period, an alert fires immediately.
0 2 * * *, not just intervals A job that starts but never calls success() or fail() is silently hanging. Crontify detects this and alerts before the damage compounds.
A job that exits clean but processes zero rows is still a failure. Set rules on numeric output values — Crontify alerts on the result, not just the exit code.
eq ne lt gtsuccess — a separate silent_failure alert firesawait monitor.success({
metadata: {
rows_processed: 0, // ← rule: rows_processed eq 0 → fire alert
duration_ms: 4821,
}
});npm i @crontify/sdk
Zero dependencies. ESM. Tree-shakeable. Handles start, success, and failure pings with full TypeScript types. SDK errors never crash your job.
wrap(fn) — one line, handles start/success/fail automaticallystart() / success() / fail() for manual controlNo SDK required. Any language that can make an HTTP POST request works. Python, Ruby, Go, Bash, PHP — it doesn't matter.
/start /success /failX-API-Key headerimport { CrontifyMonitor } from '@crontify/sdk';
const monitor = new CrontifyMonitor({
apiKey: 'ck_live_...',
monitorId: 'mon_...',
});
await monitor.wrap(async () => {
await processEmails();
});# Bash example
curl -s -X POST \
https://api.crontify.com/api/v1/ping/mon_.../start \
-H "X-API-Key: ck_live_..."
# run your job here
curl -s -X POST \
https://api.crontify.com/api/v1/ping/mon_.../success \
-H "X-API-Key: ck_live_..."Rich alert messages with job name, failure type, and the first 500 chars of your log output inline.
Formatted alert emails with a direct link to the failed run in your dashboard. Available on all plans.
Post alerts directly to any Discord channel via webhook. Same rich content as Slack alerts.
POST a structured JSON payload to any URL. Build your own integrations — PagerDuty, Opsgenie, custom tooling.
When a previously failing job runs successfully, a recovery alert fires automatically. You know when things break — and when they're fixed.
Already-firing alerts don't repeat. If a job is continuously failing, you get one alert — not a flood every minute until it recovers.
Attach as many alert channels as you like to each monitor. Page the on-call engineer on Slack and send an email summary at the same time.
Paginated history of every run — start time, duration, status, and metadata. Filter by status or date range. Plan-based retention from 14 days to unlimited.
Crontify tracks baseline run duration per monitor. Runs that take significantly longer than normal are automatically flagged — before they become hung jobs.
Attach up to 10,000 chars of stdout or stderr output to any failed run via the SDK. The first 500 chars appear inline in Slack alerts. Full log is one click away.
Your dashboard updates instantly the moment a job starts, completes, or fails. No manual refreshing. See what's running right now.
Attach arbitrary key-value metadata to any ping — rows processed, queue depth, record counts. Stored with the run and visible in the dashboard.
Create and revoke API keys from your dashboard. Keys are hashed at rest and never exposed after creation. One key can serve all your monitors.
Free plan includes 5 monitors. No credit card required. Up and running in under 5 minutes.