Posted on Mar 22, 2026 · Updated Mar 22, 2026 · 10 min read

How to Read Your AWS Bill (Line by Line Breakdown)

You got an AWS bill for $347. You expected maybe $150. You open the PDF, stare at 40 line items, and have no idea what half of them are. "EC2-Other" — what is that? "DataTransfer-Out-Bytes" — how did that happen? "NatGateway-Bytes" — you didn't even know NAT Gateways were a thing.

AWS has over 200 distinct services, each with multiple pricing dimensions. Organizations waste 27% of their cloud spend on average (Flexera, 2025) — and most of that waste is findable in the bill itself if you know what to look for. This guide walks through every major AWS bill section in plain language, with real dollar figures, so you can identify what you're actually paying for.

TL;DR

Most AWS bills are dominated by EC2 compute, RDS databases, and data transfer — but the surprises live in line items like NAT Gateway ($32/mo before processing a single byte), EBS snapshots ($0.05/GB/mo piling up quietly), and idle load balancers ($16/mo doing nothing). Start with Cost Explorer, enable billing alerts at $50 increments, and audit monthly. Organizations waste 27% of cloud spend on average (Flexera 2025) — most of it is findable in under 15 minutes.

Person reviewing financial documents and receipts on a desk with a laptop

The AWS billing page: what you're looking at

The AWS Billing and Cost Management console homepage shows your month-to-date total, a full-month forecast, and a breakdown by service. That summary is where most people stop. It is the worst place to diagnose a confusing bill — it is dense, sorted by service region, and does not rank items by what costs the most. Start with Cost Explorer instead.

Go to the AWS Billing and Cost Management console. On the left sidebar: Bills, Cost Explorer, Budgets, Cost Allocation Tags. Most people only ever look at Bills — the invoice view. It is useful for auditing specific charges once you know what you're looking for. To find what you're looking for in the first place, use Cost Explorer.

The Bills page (the invoice)

The Bills page is a line-by-line invoice. Each AWS service gets its own section. Within each section, individual usage types are listed with quantity, unit price, and total. Under "Elastic Compute Cloud," for example, you might see:

  • BoxUsage:t3.small — 744 hours @ $0.0208 = $15.48
  • EBS:VolumeUsage.gp3 — 80 GB-Mo @ $0.08 = $6.40
  • DataTransfer-Out-Bytes — 12 GB @ $0.09 = $1.08

Those are three separate usage dimensions for one service. EC2 alone can have a dozen line items. This is why the invoice is confusing. Each AWS service charges across multiple dimensions simultaneously. Understanding that structure — not memorizing pricing — is what makes the bill readable.

The month selector

At the top of the Bills page is a month selector. Previous months are accessible. If your bill went up $80 from January to February, comparing both months side by side shows exactly which service or usage type increased. This is the manual version of what Cost Explorer automates — and it is worth doing at least once to understand the structure before relying on the automated view.

Typical $400/mo AWS Bill — Where It GoesExample small SaaS account with 2 EC2 instances, 1 RDS, and light S3 usageEC2$160RDS$100Data Transfer$60S3$32NAT Gateway$32Other$16
Example breakdown. Actual figures vary by region and usage patterns.

Cost Explorer: your actual debugging tool

Cost Explorer is the correct tool for understanding an AWS bill. The console UI is free. It slices costs by service, region, account, resource tag, usage type, and time period — all in an interactive chart. The invoice view tells you what you were charged. Cost Explorer tells you why.

How to open it

In the Billing console, click "Cost Explorer" in the left sidebar, then "Launch Cost Explorer." First-time activation: AWS states up to 24 hours to populate. In practice, existing accounts usually see data within a few minutes.

The three views you'll actually use

Group by Service. Your starting point. A bar chart of spend over time, colored by service. If one color grows over the past month, that service is your starting point for investigation. Click any bar to drill down.

Group by Usage Type. This is where the real detail lives. Under EC2 you'll see "BoxUsage:t3.medium," "EBS:VolumeUsage.gp3," "NatGateway-Hours," and "DataTransfer-Out-Bytes" as separate line items. When something looks wrong, this view tells you exactly what the charge is for.

