CostTrace
Measured from your own bill · Any cloud · Your data stays yours

Investigate cloud-cost changes with deployment context and billing evidence.

See what changed on your bill, which deployments line up, and where the evidence is inconclusive, including changes that were only code. CostTrace runs in your CI or terminal against your own billing export, and your billing data never leaves your environment.

Works with AWS, Azure, Google Cloud and Oracle Cloud. Early access: founder@costtrace.io

costtrace commented 7 days after deploy

🧾 PR #104: Load order line items individually in invoice view

7d24e0c · checkout · deployed 2026-09-18 11:00 UTC
Estimated
$0
Measured
+$579± $52 range
vs. estimate
missed
ResourceProviderChangeBefore / dayAfter / dayMonthly impact
orders-dbAWS · RDSaffected$52.23$71.27+$578.92

Service-level impact: no infrastructure changed, but the database bill rose after the deploy. 3 other checkout resources held steady.

An N+1 query with zero infrastructure changes. A pre-merge estimate prices it at $0. CostTrace finds the line of code.

Any cloud

One tool for every cloud you run on. CostTrace reads FOCUS, the open billing format every major cloud now exports, and uses one tag convention that's valid everywhere. No per-cloud setup and no data pipeline.

  • AWS
  • Microsoft Azure
  • Google Cloud
  • Oracle Cloud

Any AI agent

Its MCP server works with any agent that supports MCP, so your coding agent answers cost questions with numbers from your bill. Not using AI? The CLI, the GitHub Action and JSON output work entirely on their own, with no API key.

  • Any MCP client
  • CLI
  • GitHub Action
  • JSON

Estimates stop at merge. Your bill doesn't.

Pre-merge tools price what they can see in your infrastructure code. Data processing, traffic, logs and discounts only show up after the change is running.

Pre-merge estimate

List prices for resources declared in your infrastructure code. Useful, but it misses usage-driven charges and your negotiated rates.

CostTrace measurement

Real billed cost from your provider's export, including your discounts, attributed to the commit that deployed it, and compared against the estimate.

costtrace explain

Your bill went up. Here's why.

Point it at a billing period and it splits the change for every service into usage, rate, new and removed resources, then lines it up with your deploys. It uses only what your bill already contains.

September vs. August+$3,082 (+26.6%)
usage +$1,928new resources +$1,016rate +$511period length −$373
Amazon Bedrock+$1,638
Usage +34%Price flat

Coincides with PR #105 "Include full ticket history in support-agent context", deployed Sep 9 to support-agent

Amazon VPC+$989
New resource: NAT gateway, billing since Sep 8

Correlated with PR #101, which deployed it

analytics-warehouse RDS+$130
Usage flatRate +10%

Reserved Instance no longer applied. No corresponding deploy detected

Sample data. Changes are split into parts that add up exactly; periods of different lengths and normal daily variation are separated out, so noise isn't blamed on a deploy. CostTrace says "coincides with", never "caused": timing is evidence, not proof. The method, and its limits, are documented for every figure.

costtrace traces

From the bill to the line of code.

The bill says which resource got more expensive after a deploy. Your OpenTelemetry traces say which code calls it. CostTrace compares the deployed service's traces before and after the deploy, finds the queries and calls that changed per request, and splits the measured cost change across them.

$ costtrace traces --traces ./otel-export --changes deploys.json --sha 7d24e0c --focus ./exports

ORDERS-DB   +$578.92/mo (affected)
  Matched to traced calls by "orders"
  ≈+$550/mo, 95% of the change:  SELECT * FROM order_line_items WHERE id = ?
      repeated query (N+1), up to 39× per call site: 0 → 20.2 calls per request
      at /srv/checkout/app/invoices.py:57 (load_line_items)
  ≈+$9/mo, 2% of the change:  more requests (traffic)
  offset by: SELECT * FROM order_line_items WHERE order_id = ? (removed)

Per request, not per day

Changes are measured per request to each endpoint, so more traffic is reported as traffic, not blamed on the code.

Patterns, with locations

Repeated queries (N+1), new calls, more calls and slower calls, each with the file and function from your traces.

Your traces, as they are

Reads OpenTelemetry exports (OTLP/JSON files) or a Jaeger-compatible query API. No new instrumentation and no agent to install.

Sample data. The resource's change is measured from the bill; the split across code paths is an estimate, because span time stands in for what the resource bills. It ranks where to look and roughly how much is at stake. Confirm a fix by measuring its deploy.

Get started

Three steps, each useful on its own

You can stop after step 2 and still know why your bill moved. During early access, we set up each step with you.

  1. Turn on your billing export

    In your cloud's billing console, export cost data in FOCUS format to storage you own. CostTrace needs read access only.

    5 minutes · first data within about a day
  2. Ask why your bill changed

    Run costtrace explain on any two periods your export covers: usage, rates, new and removed resources, per service. No tags or deploy log needed.

    2 minutes
  3. Get a cost comment on every PR

    Tag deploys with the commit SHA, then add the GitHub Action. It reads your GitHub deployments, so there's no deploy log to keep.

    15 minutes

Already export OpenTelemetry traces? Point costtrace traces at them to go from a cost change to the code behind it.

Why CostTrace

Designed for a different question.

