Why We Built CICosts
The $3,000 Surprise
It started with a billing email.
We were running a typical SaaS startup—a handful of developers, a few repositories, the usual CI/CD pipeline. GitHub Actions was our go-to for everything: tests, builds, deployments. It just worked.
Then the monthly bill arrived: $3,247.
We stared at it. That couldn't be right. We had maybe 10 active workflows. How did we spend three thousand dollars on CI?
The Investigation
We dug into GitHub's billing page. It showed us the total. It showed us the breakdown by repository. But it couldn't tell us which workflows were expensive, or which jobs within those workflows were the culprits.
After hours of manual investigation—downloading CSV exports, correlating run times with runner prices, building spreadsheets—we finally found it: a matrix build that was spawning 48 parallel jobs on 8-core runners for every pull request. Including drafts. Including WIP branches.
One misconfigured workflow was costing us $2,100 per month.
The Real Problem
The more we talked to other engineering teams, the more we heard the same story:
The problem wasn't that teams were careless. The problem was visibility. GitHub gives you a monthly total, but by then it's too late. You can't optimize what you can't measure.
Building the Solution
So we built CICosts.
The core idea is simple: real-time cost tracking for GitHub Actions. Every time a workflow completes, we calculate the cost based on:
Then we aggregate it into dashboards, trends, and alerts. You can see:
And crucially, you can set alerts so you know before the bill arrives.
What We Learned
Building CICosts taught us a few things about CI/CD costs:
1. 80/20 is real. In most codebases, 20% of workflows account for 80% of costs. Finding and optimizing those workflows has outsized impact. 2. Runners matter. The difference between a 2-core and 8-core Linux runner is 4x in cost. Many jobs don't need the extra power. 3. Matrix builds are sneaky. A 10x5 matrix is 50 parallel jobs. Each one costs money. Make sure you need every combination. 4. Drafts are expensive. Running full CI on draft PRs adds up fast. Consider running only lint/format until the PR is ready for review. 5. Self-hosted isn't always cheaper. The math depends on your volume. For many teams, GitHub-hosted runners are actually more cost-effective when you factor in maintenance.Try It Free
We built CICosts to solve our own problem. Now it's available for everyone.
The free tier includes:
Setup takes about 2 minutes. Just connect your GitHub account, install the app on your organizations, and you're done.
Get started free →We'd love to hear what you find. Drop us a line at hello@cicosts.dev or find us on GitHub.
---
P.S. That $3,000 bill? After fixing the matrix build and a few other optimizations, we got it down to $847/month. Still not cheap, but at least we know where it goes.