CostMonStart free

Product

Catch it before the invoice.

A monthly bill is the slowest possible way to find out something went wrong. CostMon watches your normalized daily spend and fires the moment it breaks its own baseline. Drag the sliders below to run the exact detection math yourself.

Try the actual detection math

Would your last runaway bill have been caught?

Pick a scenario, drag the same four thresholds a real anomaly rule uses, and watch it decide — this is anomaly.Detect, running in your browser against 60 days of illustrative daily spend.

Anomaly rule simulatorIllustrative data — real detection math
Live

A coding agent's retry logic fans out into far more model calls than intended. Token spend, not request count, moves first.

Raising the z-score or minimum-% thresholds cuts false alarms — but it also means real spend has to climb further before the rule fires, so a genuine anomaly gets caught later. No single setting maximizes both at once; that trade-off is the entire tuning problem.

14 days

Trailing days used to build the baseline mean & standard deviation

3

How many standard deviations above baseline before it's suspicious

50%

Also requires spend to beat the baseline mean by at least this percent

$5

Ignores anomalies below this dollar amount, so low-spend periods stay quiet

ResultCaught on day 51 — 9 days before the invoice.
Days of early warning
9 days
Still to accrue once caught
$19,312
False alarms in the quiet weeks
0

Illustrative, deterministic sample data — not a customer's real spend. The math deciding each bar is the same triple-gate logic CostMon runs in production.

How CostMon's alerting actually works

How the detector decides

An anomaly rule doesn't fire on a single loose signal. It requires three gates to hold at once for the same day's spend. First, the value has to beat the trailing baseline's mean plus a configurable number of standard deviations (a z-score gate, default 3.0, which is statistically rare for a normal day). Second, it separately has to beat the baseline mean by a minimum percentage (default 50% over) as a plain-language sanity check that doesn't rely on the shape of the distribution. Third, it has to clear a minimum absolute dollar floor (default $5), so a service that goes from $2/day to $6/day doesn't page anyone.

The baseline itself is the trailing window of days before the one being evaluated; the evaluated day is never counted in its own baseline. And if there are fewer than 2 days of history to build that baseline from, the rule simply doesn't fire yet, since it needs at least a rough sense of normal before it can call something abnormal.

The tension worth understanding: raising the z-score or the minimum-percent gate cuts false alarms but detects a real problem later, since the value has to climb further before either gate clears. A ramp gradual enough that each day's increase stays small relative to the rolling baseline mean can also slip under the gates indefinitely, because the baseline mean climbs right along with it. That's why the third scenario in the simulator above never fires at the default settings. Both gates are blocking it independently there, which is why moving any one slider on its own never catches it: lower the z-score to 2.0 and the minimum-percent gate to 10% together and it's caught on day 24 with no false alarms, but loosen only one of the two and it stays invisible at every setting. A slow leak is the case where a rule tuned for spikes needs help, which is why anomaly rules and a budget's burn-down projection work together rather than as substitutes for each other.

What you get on day one

Every new org gets an org-wide anomaly rule seeded automatically the first time someone logs in: 14-day lookback, 3.0 z-score threshold, 50% minimum over baseline, $5 floor. There's nothing to configure before it's live; the tuning above exists for teams that want to scope a rule tighter, not because the default needs babysitting.

That default rule watches spend. From there, additional rules can scope to a single provider source (a label like "aws" or "anthropic"), a specific service, or a cost tag, and they can watch token volume, request count, or tokens per request instead of dollars. That lets a team watch its own slice of the bill without drowning in org-wide noise.

Budgets and the burn-down projection

A budget is a different question than an anomaly rule: not "is today weird" but "are we still on pace to land under a number we picked." Budgets scope to the org, a provider source, or a tag, run over either a fixed calendar month or a rolling window (30 days by default), and carry a forward projection: projected total spend and projected percent of budget, based on the pace so far in the period.

Threshold alerts fire at 80% and 100% of budget by default, so the warning arrives while there's still room to react, not the day the ceiling is already crossed.

Watch tokens, not just dollars

Anomaly rules aren't limited to spend. They can also watch token volume, request count, or tokens per request. That last one is the standout for agentic workloads: an agent loop that fans out into far more calls, or far more tokens per call, than intended surfaces in tokens-per-request before it necessarily moves the dollar figure, because pricing tiers and caching can blunt the dollar signal for a while even as the underlying usage pattern has already changed.

The seeded default rule doesn't watch this; it tracks spend. A tokens_per_request rule is one you create and scope to an AI provider source, and it catches the runaway-agent shape this page's first scenario illustrates.

Alerts people don't learn to ignore

