CronPulse checks the result of every scheduled job — not just whether it exited 0. Exit code 0 with 20 rows instead of 2,000? We catch it, explain it, and alert you before your users do.
curl -X POST https://cron.ranlab.xyz/v1/ping/<token> -d '{"status":"ok","records":2041,"duration_ms":13420}'
How it works
Get a unique ping URL from the dashboard. Set a schedule, a grace period, and the rules a good result must pass.
One HTTP POST with the facts: status, record count, duration, any result fields you care about.
Broken rules — or no ping at all — fire Slack and email alerts with the exact deviation, not a vague "job failed".
Result assertions
Uptime checkers ask "did the process finish?" CronPulse asks "is the data actually right?"
The job must report itself as ok — a green exit code means nothing here.
At least N rows synced. A "successful" run that touched 20 rows instead of 2,000 gets flagged.
Slower than X ms is a regression. Catch the slowdown before it becomes a backlog.
Upstream changed their schema? Missing fields fail the run — silently renamed columns get caught.
A key metric must match expectations, e.g. state=success on every record.
Records dropped 91% vs the p50 of your last runs? Flagged — with the deviation shown next to the history.
Why switch
| Uptime / exit-code monitors | CronPulse | |
|---|---|---|
| Detects the job never ran | Yes | Yes |
| Detects exit code ≠ 0 | Yes | Yes |
| Detects exit 0 but empty / partial data | No | Yes — record assertions |
| Detects schema drift (missing fields) | No | Yes — field assertions |
| Detects silent volume drops vs history | No | Yes — baseline (p05/p50/p95) |
| Explains what broke in the alert | "Job failed" | "records=20, expected ≥ 1000" |
Pricing
Quick start
# 1. create a workspace + API key
curl -X POST https://cron.ranlab.xyz/api/workspaces \
-H 'Content-Type: application/json' -d '{"name":"acme"}'
# 2. create a monitor (save the returned token)
curl -X POST https://cron.ranlab.xyz/api/monitors \
-H 'Authorization: Bearer <API_KEY>' -H 'Content-Type: application/json' \
-d '{"name":"nightly-sync","expect_min_records":1000,"period_minutes":1440,"grace_minutes":60}'
# 3. at the end of your cron job
curl -X POST https://cron.ranlab.xyz/v1/ping/<TOKEN> \
-H 'Content-Type: application/json' \
-d '{"status":"ok","records":2041,"duration_ms":13420}'
Free forever for 10,000 events a month. Two minutes to set up.
Open Dashboard