Home · Tools · Cron Expression Generator

Cron Expression Generator

Build, explain, and preview cron expressions for Linux crontab, GitHub Actions, Vercel and more.

Expression

      
Human readable

Next 5 runs (your local time)

    Cron expression generator with human-readable explanation

    A cron expression is five fields — minute, hour, day-of-month, month, day-of-week — that tell a scheduler when to run a job. The syntax is famously hostile: 0 0 * * 0 means "every Sunday at midnight" and */15 9-17 * * 1-5 means "every 15 minutes, business hours, weekdays". This tool lets you build expressions visually, see a plain-English description, and preview the next 5 actual run times in your local timezone.

    How to read a cron expression

    ┌──────────── minute (0-59)
    │ ┌────────── hour (0-23)
    │ │ ┌──────── day of month (1-31)
    │ │ │ ┌────── month (1-12)
    │ │ │ │ ┌──── day of week (0-6, Sunday=0)
    │ │ │ │ │
    * * * * *

    Each field accepts: a number (5), a range (1-5), a list (1,3,5), a wildcard (*), or a step (*/15, 0-30/5). Steps are the trickiest part: */15 in the minute field means "every 15 minutes starting at 0" — so 0, 15, 30, 45.

    Common patterns

    Pitfalls people hit

    Where this format applies

    Standard 5-field cron is used by Linux crontab, GitHub Actions schedules, GitLab CI scheduled pipelines, Vercel Cron Jobs, Cloudflare Workers cron triggers, Supabase pg_cron (with seconds), Kubernetes CronJob, and most other modern schedulers. If your scheduler uses a different dialect (Quartz, Spring, AWS), validate the generated expression in their docs before deploying.

    Testing your expression

    Always check the "Next 5 runs" preview before saving. The most common bugs are typos that produce a valid-looking expression that fires at the wrong time — for example 0 0 * * 7 (invalid: day-of-week is 0-6) silently becomes "never" on some implementations.

    Related tools

    FAQ

    What does the asterisk (*) mean?
    An asterisk means 'every value' for that field. So * in the minute field means every minute, * in the hour field means every hour, etc.
    How is the next-run preview calculated?
    Entirely in your browser. The tool starts at the next minute and walks forward minute by minute, checking each field against the expression until it finds 5 matches.
    Why is my schedule firing twice when both day-of-month and day-of-week are set?
    Standard Unix cron treats those two fields as an OR — the job fires when either matches. To restrict to a specific day-of-week on a specific day-of-month, use only one field.
    Does this support Quartz-style 6 or 7 field cron?
    Not currently. Quartz, Spring, and AWS EventBridge use extended cron formats with seconds and/or year. This tool generates standard 5-field Unix cron.
    How are timezones handled?
    Your cron server (Linux box, GitHub Actions, Vercel, etc.) interprets the expression in its own timezone. The next-run preview uses your browser's local time. Always confirm what timezone your scheduler is configured for.