How to use
Export a **Cost Explorer CSV** from the AWS Billing Console (Cost Explorer → "Save report as CSV") and drag it onto this page. Cost Explorer accepts daily or monthly granularity and supports any grouping dimension — service, region, linked account, tag, charge type, or instance type. The analyzer auto-detects the granularity from the period spacing in the file and exposes a manual toggle for single-period exports where the spacing is ambiguous. Top 10 line items, month-over-month change for multi-period CSVs, and a plain-language narrative summary (en/ja/ko based on the page locale) generate immediately. You can also download a structured PDF report for stakeholder sharing.
The parser runs **entirely in your browser** — Cost Explorer exports include account IDs, resource identifiers, and tag values which often contain customer or internal-project names, so this tool deliberately avoids any network round-trip. Implementation is a streaming CSV parser plus aggregation logic written in plain TypeScript; the PDF export uses pdf-lib with a CJK-capable font bundle so Japanese and Korean labels render correctly in the downloaded report. Cost numbers are displayed in the CSV's original currency (typically USD even for Japanese and Korean payers, who are billed in USD and converted to local currency on the credit card statement); the tool does *not* perform FX conversion. Supported CSV variants: the standard Cost Explorer export (post-2018 format), Cost & Usage Reports (CUR) basic Athena exports, and the legacy "AWS Detailed Billing Report" (pre-2018) — the parser auto-detects the format from the header row.
Examples
Monthly service breakdown — typical SaaS startup
Input
CSV: cost-explorer-2026-04.csv
periods: 3 months (2026-02, 2026-03, 2026-04)
groupBy: Service
rows: ~40 services with non-zero usage
total April: $4,820
Output
Top line items (April):
1. EC2-Other (NAT Gateway data + EBS): $1,140 +18% MoM
2. RDS (Aurora MySQL): $890 +3% MoM
3. EC2 instances (t3.large × 4): $740 flat
4. CloudFront: $410 −12% MoM
5. S3 Standard: $280 +44% MoM ⚠
6. CloudWatch Logs: $260 +9% MoM
7. Lambda: $190 +2% MoM
...
Narrative: April spend grew $310 (+6.9%) over March, driven primarily by
NAT Gateway data egress and S3 Standard storage. S3 is up 44% over two
months — worth checking for runaway log dumps or test buckets.
A normal small-team monthly review. The auto-narrative flags S3's 44% growth even though the absolute number ($280) is modest, because growth velocity matters more than current level — a 44% monthly increase compounds to 800% per year. NAT Gateway shows up under "EC2-Other" rather than its own line, a frequent source of cost-sticker shock for teams who place RDS or DocumentDB in private subnets and route through a NAT for OS package updates. The tool exposes the raw NAT Gateway dimensions via groupBy=UsageType so you can confirm whether the spike comes from data transfer or from idle gateway-hours.
Region anomaly hunt — multi-region production
Input
CSV: cost-explorer-2026-05-daily.csv
granularity: daily
period: 30 days
groupBy: Region
rows: 9 regions in active use
Output
Top regions (May, 30-day total):
ap-northeast-1 (Tokyo): $6,420 78% of total
us-east-1 (Virginia): $1,140 14% — control plane + Route53
ap-northeast-2 (Seoul): $620 7% — DR region
global region (CloudFront): $80 1%
eu-west-1 (Ireland): $20 0% ⚠ unexpected
Narrative: 99% of spend is in your primary region (Tokyo) and DR
region (Seoul) as expected. Notable: $20 in eu-west-1 was incurred on
May 12 — possibly a leftover test resource. Check the EC2 console
for running instances in that region.
Region-grouped views are the single best way to find forgotten test resources. AWS resources are region-scoped, so a developer who spun up a test stack in `eu-west-1` while reading a tutorial six months ago can leave it running indefinitely — the cost is small per day, so it never triggers a billing alert, but it accumulates and shows up as a phantom region in your monthly export. The same pattern applies to forgotten EBS snapshots, idle NAT gateways, and unattached Elastic IPs. The tool's narrative explicitly flags any region with 0–2% of total spend as "worth investigating" because that band is where leftovers concentrate.
Tag-based chargeback — which team spent what
Input
CSV: cost-explorer-2026-04-by-team-tag.csv
groupBy: Tag: team
period: April 2026
activation: cost allocation tag "team" enabled for >30 days
Output
By team tag (April):
team:platform $2,820 58% — RDS + EC2 + NAT
team:billing $890 18% — RDS + Lambda + S3
team:analytics $560 12% — Athena + S3 + Glue
team:onboarding $310 6% — CloudFront + Lambda
(untagged) $240 5% ⚠
Narrative: 95% of April spend is tagged, leaving $240 (5%) untagged.
The untagged share is high enough to indicate either a missing
tag-enforcement policy or recently-created resources predating
the tag-activation date.
Cost-allocation tags are AWS's officially supported chargeback mechanism. To use them: (1) decide on a tag key (`team`, `project`, `cost-center`), (2) apply it consistently across resources, (3) activate the tag in Billing Console → "Cost allocation tags" — this is the step most teams miss. Activated tags show up in Cost Explorer 24 hours later but populate retroactively only from the activation date forward, so historical data stays untagged. The "(untagged)" bucket is a real and recurring chargeback fight: who pays for resources that nobody owns? The standard answer is to charge it to a shared "platform" or "ops" cost center, which incentivizes tag hygiene over time.
FAQ
How do I export a CSV from Cost Explorer?
Sign in to the **AWS Billing Console** → **Cost Explorer** → set the date range, granularity (Daily / Monthly), and Group By dimension (Service is the most useful default). Click **Save** (top right) → **Save report** to bookmark the view, or **Download CSV** to grab the raw data. The CSV format has been stable since 2018 — earlier exports use a different layout that this tool also auto-detects. Cost Explorer is a paid feature: **$0.01 per 1,000 requests** for programmatic API access, but the console-based CSV export is free. If you want unattended automation, **Cost & Usage Reports (CUR)** delivered to S3 is the right path, but CUR is a much larger and more detailed format than what most analyses need.
What is the difference between Cost Explorer, CUR, and the Billing Dashboard?
Three separate AWS billing surfaces with overlapping but distinct purposes. **Billing Dashboard** is the high-level "current month so far + last month" summary, free and read-only — useful for one-glance health checks. **Cost Explorer** is the interactive analysis tool: filter by service/region/tag, compare periods, group dimensions — this is what most engineers and finance teams actually use day-to-day, and what this analyzer is built around. **Cost & Usage Reports (CUR)** is the firehose: every line item, every resource, every hour, delivered as gzipped CSV/Parquet to your S3 bucket. CUR is the source of truth for FinOps automation, custom dashboards via QuickSight or Athena, and reconciliation against your billing line items, but it requires Athena/Spark-level tooling to use effectively. Roughly: Dashboard for monitoring, Cost Explorer for analysis, CUR for FinOps engineering. This tool reads Cost Explorer's exports and partial CUR exports.
Why is NAT Gateway always one of my top expenses?
NAT Gateway pricing has two surprises. First, the **hourly charge of $0.045/hour per gateway × 24 hours × 30 days = $32/month** even if zero traffic flows. AWS docs make this clear but engineers usually focus on the data-processing fee and forget the hourly. Multiply by AZs (best practice is one NAT per AZ for HA) and you can easily hit $100/month before any traffic. Second, the **data-processing fee of $0.045/GB applies to *all* traffic crossing the gateway**, including private-subnet → public-internet (the obvious case) *and* private-subnet → AWS service via the public endpoint (e.g. ECR pulls, S3 if not via VPC endpoint, package managers, OS updates). The fix is **VPC Endpoints**: S3 Gateway Endpoint is free, Interface Endpoints for other services cost $0.01/hour but avoid the NAT gateway entirely for that service. The break-even on Interface Endpoints versus NAT data charges is roughly 5 GB/month per endpoint.
Does this tool support multi-account / Organization-level CSVs?
Yes — Cost Explorer in the **payer account** of an AWS Organization shows consolidated bills with a "Linked account" dimension. Group by "Linked Account" to see per-account totals. The CSV that results works in this tool exactly like a single-account CSV. For **AWS Organizations with hundreds of accounts**, Cost Explorer's built-in UI starts to feel cramped — the top-10 list runs out fast — and you may want to graduate to QuickSight dashboards on top of CUR. This tool is built for the small-to-medium case: 1–20 accounts, 1–50 distinct cost-attribution dimensions. Above that, the bottleneck is no longer parsing or visualization but the human cognitive limit of staring at a budget table.
How accurate are Cost Explorer numbers — do they match my final invoice?
**Within ~1% but not byte-identical.** Cost Explorer numbers are the *applied* cost — what you actually pay after Reserved Instance / Savings Plan discounts, credits, and discounts — but rounded slightly differently than the line items on your final invoice. The end-of-month invoice is generated 3–5 days after the month closes, while Cost Explorer updates daily with up to 24-hour lag. Edge cases: free-tier credits show up in Cost Explorer as "Refund" rows in the month they're applied (which can be months after the credit was granted); some marketplace charges (Bedrock, third-party AMIs) flow through a delayed reconciliation; and AWS support fees are billed monthly at 3% / 5% / 10% of total spend depending on plan and shown as a separate dimension. For accounting-grade accuracy, use the **PDF invoice** from the Billing Console; for engineering-grade attribution (which workload caused which spend), Cost Explorer is the right surface.
What other tools should I use alongside Cost Explorer?
For ongoing FinOps work, three tools complement Cost Explorer well. **AWS Budgets** sends alert emails when you exceed thresholds — set one budget at 80% of monthly target and one at 120% (the "something is wrong" tier). **AWS Compute Optimizer** identifies undersized/oversized EC2, EBS, Lambda, and ECS workloads using machine-learning analysis of CloudWatch metrics; the recommendations are usually accurate for stable workloads. **AWS Cost Anomaly Detection** is a free service that learns your typical spending and emails you when a service deviates by ≥40% from the trained baseline — useful for catching forgotten resources or a runaway test environment. Beyond AWS: **Vantage**, **CloudZero**, and **Datadog Cloud Cost Management** offer cross-cloud unification with deeper attribution; **Infracost** estimates the cost impact of Terraform changes before deployment, which catches expensive resources at PR-review time rather than at billing time.
Related concepts
**FinOps** (Financial Operations) is the discipline of cloud cost management that emerged around 2018 from companies running large AWS / Azure / GCP estates. The **FinOps Foundation** (now part of the Linux Foundation) maintains a framework with three phases — *Inform* (visibility into cost), *Optimize* (cost reduction via right-sizing and commitments), *Operate* (cost as a continuous engineering metric, like uptime or latency). This tool sits squarely in the Inform phase: turning a CSV export into a digestible snapshot. The maturity ladder above this is per-service cost attribution dashboards (Optimize) and per-PR cost impact gates (Operate). Companies running >$10M / year on AWS typically have a dedicated FinOps team; smaller orgs distribute the work across SRE and finance.
AWS's **cost data model** has four interesting dimensions that show up across all three billing surfaces (Dashboard, Cost Explorer, CUR). **Service** is the obvious one (EC2, S3, RDS), but services have sub-categories — "EC2-Other" specifically buckets NAT Gateway, EBS, and data-transfer charges separately from the EC2 compute service itself. **Usage type** is the finest granularity (e.g. `BoxUsage:t3.large` vs `EBS:VolumeUsage.gp3`); this is where you find what *actually* drives the spend. **Cost allocation tags** are user-defined and only populate after explicit activation in the Billing Console — they enable per-team or per-project chargeback. **Charge type** distinguishes Usage, Tax, Credit, Refund, and Recurring Reserved-Instance / Savings Plan amortization — accounting teams care a lot about this dimension, engineers less so. Understanding which dimension answers which question is half of effective cost analysis.
Three adjacent **cloud-cost concepts** intersect with AWS billing analysis. **Reserved Instances (RIs) and Savings Plans** are commitment-based discounts: pay upfront for 1- or 3-year usage and get 30–60% off on-demand rates. The savings show up retroactively in Cost Explorer as negative line items. **Spot Instances** are unused EC2 capacity available at 50–90% discount but subject to 2-minute termination notices — great for batch workloads, terrible for stateful services. **Multi-cloud cost normalization** is the operational nightmare of comparing AWS's line-item format with Azure's "Cost Management" exports and GCP's "Billing" exports — the dimensions are similar but the boundaries (what counts as "compute" vs "storage" vs "network") differ enough that aggregated dashboards require manual normalization. Tools like Vantage and CloudZero exist primarily because this normalization is operationally painful enough that companies pay $thousands/month to outsource it.