Group by Resource (requires resource-level tagging). If your resources are tagged — EC2 instances, RDS databases, load balancers — you can see cost per resource. This reveals that one specific EC2 instance accounts for $80 of your $160 EC2 bill. Without tagging, you get service totals but no resource attribution. Tagging is a one-time setup with permanent payoff.

The date range trick

Set the date range to the last 3 months and group by service. Look for anything that increased month-over-month without a corresponding increase in traffic or feature scope. A charge that went from $12 to $44 over 3 months with no business explanation is almost always a forgotten resource — someone spun it up and never cleaned it up.

Understanding the major line items

Here is what each major service section on your AWS bill means, in plain language, with current pricing figures from AWS pricing docs (2025).

EC2 (Elastic Compute Cloud)

EC2 is your virtual servers. The "BoxUsage" charge is the compute cost: instance type multiplied by hours run. A t3.small running 24/7 for a month is 744 hours at $0.0208/hr — about $15.48. A t3.medium: $30.96. An m5.xlarge: around $140/mo on-demand (AWS pricing docs, 2025). Billing is per second, minimum 60 seconds.

Under EC2 you will also see: EBS storage (the disk attached to your instance), data transfer out of EC2, and Elastic IPs you are not using. Elastic IPs are free when attached to a running instance. They cost $3.65/mo when unattached. The "EC2-Other" category in Cost Explorer is where NAT Gateway charges often hide — a fact that catches most people off guard the first time they see it.

RDS (Relational Database Service)

RDS is AWS's managed database. Like EC2, it charges per hour for the instance, plus separately for storage, I/O operations, and backups. A db.t3.medium running MySQL costs about $50/mo on-demand (AWS pricing docs, 2025). Enable Multi-AZ for redundancy and that doubles to $100. RDS gp2 storage is $0.115/GB/mo — a 100 GB database adds $11.50/mo on top of compute.

Backup storage is free up to the size of your database. Once you exceed that — 30 days of backups on a 100 GB database, for example — you pay $0.095/GB/mo for the excess. Easy to miss until it shows up as a $15 line item nobody can explain.

S3 (Simple Storage Service)

S3 charges across three dimensions: storage ($0.023/GB/mo for standard), requests (PUT/COPY/POST/LIST at $0.005 per 1,000; GET at $0.0004 per 1,000), and data transfer out ($0.09/GB). For small teams, storage is cheap — 100 GB is $2.30/mo. The surprises come from request charges. An application making millions of small S3 requests per day can accumulate $20–$50/mo in request fees. Serving files directly from S3 instead of through CloudFront also adds up fast at scale (AWS pricing docs, 2025).

Data Transfer

Data transfer is the most misunderstood part of any AWS bill. The rules: ingress into AWS is free. Egress to the internet is $0.09/GB after the first 100 GB/mo free tier. Traffic between services in the same Availability Zone is free. Traffic between AZs in the same region is $0.01/GB each way — $0.02/GB round trip (AWS pricing docs, 2025).

That cross-AZ charge catches teams off guard. If your application server and database are in different AZs — common when Multi-AZ RDS is enabled — every query costs $0.02/GB. At 50 GB/day of cross-AZ traffic, that is $30/mo just for the routing hops.

Support plan

Developer support is $29/mo minimum (or 3% of your bill, whichever is higher). Business support is $100/mo minimum (or 10% up to $10k). Enterprise is $15,000/mo. Check your bill for a "Support" line item. It is easy to forget enrollment, especially if someone on your team signed up during an incident and never cancelled.

Taxes

AWS adds VAT, GST, or US state sales tax depending on your country and state. These appear at the bottom of your invoice as separate line items. Businesses may be able to claim them back or provide a tax exemption certificate. Go to Billing > Tax Settings to configure your tax registration numbers.

Common bill surprises nobody warns you about

These charges appear without anyone deliberately choosing them. They are legitimate AWS services — but easy to forget or never notice until the invoice arrives. They collectively account for a large share of the "where did this $200 come from" moments that teams encounter on their first serious bill review.

NAT Gateway: that $32/mo charge

A NAT Gateway lets resources in private subnets make outbound connections. AWS charges $0.045 per hour just for the gateway existing — $32.40/mo before you send a single byte through it (AWS pricing docs, 2025). See our AWS NAT Gateway pricing guide for a full breakdown and reduction strategies. On top of the hourly charge, you pay $0.045 per GB processed. In a multi-AZ setup (standard for high availability), multiply by the number of AZs.