Every alert carries a kind (budget or anomaly), a severity (info, warning, critical), an owner, and a status that moves from open to acknowledged to resolved as someone deals with it. Every alert also has a deterministic dedupe key derived from the condition that triggered it, so the same ongoing anomaly re-evaluating every hour doesn't spawn a new alert each time. It's the same alert until it's resolved.

The tuning that keeps a rule useful long-term isn't exotic: give each rule a single clear owner so it doesn't become nobody's job, favor the absolute floor over the percentage gate for low-spend services (a 200% jump on a $3/day service is still noise), and widen the lookback window or raise the z-score if a rule is chatty in its own quiet periods rather than turning it off entirely.

Where it lands

A new alert fans out to every enabled notification channel plus the rule owner's email automatically. There's no separate step to wire a rule to a destination. Channels are email (via SES), Slack (an incoming webhook URL, no app to install or bot to authorize), and a generic webhook for anything else in a team's stack.

Honest limits

What this doesn't do

Alerting is only useful if you trust what it's telling you — so here's exactly where the edges are.

Day-grain, not real-time

Cost data syncs on an hourly schedule and anomaly rules evaluate on an hourly sweep, but the underlying signal is a complete day of provider cost data, not a live, sub-day stream. In practice that means an anomaly is typically visible hours after the day that caused it closes, which is still days to weeks earlier than the same overspend would surface on an invoice, but it is not instant.

Provider data has its own lag

CostMon syncs on the schedule its connectors' provider APIs make data available on. A connector that reports cost data a day or more behind (common for some billing APIs) pushes CostMon's own detection back by the same amount. The detection math runs the moment complete data is available, not before.

No automatic per-resource attribution

An alert or a budget breach tells you which provider source, service, or tag moved. It doesn't automatically point at a specific instance ID or a specific API key, because that level of detail isn't always present in what a provider's cost export returns. The signal narrows down where to look; a per-resource root cause is still a short investigation, not a click-through.

The simulator above is illustrative

The three scenarios in the simulator are synthetic, deterministically generated series meant to demonstrate the real detection math clearly. They are not drawn from any customer's actual data. The math running against them is the same detect() logic CostMon runs in production; the data feeding it is a teaching example, not a case study.

FAQ

Common questions about cost alerts & anomaly detection

Is CostMon's anomaly detection real-time?

No, it's day-grain, not real-time. Cost data syncs hourly and anomaly rules evaluate on an hourly sweep, but the actual signal is a complete day of normalized cost data. That means an anomaly is typically caught hours after the day that caused it closes, which is still days to weeks earlier than the same overspend would show up on a monthly invoice, but it's not an instant, sub-day stream.

What's the default anomaly rule, and do I have to set one up myself?

Every new org gets an org-wide rule seeded automatically the first time someone logs in: a 14-day lookback, a 3.0 z-score threshold, a minimum 50% over baseline, and a $5 noise floor. It watches spend; there's nothing to configure before it's protecting the account. Additional scoped rules (per provider source, service, or tag, and on token or request metrics rather than dollars) are there for teams that want tighter coverage, not a requirement to get started.

How does Slack alerting work?

Through an incoming webhook URL you paste in, not a Slack app or bot that needs authorizing or added permissions. A new alert posts to that webhook the same way it emails the rule owner and hits any configured generic webhook.

What's the difference between a budget and an anomaly rule?

An anomaly rule asks whether today's spend is statistically unusual against its own recent baseline; it can fire in the first week of a month. A budget asks whether spend is on pace to land under a ceiling over a monthly or rolling period, with a forward projection and threshold alerts at 80% and 100%. Use anomaly rules to catch a spike as it happens and budgets to track pace against a number you've committed to.

Why watch tokens per request instead of just dollars?

An agentic workload that fans out into far more model calls, or far more tokens per call, than intended often surfaces in tokens-per-request before it moves the dollar figure. Pricing tiers and prompt caching can blunt the dollar signal for a while even as the underlying usage pattern has already changed. A tokens_per_request rule catches that shape earlier than a spend-only rule would. You create it yourself and scope it to an AI provider source, since the seeded default watches spend.

Will re-firing the same anomaly spam me with duplicate alerts?

No. Every alert has a deterministic dedupe key derived from the condition that triggered it, so the same ongoing anomaly re-evaluating on the next hourly sweep doesn't create a new alert. It stays the same open alert until someone resolves it.

What happens if my org doesn't have enough cost history yet?

The detector requires at least 2 days of baseline history before it will ever fire. With fewer than that, there isn't enough of a "normal" to compare against, so it stays silent rather than guessing. Coverage improves day by day as more cost history syncs in.

The invoice is a lagging signal.

A monthly invoice tells you what already happened. CostMon builds a daily baseline, so a spike stands out while you can still act on it.

Esc