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 Add a URL and a scheduleA cron expression, a fixed interval, or a single moment. Headers and a body where the endpoint needs them.
-
2 The request goes out on timeFrom a short, fixed set of EU addresses, carrying a User-Agent that names the service and links to a stop page.
-
3 A failure arrives as one emailThree retries, then the job pauses and a single message lands with a resume link.
A job, as the dashboard shows it
One real row.
| Status | Name | Method | Schedule | Next run | Last 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
| Jobs | 50 per account. 5 during the first 24 hours. |
| Jobs per host | 10. 2 during the first 24 hours. |
| Methods | GET, HEAD, POST, PUT, PATCH, DELETE, QUERY |
| Headers | Up to 8 per job |
| Body | 16 KiB, POST, PUT, PATCH and QUERY only |
| Shortest interval | 60 seconds. 5 minutes during the first 24 hours. |
| Timeout | 10 seconds by default, up to 60 |
| Addresses | IPv4. A host with no A record cannot be reached. |
| Timing | Within a few seconds of the scheduled time, not on the second. |
| Retries | Three 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.