The fix for S3 and DynamoDB traffic: use VPC Gateway Endpoints. They are free and route that traffic without touching the NAT Gateway. For other internet traffic, audit whether every private subnet actually needs outbound internet access — many do not.

EBS snapshots accumulating quietly

Every EBS snapshot — manual or automated — is stored at $0.05/GB/mo (AWS pricing docs, 2025). A 100 GB volume snapshot costs $5/mo. Ten orphaned snapshots from deleted instances cost $50/mo. Accounts with hundreds of forgotten snapshots can accumulate $200+/mo in charges for data nobody ever reads.

Go to EC2 > Snapshots. Sort by date. Delete anything older than your retention policy that is not part of an explicit DR plan. Use Amazon Data Lifecycle Manager to automatically delete old snapshots on a schedule. This takes 15 minutes to configure and eliminates the problem permanently.

Idle load balancers

Application Load Balancers charge $0.008 per hour to exist — about $5.76/mo at baseline — plus $0.008 per LCU of traffic (AWS pricing docs, 2025). A lightly used ALB runs $8–$20/mo. The problem is load balancers left over from decommissioned services. No targets. No traffic. Still charging. At $16/mo per forgotten ALB, three of them is $48/mo for nothing.

Check EC2 > Load Balancers. Look at the Target Groups column — if a load balancer has no healthy targets, it is doing nothing. Classic Load Balancers (ELBs) charge $0.025/hr ($18/mo) and often date from very old infrastructure that nobody remembers provisioning.

Elastic IPs you forgot about

Elastic IPs are free when attached to a running instance. Stop that instance or detach the IP and AWS charges $0.005/hr — $3.65/mo per unattached address (AWS pricing docs, 2025). Teams accumulate them from old projects and test environments. Five unattached EIPs is $18.25/mo for nothing. Check the VPC console under Elastic IPs and release anything not in active use.

CloudWatch logs you never read

CloudWatch Logs charges $0.50/GB for ingestion and $0.03/GB/mo for storage after the free tier (AWS pricing docs, 2025). A busy web application generates 10–50 GB/mo of logs — $5–$25/mo in ingestion fees alone. Storage compounds if you never set a retention policy. Logs default to "Never Expire" in CloudWatch.

Go to CloudWatch > Log Groups. Set a retention policy on every log group — 30 or 90 days covers nearly every use case. This single change cuts CloudWatch bills by 50–80% for most teams.

Common "Invisible" AWS ChargesServiceWhy it chargesTypical costNAT GatewayHourly fee + per-GB processing$32–$96/moEBS SnapshotsStorage at $0.05/GB/mo$5–$200/moIdle ALB$0.008/hr even with no traffic$16–$40/moUnattached EIPs$0.005/hr per idle address$4–$20/moCloudWatch Logs$0.50/GB ingestion, never expires$5–$50/moSupport planDeveloper/Business tier auto-renews$29–$100/mo
Ranges depend on usage volume, region, and number of resources. Check monthly.

How to set up billing alerts

AWS does not notify you when your bill spikes. By default, you find out at invoice time. Setting up billing alerts takes 5 minutes. It is the highest-ROI action on this list.

Step 1: Enable billing alerts

Go to Billing > Billing Preferences. Under "Alert preferences," enable "Receive CloudWatch billing alerts." This is off by default. Without it, you cannot create billing alarms in CloudWatch. Do this first — everything else depends on it.

Step 2: Create a budget in AWS Budgets

In the Billing console, go to Budgets. Click "Create budget," choose "Cost budget," and set a monthly dollar threshold — say, $150. Add your email as a notification recipient. Up to two budgets are free.

Set two thresholds: 80% of your budget (a warning) and 100% (an alert). You get advance notice before overshooting. Also set a "Forecasted" threshold — AWS emails you if the month's spend is projected to exceed your budget before it actually does.

Step 3: Set per-service alerts for your biggest spends

If EC2 is your largest line item, create a separate budget scoped to EC2 only. A spike in EC2 then triggers an alert before it moves your total bill enough to hit the overall threshold. Budgets can be filtered by service, region, linked account, or tag. For small teams: one overall budget plus one per-service budget for your top two services is enough.

