PhotonBeat

Dead-man's switch for crons + workers. You can't detect your own absence — we can.

Register a Beat. Get a public ping URL. Hit it from your cron or worker on schedule. If we don't hear from you within (interval + grace), we open an incident, email you, and fire beat.missed into PhotonHooks. Same model as Healthchecks.io at half the price and with cross-product alerting through the rest of PhotonForge.

No credit card to start. Free · $9 · $19.

In your crontab

* * * * * curl -fsS https://beat.photonforge.io/v1/ping/pbt_<slug>

Why PhotonBeat

Structural moat by definition

Self-hosted heartbeat monitoring is a contradiction in terms. The watcher has to be somewhere your job can't take down.

Slug-based anonymous ingest

No auth header on the ping endpoint. Knowledge of the URL is the auth. Any cron / curl / HTTP client just works.

GET + POST + HEAD all accepted

Drop into any cron syntax without thinking about HTTP method semantics. Even `wget --spider` works.

Defensive 200-on-error

If our DB is down, ping endpoint returns 200 ok anyway. Your cron never sees a 5xx that would look like YOUR job failed.

Features

Interval + grace window

expectedIntervalSeconds + gracePeriodSeconds. Configurable per beat.

GET + POST + HEAD ingest

Whatever your cron tool wants to send.

Labeled pings

/v1/ping/<slug>/<label> records the label as source. Useful when many workers ping the same beat.

BeatIncident records

Every missed window opens an incident, closes on next successful ping.

Email alerts

CSV recipients on every state change.

Hook events (Pro)

beat.missed + beat.recovered into PhotonHooks.

Slug rotation

If a URL leaks, rotate the slug in one click.

Ping history

Recent pings with timestamp + source + user-agent for debugging.

API + MCP

Full CRUD + on-demand 'run check' via REST and MCP tools.

Pricing

Pay for what costs us money.

Free

$0forever

Enough to watch a handful of hourly crons + workers.

  • 3 beats
  • 1-hour minimum interval
  • 7-day ping history
  • Email alerts when a beat goes missed
  • Anonymous slug-based ping URLs
  • API + MCP access
Most useful

Pro

$9per month

Per-minute heartbeats + PhotonHooks integration for alerts.

  • 50 beats
  • 1-minute minimum interval
  • 90-day ping history
  • beat.missed / beat.recovered events into PhotonHooks
  • Slug rotation in one click

Business

$19per month

Real cron schedules + start/stop run tracking + groups.

  • Everything in Pro
  • 200 beats
  • 1-year ping history
  • Cron expression schedules (with timezone)
  • /v1/ping/<slug>/start + /stop for duration tracking
  • Groups + color tags for organizing many beats
  • Run-duration anomaly alerts (coming soon)

Cancel anytime via the Stripe customer portal. No annual lock-in, no email-us-to-cancel routine.

Composes with

PhotonBeat talks to the rest of PhotonForge automatically.

  • PhotonHooksPro tier fires beat.missed + beat.recovered events into Hooks.

Common questions

How is this different from PhotonWatch?

Watch pulls (we hit your URL). Beat pushes (your job hits ours). Use Beat for 'did this thing run on schedule.' Use Watch for 'is this URL reachable.'

Why anonymous slug auth instead of API keys?

Crons don't easily set Authorization headers. Slug-based auth lets `curl URL` work without extra flags. The slug is 16 random bytes (128 bits) and we always return 200 to prevent enumeration.

What if my cron runs more often than the beat expects?

That's fine — extra pings just bump lastPingAt forward. The status stays UP. We only flip MISSED if (interval + grace) elapses with zero pings.

Spin up PhotonBeat in a minute.

Sign in with your email. No card, no commitment.