How much do GitHub Actions minutes cost, and how do you cut the bill?
As of November 2026, GitHub Actions costs $0.006 per minute on a standard 2-core Linux runner, $0.010 on Windows and $0.062 on macOS when jobs run in private repositories. Each plan includes a monthly amount of compute: $12 on Free, $18 on Pro and Team, and $300 on Enterprise Cloud. Standard GitHub-hosted runners in public repositories and all self-hosted runners carry no GitHub charge.
Included usage by plan
GitHub expresses the monthly allowance as a dollar amount, not as minutes. The Actions billing documentation lists these amounts as of November 2026:
| Plan | Included compute | Equivalent 2-core Linux minutes | Artifact storage | Cache |
|---|---|---|---|---|
| Free (personal and organization) | $12 | 2,000 | 500 MB | 10 GB per repository |
| Pro | $18 | 3,000 | 1 GB | 10 GB per repository |
| Team | $18 | 3,000 | 2 GB | 10 GB per repository |
| Enterprise Cloud | $300 | 50,000 | 50 GB | 10 GB per repository |
Because the allowance is money, the operating system matters. A Windows minute uses the allowance about 1.7 times faster than a Linux minute, and a macOS minute about 10 times faster. Usage of standard runners in public repositories and of self-hosted runners does not reduce the allowance.
Per-minute rates
GitHub’s runner pricing reference lists these rates in US dollars, as of November 2026. GitHub rounds each job up to the next whole minute.
| Runner | Price per minute |
|---|---|
| Linux 1-core (x64) | $0.002 |
| Linux 2-core (x64) | $0.006 |
| Linux 2-core (arm64) | $0.005 |
| Windows 2-core (x64) | $0.010 |
| macOS 3-core or 4-core | $0.062 |
| Linux 4-core (x64), larger runner | $0.012 |
| Linux 4-core (arm64), larger runner | $0.008 |
| Linux 16-core (x64), larger runner | $0.042 |
| Linux 16-core (arm64), larger runner | $0.026 |
| Linux 4-core with GPU, larger runner | $0.052 |
Larger runners are available only on the Team and Enterprise Cloud plans, and GitHub bills them in public repositories too.
What changed in 2026
On January 1, 2026, GitHub reduced the price of GitHub-hosted runners by up to 39%, depending on the machine type. The same December 2025 announcement introduced a $0.002 per minute “Actions cloud platform charge” for self-hosted runners, due to start on March 1, 2026. GitHub then postponed that charge “to take time to re-evaluate our approach.” As of November 2026, GitHub has announced no new date, and its billing documentation lists self-hosted runner usage as free.
Storage and cache costs
Minutes are not the only line item. Above the included amounts, GitHub charges per GB per month as of November 2026:
- Artifacts and GitHub Packages storage: $0.25
- Actions cache: $0.07
- Custom runner image storage: $0.07
Workflows that upload large build artifacts on every push, or keep them for the default retention period, can cost more in storage than in minutes. Set retention-days on artifacts that nobody downloads after a few days.
How to reduce the bill
The cheapest minute is the one that never runs. These changes usually save the most:
- Cancel superseded runs. A
concurrencygroup withcancel-in-progress: truestops the run for an older commit when a newer commit arrives on the same branch. - Skip irrelevant workflows. Use
pathsandpaths-ignorefilters so a documentation change does not trigger the full test suite. - Cache dependencies. Restoring package caches and container build layers often saves several minutes per job. Watch the 10 GB per repository cache limit, since usage above it is billed.
- Move to arm64. A 2-core arm64 runner costs $0.005 against $0.006 for x64, and a 4-core arm64 larger runner costs $0.008 against $0.012. Most Linux toolchains and container builds work on arm64 without changes.
- Right-size runners. The per-minute price of a larger runner grows roughly with its core count, so a 4-core runner only saves money if it finishes the job in less than half the time. Measure before you switch.
- Set timeouts. A job without
timeout-minutescan run for the 6-hour maximum if it hangs. - Limit macOS jobs. At more than ten times the Linux price, run macOS builds only where the platform requires it, for example for iOS releases.
- Self-host high-volume work. Moving steady, heavy workloads to self-hosted runners removes the per-minute GitHub charge. You pay for the machines instead, and spot or preemptible instances lower that cost for jobs that can be retried.
Self-hosting is not free: you pay for compute, idle capacity and the work of keeping runners patched and secure. The comparison of self-hosted and GitHub-hosted runners covers that trade-off, and the guide to spot instances for Kubernetes workloads explains which jobs tolerate interruption.
Running CI jobs on Cloudfleet
Teams that run self-hosted runners as Pods, for example with Actions Runner Controller, can run them on a Cloudfleet Kubernetes Engine (CFKE) cluster. Node auto-provisioning creates nodes when runner Pods are pending and deletes them when they are no longer needed. With Pod labels and Fleet constraints, runner Pods can be placed on spot instances or arm64 nodes.