CostTrace is a local-first tool that measures how the changes you ship coincide with changes in your actual cloud bill, using your own FOCUS data, in your own CI. Estimators ask what a change should cost; budgets ask whether spend moved; FinOps platforms ask where the money went. CostTrace asks, right in the pull request: what did this change actually do to the real bill?

Measured, not guessed

What each change actually cost, read from your bill with your negotiated rates, not list-price estimates.

Per pull request, even for code

Cost changes are lined up with the deploys they coincide with, including changes with no infrastructure diff at all.

Down to the code path

With your OpenTelemetry traces, the cost change is followed to the queries and calls that changed, with file and function.

Transparent numbers

Runs on your own FOCUS export in your CI, and every figure comes with a ± range and a documented method.

How it differs

Alongside the tools you already use

Each kind of cost or monitoring tool answers part of the question. CostTrace fills the gap between them: measured cost, per change, back to the code. It doesn't replace them.

Pre-merge cost estimators

Good at
Pricing new and resized infrastructure from your IaC diff, before merge.
CostTrace adds
What the change really cost once running, at your negotiated rates, including usage-driven charges and code-only changes an estimate prices at $0. And estimate vs. actual, so you learn how good the estimates are.

Cloud budgets & anomaly alerts

Good at
Telling you quickly that spend on a service or account moved.
CostTrace adds
Which deploy and pull request the change coincides with, and how much of it, with a ± range, so the alert has an owner.

FinOps platforms

Good at
Allocating spend by team, product or customer, with dashboards for finance.
CostTrace adds
Per-change measurement delivered to the engineer on the pull request. It runs on your own export in your own CI, so billing data isn't sent to another company.

Observability & APM tools

Good at
Latency, errors and traces: which code path got slower or busier.
CostTrace adds
What that change did to the bill. CostTrace reads your existing traces and puts measured dollars next to the queries and calls that changed.

AI usage & token trackers

Good at
Counting tokens and spend per model call, once the app is set up to report them.
CostTrace adds
The whole bill, not only AI calls, with no changes to your code: an AI model or prompt change shows up next to every other cost it moved.

Categories, not specific products, as of October 2026. Individual products vary and some overlap with parts of this. If you'd like to compare CostTrace with a tool you use, write to founder@costtrace.io.

AI-native

Ask any coding agent what a change cost

CostTrace ships an MCP server, an open standard that agents and editors support, so whichever agent your team uses answers cost questions with numbers measured from your bill instead of guesses, and can trace a spike back to the deploys it coincides with and the code paths in your traces.

YouWhat did commit 7d24e0c cost, and why?
Agent · via CostTrace+$579/mo ± $52 since it deployed on Sep 18, against an estimate of $0. No infrastructure changed. The cost is service-level: orders-db (AWS RDS) went from $52 to $71 a day. Traces from the same days show a new N+1 query at invoices.py:57 (load_line_items): about 20 queries per request, ≈ $550/mo of the change by estimate. Batching them into a single query should bring it back down.

Example conversation using the sample dataset. Read-only tools. Works with any MCP client.

What it catches

Every deploy, measured from the bill, whether the change was infrastructure, code or a clean-up.

New & resized infrastructure

A NAT gateway estimated at $310/mo that really costs $1,368, because data processing never shows up in a Terraform plan.

Application code

Queries, retries, log volume or LLM calls that raise the bill of unchanged resources, attributed to the PR that deployed them.

Savings

Deleted and downsized resources count as savings, so clean-up work gets the credit it earns.

Only real signals

Every figure has a ± range from daily variation, noise isn't listed as impact, and back-to-back deploys are kept apart.

How it works

No agents and no SaaS account. CostTrace runs in your CI or on your laptop against your own billing export.

  1. Tag

    Deploys stamp resources with costtrace_sha, _pr, _repo and _service. One convention that's valid on every cloud.

  2. Measure

    CostTrace reads your FOCUS export straight from S3, Blob Storage or BigQuery, and your deploys from GitHub deployments or a deploy log, then compares costs before vs. after each deploy.

  3. Attribute

    New, changed and removed resources, plus cost shifts from application code in the same service, each with a ± range. With traces, down to the queries and calls that changed.

  4. Report

    A PR comment kept up to date by the GitHub Action, a table, JSON, or a failed CI check when a change blows past its estimate.

Any cloud, one tool

CostTrace is built on FOCUS, the FinOps Foundation's open billing standard that every major cloud now exports. Point it straight at the export: no data pipeline, no copy.

AWSData Exports in S3s3://bucket/prefix
Microsoft AzureCost Management exportsazure://account/container
Google CloudFOCUS export in BigQuerybq://project.dataset.table
Oracle CloudFOCUS cost reports./exports

Reads CSV, gzipped CSV and Parquet, fetching only the columns and billing months a report needs. A large export (millions of billing rows, gzipped) takes a few minutes.

Built to be trusted with your bill

Runs where you do

Local-first. Your billing data never leaves your machine or CI.

No telemetry

CostTrace sends nothing anywhere: no tracking, no usage data, no calls you didn't ask for.

Honest numbers

Every figure has a ± range, noise isn't reported as impact, and it says "coincides with", never "caused".

Least access

Read-only access to the billing export is all it needs, using your cloud's standard credentials.

Get in touch

CostTrace is in early access. Tell us about your cloud bill and we'll run it on your own billing export with you.