Projects, not a flat list
Group schedules by product, environment or client. Members, alert channels, API keys and retention are set per project.
நொடி · nodi · Tamil for “a second”
getNodi calls your endpoints on a schedule, retries them when they fail, and keeps the status, latency and response body of every single attempt — and lets you decide what counts as a pass, so an empty 200 is a failure if you say it is.
01 — Visibility
Every attempt is written down — the code, the latency, the retry that saved it. Failures reach you by email, Slack or webhook before your customers find them.
Six nights green. The report was empty every one of them.
The job ran. The request succeeded. Nothing ever looked at what came back.
invoice-sweep
*/2 * * * * · every 2 minutes
waiting
sitemap-ping
0 * * * * · hourly
waiting
db-backup-trigger
0 3 * * * · daily at 03:00
waiting
Waiting for the first run…
02 — What you get
Group schedules by product, environment or client. Members, alert channels, API keys and retention are set per project.
GET through DELETE with custom headers and a JSON body. Basic, bearer, API-key or HMAC-signed requests — credentials encrypted at rest with AES-256-GCM.
A 200 is not automatically a pass. Match on status classes, response text or a regex, and fail runs that go over a latency budget.
Per-job attempt counts with fixed or exponential backoff. Alerts fire once the budget is spent, so a job that recovers on its own never wakes anyone.
Status, latency, response headers and a body snippet for each attempt — with hourly rollups, so a 90-day chart still draws instantly.
Email, Slack and webhook notifications on failure, recovery or auto-pause. Scoped API keys for managing jobs programmatically.
03 — No SDK
Nothing to install and no agent to run. getNodi identifies itself on every call and can sign the body with an HMAC shared secret, so your endpoint can prove the request came from your schedule and not from someone who guessed the URL.
Private, loopback and cloud-metadata addresses are refused by default — a scheduler that will call anything is a server-side request forgery engine.
POST /webhooks/nightly-report HTTP/1.1Host: api.yourapp.comUser-Agent: getNodi/1.0X-Nodi-Job-Id: 6f2a91c4e8b7d3a05f1c2e94X-Nodi-Run-Id: 01JDQ8ZK3M7XN2VW5RT9YBX-Nodi-Attempt: 1X-Nodi-Signature: t=1771243800,v1=9c1f4a…Content-Type: application/json04 — How we compare
Read from each vendor’s own documentation, including the rows we lose. If one of the three below fits you better, we would rather you found that out here than after paying us for a month.
| Capability | getNodi | cron-job.org | EasyCron | Vercel Cron |
|---|---|---|---|---|
| Price | Free, then ₹399–₹4,999/mo | Free, funded by donations | Free, then $24–$240/yr | Included in your Vercel plan |
| Free tier | 3 jobs · hourly | Unlimited jobs · every minute | 200 runs a day · every 20 min | 100 jobs · once a day (±59 min) |
| Finest schedule paid | Every 10 seconds | n/a — the service is free | Every minute | Every minute (Pro) |
| Timezone per schedule | Yes | Yes | not published | No — always UTC |
| Calls any URL | Yes, any host | Yes, any host | Yes, any host | No — a path on your own deployment |
| HTTP methods | All seven | Almost all | Configurable on paid plans | GET only |
| Authorization | Basic, bearer, API key, HMAC-signed | HTTP basic, custom headers | Custom headers on paid plans | A shared secret header |
| Automatic retries | Yes, with backoff | No | not published | No — documented as no retry |
| What counts as success | Status, body text, regex, latency budget | HTTP status, 3xx-as-success toggle | Regex matching on paid plans | Whatever your function returns |
| Failure alerts | Email, Slack, webhook — every tier | Email free; Slack and webhook paid | None built in — read the logs | |
| Run history | 7–365 days by tier | Last 50 runs; bodies kept 2 days | 10–500 log entries by tier | Function logs, per Vercel plan |
| Longest single request | 5 minutes | 30 seconds | Up to 12–24 hours on paid plans | Your function timeout |
| Public status page & badge | Yes | Yes | not published | No |
Read off each vendor’s own documentation on 18 August 2026. “Not published” means we could not confirm it from their public docs that day — not that it is missing. Sources: Vercel cron docs, Vercel cron usage & pricing, cron-job.org FAQ, cron-job.org API docs, EasyCron pricing. Limits change; if we have any of this wrong, tell us and we will fix it.
Where they beat us
cron-job.org
Free, unlimited jobs, minute-level, open source, and running for over fifteen years. If you want a lot of simple jobs with email alerts, it is a better deal than our Free tier and probably a better deal than our paid ones. We would use it too.
Vercel Cron
If the thing you want to run is already a route in an app you deploy to Vercel, it is four lines of vercel.json and no new vendor, no new bill and no new password. That is hard to beat — until you need a timezone, a retry, or an alert.
EasyCron
Paid plans allow a single request to run for twelve to twenty-four hours. We cut every request off at five minutes. If your job is genuinely a long-running task rather than a trigger, we are the wrong tool.
05 — Pricing
₹0forever
Hourly checks for a couple of endpoints, with nothing held back.
₹399per month
incl. GST
Five-minute checks for one person running their own things.
₹1,499per month
incl. GST
Minute-level checks, 90 days of history and five seats.
₹4,999per month
incl. GST
Thirty-second checks across hundreds of jobs, for monitoring on behalf of clients.
Talk to us
Ten-second checks, SSO, a DPA and an SLA. Priced against what you actually run.
On every plan, including Free
Plans differ by how many jobs you run, how often they run, and how long history is kept — not by which features you are allowed to use. Every new job also fires once immediately, and you can trigger any job by hand as often as you like.
Inclusive of 18% GST · billed through Razorpay · cancel from the dashboard · outside India, billed in USD at $5 / $19 / $59 per month
06 — Questions
A hosted cron service. You give it a URL, a schedule and a definition of success; it calls the endpoint on time, retries when a call fails, and keeps the status, latency and response of every attempt. There is nothing to install — if your code can answer an HTTP request, it can be scheduled.
Expose the work as an HTTP endpoint — a serverless function, a webhook, a route in your app — and let getNodi call it on schedule. The scheduling, retries and history live here, so nothing of yours has to stay running between calls. The free plan does this for hourly jobs with no card.
Yes: 3 jobs across 2 projects on hourly schedules, with 7 days of run history, free forever. Every feature is included — retries, HMAC signing, custom success criteria, the API, Slack alerts. Paid plans start at ₹399 a month and raise the quotas and the frequency, not the feature list.
It is retried with fixed or exponential backoff, up to the attempt count you set, and an alert goes out by email, Slack or webhook once the retries are spent — with a second one when the job recovers. Every attempt stays in the history, so you can read the exact status and body that failed.
Yes — basic, bearer and API-key headers, or an HMAC signature computed per request so your endpoint can verify the call came from your schedule. Credentials are encrypted at rest with AES-256-GCM and never rendered back once saved.
Only if you say so. Success criteria are set per job: status classes, text or a regex the response body must match, and a latency budget. An endpoint that returns an empty 200 in under a second can be marked a failure — which is exactly the failure cron itself never notices.