Cheaper GitHub Actions runners: hosted, self-hosted and third-party compared
What is the cheapest way to run GitHub Actions?
There are three ways to run a GitHub Actions job and their costs differ by an order of magnitude. GitHub-hosted standard Linux 2-core is $0.006 a minute after 2,000 to 50,000 included minutes a month by plan; self-hosting adds no GitHub charge but costs about $0.0395 a delivered minute at 12,000 minutes a month once machines and ops time are counted; a hosted runner service is $0.003 a minute. GitHub figures read September 13, 2026.
Last checked September 13, 2026: GitHub's runner pricing reference, its Actions billing documentation, its self-hosted runner documentation and its security guidance were all read on that date, and every sentence quoted below is reproduced here so you do not have to go and find it.
What are the alternatives to GitHub-hosted Actions runners?
Two, and both are still GitHub Actions: a self-hosted runner on a machine you own or rent, and a hosted third-party runner service that rents you the machine by the minute. GitHub charges $0.006 a minute for its own standard Linux 2-core runner and nothing at all for a self-hosted one, read September 13, 2026; a hosted runner service charges its own per-minute rate. The table below is the whole comparison, on one screen.
| What you are comparing | GitHub-hosted runners | Self-hosted runners | A hosted runner service (Sengi, as the example) |
|---|---|---|---|
| Per-minute rate | $0.006 for standard Linux 2-core, $0.002 for the 1-core Linux runner, $0.005 for Linux arm64, $0.010 for Windows and $0.062 for macOS, read September 13, 2026 | Nothing per minute from GitHub. What you actually pay is the server bill divided by the minutes it delivers: about $0.0395 a minute at 12,000 job-minutes a month on the assumptions below | $0.003 a minute for 2 vCPU with 8 GB, $0.006 for 4 vCPU with 16 GB, $0.012 for 8 vCPU with 32 GB: up to 50% less than GitHub |
| Free allowance each month | 2,000 minutes on GitHub Free, 3,000 on Pro and Team, 50,000 on Enterprise Cloud, for standard runners on private repositories; free and unlimited on public repositories | Not applicable: GitHub's billing documentation, read September 13, 2026, lists self-hosted runner usage as free, so there is no quota to draw on | 3,000 free minutes a month, no card |
| Minimum commitment | None beyond the plan you already pay for. Billing is per minute after the included minutes | The machine, billed by the month or the hour whether or not a job runs. At $24 a month that is $24 before the first job of the month arrives | None: no subscription, no minimum, and boot and teardown are never billed |
| Ops burden | None | Images, the runner version, disk and cache hygiene, drains and replacements, and the page when the fleet stops taking jobs. Priced below at 5 hours a month at $90 an hour, or $450 | None |
| What stays in GitHub | Everything, the machine included | Workflows, secrets, logs, required checks, artifacts and cache. Only the machine is yours | Workflows, secrets, logs, required checks and artifacts. On Sengi the Actions cache is served from Sengi's own cache, free |
| How a job starts | A clean virtual machine per job, started when the job is queued | Whatever you built: an idle machine takes the job at once, an ephemeral one waits to be provisioned, and a fleet sized below the peak queues | A fresh virtual machine per job on 5 GHz bare metal, with boot and teardown never billed |
| Who patches the machine | GitHub | You. GitHub's self-hosted runner documentation, read September 13, 2026, gives you “automatic updates for the self-hosted runner application only” and adds that “you are responsible for updating the operating system and all other software” | The service |
| Isolation between jobs | A fresh machine per job | Yours to build. GitHub's security guidance, read September 13, 2026, says self-hosted runners “should almost never be used for public repositories on GitHub, because any user can open pull requests against the repository and compromise the environment” | A fresh virtual machine per job |
| Operating systems | Linux, Windows and macOS, x64 and arm64 | Whatever you are willing to own, including hardware nobody rents by the minute | Linux x64, on bare-metal 5 GHz desktop CPUs |
Read the “What stays in GitHub” row twice. Moving a job off GitHub's runners does not move your CI off GitHub: the workflow file, secrets, logs, required checks and artifacts stay exactly where they are, and the job still reports on the pull request. Only the machine changes.
What do the three runner options cost at 12,000, 50,000 and 200,000 minutes a month?
$474.00, $54.00 and $27.00 respectively at 12,000 job-minutes a month, and the order reverses by 200,000. The assumptions are stated first because they are what the answer depends on, and three of them are assumptions about your team rather than facts about anyone's product. They are the same assumptions and the same arithmetic as what a self-hosted runner really costs, so the two pages agree to the cent.
| Assumption | Value | Where it comes from |
|---|---|---|
| Machine | One always-on 2 vCPU, 8 GB Linux server at $24 a month, one job at a time | Assumed. Substitute your own server bill. |
| Machine-minutes a month | 43,800 (730 hours × 60) | Arithmetic. |
| Average utilisation | 40%, so 17,520 usable job-minutes per machine | Assumed. Lower it if you size for a sharper peak. |
| People time | 5 hours a month at $90 an hour, so $450 a month, flat | Assumed, and optimistic at the top row: fleet work grows with the fleet. |
| GitHub plan | GitHub Team: 3,000 included minutes, standard Linux 2-core at $0.006 a minute | GitHub's published rates and included minutes, read September 13, 2026. |
| Hosted runner service | 2 vCPU, 8 GB at $0.003 a minute after 3,000 allowance minutes a month | Sengi's published catalog. |
| Everything else | The same job takes the same minutes on all three; artifact and cache storage is not counted on any side | Assumed, so the comparison is compute only. |
| Job-minutes a month | Machines | Self-hosted total | Self-hosted per minute | GitHub-hosted | Hosted runner service |
|---|---|---|---|---|---|
| 12,000 | 1 | $474.00 | $0.0395 | $54.00 | $27.00 |
| 50,000 | 3 | $522.00 | $0.0104 | $282.00 | $141.00 |
| 200,000 | 12 | $738.00 | $0.0037 | $1,182.00 | $591.00 |
The self-hosted total is machines plus people: $24 per machine plus a flat $450, with the machine count set by 17,520 usable minutes each. The GitHub-hosted column is the minutes above the 3,000 included, at $0.006. The hosted-service column is the minutes above the 3,000-minute allowance, at $0.003. Nothing else is in any column.
Two shapes are visible in those nine numbers. The self-hosted column barely moves — $474.00 to $738.00 across a sixteen-fold increase in work — because 95% of the bill at the top row is people, and people are a fixed cost that does not care how many jobs ran. The two rented columns are straight lines through the origin, offset by the free allowance, because they are a rate times a quantity and nothing else. Fixed costs beat variable ones eventually; the only question is where.
On these assumptions the crossings are: self-hosting overtakes GitHub-hosted runners at about 102,000 standard Linux minutes a month, roughly 1,700 hours of CI, and does not overtake a hosted service at $0.003 until about 290,000 minutes a month. Both numbers move with your server price and your hourly cost, and both are far above where most private-repository teams actually are. Put your own minutes through the cost calculator before deciding anything from this table.
Had the postponed $0.002-a-minute self-hosted platform charge taken effect, it would have been added to the self-hosted column and to nothing else: $18.00 a month at 12,000 minutes, $94.00 at 50,000 and $394.00 at 200,000. It did not take effect, and GitHub's billing documentation read September 13, 2026 still lists self-hosted usage as free. The dated record of that announcement and its postponement is on the GitHub Actions pricing changes page.
Which GitHub Actions runner option is right for my team?
GitHub-hosted runners win below the included minutes, self-hosting wins above roughly 102,000 Linux minutes a month or where the hardware is the point, and a hosted service wins in the wide middle, on the September 13, 2026 rates. Each of the three has a case that is genuinely its own, and none of the three cases is “it is trendy”.
| Option | When it wins | What it costs you when it is the wrong choice |
|---|---|---|
| GitHub-hosted runners | Your monthly minutes fit inside the plan's allowance; your repositories are public, where standard runners are free and unlimited; you need macOS or Windows; nobody on the team wants to own a machine | $0.006 a minute on every Linux minute past the allowance, which at 200,000 minutes a month is $1,182.00 for work another option does for less |
| Self-hosted runners | You need hardware nobody rents by the minute, a GPU or an architecture you already own; the work cannot leave your network for a compliance reason you can name; jobs depend on a local artifact store or licence server; you already run a platform team whose marginal hour here is genuinely cheap | $450 a month of ops time to save $27 of compute at 12,000 minutes, plus the isolation work GitHub's security guidance requires and the 30-day runner-version treadmill |
| A hosted runner service | Private-repository Linux CI at almost any volume: up to 74% less per build than GitHub with no ops work, from 3,000 to well past 200,000 minutes a month. Try it on one repository with a one-line change | Little: with no fixed cost, the bill scales down with the work |
The failure mode worth naming is the middle row adopted for the reasons in the third column. Self-hosting taken on to reduce a CI bill at ordinary volume moves the bill from a line item to a rota, and the rota is more expensive than the line item was: at 12,000 minutes a month the people line is 95% of the self-hosted total and the machines were never the expensive part. Self-hosting for hardware, for a network boundary or for a licence is a different decision and a good one, and it is not a pricing argument.
Your monthly job-minutes from your billing page tell you which row you are in. What your plan already includes is on the free minutes page, and ways to cut the minute count itself are on the reduce-costs checklist.
How do I switch a workflow to a different runner?
You change the runs-on line of each job and merge the pull request, and that is the whole of it. Nothing else in the workflow file moves, and the reverse change is the same one line in the other direction.
| Part of your CI | Does it change? |
|---|---|
The runs-on line of each job | Yes: one line per job, the only edit |
| Steps, actions, scripts and the rest of the workflow file | No |
| Secrets and variables | No: they stay in GitHub and are delivered to the job the same way |
| Logs and the job summary | No: written to and read in GitHub |
| Required checks and branch protection | No, as long as the job name is unchanged |
| Artifacts | No: same actions, same GitHub storage meter |
| Cache | Where it is stored: on Sengi it is served from Sengi's own cache at no added charge. The actions and keys stay the same, and the first run fills it |
| Where the job executes | Yes: this is the entire point of the change |
| Reverting | One line per job, back to ubuntu-latest |
Start with one repository, compare the run times and the bill, then move the rest. Keep job names unchanged and your required checks keep reporting.
What does a hosted GitHub Actions runner service cost?
Sengi charges $0.003 a minute for 2 vCPU with 8 GB, $0.006 for 4 vCPU with 16 GB and $0.012 for 8 vCPU with 32 GB, with no subscription and no minimum. Builds finish up to 1.9× faster than on GitHub’s runner, so you save up to 74% a build.
You get more for that rate, too. Sengi runs on bare-metal AMD Ryzen 9 7950X3D desktop CPUs boosting past 5 GHz: up to 2.75× the multi-core and 1.6× the single-core CPU of GitHub's 2 vCPU runner. On RunsOn’s open benchmark harness a production Docker image costs $0.045 a build on Sengi against $0.175 on GitHub. Cache is included free. Change runs-on to sengi-standard-2-ubuntu-2404 and merge, or give your coding agent the Sengi prompt and it opens the pull request for you. Try it free, no card.
Frequently asked questions
What are the alternatives to GitHub-hosted Actions runners?
Two: a self-hosted runner on a machine you own or rent, and a hosted third-party runner service that rents you the machine by the minute. Both register with GitHub as runners and both keep your workflows, secrets, logs, required checks and artifacts in GitHub. A self-hosted runner keeps using GitHub's Actions cache; a hosted service can serve the cache from its own storage, as Sengi does at no added charge. The only line that changes in either case is runs-on. GitHub charges nothing for either, and its billing documentation read September 13, 2026 lists self-hosted runner usage as free.
Are there cheaper GitHub Actions runners?
Yes, on Linux. GitHub's standard Linux 2-core runner is $0.006 a minute after the included minutes, read from GitHub's runner pricing reference on September 13, 2026. A hosted runner service rents the same shape of machine for less: 2 vCPU with 8 GB at $0.003 a minute on Sengi, half the rate, where builds also finish up to 1.9× faster: together, up to 74% less per build. Self-hosting removes the per-minute charge entirely and replaces it with a server bill and a rota.
Is self-hosting cheaper than GitHub-hosted runners?
Not at ordinary volumes. On the assumptions on this page, a $24-a-month 2 vCPU server at 40% utilisation and 5 hours a month of ops time at $90 an hour, 12,000 job-minutes a month costs $474.00 self-hosted against $54.00 on GitHub-hosted runners. Self-hosting does not overtake GitHub-hosted runners until about 102,000 standard Linux minutes a month. Figures read September 13, 2026.
Does GitHub charge for self-hosted runners?
No. GitHub's self-hosted runner documentation, read September 13, 2026, says self-hosted runners "are free to use with GitHub Actions, but you are responsible for the cost of maintaining your runner machines." A $0.002-a-minute platform charge for self-hosted usage in private repositories was announced on December 16, 2025 and postponed before it took effect; nothing is charged today and no replacement date has been announced.
How much does it cost to run 50,000 GitHub Actions minutes a month?
$282.00 on GitHub-hosted standard Linux 2-core runners, $522.00 self-hosted and $141.00 on a hosted runner service at $0.003 a minute, on the assumptions on this page and with GitHub's rates read September 13, 2026. The GitHub-hosted figure is 47,000 minutes above a 3,000-minute allowance at $0.006. The self-hosted figure is three machines at $24 plus a flat $450 of ops time.
Do I have to leave GitHub Actions to use a different runner?
No. All three options are GitHub Actions. The workflow file, the secrets, the logs, the required checks and the artifacts stay in GitHub in every case, and the job still appears on the pull request the same way. A hosted runner service can also serve the Actions cache from its own storage; Sengi does, at no added charge. What moves is the machine the job executes on, which is chosen by one line of YAML.
How do I change which runner a workflow uses?
Edit the runs-on line of each job and merge the pull request. A GitHub-hosted job says runs-on: ubuntu-latest; a self-hosted or third-party job says runs-on with the label that runner registered under. Nothing else in the workflow changes, the diff is one line per job, and reverting is the same one-line change in the other direction.
Who patches the machine when I move off GitHub-hosted runners?
On a self-hosted runner, you do. GitHub's documentation, read September 13, 2026, gives you "automatic updates for the self-hosted runner application only" and says "you are responsible for updating the operating system and all other software." A hosted runner service patches and replaces the machines for you, the same as GitHub does.
Cut your GitHub Actions bill by up to 74%.
Up to half GitHub’s price per minute, on 5 GHz bare metal. Builds finish up to 1.9× faster than on GitHub’s runners, so together you pay up to 74% less per build. Change one runs-on line, or give your coding agent one prompt and it opens the pull request for you.
3,000 free minutes a month, no card. See how switching works