Step 4: Check in monthly — don't rely only on alerts

Alerts fire when something is already wrong. A 10-minute monthly review in Cost Explorer — group by service, compare to last month — catches slow-growing charges that never trigger a threshold but compound over a quarter. Build it into your routine: first Monday of the month, open Cost Explorer, look for anything that changed.

Tools that help you stay on top of it

AWS's native tools — Cost Explorer and Budgets — are sufficient for getting started. But they have real gaps: they do not tell you which specific resource is driving a cost, they do not surface idle resources automatically, and the UI is designed for finance teams at large enterprises, not founders or engineers. Once your bill is consistently above $200–$300/mo, a purpose-built tool pays for itself. If your bill spiked unexpectedly, our guide to diagnosing high AWS bills walks through a 15-minute audit process. For a real startup bill broken down by service, see our $500/mo AWS bill breakdown.

AWS Cost Explorer (free, built-in)

Best for: ad-hoc analysis, comparing months, drilling into usage types. Limitations: no automated recommendations, no idle resource detection, no tagging enforcement. A good starting point — but it requires you to know what questions to ask before it gives useful answers.

AWS Trusted Advisor

Trusted Advisor flags idle EC2 instances, unattached EBS volumes, and underused load balancers. Cost-related checks require the Business support plan ($100/mo minimum) or above. The free tier provides only a handful of basic checks. If you are already paying for Business support, use Trusted Advisor — it is good. If not, do not upgrade support just for it.

SpendArk (free tier available)

For automated visibility without Business support fees or deep Cost Explorer expertise, SpendArk helps you estimate what your setup should cost and compare AWS, Azure, and GCP — built for founders and developers, and free with no account. Pair it with native tools (AWS Cost Explorer, Compute Optimizer) to surface idle resources and unexpected charges in your live account. Use the cloud cost calculator to estimate what your bill should be — useful for identifying when something is running that should not be.

Laptop screen displaying financial analytics dashboard with charts and cost breakdown graphs

Frequently asked questions

What is "EC2-Other" on my AWS bill?

"EC2-Other" is a Cost Explorer catch-all for EC2-related charges that are not the instance compute itself. It typically includes NAT Gateway fees, cross-AZ data transfer, Elastic IP charges, and sometimes VPN connection fees. To see the breakdown: open Cost Explorer, filter by "EC2-Other," and group by "Usage Type." The NAT Gateway hourly charge (NatGateway-Hours) and processing charge (NatGateway-Bytes) are usually the largest items inside it.

Why is my data transfer cost so high?

Three common causes: serving large files directly from EC2 or S3 instead of CloudFront; cross-AZ traffic between services in different Availability Zones; or a NAT Gateway routing traffic that could go through a free VPC Gateway Endpoint instead. In Cost Explorer, group by "Usage Type" and look for DataTransfer-Out-Bytes, DataTransfer-Regional-Bytes, and NatGateway-Bytes to isolate which one is the driver.

How do I find what's causing a sudden AWS bill spike?

Open Cost Explorer. Set the date range to current and previous month. Group by Service. The service with the largest month-over-month increase is the starting point. Filter by that service and group by "Usage Type" to find the specific charge. For EC2 spikes: go to EC2 > Instances and sort by Launch Time. For unexpected storage charges: check EBS Volumes filtered by "available" state (detached and still charging) and the Snapshots list.

Can I set a hard spending cap on AWS?

AWS does not offer a true hard cap. Services keep running and charging past any threshold. The closest approximation: use AWS Budgets Actions to automatically apply an IAM policy restricting new resource launches when a budget threshold is hit. You can also trigger a Lambda function to stop or terminate specific resources via a budget alert. Not a hard stop — but it is the closest AWS provides.

Is data transfer between AWS regions free?

No. Inter-region data transfer — for example, from us-east-1 to eu-west-1 — costs $0.02/GB in most cases (AWS pricing docs, 2025). This is on top of standard egress charges. If your architecture spans multiple regions for a global CDN or cross-region replication, factor this in explicitly. It is one of the more expensive per-GB rates AWS charges.

Estimate your cloud costs — for free

Compare AWS, Azure, and GCP pricing side by side with our free calculator, and dig into the guides to learn how to cut cloud waste. No sign-up required.