Scheduled HTTP requests to any public URL.

A cronjob for curl. Add a URL, a method and a schedule. The request goes out on time, a failure is retried, and a job that keeps failing pauses with one email. Free.

European by default. Requests leave from datacenters in the EU, and jobs and their history live in an EU-jurisdiction database. What we store

How it works

  1. 1 Add a URL and a schedule
    A cron expression, a fixed interval, or a single moment. Headers and a body where the endpoint needs them.
  2. 2 The request goes out on time
    From a short, fixed set of EU addresses, carrying a User-Agent that names the service and links to a stop page.
  3. 3 A failure arrives as one email
    Three retries, then the job pauses and a single message lands with a resume link.

A job, as the dashboard shows it

One real row.

StatusNameMethodScheduleNext runLast status
Active Health check
api.example.com/health
GET every 5 minutes in 4 min 200

Why the requests are safe to allow

Fixed EU addresses
A short, stable set of addresses, published at cronjob.dev/ips for allowlisting.
Requests that name themselves
Mozilla/5.0 (compatible; cronjob.dev/1.0; +https://cronjob.dev/stop/8f3k2m)
One click stops one job
The stop link in the User-Agent pauses the job behind the request. No account, no form, nothing to approve.
One record clears a whole zone
A TXT record at optout.<domain> with the value cronjob.dev keeps every job away from the domain and everything under it.
Responses stay unread
Status code, duration and timing are kept. The body is discarded.

Limits and timing

Jobs50 per account. 5 during the first 24 hours.
Jobs per host10. 2 during the first 24 hours.
MethodsGET, HEAD, POST, PUT, PATCH, DELETE, QUERY
HeadersUp to 8 per job
Body16 KiB, POST, PUT, PATCH and QUERY only
Shortest interval60 seconds. 5 minutes during the first 24 hours.
Timeout10 seconds by default, up to 60
AddressesIPv4. A host with no A record cannot be reached.
TimingWithin a few seconds of the scheduled time, not on the second.
RetriesThree retries after a failed run, then the job pauses and one email goes out.

Questions

What does a job cost?
Nothing, up to 50 jobs per account. No paid tier exists yet, so 50 is the ceiling rather than the start of an upsell.
Does the service read the response?
No. A run records the status code, the duration and how far the start drifted from the schedule. The body is discarded.
What counts as a failure?
A 4xx or 5xx status, a timeout, or a connection error. A 3xx is recorded and not followed.
Can a job reach a private address?
No. Private ranges and loopback are refused when the job is saved, and again before every run.
A server here is receiving requests. How do they stop?
The stop link in the User-Agent pauses that one job. A TXT record at optout.<domain> with the value cronjob.dev keeps every job away from the whole zone. Neither needs an account.
How long does history last?
100 runs or 30 days per job, whichever comes first.
Is there an API?
Yes. Tokens live in settings, and the reference sits in the docs.