CF Workers · Vercel Cron · pg_cron

Stop flying blind
on your cron jobs

CronCanary wraps any cron handler in 3 lines of code. Get a timeline view, 2σ drift detection, and Discord/Slack/email alerts when jobs fail or slow down.

// Before: your CF Workers cron handler export default { scheduled: myDailyReport } // After: 3-line CronCanary wrap import { wrap } from 'croncanary' export default { scheduled: wrap(myDailyReport, { job: 'daily-report', token: env.CRONCANARY_TOKEN }) } // That's it. Timeline, drift alerts, and failure notifications — done.
<5ms
p99 ingest latency globally
Statistical drift detection
3
Lines of code to integrate
CF Workers
Zero cold-start ingest

Everything your cron jobs deserve

Purpose-built for the modern edge-first stack.

📈

Timeline view with duration percentiles

See every run's duration as a bar chart. p50 / p95 / p99 computed live. Spot outliers at a glance — no dashboards to configure.

2σ drift detection

When a job is suddenly 30% slower, CronCanary catches it statistically. Computed against a rolling 50-run window so you don't chase noise.

🔔

Multi-channel alerts

Discord, Slack, and email — choose any combination. Alerts fire on fail, drift, or when a job hasn't run in the expected window (late detection).

🌍

Region tracking

Know which Cloudflare datacenter or Vercel region ran your job. Compare durations across regions to find geo-specific slowdowns.

🐍

JavaScript + Python SDKs

Wrap CF Workers, Vercel Cron, or Supabase pg_cron callers. Works anywhere fetch is available — no dependencies required.

🔒

Per-job API tokens

Each job gets its own long-lived token. Rotate without disrupting other jobs. Magic-link auth — no password storage.

What you'll see in your dashboard

Timeline view — last 7 runs, duration bars, drift flagged automatically.

daily-report p50: 1,420ms  •  p95: 2,810ms
Today 06:00 UTC
3,840ms
DRIFT
Yesterday 06:00
1,380ms
OK
2 days ago 06:00
FAIL
3 days ago 06:00
1,510ms
OK
4 days ago 06:00
1,290ms
OK

Simple, transparent pricing

Start free. No credit card required. Upgrade when your job count grows.

Hobby
$19/mo
For solo developers with a handful of cron jobs to watch.
  • Up to 5 jobs
  • 90-day run history
  • Email + Discord alerts
  • Drift detection
  • Late-job detection
Get started
Team
$99/mo
For organisations running critical infrastructure on cron.
  • Unlimited jobs
  • Unlimited run history
  • All alert channels
  • Team member access
  • Priority support
Get started
Built on Cloudflare Workers — p99 ingest under 5ms globally, zero cold starts, 99.99% uptime SLA.  ·  Your job data never touches a third-party server.  ·  SOC 2 in progress.

FAQ

What platforms does CronCanary support?

Cloudflare Workers Cron Triggers, Vercel Cron, Supabase pg_cron, GitHub Actions schedules, Railway cron, and any task that can make an HTTP request. The JS SDK wraps CF Workers handlers natively. For Python (pg_cron, Supabase functions), use the Python SDK.

How does drift detection work?

CronCanary computes the mean and standard deviation of your last 50 successful run durations. When a new run's duration exceeds mean + 2σ and crosses your configured threshold percentage, a drift alert fires. This eliminates one-off spike noise while catching genuine regression.

What's a "late" alert?

If a job hasn't completed within 2× its configured timeout window, CronCanary sends a late alert. This catches jobs that failed to start — a case that fail alerts alone miss.

Does the SDK add latency to my job?

The start ping is awaited (typically under 5ms from any CF Worker since we run globally). The end/fail ping is dispatched via ctx.waitUntil — zero impact on your job's response time.

What if CronCanary is down?

The SDK swallows all monitoring errors. If CronCanary is unreachable, your job continues unaffected. We build monitoring that doesn't become a dependency.

Can I cancel anytime?

Yes. Cancel via the Stripe billing portal — no questions, no retention flow. Your data is accessible until the period ends.