Free public beta · v0.2.0

Catch CI cost regressions before merge.

See when a pull request expands a matrix, moves jobs to expensive runners, broadens triggers, or removes cost guardrails—while the change is still reviewable.

  • Read-only by default
  • No account
  • No product telemetry
workflow cost review ANALYZED

PULL-REQUEST COST SIGNAL

BASE$0.012/min
HEAD$0.372/min
DELTA+$0.360/min
!
macOS runner has a high per-minute rate

Keep macOS only for steps that require Apple tooling.

HIGH
Matrix expands to many job copies

Remove unsupported combinations or split nightly coverage.

MEDIUM

Illustration based on a validated public lab result . Public list-rate signals—not an invoice.

TRY IT NOW

Scan workflow YAML in this tab.

Nothing you paste is uploaded, stored, or sent to an AI model.

Browser-only analysis
Before
After

Maximum 250 KB per workflow. YAML 1.2 is parsed locally.

WHAT YOU GET

A useful signal, with its evidence attached.

The deterministic engine reports what changed, why it matters, and what remains unknown.

01

Cost signal

Compare runner rates and static matrix fan-out before and after a workflow change.

02

Explainable findings

Every finding includes severity, confidence, concrete evidence, and a recommendation.

03

Optional monthly context

The Action can process recent run metadata ephemerally, with conservative fallback when incomplete.

PRACTICAL GUIDES

Understand the cost signal before changing CI.

Worked examples using the same public catalog and conservative assumptions as the scanner.

MATRIX COST · 6 MIN READ

How Much Does a GitHub Actions Matrix Cost?

Calculate static fan-out, combine it with runner rates, and recognize when a small YAML diff multiplies work.

Read the guide

MACOS RUNNERS · 6 MIN READ

Catch a macOS Cost Regression Before Merge

See why runner selection and matrix size compound—and which safer changes to review first.

Read the guide

INSTALL IN 2 MINUTES

Put the same check in every workflow pull request.

Create .github/workflows/ci-bill-doctor.yml. No checkout step, account, API key, or backend connection is required.

  • Results appear in the job summary.
  • Comments and monthly history stay off by default.
  • The check never blocks a merge unless you opt in.
See optional configuration
ci-bill-doctor.yml
name: CI cost guard

on:
  pull_request:
    paths:
      - ".github/workflows/**"

permissions:
  contents: read
  pull-requests: read

jobs:
  inspect:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: seba-montero/ci-bill-doctor@v0

DESIGNED FOR TRUST

Your workflow stays where it belongs.

Free scanner

Runs entirely in your browser. No network request contains your workflow.

GitHub Action

Runs inside your GitHub runner. History is opt-in and processed only in memory.

Honest estimates

Public list-rate signals exclude quotas, discounts, credits, and unknown runners.

Read the privacy and permission contract

WHAT SHOULD COME NEXT?

Help choose the first hosted capability.

Persistent history, policy guardrails, or multi-repository reporting? Share what would be worth paying for. No meeting or email required. The form and your GitHub username will be public.

Open public preference form

STRAIGHT ANSWERS

What the estimate does—and does not—mean.

Is this my exact GitHub bill?

No. It is a gross-equivalent signal at public list rates. It does not subtract included minutes, discounts, credits, or taxes.

Does the scanner upload my YAML?

No. The parser and analyzer are bundled into this page and execute locally in your browser.

Will the Action block pull requests?

Not by default. Comments, historical analysis, and failure thresholds are all explicit opt-ins.

What runners are priced?

The beta catalogs standard GitHub-hosted Linux, Windows, and macOS runners. Custom, larger, and self-hosted runners remain unknown.