How much does my GitHub Actions workflow cost?

2026-04-27 - gha-budget

Price your workflow right now.

You don't need to install anything. Paste the YAML into budget for the per-run/monthly number, or the calculator for a quick category-based estimate. Then grab the Cut Your CI Bill cookbook to actually push that number down. $19, one-time, MIT-licensed templates.

Get the cookbook

GitHub bills Actions in minutes. Most engineers know that. Far fewer know what a minute costs on the runner they're using, that the cost changes per OS, that matrices multiply runs, and that the number on the invoice is the sum across every workflow file in every repo in the org.

By the time you see the bill, the bill already happened.

gha-budget is a free MIT CLI that reads a workflow YAML, walks the jobs, expands matrices, applies the official runner price multipliers, and tells you what each run costs - and what a month of typical usage will cost - before you commit.

The pricing model

GitHub-hosted runners are priced as a multiplier over the base ubuntu-latest rate. As of writing:

RunnerMultiplier
ubuntu-latest (2-core)1x
windows-latest2x
macos-latest (3-core)10x
macos-latest (M1)10x
macos-13-xlarge12x
self-hosted0x (you eat the bill)

At current rates the base minute is roughly $0.008 for Linux on private repos. So one minute on macos-latest is about $0.08, ten minutes is $0.80, a 4x4 matrix that runs ten minutes on macOS is $12.80 per push. Multiply by 30 pushes a day and that's $384/day on one job.

One command

npx gha-budget

It scans .github/workflows/, reads each file, and prints a table per workflow:

workflow: ci.yml
  job: build (matrix: 6 combos)
    runner: ubuntu-latest
    estimated minutes per run: 60
    cost per run: $0.48
  job: e2e (matrix: 1 combo)
    runner: macos-latest
    estimated minutes per run: 15
    cost per run: $1.20

total per push: $1.68
projected monthly (30 push/day): $1,512

Use --json to feed the numbers into a budget alert, --markdown to drop the table into a PR comment.

What it can't tell you

gha-budget uses estimated minutes per job. It doesn't run your workflow. The estimate counts steps and assigns reasonable defaults; you can override with --minutes-per-job or annotate jobs with x-budget-minutes in the YAML if you have observed numbers.

For real per-run minutes you need GitHub's Usage CSV. gha-budget answers a different question: before this workflow merges, what shape is the bill?

The two tools to run before you push a workflow

In order:

npx ci-doctor --fix     # apply safe permissions / concurrency / timeout fixes
npx gha-budget          # see what this workflow will cost

ci-doctor cuts cost by adding cancel-in-progress, capping job timeouts, and trimming artifact retention. gha-budget tells you whether the cost is acceptable in the first place.

The deep version

The CLI is free and ships every rule. The Cut Your CI Bill cookbook is the longer playbook: 30 patterns and 5 paste-ready snippet workflows for cheaper, faster, less leaky GitHub Actions ($19, one-time).

Try it

npx gha-budget

No signup. No telemetry. Source on GitHub.