1. Load your Cost Explorer export
In Cost Explorer: group by Service, granularity Monthly, pick at least two months, then Download CSV.
Have one file per month instead?
Fill both days fields when the later month is not finished. The page then compares per-day rates, scaling the earlier period to the length of the later one.
2. What moved
Check your file
Every line, biggest move first
| Line | Status | Before | After | Change | % | Share of rise |
|---|
Where to look first
Run it on a schedule
Same engine, zero dependencies, one file. Fails the job when the bill rises past a number you choose, so a monthly script can tell you before the invoice does:
node cli.mjs compare export.csv # last two periods node cli.mjs compare july.csv august.csv # one period per file node cli.mjs compare export.csv --after-days 12 --before-days 31 # half-finished month node cli.mjs compare export.csv --max-increase-pct 15 --max-increase-usd 500
Get cli.mjs and engine.mjs — Node 18+, nothing to install, no network call, ever. Exit codes: 0 ok, 1 over a threshold, 2 unreadable file or bad option.
Common questions
Why did my AWS bill go up?
Export the cost by service for the two months from Cost Explorer (Download CSV), paste it here, and the page ranks every line by how much it moved, so the two or three lines that explain most of the rise are at the top. It then lists the common causes for each of those services as a checklist. It cannot see why a line moved; it tells you where to look.
Which file does it need?
The CSV from AWS Cost Explorer's Download CSV button, grouped by Service (or linked account, region or usage type), with monthly granularity and at least two months. You can also paste two separate exports, one period each.
What if the current month is only half over?
Then comparing it with a full month makes the bill look like it fell. Enter the number of days in each period and the page compares per-day rates instead, scaling the earlier period to the length of the later one.
Is my bill uploaded anywhere?
No. The page reads what you paste or load in your browser and makes no network request. The CLI reads a local file and makes no network call.
Why is Tax, Support or a Savings Plan line flagged differently?
Those lines move because of other lines or a contract, not because something new started running. Support is usually a percentage of the rest of your usage, and a credit or commitment that ended makes the bill rise with no change in usage. The page says so instead of sending you hunting for a service.
Can it fail a CI job or a scheduled report?
Yes. The CLI takes --max-increase-usd and --max-increase-pct and exits 1 when the net rise is above either, so a monthly script can alert you when the bill jumps.
Compared with the AWS console or a paid FinOps tool? See the comparison page. Planning a change instead of explaining one? Price a Terraform plan with the Terraform Plan Cost Estimate.