Skip to content
cron.surf
For GitHub Actions · coming soon

Scheduled workflows that run on time.

GitHub's schedule trigger can start late, or skip a run, when Actions is busy. cron.surf will start your workflow at the exact minute, in your time zone, and email you when a run fails or never starts.

Get an email when it launches

One email when it launches. Nothing else.

.github/workflows/report.yml
  on:-   schedule:-     - cron: "0 17 * * *"  # 9am PST, 10am PDT+   workflow_dispatch:+   # cron.surf: 0 9 * * * America/Los_Angeles    jobs:    # unchanged
The whole change. Your jobs and steps stay as they are.

Why a scheduled run starts late

Delayed under load

“The schedule event can be delayed during periods of high loads of GitHub Actions workflow runs.” The top of every hour is the busiest.

GitHub Docs

Sometimes dropped

“If the load is sufficiently high enough, some queued jobs may be dropped.” Nothing tells you a run was skipped.

GitHub Docs

Switched off after 60 days

In a public repository, scheduled workflows are disabled when there has been no activity for 60 days.

GitHub Docs

A workflow_dispatch call starts a run right away. cron.surf will make that call for you at the minute you wrote, then watch the run to the end.

How it will work

01

Install the app

Pick an account and the repositories to cover. One repository is fine. You can change the list any time in GitHub settings.

02

Swap one line and push

Replace schedule with a # cron.surf: comment and add workflow_dispatch:. A check on your commit shows the next run time.

Or hand step 2 to your agent

At launch you can paste this into Claude Code, Codex or Cursor. It finds every scheduled workflow, converts the time to your zone, and opens a pull request.

Read https://cron.surf/github/agent.md and move this repo's scheduled workflows to cron.surf.

What you get

On the minute

Runs start at the time you wrote, in any IANA time zone, with daylight saving handled.

Every run checked

Each run is followed to its result. A failed run, or one that never starts, sends you an email.

Checks on every push

Each commit that touches a workflow gets a check with the next run time, or the exact mistake in the line.

A badge for your README

Show the on-time rate of a workflow, updated after every run.

Planned pricing

Free

$0
  • Public repositories
  • 20 schedules per installation
  • Every 5 minutes at most
  • Email alerts and run checks
Notify me

Pro

$4 / month
  • Private repositories too
  • 100 schedules per installation
  • Every minute at most
  • Everything in Free
Notify me

Questions

When does it launch?

We are building it now. Leave your email above and you will get one message on launch day.

What will the app access?

It reads workflow files (Contents: read), starts workflows (Actions: write) and posts checks (Checks: write). It only starts workflows that carry a # cron.surf: line, and it never writes to your code.

Do runs cost extra Actions minutes?

No more than before. Each run is the same workflow run you had; only the trigger changes.

How do I go back?

Put the schedule block back and remove the comment, or uninstall the app.

Which cron syntax can I use?

Standard five-field cron, the same as GitHub, plus an optional time zone. You can check any expression with the cron.surf tool today.