GitHub Actions cost: minutes, runners, and storage
GitHub Actions bills per runner-minute (with a free allowance), with larger and specialized runners costing multipliers, plus storage for artifacts and packages. Caching, right-sized runners, and self-hosting for scale cut it. Here is the model.
Quick answer
GitHub Actions bills per runner-minute (with a monthly free allowance on private repos, and free for public repos), where larger runners and different OSes carry cost multipliers (Windows and macOS cost more than Linux), plus storage for artifacts and packages. Cost scales with build minutes times the runner multiplier. The levers: cache to cut build time, use Linux runners where possible (cheapest multiplier), right-size runner sizes, prune artifacts, and self-host runners for high-volume CI.
GitHub Actions is the CI/CD built into GitHub, and its cost is runner-minutes plus storage. The nuances are the multipliers, larger runners and non-Linux OSes cost more per minute, and the artifact and package storage, which accumulates. Understanding these makes Actions cost predictable and controllable.
Minutes, multipliers, and storage
| Component | Cost |
|---|---|
| Linux runner-minutes | Base rate (cheapest), free allowance |
| Windows / macOS | Cost multipliers (macOS highest) |
| Larger runners | Higher per-minute rate |
| Storage | Artifacts + packages (GB-month) |
Private repos get a monthly free minute allowance; beyond it, minutes bill per runner-minute. Linux is the base and cheapest; Windows costs more and macOS the most (a several-times multiplier), so OS choice matters. Larger runners (more vCPU/RAM) cost proportionally more. Storage for artifacts and packages bills per GB-month and grows if not pruned.
The multiplier matters
Because macOS and Windows runners cost multiples of Linux, running jobs that could be on Linux on a more expensive OS wastes money. Use Linux runners wherever the job allows, reserving macOS for genuinely Mac-specific builds (iOS, macOS apps) and Windows for Windows-specific needs. This alone can sharply cut the bill for cross-platform projects.
Controlling GitHub Actions cost
Cache dependencies and build layers to cut minutes (the CI lever), use Linux runners where possible (cheapest multiplier), right-size runner sizes to the job, prune old artifacts and set short artifact retention, build only what changed, and for high-volume CI use self-hosted runners that avoid per-minute pricing. Because cost is minutes times multiplier plus storage, cutting minutes, choosing cheap runners, and pruning storage govern the bill.
FAQ
How is GitHub Actions priced?
Per runner-minute (with a monthly free allowance on private repos, and free for public repos), where larger runners and non-Linux OSes carry cost multipliers (Windows costs more than Linux, macOS the most), plus storage for artifacts and packages billed per GB-month. Cost scales with build minutes times the runner multiplier, plus accumulated storage.
How do I reduce GitHub Actions cost?
Cache dependencies and build layers to cut minutes, use Linux runners where possible (the cheapest multiplier), right-size runner sizes to the job, prune old artifacts and set short retention, build only what changed, and for high-volume CI use self-hosted runners that avoid per-minute pricing. Cutting minutes, choosing cheap runners, and pruning storage govern the bill.
Why do macOS runners cost more in GitHub Actions?
macOS and Windows runners carry cost multipliers over Linux (macOS the highest, a several-times multiplier), reflecting the higher cost of that infrastructure. So running jobs on macOS or Windows that could run on Linux wastes money. Use Linux wherever the job allows, reserving macOS for Mac-specific builds (iOS, macOS apps) and Windows for Windows-specific needs.
Does artifact storage cost money in GitHub Actions?
Yes. Artifacts and packages bill per GB-month and accumulate if not pruned, so long artifact retention on large build outputs adds up. Setting short artifact retention periods, uploading only artifacts you actually need, and pruning old packages keeps the storage component of the Actions bill controlled.
Should I use self-hosted runners for GitHub Actions?
For high-volume CI, they can be cheaper. Self-hosted runners run on your own infrastructure (instances you provision), avoiding GitHub's per-minute charges, so at high build volume the instance cost can be less than the equivalent hosted minutes. The tradeoff is operating the runners yourself. For moderate volume, hosted runners' simplicity usually wins.
Does C3X estimate GitHub Actions cost?
C3X prices self-hosted runner infrastructure from your Terraform if you run your own, so that appears before deploy. Hosted Actions minutes depend on build time, frequency, and runner OS/size, which you model as usage assumptions, and the levers (caching, Linux runners, pruning) reduce those.
What to do next
Price your CI runner infrastructure before you scale. C3X reads your Terraform and prices your resources against a live catalog. Start with the quickstart.
Share this post
Try C3X on your own Terraform
Free and open source. No API key required. One command to install, one command to estimate.