Claude Code GitHub Actions cost: minutes, rates, caps
On this page
Claude Code's GitHub Action bills GitHub Actions minutes on top of Claude's tokens. Anthropic's examples run it on ubuntu-latest: $0.006 a minute in a private repository, free in a public one. A self-hosted runner bills no minutes, and Skipbox is one at a flat $39 a month with unlimited minutes.
Fluxenic, the company behind Convika, makes Skipbox, so the flat-price runner in this post is our own product. Every GitHub and Anthropic fact below was read on its own page on November 11, 2026, quoted, and linked under Sources.
- The runner: the one your workflow's
runs-on:line names. Anthropic's examples all sayruns-on: ubuntu-latest, GitHub's 2-core Linux runner. - The rate: GitHub bills that runner at $0.006 a minute in a private repository and rounds every job up to a whole minute.
- A month: the job's minutes times its runs. GitHub's detailed usage report has a
workflow_pathcolumn that gives you the real number. - The caps: an
if:on the job,concurrency,paths,timeout-minutes,--max-turns, and a GitHub budget. - No meter: GitHub bills nothing for a self-hosted runner's minutes. Skipbox S is $39 a month for a 4 vCPU runner, however many minutes Claude and your CI run.
Which runner Claude Code's action runs on
The one you name. Claude Code's action is a step in a job, and the job's runs-on: line picks the machine. GitHub's workflow syntax: "Use jobs.<job_id>.runs-on to define the type of machine to run the job on," and "The destination machine can be either a GitHub-hosted runner, larger runner, or a self-hosted runner."
Anthropic's own pages say the same thing from two sides:
- Its three example workflows (respond to
@claude, review a pull request, run on a schedule) all sayruns-on: ubuntu-latest. So its cost note reads: "the Claude Code GitHub Action runs on GitHub-hosted runners, which consume your GitHub Actions minutes." - The action's README lists: "Runs on Your Infrastructure: The action executes entirely on your own GitHub runner (Anthropic API calls go to your chosen provider)."
On a private repository, ubuntu-latest is a VM with 2 CPUs and 8 GB of memory, billed as GitHub's Linux 2-core runner.
Other coding agents bill the same meter:
| Agent | Where its job runs, in its own docs | What GitHub bills |
|---|---|---|
| Claude Code GitHub Action | runs-on: ubuntu-latest in Anthropic's examples | The minutes of the runner the job names |
| Codex GitHub Action | "Run the job on a Linux or macOS runner." Its examples say runs-on: ubuntu-latest | The minutes of the runner the job names |
| Copilot code review | "Copilot code review runs on standard GitHub-hosted Ubuntu Linux runners by default." | On private repositories: "The runner cost draws from your account or organization's included compute usage. Additional usage is billed at standard GitHub Actions rates." |
| Copilot cloud agent | GitHub Actions compute | "the calculated runner cost draws from your account's monthly included compute usage" |
What a minute costs
GitHub's rates for Linux x64 runners, per minute, read November 11, 2026, beside the runner that has no per-minute rate:
| Runner | runs-on: | Size | Per minute, private repository |
|---|---|---|---|
| GitHub Linux 2-core | ubuntu-latest | 2 CPUs, 8 GB | $0.006 |
| GitHub Linux 4-core (larger runner) | the label you give it | 4 cores | $0.012 |
| GitHub Linux 8-core (larger runner) | the label you give it | 8 cores | $0.022 |
| Skipbox S (made by Fluxenic, the company that publishes this site) | skipbox | 4 vCPU, 8 GB | None. $39 a month, unlimited minutes |
Four rules decide what a Claude run adds:
- Whole minutes. "GitHub rounds the minutes and partial minutes each job uses up to the nearest whole minute." A job that ends after 20 seconds bills 1 minute.
- The whole job. The job runs until Claude finishes, so the time Claude spends waiting on the model is runner time. A 10-minute run on
ubuntu-latestis GitHub's own example: "$0.06 USD is deducted from the repository owner's included compute usage (10 × $0.006 USD)." - Included compute first. GitHub Team includes $18 of compute a month, which is 3,000 minutes on
ubuntu-latest. Claude's runs share it with every other job. Past it, GitHub bills each minute. - The repository's owner pays. "Usage is charged to the repository owner, not the person who triggered the workflow runs."
In a public repository, standard GitHub-hosted runners are free, so Claude's action uses no billed minutes there.
The minutes are one of two bills. The other is Claude's: "each interaction consumes tokens based on the length of prompts and responses, task complexity, and codebase size." With an API key, Anthropic bills those tokens. "If you authenticate with an OAuth token, runs use your Claude subscription instead of API billing." A longer run raises both.
Count a month from the usage report
You don't have to estimate. GitHub's detailed usage report lists minutes by workflow file.
- Open your organization's Billing & Licensing, then the metered usage page. GitHub's docs: "At the top of the page, click Get usage report," pick the detailed report, and "Click Email me the report." The detailed report covers "a maximum period of 31 days."
- Filter the
workflow_pathcolumn to Claude's workflow file, such as.github/workflows/claude.yml. The detailed report "includes the same fields as the summarized report and addsusernameandworkflow_path." - Add up three columns for those rows:
quantity(the minutes, on theactions_linuxSKU forubuntu-latest),gross_amount, andnet_amount, "the amount that your account will be billed." The part your included compute covered is indiscount_amount.
Organization owners and billing managers can get the report. For one run, GitHub also shows "the billable job execution minutes for an individual workflow run."
Before a month of data exists, the arithmetic is:
minutes a month = runs a month × minutes per run, each run rounded up
The runs are what surprise people. Anthropic's review example starts on pull_request with types: [opened, synchronize, ready_for_review, reopened], and synchronize fires on every push. With 40 pull requests a month, 5 pushes each, and a 6-minute review, that is 40 × 5 × 6 = 1,200 minutes. Claude "skips draft and closed pull requests, pull requests it judges not to need a review," and ones it already commented on, but the job has started by then and bills its minute.
Claude's pushes also start your other workflows. Anthropic's docs tell you to let the action push as the Claude GitHub App when CI doesn't run on its commits, because "GitHub doesn't trigger workflows on commits made with the default GITHUB_TOKEN." Those CI minutes are in the same report, under your CI's workflow_path. What coding agents do to a CI bill has that arithmetic.
Cap the minutes
Anthropic's review example with four caps added:
name: Claude review
on:
pull_request:
types: [opened, ready_for_review]
paths:
- "src/**"
concurrency:
group: claude-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
review:
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
plugin_marketplaces: "https://github.com/anthropics/claude-plugins-official.git"
plugins: "code-review@claude-plugins-official"
prompt: "/code-review:code-review --comment ${{ github.repository }}/pull/${{ github.event.pull_request.number }}"
claude_args: '--max-turns 10 --allowedTools "mcp__github_inline_comment__create_inline_comment"'
- Fewer triggers. Without
synchronize, the review runs when a pull request opens or leaves draft, not on every push. In the@claudeworkflow, keep Anthropic'sif: contains(github.event.comment.body, '@claude')on the job: it "keeps runners from starting on comments that don't mention@claude." paths. The workflow starts only when a changed file matches. For the opposite filter, GitHub says: "When all the path names match patterns inpaths-ignore, the workflow will not run."concurrency. One group per pull request means "there can be at most one running job or workflow in a concurrency group at any time." Withcancel-in-progress: true, a new run stops the one still going.timeout-minutes. "The maximum number of minutes to let a job run before GitHub automatically cancels it. Default: 360." Without it, a stuck run can bill 6 hours.--max-turns. Anthropic's cost list: "Set--max-turnsinclaude_argsto limit iterations." Fewer turns cap the tokens and the minutes together.
A GitHub budget is the hard stop: "For metered products such as GitHub Actions, Copilot AI credits, or cloud sandboxes, you can set budgets to prevent usage once the budget threshold is reached." It stops more than Claude. In GitHub's own example of an Actions budget that has run out, "members are now blocked from using all GitHub-hosted runners until the next billing cycle or until the budget is increased." Leave Stop usage when budget limit is reached off, and the budget only emails you at 75%, 90%, and 100%.
Make the minutes stop mattering
Every cap above trades minutes for work Claude doesn't do. The other way is a runner with no meter.
GitHub's billing page lists "Self-hosted runners" under usage that "remains free independently and does not reduce the included compute usage." GitHub announced a charge for self-hosted runners on December 16, 2025 and shelved it the next day; nothing has been charged since. You can run that machine yourself, or rent one that someone else runs.
Skipbox is the second kind. It runs Linux x64 jobs from private repositories on a VM kept for your account, at $39, $79, or $149 a month for 4, 8, or 16 vCPU, with "Unlimited minutes" and "No usage charges." A job moves with one line:
jobs:
review:
runs-on: skipbox
The same job-minutes on ubuntu-latest and on Skipbox S, with GitHub Team's $18 taken off:
| Job-minutes a month | ubuntu-latest on GitHub Team | Skipbox S |
|---|---|---|
| 10,000 | 10,000 × $0.006 − $18 = $42 | $39 |
| 20,000 | 20,000 × $0.006 − $18 = $102 | $39 |
| 43,200, one runner busy all month | 43,200 × $0.006 − $18 = $241.20 | $39 |
Skipbox S is cheaper above 9,500 job-minutes a month: ($39 + $18) ÷ $0.006. Against GitHub's larger runners of the same size, Skipbox S is cheaper above 4,750 job-minutes a month, M above 4,410, and L above 3,977. Past those numbers, a busier agent adds nothing to the bill.
What a flat price doesn't change:
- Claude's own bill. The tokens cost the same on any runner.
- Jobs at once. Skipbox S runs one 4 vCPU job at a time, and the next waits. Five
@clauderequests at the same moment run one after another. Waiting adds nothing to the bill, and more plans run more at once. - Other systems. Skipbox runs Linux x64 only.
- Copilot code review. GitHub's docs say: "ARC is the only officially supported solution for self-hosting Copilot code review. For security reasons, do not use non-ARC self-hosted runners." Skipbox isn't ARC, so that review stays on GitHub's runners.
Anthropic's examples are written for ubuntu-latest, so try your own workflow before you move it for good. The Skipbox trial runs one 4 vCPU job at a time for 7 days or 3,000 job-minutes from your first job, whichever comes first, and takes no card. To go back, change the line back.
Start a free Skipbox trial on skipbox.dev
Every runner sold at a flat monthly price is in flat-rate GitHub Actions runners, and per-minute runners are compared in Blacksmith alternatives.
Related reading
- GitHub Actions pricing in November 2026: per-minute rates, what each plan includes, and a month's math
- Fix: an Actions budget is preventing further use
- GitHub Actions free minutes for private repositories, and when they reset
- GitHub Actions runner prices compared: GitHub, faster runners, and self-hosting
Frequently asked questions
How much does Claude Code's GitHub Action cost in GitHub Actions minutes?
The minutes of the runner its job names, at that runner's rate. Anthropic's examples use ubuntu-latest, which GitHub bills at $0.006 a minute in a private repository, each job rounded up to a whole minute, after your plan's included compute. A 10-minute run is $0.06. In a public repository, standard runners are free. On a self-hosted runner, GitHub bills no minutes: Skipbox S is a flat $39 a month with unlimited minutes. Fluxenic, the company behind Convika, makes Skipbox.
Does Claude Code GitHub Actions use my GitHub Actions minutes?
Yes, on a GitHub-hosted runner in a private repository. Anthropic's docs: "the Claude Code GitHub Action runs on GitHub-hosted runners, which consume your GitHub Actions minutes." The runner bills for the whole job, including the time Claude waits on the model. Claude's tokens are a separate bill, from Anthropic or your Claude subscription.
Can Claude Code's GitHub Action run on a self-hosted runner?
Yes. The action's README says it "executes entirely on your own GitHub runner," and GitHub lets a job's runs-on: name a self-hosted runner. GitHub bills nothing for self-hosted runner minutes. Skipbox is a self-hosted runner that someone else runs: change the job's line to runs-on: skipbox, for a flat $39 a month on its 4 vCPU plan.
How do I stop Claude Code from using too many GitHub Actions minutes?
Start fewer jobs and cap each one. Trigger on @claude or on opened, not on every push. Add a paths filter, a concurrency group with cancel-in-progress: true, timeout-minutes, and --max-turns in claude_args. A GitHub Actions budget stops spending at a limit, but it stops your other GitHub-hosted jobs at the same limit.
How do I see how many minutes Claude Code used this month?
Download GitHub's detailed usage report from your organization's billing pages and filter the workflow_path column to Claude's workflow file. quantity is the minutes and net_amount is what GitHub bills after your included compute. The detailed report covers up to 31 days.
Can I use my Claude Pro or Max subscription instead of an API key?
Yes. Claude Code's docs describe CLAUDE_CODE_OAUTH_TOKEN as "an OAuth token that authenticates with your Claude subscription, available on Pro, Max, Ultra, Team, and Enterprise plans," made with claude setup-token. Runs then use the Claude subscription, not API billing. The GitHub Actions minutes are billed the same either way.
Sources
Read 2026-11-11 (Japan time).
- Claude Code Docs: Claude Code GitHub Actions: the examples, the two kinds of cost, OAuth tokens, the cost tips (checked 2026-11-11)
- anthropics/claude-code-action: the README and examples/claude.yml (checked 2026-11-11)
- GitHub Docs: Actions runner pricing (checked 2026-11-11)
- GitHub Docs: GitHub Actions billing: included compute, self-hosted runners, Copilot code review (checked 2026-11-11)
- GitHub Docs: GitHub-hosted runners: the size of
ubuntu-lateston private repositories (checked 2026-11-11) - GitHub Docs: Workflow syntax:
runs-on,paths-ignore,concurrency,timeout-minutes(checked 2026-11-11) - GitHub Docs: Billing reports reference and Viewing your usage of metered products and licenses (checked 2026-11-11)
- GitHub Docs: Budgets and alerts and Setting up budgets to control spending on metered products (checked 2026-11-11)
- GitHub Docs: Configuring runners for GitHub Copilot code review (checked 2026-11-11)
- GitHub Docs: Copilot cloud agent's use of Actions compute (checked 2026-11-11)
- Codex GitHub Action (checked 2026-11-11)
- GitHub Changelog: Update to GitHub Actions pricing (published 2025-12-16, checked 2026-11-11)
- Skipbox: plans, sizes, unlimited minutes, the trial, private repositories (checked 2026-11-11)
Related articles
- AI coding agents and your CI bill: the GitHub Actions mathCoding agents open more pull requests and every push runs CI. The per-minute arithmetic at 10, 30, and 100 pull requests a day, the fixes, and a flat price.
- Are GitHub self-hosted runners free? Yes, in 2026Yes. GitHub bills nothing for self-hosted runner minutes (billing docs read November 11, 2026). Why AI answers say otherwise, and what you pay instead.
- Blacksmith alternatives by billing model, with prices (2026)Blacksmith's per-minute prices as published, and 9 alternatives by how they bill: per minute, a plan with minutes, a licence, flat per server, flat managed.