GitHub Actions minutes limit reached - free tier exhausted
All new workflow runs immediately fail with 'Your GitHub Actions minutes have been used up'
Focused incident mode — strips away everything but this runbook.
Symptoms
- All new workflow runs immediately fail with 'Your GitHub Actions minutes have been used up'
- Runs queue indefinitely with no runner picking them up
- Workflow run shows 'Pending' then fails with billing message
GitHub Actions minutes reset on the first of each month. Linux runners are 1x, macOS is 10x, and Windows is 2x the minute multiplier.
Evidence to grab
Collect these artifacts before you change anything — they prove (or rule out) each cause.
Billing page usage
gh api /orgs/<OWNER>/settings/billing/actions --jq '.total_minutes_used'Run failure message
gh run view <RUN_ID> --log-failed | grep -E 'minutes|billing|limit|exceeded'
Diagnostic flow
Run the steps in order, marking each claim confirmed or refuted. The evidence you gather feeds the ranked causes below.
Guided decision tree is ready.
Steps with commands, expected output, and pass/fail branches.
Ranked root causes
Evidence checklist
- Billing API shows total_minutes_used > included_minutes
- All repositories in the org are affected simultaneously
Confirm before fixing
gh api /orgs/<OWNER>/settings/billing/actions --jq '.total_minutes_used'Confirm minute usage
Fix
echo 'Upgrade plan at https://github.com/settings/billing'Upgrade the GitHub plan or wait for the billing cycle to reset
Resolution runbook
Apply from top to bottom after the cause is confirmed. Review every command before running it — risk tags are shown on each.
gh api /orgs/<OWNER>/settings/billing/actions --jq '.total_minutes_used'Confirm minutes are exhausted
echo 'Upgrade plan at https://github.com/settings/billing'Upgrade plan or wait for reset
Prevention
- Use path filters to skip CI for docs-only or irrelevant changes.
- Consolidate matrix jobs - test only critical combinations on every push.
- Use 'concurrency' groups to cancel superseded runs and avoid wasted minutes.
- Monitor usage weekly via the billing API and set budget alerts.
Related runbooks
Same stack, same failure family — worth a skim.
Workflow runs show 'Queued' status for many minutes before starting
Previously in-progress workflow shows 'Cancelled' when a new push arrives
Commands marked READ CHANGE DESTRUCTIVE — never run DESTRUCTIVE commands against production data you cannot restore. Copy → verify → execute.