CI/CD Cost Per Build Minute: How It Is Counted and What You Are Actually Paying
A practical guide to CI billing mechanics, OS multipliers, and the hidden costs most guides ignore. Updated April 2026.
How Build Minutes Are Counted
- - Timer starts: when a runner accepts your job
- - Includes: environment setup, checkout, all steps
- - Timer ends: when the job completes (pass or fail)
- - GitHub Actions: rounds up to nearest minute
- - CircleCI: rounds to nearest second
Parallel jobs each count independently. A 10-minute workflow with 3 parallel test jobs = 30 build minutes. The wall-clock time is 10 minutes, but you are billed for 30 minutes of compute. This is a common billing surprise for teams new to parallel CI.
OS Multipliers: GitHub Actions
| OS | Multiplier | Effective rate (2026) | Old rate |
|---|---|---|---|
| Linux (Ubuntu) | 1x | $0.006/min | $0.008 |
| Windows | 1.67x | $0.010/min | $0.016 |
| macOS | 8x | $0.048/min | $0.080 |
GitLab CI SaaS has no OS multipliers. All OS types cost the same $0.010/min. CircleCI cost varies by resource class (compute size), not OS.
Hidden Costs Beyond Build Minutes
GitHub Actions: 500 MB free (Team: 2 GB). Beyond that: $0.008/GB/day. A project storing Docker images or build binaries at 50 GB/day of artifacts accumulates $400/month in storage costs. Default retention is 90 days - reduce to 7-14 days for large artifacts.
Pulling a 2 GB Node.js Docker image on every build run. At 500 runs/month: 1 TB egress. On cloud-hosted runners, egress to the internet can incur charges. Using a cache registry (GitHub Container Registry, ECR) to avoid repeated pulls can reduce egress significantly. Link: egresscost.com for egress cost analysis.
GitHub-hosted macOS runners are a shared pool. During peak times, queue times can extend significantly. A 15-minute iOS build may have a 5-minute queue time - not billed, but slows feedback. Self-hosted Mac minis have no queue beyond your own concurrent jobs.
SSO enforcement, SAML authentication, audit logs, and IP allowlisting are enterprise-only features on most CI platforms. Getting these often requires upgrading from $4/user/month to $21/user/month (GitHub) or $29/user/month to $99/user/month (GitLab). The jump can be $200-800/month for a 25-person team.
From March 2026: $0.002/min for self-hosted runners on private repos. This is a new cost that didn't exist before and directly increases the cost of self-hosting on GitHub Actions. See self-hosted vs cloud CI for the recalculated break-even.
Cost Per Deployment: A More Intuitive Frame
Engineers think in deployments, not minutes. Here is how to translate:
| Team deployment rate | Avg build time | Monthly cost (GitHub Actions Linux) |
|---|---|---|
| 10 deploys/day (250 working days) | 8 min avg | ~$120/year = $10/mo |
| 50 deploys/day | 8 min avg | ~$600/year = $50/mo |
| 200 deploys/day | 8 min avg | ~$2,400/year = $200/mo |
| 200 deploys/day (macOS builds) | 15 min avg | ~$52,200/year = $4,350/mo |
How Caching Affects Cost
Direct linear relationship: reduce build time by 50%, cut cost by 50%.
| Cache strategy | Without cache | With cache | Saving per run (GitHub Actions Linux) |
|---|---|---|---|
| npm install | 3 min | 20 sec | ~$0.016 |
| pip install | 4 min | 30 sec | ~$0.021 |
| Docker layer build | 10 min | 2 min | ~$0.048 |
| Maven dependencies | 6 min | 45 sec | ~$0.030 |
At 1,000 runs/month with npm caching: $16/month saved. At 5,000 runs: $80/month. Caching is the highest-ROI optimisation available. See our full CI cost optimization guide.