What a self-hosted GitHub Actions runner really costs, and the flat-price way
A self-hosted GitHub Actions runner costs nothing in GitHub minutes. Its real cost is the server and the hours someone spends keeping it patched, clean and online, and those hours come out of your team's week.
Skipbox is a self-hosted runner with the hours taken out: your own machine, run for you, for a flat $39 a month with unlimited minutes. Change one runs-on line to move a job.
What a self-hosted runner costs
GitHub's docs put it plainly: self-hosted runners are free to use with GitHub Actions, and you're responsible for the cost of maintaining the machines. GitHub's billing docs list them as usage that stays free and doesn't reduce your included compute. GitHub announced a charge for them on December 16, 2025 and shelved it the next day.
So the cost has three parts:
| Part | What it is |
|---|---|
| The server | A machine sized for your largest job, paid every month whether jobs run or not |
| The hours | Installing the runner, OS and tool updates, cleaning between jobs, disk space, adding machines, fixing it when it goes offline |
| The risk | A machine that keeps what the last job left: files, processes, containers, tokens |
What GitHub-hosted minutes cost by comparison
| Minutes a month (4 vCPU) | GitHub | Skipbox S | You save every month |
|---|---|---|---|
| 10,000 | $102 | $39 | $63 |
| 20,000 | $222 | $39 | $183 |
| 30,000 | $342 | $39 | $303 |
| Always on | $500.40 | $39 | $461.40 |
| 20,000 minutes a month | GitHub | Skipbox | You save every month |
|---|---|---|---|
| 8 vCPU | $422 | $79 (M) | $343 |
| 16 vCPU | $822 | $149 (L) | $673 |
GitHub's figures are the bill on GitHub Team after its included compute. Price your own minutes in the calculator on the home page; no sign-in.
That bill grows every month: coding agents push fixes all day, each new test suite multiplies the jobs per push, and a GitHub budget stops jobs mid-month when it runs out. That's why teams move to self-hosted runners. The question is who does the upkeep.
The hours, in detail
Running your own runner means:
- registering the runner with a token that expires after an hour, and installing it as a service
- keeping the runner application current; GitHub stops sending jobs to versions that fall too far behind
- installing and patching Docker, Node, Python and every tool a job expects
- wiping the machine between jobs, or rebuilding it for each job and losing every cache
- clearing Docker images and old checkouts before the disk fills
- registering more runners, more machines, or a Kubernetes autoscaler when jobs queue
- noticing when the runner goes offline, before a job waits 24 hours and fails
Put your hourly rate on that list, and add it to the server. Skipbox's price already includes all of it.
What Skipbox does for you
- A flat price. $39, $79 or $149 a month for 4, 8 or 16 vCPU, unlimited minutes, no usage charges. Add plans to run more jobs at once; jobs beyond your machines wait their turn.
- Your own warm machine. Docker images, layers and build cache, package caches and the tool cache stay between jobs: at least 7× the cache GitHub gives a repository.
- Clean and checked. After every job the runner's credentials, processes and containers are wiped, and a health check runs. A machine that fails it is rebuilt automatically. From 13 November 2026, your checkout and its build output (Cargo's
target/) stay on your own machine for your next jobs; Clean every job gives each job a fresh machine. - Kept current. The runner, Ubuntu 24.04, Docker, Node 22 and Python 3.12 are Skipbox's to update.
Moving is one line
jobs:
build:
runs-on: skipbox # was ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm test
- Sign in to Skipbox with GitHub.
- Install the Skipbox GitHub app and pick your repositories.
- Change
runs-onand push.
Linux jobs run unchanged.
Security
- The machine is your account's alone; no other company's job runs on it.
- After every job, the runner's credentials, processes, containers and credential files such as
~/.npmrcare wiped. From 13 November 2026, your checkout and its build output (Cargo'starget/) stay on your own machine for your next jobs; Clean every job gives each job a fresh machine. - Code from people without write access (such as pull requests from forks) runs on a fresh VM, deleted afterwards. How jobs are kept apart.
Try it on your own jobs
The trial takes no card and runs for 7 days or 3,000 job-minutes. Move one job to runs-on: skipbox and compare it with a server you'd have to run yourself.
FAQ
How much does a self-hosted GitHub Actions runner cost?
GitHub bills nothing for its minutes. You pay for the server and for the hours spent on updates, cleanup, disk space and scaling. Skipbox folds all of that into one flat price: $39 a month for a 4 vCPU machine with unlimited minutes.
Does GitHub charge for self-hosted runner minutes?
No. Self-hosted runners are free and don't reduce your included compute; GitHub shelved the charge it announced on December 16, 2025 the next day. Skipbox's machines connect as self-hosted runners, so they cost only Skipbox's flat price.
Is it worth running your own GitHub Actions runner?
The minutes are free, so it pays once your GitHub bill is larger than the server plus your time. Skipbox gives you the free minutes without the time: at 20,000 minutes a month on a 4-core runner it saves $183 every month.
Can a self-hosted runner run more than one job at a time?
One registered runner takes one job at a time; more means more runners, more machines or an autoscaler. On Skipbox you add plans to run more jobs at once, and jobs beyond your machines wait their turn.
Are self-hosted runners safe?
GitHub warns that a self-hosted runner keeps what earlier jobs left unless you wipe it. Skipbox wipes the runner's credentials, processes and containers after every job, and runs code from people without write access (such as pull requests from forks) on a fresh VM. From 13 November 2026, your checkout and its build output (Cargo's target/) stay on your own machine for your next jobs; Clean every job gives each job a fresh machine.
Updated November 11, 2026