CostMonStart free

GitHub cost monitoring

Catch a macOS-heavy CI matrix before it drains your minutes

CostMon reads GitHub's own billing usage API daily, broken down by product and runner SKU, so a CI matrix burning minutes on the pricier macOS and Windows runners, or a Copilot AI-credit spike, shows up in days instead of reconciling into next month's invoice.

GitHub Actions & Copilot usage — live today

A GitHub-hosted runner minute is not one price: each runner OS and size carries its own per-minute list price, and macOS runs about 10x the Linux rate while Windows runs about 1.7x (as of 2026-07-29). Included minutes are consumed in proportion to that list price, so a CI matrix that looks fine in wall-clock minutes can eat a plan's entire allowance far sooner than the raw number suggests, and nobody notices until it tips into metered overage. Larger runners bill per-minute regardless of any included-minutes allowance, and since GitHub Copilot moved to seats plus metered AI-credit consumption, a team leaning harder on agentic Copilot features can push spend well past the flat per-seat price it budgeted for. None of this is visible in a wall-clock minutes count, only in the per-SKU usage GitHub's billing API reports.

Cost anatomy

What actually drives your GitHub bill

List-price-weighted included minutes
Each GitHub-hosted runner OS and size has its own per-minute list price: Linux 2-core $0.006, Windows 2-core $0.010, macOS 3/4-core $0.062 (as of 2026-07-29). Included minutes are consumed in proportion to it, so at roughly 10x the Linux rate, about 200 macOS minutes can account for a 2,000-minute plan allowance.
Per-job rounding
Each job's minutes round up to the next whole minute, so a fleet of very short jobs, like a matrix build with dozens of quick smoke tests, pays a rounding tax on every single one.
Larger runners bill regardless of plan minutes
Larger, higher-CPU GitHub-hosted runners are always billed per-minute. The included-minutes allowance from your plan never applies to them.
Public vs. private repos
Standard GitHub-hosted runners are free on public repositories; the same workflow on a private repo consumes your included-minutes pool or bills per-minute once it's exhausted.
Copilot AI credits
Since June 2026 GitHub Copilot bills seats plus metered AI-credit consumption on top. A team that leans harder on agentic, AI-heavy Copilot features can push spend well past the flat per-seat price it budgeted for.

Why CostMon

Built for GitHub spend, from day one

Per-SKU cost, not a raw minutes count

CostMon reads GitHub's billing usage API daily, broken down by product and SKU. Because SKUs encode runner OS and size, what those minutes cost is visible instead of a bare tally of minutes used.

Catch the expensive SKUs before the quota does

A daily, per-SKU view surfaces a CI matrix leaning on the pricier macOS and Windows runners while it's still a small number, not after the plan's allowance is already gone.

One view, next to the rest of your stack

GitHub Actions and Copilot spend lands in the same normalized daily table as AWS, GCP, and every other connected provider, so finance sees one honest total instead of a separate GitHub billing page.

Read-only, cost-scoped credentials

CostMon connects with a token scoped to read-only billing/administration access only. It never touches your repositories, code, or Actions workflows themselves.

  • ~10×macOS runner-minute list price vs. Linux, as of 2026-07-29
  • Round upevery job bills to the next whole minute
  • Dailysync cadence, not monthly

Getting started

Connect, sync, see — for GitHub

  1. 01

    Connect a read-only billing token

    Add a fine-grained personal access token with Administration: read for an organization, or a classic token with admin:enterprise for enterprise-wide billing. CostMon never touches your repositories, code, or workflow contents.

  2. 02

    CostMon syncs and normalizes

    GitHub's billing usage API is queried month by month and aggregated by date, product, and SKU, then reconciled into the same normalized model as every other provider you connect.

  3. 03

    See the burn before the quota does

    Open a daily, per-SKU view of Actions and Copilot spend and catch a macOS-heavy matrix or a Copilot credit spike weeks before it lands on a bill.

FAQ

Common questions about the GitHub connector

How does CostMon connect to GitHub?

Through a fine-grained personal access token scoped to Administration: read for an organization, or a classic token with admin:enterprise for enterprise-wide billing. CostMon only reads billing usage, never your code, issues, or workflow contents.

Does CostMon break Actions spend down by runner type?

Yes. GitHub's billing API reports usage per date, product, and SKU, and SKUs encode runner OS and size, so you can see Linux, Windows, and macOS minutes broken out rather than one blended Actions total.

Does CostMon track GitHub Copilot spend too?

Yes. Copilot usage is one of the products GitHub's billing usage API reports, so seat and AI-credit consumption sync in alongside Actions spend in the same daily, normalized view.

Does CostMon show per-repository cost?

GitHub's billing API returns usage at the organization or enterprise level; CostMon stores it at the date, product, and SKU grain it's aggregated to, not per repository or per workflow.

What does the GitHub connector cost?

A flat monthly rate per plan. CostMon never takes a percentage of your GitHub spend or the savings it helps you find. Free includes 2 connectors; Professional and Enterprise include unlimited connectors.

Connectors

Cloud, AI, and SaaS: all in one place

AWS, GCP, and Azure for cloud; Anthropic, OpenAI, Amazon Bedrock, Vertex AI / Gemini, and Helicone for AI and LLM spend; Snowflake and Databricks for the data cloud; Datadog, GitHub, and Vercel for the rest of the stack. Add CSV import for any tool without a native connector. That's 14 connectors, all normalized into the same unified view.

Connect a provider. See one number.

Connect your first provider and CostMon normalizes it alongside everything else you run. Your team gets one number everyone can check.

Esc