Picking free cron in 2026 is harder than “just use GitHub Actions” or “just use Vercel Cron” suggests
I compared fifteen products that all answer “run this on a schedule” but sit in your stack very differently: cron-job.org, Upstash QStash, EasyCron, Zeplo, Trigger.dev, Inngest, Pipedream, Cloudflare Workers Cron Triggers, Vercel Cron Jobs, Netlify Scheduled Functions, GitHub Actions, Val Town, Google Cloud Scheduler, and Amazon EventBridge Scheduler. The quick forum answers skip the part that actually matters: whether you need a URL ping or durable job execution, what retries and dead-letter queues cost on free, and whether the scheduler you pick can even run every minute.
For a simple external HTTP cron that costs nothing and fires as often as once per minute, my default is cron-job.org. It is entirely free, supports custom methods, headers, and body, and does not publish a hard job-count cap beyond fair-use controls. The tradeoff is architectural: it is a URL fetcher with a 30-second timeout and a 64 KB output cap. No retries, no queue semantics, no workflow state.
When I need reliable webhook delivery with retries, backoff, and a dead-letter queue on a budget, I reach for Upstash QStash. The free tier includes 1,000 messages per day, 10 active schedules, queue parallelism controls, CRON_TZ support, and 3-day log and DLQ retention. Paid usage starts at $1 per 100K messages. That is a much gentler curve than most workflow platforms in this set.
If your app already lives on a specific platform, I would try the native scheduler first: Cloudflare Workers Cron Triggers on the edge, Vercel Cron Jobs or Netlify Scheduled Functions inside your deploy, GitHub Actions for repo-centric automation, or Val Town if you want a browser-based scripting runtime. Each one is compelling inside its own ecosystem and awkward outside it.
I prioritized official docs, pricing pages, API references, and status pages from mid-June 2026. Where docs were thin, I say so instead of guessing.
You cannot compare these on cron syntax alone
Every product here can fire something on a timer. The useful split is what happens when the timer goes off.
| Class | Services | What they optimize for |
|---|---|---|
| HTTP cron pingers | cron-job.org, EasyCron | Hit a URL on a schedule, nothing more |
| HTTP queue / scheduler | Upstash QStash, Zeplo | Retries, controlled delivery, queue semantics |
| Workflow orchestration | Trigger.dev, Inngest, Pipedream | Durable background jobs, fan-out, multi-step flows |
| Platform-native | Cloudflare Workers Cron, Vercel Cron, Netlify Scheduled Functions, GitHub Actions, Val Town | Scheduling inside a platform you already deploy to |
| Cloud enterprise | Google Cloud Scheduler, Amazon EventBridge Scheduler | IAM-integrated production scheduling in AWS or GCP |
The questions I ask before picking one:
| Question | Why it matters |
|---|---|
| Minimum interval | Vercel Hobby allows once per day within an hour, not per minute. GitHub Actions floors at 5 minutes. cron-job.org does 1 minute on free. |
| Retries and DLQ | QStash, Zeplo, Trigger.dev, and Inngest have them. Vercel Cron does not. |
| Where code runs | Platform-native schedulers invoke your deployed function. Standalone pingers only call HTTP endpoints you host elsewhere. |
| Observability on free | Log retention ranges from 1 day (Netlify free) to 6 months (EasyCron). |
| Incident history | Inngest had a 19-hour scheduling delay in April 2026. That matters if you are picking for mission-critical use. |
flowchart LR
need[Need hosted scheduling] --> simple[Simple HTTP ping]
need --> queue[Reliable queued delivery]
need --> workflow[Durable workflows]
need --> enterprise[Cloud-native enterprise]
simple --> cronJob[cron-job.org]
simple --> easyCron[EasyCron]
simple --> zeplo[Zeplo]
queue --> qstash[Upstash QStash]
queue --> zeplo
workflow --> trigger[Trigger.dev]
workflow --> inngest[Inngest]
workflow --> pipedream[Pipedream]
enterprise --> eventbridge[EventBridge Scheduler]
enterprise --> gcpScheduler[Cloud Scheduler] Free tiers at a glance
HTTP cron pingers
| Option | Free limits | Auth / triggers | Main caveat |
|---|---|---|---|
| cron-job.org | Min interval 1 min; no published hard job cap, fair use applies; 30s execution timeout; reads up to 64 KB output; API default 100 req/day | HTTP only; custom headers and body; API key with MFA and IP allowlisting | Fundamentally a URL fetcher. No retries or queue semantics. |
| EasyCron | Monthly free-plan renewal; up to 5 minutely jobs or 200 daily jobs on free; logs kept up to 6 months | HTTP only; headers, cookies, HTTP basic auth; 2FA on account; Slack, webhooks, email notifications | Capacity is expressed as active-job frequency tables, not a simple job count. Anti-abuse includes manual-run quota. |
HTTP queue / scheduler services
| Option | Free limits | Auth / triggers | Main caveat |
|---|---|---|---|
| Upstash QStash | 1,000 msgs/day (~30K/mo); 1 MB message; 10 active schedules; 10 queues; queue parallelism 2; max parallelism 10; delay up to 7 days; logs and DLQ retention 3 days | HTTP publish, schedules, queues, workflow events; bearer tokens; signed webhooks | Recent public incidents reviewed were on Vector, not QStash specifically. |
| Zeplo | 500 requests/month; 30-day log retention; 1 developer; jobs unlimited subject to request quota | Queue enqueue, delay, schedule, webhook notifications; bearer API token; HMAC-signed webhooks | Tight free envelope. Paid plan is $39/mo with 1M requests included. |
Workflow orchestration platforms
| Option | Free limits | Auth / triggers | Main caveat |
|---|---|---|---|
| Trigger.dev | 10,000 runs/month; 500 concurrent runs; 7-day run and log retention | Cron schedules, direct task triggers, queues; TypeScript-first code integrations | May 22-23 deploy failures and Mar-Apr DNS incidents in 2026 status history. |
| Inngest | Free tier exists with invocation and concurrency caps; exact paid ladder was not fully visible in public pages reviewed | Events and cron; event keys, signing keys, API keys; Vercel, Netlify, Cloudflare, DigitalOcean SDKs | Apr 15 2026 scheduling and execution delay lasted about 19 hours. |
| Pipedream | Daily 25-credit limit; limited connected accounts and workflows; exact active-workflow cap not clearly exposed in public pages reviewed | App events, HTTP/webhook, schedules, email, RSS; OAuth on HTTP triggers; thousands of app connectors | Best for low-code integrations, not long-running code execution. |
Platform-native schedulers
| Option | Free limits | Auth / triggers | Main caveat |
|---|---|---|---|
| Cloudflare Workers Cron | Free Workers plan: 100K requests/day; 5 cron triggers per account; cron executes in UTC; changes can take up to 15 min to propagate | Cron into a Worker; Worker can call Queues, KV, D1, R2, external HTTP | No native retries or DLQ on Cron Triggers themselves. |
| Vercel Cron Jobs | Hobby: jobs may run only once per day within the specified hour, not minute; up to 100 cron jobs per project | Path invocation of a Vercel Function; CRON_SECRET auth | No automatic retries. Duplicate delivery is possible. Idempotency is your problem. |
| Netlify Scheduled Functions | Bundled into Netlify’s 300 monthly credits; scheduler-specific free quotas not separately documented | Cron only; no inbound payload support; 30s execution cap; only published deploys auto-run | 1-day log history on free. |
| GitHub Actions | Public repos: standard hosted runners free; private repos on GitHub Free get 2,000 Actions minutes/month; shortest interval 5 min; 90-day log retention default | Cron plus repo events; GitHub secrets and tokens; self-hosted runners | Repo-centric, not a generic external scheduler. |
| Val Town | Free: 15-min cron intervals; 1 min wall-clock per run; 3-day log retention; 100,000 runs/day; unlimited public vals | Cron, HTTP vals, email handlers, webhooks; bearer API tokens | Pro ($21/mo) unlocks 1-min cron and 10-day logs. |
Cloud enterprise schedulers
| Option | Free limits | Auth / triggers | Main caveat |
|---|---|---|---|
| Google Cloud Scheduler | 3 jobs/month free per billing account, then $0.10/job-month; max job size 1 MB; default quota 1,000 jobs per region | HTTP, Pub/Sub, App Engine; generated auth headers for HTTP targets | Free tier is tiny. The value is native GCP integration. |
| Amazon EventBridge Scheduler | AWS Free Tier plus per-invocation billing thereafter; exact figures vary by account age and region | Cron, rate, one-time; targets include Lambda, Step Functions, ECS, SQS; IAM execution role | Pay-per-invocation, not “free forever.” Generous at scale through AWS Free Tier. |
Two things to keep in mind. Platform-native schedulers are almost always the right first pick when you already deploy there, but their free tiers are not interchangeable. Vercel Hobby cron is daily, not minutely. GitHub Actions floors at 5 minutes. And several vendors do not publish one consolidated matrix for payload caps, concurrency, retention, and anti-abuse controls. I marked those as not publicly documented instead of guessing.
What the free tiers actually feel like in use
HTTP cron pingers: cron-job.org, EasyCron, and Zeplo
cron-job.org is the option I would try first when the job is literally “call this URL every N minutes.” Custom HTTP methods, headers, body, cron-like schedules, test runs, notifications, execution history, and status badges. The API defaults to 100 requests per day. Sustaining memberships exist but explicitly do not add entitlements, which is refreshingly honest.
The limits are real. Thirty-second execution timeout. Sixty-four kilobytes of output read. No retries if your endpoint flakes. For a health check, a cache warmer, or a webhook to a server you control, that is often enough. For payment-provider webhooks where delivery guarantees matter, it is not.
EasyCron is the classic webcron product in this set. Timezones, custom HTTP methods, timeout configuration, regex matching on responses, execution logs with predictions, and notification integrations (Slack, webhooks, email). The free plan renews monthly and expresses capacity as frequency tables: up to 5 minutely jobs or 200 daily jobs. Logs stick around up to 6 months, which is unusually generous on free. Paid plans start at annual tiers.
Zeplo sits between a pinger and a queue. Five hundred requests per month on free, 30-day log retention, unlimited jobs subject to that quota. Standard cron schedules, default 3 retry attempts with exponential backoff, queue history, HMAC-signed webhooks. Status page showed 99.59% API uptime over 90 days when I checked. I would pick Zeplo over cron-job.org when I want URL calls to behave like queue jobs with retries, and pick cron-job.org when I want maximum free volume with zero account friction.
Queue and scheduler services: Upstash QStash
Upstash QStash is the strongest reliability-focused option among independent vendors in this comparison. One thousand messages per day free, cron with CRON_TZ, retries with custom exponential backoff, dead-letter queue, logs and stats, queue parallelism controls, and delays up to 7 days. Paid plans start at $1 per 100K messages.
The mental model is publish-to-HTTP with delivery guarantees, not “run my code.” You enqueue a message or define a schedule, QStash calls your endpoint, and failed deliveries retry before landing in the DLQ. That fits webhook fan-out, deferred API calls, and serverless endpoints that need at-least-once semantics without building your own retry layer. Log and DLQ retention on free is only 3 days, so plan your debugging window accordingly.
Workflow orchestration: Trigger.dev, Inngest, and Pipedream
These three treat scheduling as one trigger among many. They are stronger than plain cron when you need durable state, fan-out, concurrency controls, or multi-step logic.
Trigger.dev is the TypeScript-native pick. Ten thousand runs per month free, 500 concurrent runs, 7-day retention. Cron schedules with IANA timezones, declarative and imperative schedule definitions, retries with exponential backoff, concurrency controls, realtime run updates, and query dashboards. If your background jobs already live in a TS codebase and you want a run UI that feels like a product, Trigger.dev is the most natural fit here.
Inngest leans event-driven. Cron plus arbitrary events, per-step retries, concurrency throttling, batching, rate limiting, rich traces, run search, and Prometheus export. SDKs for TypeScript, Python, and Go with first-party integrations for Vercel, Netlify, Cloudflare, and DigitalOcean. I would pick Inngest over Trigger.dev when the workload is multi-step and event-centric rather than “one scheduled function that does a thing.”
Pipedream is the low-code outlier. Twenty-five daily credits on free, schedule triggers with timezone support, a strong run inspector, and thousands of app connectors (GitHub, Slack, Google Calendar, and the rest). I would not use Pipedream as a general-purpose background job runtime. I would use it when the scheduled task is mostly wiring SaaS APIs together without writing much code.
Both Trigger.dev and Inngest had visible 2026 incidents worth reading before you bet production on them. Trigger.dev: deploy failures May 22-23, DNS issues Mar-Apr, some schedules affected Jan 21. Inngest: a major Apr 15 scheduling and execution delay lasting about 19 hours. Pipedream’s May incident history included temporarily disabling new Python code steps. None of that means avoid them. It means read the status pages and design for idempotency.
Platform-native schedulers
If you already deploy on the platform, native scheduling is usually less moving parts than bolting on an external pinger.
Cloudflare Workers Cron Triggers give you five cron triggers per account on the free Workers plan, executing in UTC with up to 15 minutes propagation delay after changes. Your Worker can call Queues, KV, D1, R2, or external HTTP. Observability is solid via Workers Logs, metrics, analytics, and OpenTelemetry export. Cron Triggers themselves do not ship retries or DLQ; you build that in the Worker or use Cloudflare Queues separately. A Jun 12 status page item affected Workers-related products including Cron Triggers.
Vercel Cron Jobs invoke a path on your deployed Vercel Function, authenticated via CRON_SECRET. Up to 100 cron jobs per project. On Hobby, jobs run at most once per day within the specified hour, not at minute granularity. No automatic retries. Duplicate delivery is possible, and Vercel’s docs recommend locking or idempotency. Fine for a daily cleanup task on a side project. Wrong for minute-level polling. A Jun 8 incident involved elevated errors on some function invocations.
Netlify Scheduled Functions use UTC cron with RFC shortcuts, manual “Run now,” and a 30-second execution cap. Only published deploys auto-run scheduled functions. Free-plan economics are bundled into Netlify’s 300 monthly credits rather than a scheduler-only quota. Log history on free is 1 day. Recent status incidents reviewed affected Edge Functions and image delivery, not Scheduled Functions specifically.
GitHub Actions scheduled workflows are POSIX cron with optional timezone, plus the full GitHub CI environment: secrets, tokens, self-hosted runners. Public repos get free standard hosted runners. Private repos on GitHub Free get 2,000 Actions minutes per month. Shortest interval is 5 minutes. Ninety-day log retention by default. This is the right tool for repo-centric automation (nightly test runs, dependency updates, cache warming in CI). It is the wrong tool for generic external webhook scheduling at high frequency.
Val Town is the odd one out: a browser-based scripting runtime with cron, HTTP vals, email handlers, and webhooks. Free tier allows 15-minute cron intervals, 1 minute wall-clock per run, 3-day log retention, and 100,000 runs per day on unlimited public vals. Pro at $21/month drops cron to 1-minute intervals and extends logs to 10 days. Status page showed Scheduled Vals at 100% uptime in the reviewed window. Recent incidents were mostly website and preview outages in Apr-May 2026, not the scheduler itself.
Cloud enterprise: Google Cloud Scheduler and Amazon EventBridge Scheduler
For production workloads already in AWS or GCP, the differentiators are IAM integration, native targets, retry controls, and operational maturity, not nominal free-tier generosity.
Google Cloud Scheduler gives you 3 jobs per month free per billing account, then $0.10 per job-month. HTTP, Pub/Sub, and App Engine targets. Timezones, retry config with exponential backoff, custom HTTP headers, and up to 30-minute HTTP job duration. Default quota is 1,000 jobs per region. Public service health showed no recent Cloud Scheduler incidents when I checked; the last visible historical item was June 2024.
Amazon EventBridge Scheduler supports cron, rate, and one-time schedules with targets across Lambda, Step Functions, ECS, SQS, and other AWS APIs. IAM execution roles, optional KMS, timezones, flexible time windows, retries, and SQS DLQ support. Pricing is per-invocation through AWS Free Tier and standard rates. I did not find a scheduler-specific recent incident in the public AWS Health Dashboard snippets reviewed.
Reliability and observability on free
What you get for debugging varies more than the marketing pages suggest.
| Capability | Who has it on free | Who does not |
|---|---|---|
| Automatic retries | QStash, Zeplo, Trigger.dev, Inngest | cron-job.org, EasyCron, Vercel Cron, Netlify Scheduled Functions |
| Dead-letter queue | QStash (3-day retention), EventBridge (SQS DLQ) | Most HTTP pingers and platform-native schedulers |
| Timezone-aware cron | QStash (CRON_TZ), EasyCron, Trigger.dev, Inngest, Pipedream, GCP, EventBridge, GitHub Actions | Cloudflare Workers Cron (UTC only), Netlify (UTC) |
| Longest free log retention | EasyCron (up to 6 months) | QStash DLQ (3 days), Val Town free (3 days), Netlify free (1 day) |
Status-page incidents that stood out during research:
- Inngest: Apr 15 2026 scheduling and execution delay, about 19 hours.
- Trigger.dev: May 22-23 deploy failures; Mar-Apr DNS incidents; Jan 21 affected some schedules.
- Cloudflare: Jun 12 dashboard and API issues affecting Workers-related products, including Cron Triggers.
- Vercel: Jun 8 elevated errors on some function invocations.
- Zeplo: 99.59% API uptime over 90 days; no incidents in the past month reviewed.
If you are selecting for mission-critical scheduling, read the status pages yourself and design handlers to be idempotent. Duplicate delivery is documented behavior on Vercel Cron, and at-least-once semantics are common across queue-based systems.
What I would pick
flowchart TD
start[Need hosted scheduling] --> typeQ{What kind of job?}
typeQ -->|Ping a URL on a timer| pingQ{Need retries?}
pingQ -->|No| cronJob[cron-job.org]
pingQ -->|Yes, minimal setup| zeplo[Zeplo]
pingQ -->|Yes, more volume| qstash[Upstash QStash]
typeQ -->|Durable background work| codeQ{How do you want to write it?}
codeQ -->|TypeScript codebase| trigger[Trigger.dev]
codeQ -->|Event-driven multi-step| inngest[Inngest]
codeQ -->|Low-code app wiring| pipedream[Pipedream]
typeQ -->|Already on a platform| platformQ{Where do you deploy?}
platformQ -->|Cloudflare| cfCron[Workers Cron Triggers]
platformQ -->|Vercel or Netlify| vercelNetlify[Platform cron if interval fits]
platformQ -->|GitHub repo| gha[GitHub Actions]
platformQ -->|Browser scripts| valtown[Val Town]
typeQ -->|AWS or GCP production| cloudQ{Which cloud?}
cloudQ -->|AWS| eventbridge[EventBridge Scheduler]
cloudQ -->|GCP| gcpScheduler[Cloud Scheduler] Ping a health-check URL every minute for free: cron-job.org. No account upsell games, 1-minute intervals, custom headers. Just remember it will not retry on failure.
Webhook delivery with retries on a budget: Upstash QStash. Cleanest free-tier envelope for retries, backoff, schedules, and DLQ among independent vendors. Zeplo if 500 requests per month is enough and you want something simpler.
TypeScript background jobs with a realtime run UI: Trigger.dev. Ten thousand runs per month free, good concurrency controls, schedules as one trigger type among many.
Event-driven multi-step workflows with flow control and traces: Inngest. Especially strong when cron is just one entry point into a larger event graph.
Zapier-style scheduled app integrations: Pipedream. Thousands of connectors, daily credit cap on free, strong run inspector for debugging wiring.
App already on Cloudflare, Vercel, or Netlify: try the platform scheduler first. Cloudflare for edge cron with Worker logic. Vercel or Netlify only if the interval fits (daily on Vercel Hobby, 30-second cap on Netlify). Do not reach for an external pinger unless you need capabilities the platform scheduler lacks.
Repo-centric nightly automation: GitHub Actions. POSIX cron, secrets, self-hosted runners. Not for minute-by-minute external webhooks.
Quick browser-based scripts on a schedule: Val Town free for 15-minute intervals, Pro for 1-minute.
AWS or GCP production with IAM targets: EventBridge Scheduler or Cloud Scheduler. The free tiers are not the point. IAM, native targets, and retry controls are.
Explicit anti-picks for high-frequency external automation: Vercel Hobby cron (once per day within an hour) and GitHub Actions (5-minute floor). For minute-level scheduling on free, look at cron-job.org, Cloudflare Workers Cron, Upstash QStash, or Val Town Pro.
Gaps in the public docs
Pipedream, Inngest, and a few platform-native schedulers never publish one table with payload caps, concurrency, retention, and anti-abuse rules together. When a field in the comparison says “not publicly documented,” that is because I could not find a primary source, not because the product lacks a limit.
Inngest’s paid ladder and Pipedream’s free active-workflow cap were both fuzzier on public pages than inside the product UI.
Several status pages only showed uptime percentages. Where I could not find recent incident write-ups, I said so in the post rather than guessing.
I did not run timed cron execution tests across every provider here. Timing and reliability notes come from vendor docs and status pages.
Sources
cron-job.org
cron-job.org
cron-job.org API documentation
Upstash QStash
Upstash QStash documentation
Upstash QStash pricing
EasyCron
Zeplo
Zeplo
Zeplo pricing
Zeplo documentation
Trigger.dev
Trigger.dev
Trigger.dev pricing
Trigger.dev documentation
Inngest
Inngest
Inngest pricing
Inngest documentation
Pipedream
Pipedream
Pipedream pricing
Pipedream documentation
Cloudflare Workers Cron
Scheduled Handler (Cron Triggers)
Cloudflare Workers pricing
Vercel Cron Jobs
Vercel Cron Jobs
Vercel pricing
Netlify Scheduled Functions
Netlify Scheduled Functions
Netlify pricing
GitHub Actions
Schedule event
GitHub Actions billing
Val Town
Val Town
Val Town pricing
Val Town documentation
Google Cloud Scheduler
Cloud Scheduler overview
Cloud Scheduler pricing