ci-cdplatform-engineeringcost-optimizationdevops

CI runner fleet cost: self-hosted fleet vs managed minutes

Managed CI minutes are simple and priced per minute. A self-hosted fleet is cheaper per minute and comes with idle capacity, autoscaling, caching, and maintenance. The crossover depends on utilization more than volume. Here is how to run the numbers for your fleet.

The C3X Team··7 min read

Quick answer

Managed CI minutes commonly run about 0.008 dollars per minute for a 2 vCPU runner, which is roughly 0.48 dollars an hour. An equivalent self-hosted instance costs about 0.08 dollars an hour on demand and under 0.03 dollars on spot, so the per minute price is 5 to 15 times lower, but only at high utilization. With autoscaling and 60 percent utilization, self-hosted usually wins above roughly 20,000 minutes a month; below that, managed wins once you count maintenance.

CI cost is one of the few infrastructure bills that engineers feel directly, because slow or throttled pipelines block their work. It is also one of the easiest to model, since the units are simple: minutes, concurrency, and the machine underneath.

The choice between managed minutes and a self-hosted fleet is usually presented as a price comparison per minute. That comparison favors self-hosting so heavily that it must be hiding something, and it is: idle capacity and operations.

The per minute comparison

OptionEffective hourlyPer minute10,000 minutes a month
Managed 2 vCPU runnerAbout 0.48 dollarsAbout 0.008 dollarsAbout 80 dollars
Managed 8 vCPU runnerAbout 1.92 dollarsAbout 0.032 dollarsAbout 320 dollars
Self-hosted 2 vCPU on demandAbout 0.08 dollarsAbout 0.0013 dollarsAbout 13 dollars at 100 percent use
Self-hosted 2 vCPU spotAbout 0.025 dollarsAbout 0.0004 dollarsAbout 4 dollars at 100 percent use

The catch is in that last column. Self-hosted numbers assume the machine is busy every minute you pay for, and CI demand is famously spiky: a wall of jobs between 10am and 4pm on weekdays, near silence otherwise.

Utilization is the whole argument

A fixed fleet of 10 always-on runners at 0.08 dollars an hour costs about 576 dollars a month regardless of use. If it serves 20,000 minutes, the effective price is 0.029 dollars per minute, almost four times the managed rate. If it serves 200,000 minutes, it is 0.003 dollars per minute and self-hosting is a clear win.

Average utilization for a naively sized fixed fleet is often 15 to 25 percent, because it is sized for peak concurrency. That is the single reason many self-hosted migrations fail to save money, and the fix is autoscaling rather than a bigger fleet. Seeself-hosted runner cost for the base comparison.

Autoscaling changes the outcome

Ephemeral runners that start on demand and terminate after a job push utilization toward 60 to 80 percent. Add spot instances, which suit CI well because a lost job simply retries, and the effective cost per minute drops far below managed pricing.

Keep a small warm pool, one or two runners, so the first job of the morning does not wait 90 seconds for a machine to boot. Scale the rest from zero. The warm pool is the price of latency, roughly 60 to 120 dollars a month, and it is usually worth paying.

The costs that are not instance hours

A self-hosted fleet brings expenses the per minute comparison ignores. Egress and NAT charges for pulling images and dependencies on every job can be substantial, often 100 to 500 dollars a month for a busy fleet unless you run a pull through cache or endpoints. Storage for caches and workspaces adds up. So does the control plane if runners live in Kubernetes.

Then there is engineering time: image maintenance, security patching, autoscaler tuning, debugging stuck runners, and keeping the fleet compliant. Half a day a week at loaded cost is roughly 1,500 to 2,500 dollars a month, which is the number that decides most small team comparisons.

Where the crossover lands

Adding it up, a reasonable rule is that below roughly 20,000 minutes a month, managed runners win once maintenance is counted. Between 20,000 and 100,000 minutes, an autoscaled spot fleet saves real money if the platform team already operates compute. Above 100,000 minutes, self-hosting usually saves 60 to 80 percent and the savings pay for the operational work several times over.

Hybrid is legitimate. Run the bulk of jobs on a self-hosted spot fleet and keep managed runners for overflow, for jobs needing special platforms, and as a fallback when the fleet is down. Paying a little for resilience beats an outage that blocks every merge.

Make the fleet's cost visible

Runner fleets are infrastructure, usually defined in Terraform, so they can be priced before they are deployed. c3x estimates the fleet's monthly cost from the plan with no cloud credentials, which means a pull request that changes instance type, warm pool size, or maximum concurrency shows the delta before it merges.

Pair that with a per repository minutes report and the conversation becomes concrete. Frequently the largest saving is not in the fleet at all: caching dependencies, skipping unaffected jobs in a monorepo, and cutting a 22 minute test suite to 8 minutes reduces spend more than any instance choice, as covered inCI/CD cost optimization.

FAQ

Are self-hosted CI runners cheaper than managed minutes?

Per minute, dramatically: about 0.0013 dollars for a 2 vCPU on demand instance versus about 0.008 dollars for a managed runner, and under 0.0005 dollars on spot. But that assumes the machine is busy every minute you pay for. A fixed fleet sized for peak concurrency often runs at 15 to 25 percent utilization, which erases the advantage entirely.

At what volume does a self-hosted runner fleet pay off?

Roughly above 20,000 minutes a month with autoscaling, once maintenance time is counted. Between 20,000 and 100,000 minutes an autoscaled spot fleet saves real money if a platform team already operates compute. Above 100,000 minutes, self-hosting typically saves 60 to 80 percent and comfortably pays for the operational work.

What costs do people forget when self-hosting CI runners?

Egress and NAT charges for pulling images and dependencies on every job, often 100 to 500 dollars a month without a pull through cache, storage for caches and workspaces, the cluster control plane if runners live in Kubernetes, and engineering time. Half a day a week of maintenance at loaded cost is roughly 1,500 to 2,500 dollars a month.

Should CI runners use spot instances?

Yes, CI is close to an ideal spot workload because an interrupted job simply retries and no state is lost. Combined with ephemeral runners that terminate after each job, spot pushes effective cost far below managed pricing. Keep a small warm pool of one or two runners so the first job of the day does not wait for a boot, costing roughly 60 to 120 dollars a month.

What saves more than changing runner type?

Running fewer minutes. Caching dependencies, skipping jobs for unaffected paths in a monorepo, parallelizing intelligently, and cutting a 22 minute test suite to 8 minutes reduces spend more than any instance choice. Since the fleet itself is Terraform, C3X can price fleet changes from the plan before merge, but the biggest lever is usually pipeline design.

What to do next

Price your runner fleet before you scale it. C3X estimates Terraform cost from the plan, no credentials needed. See the quickstart.

Try C3X on your own Terraform

Free and open source. No API key required. One command to install, one command to estimate.