How the calculator works
Every figure on the calculator comes from a short list of formulas applied to a pricing data file. This page states them, so you can redo an estimate yourself and see what it leaves out.
Where the prices come from
The per-minute rates of the standard runners, the minutes each plan includes and the storage prices were read from two pages of GitHub's documentation on 2026-10-05: Actions runner pricing and GitHub Actions billing. They sit in one data file that the page loads; the scripts hold no prices. When GitHub changes a rate, only that file changes.
That file is public: free pricing data (JSON). It is the same free-tier data the calculator loads, with each price, its unit and its source address, last checked on 2026-10-05.
The full version adds a second data file with GitHub's larger-runner rates, CircleCI's credit prices and resource classes, and Buildkite's Pro plan and hosted agent prices, read from those vendors' own pricing pages on the date shown in the full-version panel.
The free calculator
- Jobs per month = jobs per day × working days per month.
- Minutes billed per job = your average job length rounded up to a whole minute. GitHub rounds each job up to the nearest whole minute; the calculator knows only your average, so it rounds the average. If your jobs vary a lot in length the real figure can differ.
- Minutes per runner = jobs per month × that runner's share of the mix × minutes billed per job. If the shares do not add up to 100% they are scaled so that they do, and the page says so.
- Private repository. All minutes count as billable. The plan's included minutes are taken off first; the minutes beyond them are charged at each runner's own per-minute rate. The data read from GitHub lists no minute multiplier, so one minute on any standard runner uses one included minute.
- Public repository. Standard GitHub-hosted runners are free, so billable minutes and cost are zero and no included minutes are used.
- Cost per year = cost per month × 12.
Which runners use up the included minutes
Included minutes are used as jobs run during the month, so the bill depends on which runners happen to use them up. The headline figure assumes a steady mix: each runner gets included minutes in proportion to its share of all minutes. When you mix runners with different rates the page also shows a range. The low end is the bill if the dearest runners used the included minutes; the high end is the bill if the cheapest runners did.
What the free estimate leaves out
- Storage for artifacts, packages and caches.
- The price of the GitHub plan itself (seats).
- Larger runners, which are billed separately (full version).
- Taxes, discounts, credits, spending limits and budgets on your account.
The full version
Larger runners
Cost = jobs per month × minutes billed per job × the larger runner's per-minute rate. Included minutes cannot be used for larger runners and they are not free for public repositories, so the whole amount is added to the bill.
CircleCI
Priced on the Performance plan. Credits = minutes × the credits per minute of the resource class you pick for each runner, using the same rounded-up minutes as the GitHub estimate. Credits beyond the plan's monthly included credits are bought in whole packs. The plan's starting price is treated as the least you pay for credits in a month, not as a fee on top of the packs. Users beyond the included ones are charged the per-user price. Docker layer caching, storage and network credits are not included.
Buildkite
Priced on the Pro plan with hosted agents. Buildkite meters to the second without rounding, so this estimate uses your un-rounded average job length. Usage = minutes × the per-minute price of the shape you pick. The plan's included Linux vCPU minutes are taken off the Linux usage; a shape's vCPU count is its price divided by the per-vCPU-minute price. Every active user is charged the per-user price. Runners with no hosted shape on the price list (for example Windows) stay "not compared" and are named in the result.
Why the comparison is only a starting point
Machines with the same CPU count differ in memory, disk and speed between services, so the same job rarely takes the same number of minutes. The suggested matches go by CPU count only and you can change each one. GitHub's plan seat prices are not in the data, so the GitHub row shows compute only while the other two rows show users as a separate column.
Self-hosted break-even
GitHub does not bill minutes on self-hosted runners. Self-hosted cost = machines × your monthly cost per machine + upkeep hours × your hourly cost. Break-even minutes = the plan's included minutes + (self-hosted cost − larger-runner bill, never below zero) ÷ the average per-minute rate of your runner mix. Below that usage, GitHub-hosted is cheaper. The estimate assumes jobs take the same time on your machine and that your machines can carry the whole load.
What-if for caching and concurrency
The estimate is run again with a shorter average job (your caching percentage removed) and fewer jobs (your cancelled percentage removed). The net saving is the difference in overage cost minus the cost of cache storage beyond the included allowance, at GitHub's price per GB per month. If your workload already fits inside the included minutes, fewer minutes do not lower the bill.
CSV export
The export lists every figure shown, with its unit and a short note. The file is built in your browser and saved by it; nothing is uploaded.
Privacy
The calculator runs entirely in your browser. It sets no cookies, stores nothing on your device and loads nothing from other sites. The only request that carries anything you typed is the licence check, which sends the licence key to this site so it can be confirmed with Gumroad.