Quick Answer: How much does github actions cost for a small project or business?
GitHub Actions costs most small projects nothing at all, because free accounts include a monthly allowance of minutes and storage that modest workloads rarely exhaust. Costs appear only when you exceed that allowance or run expensive runner types, and you can control them through your billing settings, runner choice, and repository visibility.
The main distinction is between standard GitHub-hosted runners, which draw from your included minutes, and larger or specialized runners, which are billed at higher per-minute rates. Self-hosted runners flip the model entirely: GitHub charges nothing for their use, and you pay only for your own hardware or cloud instances. (GitHub)
Before you budget, check your plan’s included minutes and storage, the per-minute rate for each operating system you build on, whether your repositories are public or private, your spending limit settings, and how much artifact storage your workflows retain.
The Short Version: Most Small Teams Pay $0

Here is a genuinely surprising fact: a large share of small projects run GitHub Actions for years and never see a bill. That is not because CI is cheap in general. It is because the free allowance is generous enough to cover typical small-team workloads, and many teams never realize how much headroom they have.
The structure is simple. Every account gets a pool of included minutes per month, plus a small storage allowance for packages and artifacts. Private repositories draw from that pool. Public repositories using standard runners do not. Once the pool runs dry, usage converts into per-minute charges, unless your spending limit blocks further use.
That single design choice, blocking rather than billing by default, is why so many small businesses are surprised to learn they were never at risk of an overage charge in the first place.
What the Free Allowance Actually Covers
The included minutes differ by plan tier. Free accounts historically receive 2,000 minutes per month for private repositories, while paid individual and team plans receive 3,000, and enterprise accounts receive substantially more. Those figures have shifted before, so confirm the current numbers on your plan’s billing page before you build a budget around them.
| Plan tier | Included minutes (private repos) | Typical small-project fit |
|---|---|---|
| Free | ~2,000/month | Hobby projects, solo developers, light CI |
| Pro / Team | ~3,000/month | Small teams with daily builds |
| Enterprise Cloud | ~50,000/month | Organizations with heavy pipelines |
Two details matter more than the headline number. First, unused minutes do not roll over, so a quiet month does not bank credit for a busy one. Second, usage is typically rounded per job, which means a hundred tiny jobs can cost more than one long job doing the same work. Batching your test steps into fewer jobs is one of the cheapest optimizations available.
Public repositories are a different story. Standard runners on public repos are free, which is why open-source projects can run enormous test matrices without paying anything. Larger runners and some premium features are still billed even on public repos, so the free label is not absolute.
The Per-Minute Rates That Determine Your Bill
Once you exhaust the free tier, cost depends on the operating system. Linux is the cheapest, Windows sits roughly in the middle, and macOS is dramatically more expensive, historically around ten times the Linux rate. The exact figures have been revised over time, and GitHub introduced new runner classes and arm64 options that changed the calculus, so treat any number you read online as a starting point rather than gospel.
The practical takeaway is that your operating system choice matters more than your minute count. A team running 1,500 Linux minutes might pay nothing while staying inside the free tier. A team running 400 macOS minutes might already be over budget on a comparable plan. If your project builds iOS apps, your cost profile looks nothing like a typical web project’s.
Larger runners, the multi-core machines GitHub offers for faster builds, are billed at higher per-minute rates. They can be worth it: a four-core runner that halves a twenty-minute build saves wall-clock time and, sometimes, total cost. But they are not free speed, and teams sometimes enable them casually and then wonder why the invoice moved.
Why Self-Hosted Runners Change the Math
Self-hosted runners are free to use with GitHub Actions. You install the runner agent on your own machine, a spare server, or a cloud instance, and GitHub orchestrates jobs on it without charging per minute. You pay only for the infrastructure you already control.
For small businesses with heavy CI, this is often the single biggest cost lever. A team running thousands of Linux minutes monthly might spend a few dollars on GitHub-hosted minutes, or nothing at all if they move the workload to a modest self-hosted box. The tradeoff is operational: you own patching, scaling, and security. For a small team with one part-time infrastructure person, that trade can be excellent. For a team with no one watching, it can quietly become a liability.
The same logic applies across the tool stack. Teams comparing infrastructure costs often look at adjacent line items too, like how much a steam deck costs for developer hardware or how much minecraft costs when provisioning test environments for game-adjacent projects. Small recurring charges add up fast, and CI is rarely the largest one.
Storage, Artifacts, and the Charges People Forget
Minutes get all the attention, but storage is where surprise charges hide. Artifacts, the files your workflows upload, and packages you publish both consume storage beyond the included allowance, billed per gigabyte-month. Historically that rate has been modest, but retention settings are the multiplier.
Here is a mistake that shows up constantly in practice: teams leave artifact retention at the default ninety days for every build, including builds nobody will ever download. A busy repository can accumulate hundreds of gigabytes of stale test reports and build outputs. Trimming retention to seven or fourteen days for most artifacts is a five-minute change that can cut storage costs dramatically.
The other common trap is caching. Caches are wonderful for build speed, but oversized or never-invalidated caches consume storage without delivering benefit. Set explicit cache keys, prune old entries, and treat storage the way you treat minutes: as a budget with a ceiling.
Setting a Spending Limit Before You Need One
GitHub lets account owners set a spending limit that caps how much usage beyond the included allowance is permitted. The default behavior matters enormously here: depending on your settings, exceeding the allowance may block further usage rather than bill you. For a small business, that default is a feature, not an obstacle.
The practical advice is to check your spending limit before a busy release week, not after. Decide deliberately whether you want overages to bill or to fail. A blocked build during a release is annoying; an unexpected invoice is worse for some teams and better for others. There is no universal right answer, only a deliberate one.
If you are already tracking software line items, the habit transfers. Teams that carefully compare how much 1password costs per seat or how much playstation plus costs annually tend to be the same teams that notice when CI minutes creep upward month over month.
Realistic Cost Scenarios for a Small Business
Abstract rates are hard to budget against, so here are three realistic profiles. These are estimates built from the rate structure, not quotes, and they assume current pricing holds.
| Scenario | Monthly usage | Estimated cost |
|---|---|---|
| Solo developer, one private repo, light CI | ~300 Linux minutes | $0 (within free tier) |
| Small team, five repos, daily builds | ~2,500 Linux minutes | $0–$5 |
| Mobile team, iOS builds twice daily | ~600 macOS minutes | Material, often tens of dollars |
The pattern is clear. Linux-heavy workloads almost always land inside the free tier or just above it. macOS-heavy workloads blow past it quickly. Windows sits in between and depends heavily on matrix size.
A common optimization is to split workflows: run linting and unit tests on Linux where minutes are cheap, and reserve macOS or Windows runners only for the jobs that genuinely require them. Teams that do this often cut their bill in half without touching their test coverage.
Where the Money Actually Leaks
Beyond the headline rates, five habits drive most unnecessary spending. Watching for them is more valuable than memorizing prices.
- Matrix sprawl. Testing every combination of versions and operating systems multiplies minutes fast. Test the combinations you actually support.
- Redundant runs. Pushing five commits in ten minutes triggers five full pipelines. Concurrency controls that cancel superseded runs are essentially free money.
- No dependency caching. Reinstalling packages on every run wastes minutes that caching would eliminate.
- Oversized runners for trivial jobs. A four-core runner for a thirty-second lint job is pure waste.
- Default artifact retention. Ninety days of build outputs nobody downloads is a silent storage bill.
None of these require deep expertise to fix. They require someone to look at the usage dashboard once a month and ask why the line moved.
How GitHub Actions Compares to Alternatives
Cost conversations rarely happen in isolation. GitHub Actions competes with dedicated CI services and with the CI features bundled into other platforms, and the comparison is not apples to apples.
The bundled model is the key difference. Because Actions ships with GitHub, the marginal cost of adding CI to an existing repository is often zero, whereas a dedicated CI vendor means a separate subscription with its own seat pricing. For a small business already paying for GitHub, that bundling is the strongest argument for staying.
The weakness is predictability at scale. Per-minute billing with variable runner rates makes forecasting harder than a flat subscription, especially for teams with spiky workloads. Businesses planning a significant CI expansion sometimes find a fixed-price alternative easier to budget, even at a higher sticker price.
Practical Tips That Actually Work in Practice
Start by measuring before optimizing. The usage dashboard shows minutes consumed by repository, workflow, and operating system. Most teams discover that one or two workflows account for the majority of consumption, which makes the fix obvious.
Then apply the cheap wins in order: concurrency cancellation, dependency caching, artifact retention trimming, and runner right-sizing. Only after those should you consider self-hosted runners, which carry real operational overhead. If your stack includes other paid tools, the same discipline pays off when you evaluate how much an iphone 17 costs for testing devices or how much a ps5 costs when budgeting hardware for a QA lab.
Finally, document your spending limit decision. A one-line note in your runbook explaining whether overages bill or block prevents a panicked Slack thread during a release.
Conclusion
For most small projects and businesses, the honest answer to what GitHub Actions costs is nothing, or close to it. The free allowance covers typical Linux-based workloads comfortably, public repositories run standard runners at no charge, and self-hosted runners remove per-minute billing entirely for teams willing to own the infrastructure.
The costs that do appear are concentrated and predictable: macOS and Windows builds, oversized runners, sprawling test matrices, and forgotten artifact storage. None of these are mysterious, and all of them respond to the same handful of habits. Measure your usage, set a deliberate spending limit, trim retention, cache aggressively, and cancel superseded runs. Do that, and CI becomes one of the few line items in your budget that stays flat while everything else creeps upward.
Frequently Asked Questions
Are GitHub Actions minutes really free for private repositories?
They are free up to your plan’s monthly allowance. Beyond that, usage converts to per-minute charges unless your spending limit blocks it. The allowance resets monthly and unused minutes do not carry over, so plan for your busiest month rather than your average one.
Do public repositories ever incur charges?
Standard GitHub-hosted runners on public repositories are free, but larger runners and certain premium features are still billed. If your public project uses multi-core runners or heavy storage, expect a bill even though the repository is open source.
Is it cheaper to use self-hosted runners?
Per-minute charges drop to zero, but you take on hardware, patching, scaling, and security. For teams with steady, heavy CI and someone to maintain the infrastructure, self-hosted is often dramatically cheaper. For occasional builds, the operational overhead usually outweighs the savings.
Why did my bill jump when my workflow count barely changed?
Look at operating system mix, matrix size, and artifact retention first. Adding a macOS job or doubling a test matrix can multiply consumption without changing how many workflows you run. Storage charges from long retention periods also accumulate quietly and appear as a separate line.
Can I cap spending so I never get a surprise invoice?
Account owners can set a spending limit, and depending on your configuration, usage beyond the included allowance may be blocked rather than billed. Review that setting deliberately, because a blocked build during a release can be more disruptive than a small overage charge.
Does the operating system really change the cost that much?
Substantially. Linux is the cheapest per minute, Windows costs more, and macOS costs many times the Linux rate. A workflow that fits comfortably in the free tier on Linux can exceed it on macOS with a fraction of the minutes, which is why splitting workflows by platform is such a common optimization.


