Cronjob.de › Guides › Supabase Cron
Monitoring Supabase Cron – including apps built with Lovable
You monitor a Supabase cron job by letting it report once its work is done: with net.http_get in the SQL command or a fetch at the end of the Edge Function. If the check-in at Cronjob.de does not arrive, you get a message. This also applies to apps built with Lovable, whose built-in backend is based on Supabase.
Updated:
Why at all
Why you would not notice otherwise
Supabase Cron is built on the Postgres extension pg_cron and records every run and its status in the table cron.job_run_details. To notice a failure, you have to look there. A heartbeat, by contrast, contacts you.
If the job calls an Edge Function, net.http_post sends the request asynchronously. Whether the function succeeded afterwards is stored in the response table net._http_response, and according to the documentation only for six hours by default.
According to its pricing page, Supabase pauses free projects after one week of inactivity (as of October 2026). Then the check-in stops as well, and you hear about it.
- Ping address (example)
https://runcheck.de/a8k3m2x9q1- Schedule
- cron syntax (GMT) or every 1 to 59 seconds
- Applies to
- Supabase Cron (pg_cron), pg_net, Edge Functions
- Sufficient Cronjob.de plan
- One heartbeat with email alerts is free. Up to 10 come with Plus (€17.88 a year), up to 50 with alerts via Telegram, Slack, Teams or Discord as well with Unlimited (€47.88 a year).
Setup
Set up in three steps
What is a heartbeat?
A regular sign of life: after every run your job calls its own address at Cronjob.de. If the call is overdue or the job reports a failure, we alert you. More about heartbeats
-
Create a heartbeat
In your account, create a new one under “Heartbeats”, with the same rhythm as your cron job and some leeway. You receive a ping address of its own, such as
https://runcheck.de/a8k3m2x9q1. -
SQL job: the check-in after the work
If your job does its work in SQL, add
net.http_getwith your ping address after it, for example in the SQL Editor. If the work fails, Postgres stops the command at the first error, and the check-in never gets its turn. On top of that, pg_net only sends requests once the transaction has committed. If needed, enable the pg_net extension under “Database › Extensions”. The 10-second time limit replaces the default of 2 seconds.select cron.schedule('nightly-cleanup', '0 3 * * *', $$ delete from sessions where expires_at < now(); select net.http_get(url := 'https://runcheck.de/a8k3m2x9q1', timeout_milliseconds := 10000); $$); -
Edge Function: the check-in as the last line
If your job calls an Edge Function, for emails or syncing with other services, say, the check-in belongs inside the function, before the response. Only then does it mean: the work is done. The time limit makes sure the function never waits long for us, and an error while checking in is ignored.
Deno.serve(async (req) => { // ... your work ... await fetch('https://runcheck.de/a8k3m2x9q1', { signal: AbortSignal.timeout(10000) }).catch(() => {}); return new Response('ok'); });
The ready-made lines for Linux, PHP, Python, Node.js, n8n, Make, Supabase and Vercel are on the page Cron job monitoring. Your own ping address appears in your account once you create the heartbeat, with the same lines ready to copy.
When something fails
What happens when a run fails
If the job does not run (project paused, job deactivated, error in the query) or the Edge Function fails before its last line, the check-in is missing. After the leeway we alert you; the next check-in brings the all-clear.
FAQ
Common questions about Supabase Cron
- How do I monitor scheduled jobs in an app built with Lovable without writing SQL?
- Ask Lovable in the chat to call the address
https://runcheck.de/a8k3m2x9q1at the end of your scheduled job, with a ten-second time limit and without letting an error there abort the job. The lines above show what the result should look like. According to Supabase, projects on Lovable Cloud have no direct access to the SQL Editor; Lovable shows scheduled tasks and their history under “Jobs”. - Does the check-in slow down my Supabase cron job?
- No. pg_net works asynchronously: the request goes out in the background after the transaction ends. In the Edge Function,
AbortSignal.timeoutlimits the wait to ten seconds, and errors while checking in are ignored. - How do I see which cron jobs exist in Supabase?
- With
select jobname, schedule, command from cron.job;in the SQL Editor. The runs are incron.job_run_details. According to the documentation, Supabase does not clean up those records automatically. - How often can a Supabase cron job run?
- According to Supabase, anything from every second to once a year; second-based intervals (
30 seconds) require Postgres 15.1.1.61 or later (as of October 2026). For the heartbeat, a rhythm of one minute is enough, even if the job runs more often.
Set up your heartbeat now
One heartbeat with email alerts is free. Up to 10 come with Plus (€17.88 a year), up to 50 with alerts via Telegram, Slack, Teams or Discord as well with Unlimited (€47.88 a year). The first 14 days run on the Unlimited plan, no payment details needed.
Set up a heartbeat for free More about heartbeatsMore monitoring guides
Official documentation of Supabase Cron
The details about Supabase and Lovable come from their own documentation, as of October 2026. Please check there whether anything has changed since. Supabase and Lovable are trademarks of their respective owners. This guide comes from Cronjob.de and has no business relationship with these providers.
By Joscha Schultze, operator of Cronjob.de · Written with AI assistance, provider details checked against their official pages.