CI/CD
GitHub Actions cost: what a minute costs and how to cut it
GitHub Actions bills by the minute beyond each plan's included minutes, and it rounds every job up to the whole minute. CRACI runs the same workflows about twice as fast, at a lower price per minute, billed per second. A 10-minute build costs about 67% less.
Updated
How GitHub Actions is billed
Every GitHub plan includes Actions minutes each month: 2,000 on GitHub Free, 3,000 on Pro and Team, and 50,000 on Enterprise Cloud. Standard GitHub-hosted runners are free in public repositories, and GitHub does not charge per minute for self-hosted runners. Beyond the included minutes, private repositories pay per minute of runner time, and the price depends on the runner's size, operating system and architecture. See what free CI minutes cover, and what they leave out.
As of September 2026, a standard 2-core Linux x64 runner costs $0.006 per minute. Two rules make the bill bigger than the price suggests:
- Every job is rounded up to the whole minute. A 10-second job is billed as a full minute, and a workflow with ten short jobs pays for at least ten minutes.
- Larger runners are always billed. Included minutes cannot be used for them, and they are not free in public repositories.
What a minute costs: CRACI vs GitHub-hosted
| Capability | CRACI | GitHub-hosted | Difference |
|---|---|---|---|
| 2 vCPU Linux x64 | $0.004 | $0.006 | CRACI about 33% less |
| 2 vCPU Linux ARM64 | $0.004 | $0.005 | CRACI 20% less |
| 32 vCPU Linux x64 | $0.064 | $0.082 | CRACI about 22% less |
| Metering | Per second | Each job rounded up to the minute | No rounding on CRACI |
CRACI's list price is lower on standard Linux runners, and it bills per second. The per-minute gap is about 33% on 2 vCPU x64; on real pipelines, most of the saving comes from dropping the rounding. At 32 vCPU on ARM64, GitHub's list price is lower. For every provider's prices, see GitHub Actions runners compared.
Faster builds use fewer minutes
The price per minute is only half of the bill; the other half is how many minutes a build takes. CRACI runs builds about twice as fast as GitHub-hosted runners, thanks to faster hardware, shorter queue times and caching. A build that takes 10 minutes on a GitHub-hosted 2-core runner takes about 5 on CRACI, and you pay for those 5.
| Capability | CRACI | GitHub-hosted | CRACI saves |
|---|---|---|---|
| Build time | About 5 minutes | 10 minutes | About half the wait |
| One build, 2 vCPU x64 | $0.020 | $0.060 | About 67% |
| One build, 2 vCPU ARM64 | $0.020 | $0.050 | 60% |
| 1,000 builds a month, 2 vCPU x64 | $20 | $60 | About 67% |
Faster builds also cut the cost that never shows up on the invoice: engineers waiting for a green check before they can merge.
Where per-second billing pays off
Lint, type checks, unit test shards and deploy steps often finish in well under a minute. On GitHub-hosted runners each one still costs a full minute. On CRACI you pay for the seconds it ran. The examples below compare jobs of the same length, before any speed-up.
| Capability | CRACI | GitHub-hosted | CRACI saves |
|---|---|---|---|
| 1,000 jobs of 30 seconds | $2.00 | $6.00 | About 67% |
| 1,000 jobs of 70 seconds | $4.67 | $12.00 | About 61% |
| 1,000 builds of 10 minutes | $40.00 | $60.00 | About 33% |
| 1,000 builds of 10 minutes, 32 vCPU x64 | $640 | $820 | About 22% |
The shorter the jobs, the bigger the saving from per-second billing. On long builds the saving comes from speed: about 67% on a 10-minute build, against about 33% from the price per minute alone.
Estimate your bill
Enter your pipeline's numbers. Your GitHub billing usage report shows runs, jobs and minutes per workflow.
List prices as of September 2026, for minutes beyond each plan's included minutes. GitHub rounds each job up to the whole minute; CRACI meters per second. With the speed option, each job takes half as long on CRACI.
The costs that do not show up per minute
- Reruns. A flaky test that fails one run in ten adds roughly 10% to the bill of the workflow it sits in, and every rerun job is rounded up again.
- Hung jobs. Without
timeout-minutes, a stuck job keeps running until GitHub's limit and is billed for all of it. - Waiting engineers. Slow pipelines cost developer time, which is usually worth far more than the minutes. Right-size runners for the jobs on the critical path, or run them on a faster runner.
- Self-hosted overhead. Self-hosted runners avoid the per-minute price but not the cost: machines sit idle between builds, and someone has to patch, scale and secure them. See managed vs self-hosted runners.
Eight ways to cut the bill
- Cancel superseded runs. A
concurrencygroup withcancel-in-progressstops the run for an older commit when a newer one arrives on the same branch. - Skip work that does not apply.
pathsfilters keep a documentation change from running the full test suite. - Cache dependencies. Restoring packages from a cache is faster than downloading them on every run.
- Set timeouts. A
timeout-minutesvalue on each job stops a hung job from burning minutes until the default limit. - Merge tiny jobs. Under whole-minute rounding, three 10-second jobs cost three minutes; one job that does all three costs one.
- Right-size runners. A larger runner costs more per minute but can cost less per build when it finishes much faster. Measure both.
- Use ARM64 where it is cheaper. On GitHub, a 2-core ARM64 runner is listed below the x64 price.
- Move to a faster, cheaper runner. CRACI runs builds about twice as fast, lists a lower price on
standard Linux runners and bills per second, with no change to the workflow beyond
runs-on.
Switching to CRACI
CRACI replaces the runner, not GitHub Actions. Install the CRACI GitHub App, change runs-on to
craci, and the job runs on CRACI while the workflow, its actions and its logs stay in GitHub. Sizes run
from 1 to 32 vCPU, set with the cracicorp/setup action. Move one workflow first and compare the build
time and the bill.
CRACI charges only for build minutes: $0.002 per vCPU-minute ($0.004 for a default 2 vCPU runner), metered per second, with no monthly fee and no per-SBOM charge. Startups can get at least 100,000 free build minutes through the startup program. See pricing.
The same runner also records an SBOM of what each job fetched, enforces an egress policy and records provenance data, so the faster, cheaper build comes with a record of what went into it. See CRACI vs GitHub-hosted runners.
GitHub Actions cost: frequently asked questions
How much does GitHub Actions cost?
Plans include free minutes each month: 2,000 on GitHub Free, 3,000 on Pro and Team, and 50,000 on Enterprise Cloud. Beyond that, a standard 2-core Linux x64 runner costs $0.006 per minute as of September 2026, and larger runners cost more.
Is CRACI cheaper than GitHub-hosted runners?
Yes, for standard Linux runners. CRACI lists $0.004 per minute for 2 vCPU ($0.002 per vCPU-minute), about 33% below GitHub's $0.006 for 2-core x64, bills per second, and runs builds about twice as fast, so each build uses fewer minutes. A build that takes 10 minutes on a GitHub-hosted 2-core runner costs about 67% less on CRACI, or a third of the price.
Why is CRACI faster than GitHub-hosted runners?
Three things together: faster hardware, shorter queue times before a job starts, and caching. CRACI runs builds about twice as fast as GitHub-hosted runners.
Does GitHub round up Actions minutes?
Yes. GitHub rounds each job up to the whole minute, so a job that runs for 10 seconds is billed as a full minute. Pipelines with many short jobs pay the most for rounding.
Do included minutes cover larger runners?
No. GitHub states that included minutes cannot be used for larger runners, and larger runners are not free for public repositories. Every minute on them is billed.
Is GitHub Actions free for public repositories?
Yes, on standard runners. GitHub states that standard GitHub-hosted runners are free in public repositories.
Are self-hosted runners free?
GitHub does not charge per minute for self-hosted runners, but you pay for the machines, including idle ones, and you are responsible for their operating system, software and security. GitHub warns that self-hosted runners should almost never be used for public repositories.
How do I move a job to CRACI?
Install the CRACI GitHub App and change runs-on to craci in the job. The workflow, its actions and its logs stay in GitHub. Choose a runner size from 1 to 32 vCPU with the cracicorp/setup action.
Cut your GitHub Actions bill
Change runs-on on one workflow, run it on CRACI, and compare the build time and the bill line by line.
Book a demo