How GitHub Actions billing works
- Public repositories run free on GitHub's standard runners (Linux, Windows, macOS, and the 2- and 4-core Arm Linux runners). Larger runners are billed in every repository.
- Included minutes come with the plan (Free 2,000, Pro 3,000, Team 3,000, Enterprise 50,000 a month) and apply to standard runners on private repositories. Each Windows minute consumes 2 included minutes and each macOS minute 10, which is why a modest iOS build eats a whole Team plan allowance.
- Overage is charged per minute at list price: Linux 2-core $0.008, Windows 2-core $0.016, macOS $0.08 (and $0.12 to $0.16 for the large macOS runners). Larger Linux and Windows runners scale roughly linearly with cores.
- Every job is rounded up to the next whole minute. Ten one-second jobs cost ten minutes.
- Storage for artifacts and caches beyond the included amount is billed separately at $0.008 per GB-day (not in this calculator).
Cheapest wins, in order
- Add
concurrencywithcancel-in-progress: trueto pull-request workflows so superseded runs stop. - Move anything that doesn't need macOS or Windows to Linux; one macOS minute costs ten Linux minutes.
- Merge jobs that run under a minute; rounding on tiny jobs is often 20 to 40 percent of a bill.
- Cache dependencies (
actions/cache,setup-*withcache:) and skip scheduled runs when nothing changed. - Only then look at larger runners (faster, often cheaper per build when a job is CPU-bound) or self-hosted.
Prices are GitHub's published list prices as of 2026 and are repeated here for estimating only; check GitHub's billing documentation before relying on a number. Negotiated Enterprise pricing differs.