In this guide 6 sections
Start at the service total. Then drop to the usage type, because AWS groups by service and usage type, Azure by meter and Google Cloud by SKU. The lines that grow quietly are data transfer, snapshots, managed databases and support, so map each one to a named service and a named owner.
Find the grouping each provider uses
The invoice PDF is only a summary. The real bill lives in the console export: Cost Explorer or the Cost and Usage Report on AWS, Cost Management on Azure, a BigQuery table on Google Cloud.
AWS rolls charges up by service, then by usage type, such as a box-hours line for EC2 or a gigabyte-month line for EBS. Azure splits a service into meters inside a resource group, while Google Cloud lists SKUs under each project and rolls them up to a service. Learn which level your provider shows first. That choice decides how you drill down.
First pass: account, subscription or project. Large jumps often sit in one place that nobody checked, such as a test account left running since a proof of concept.
- AWS: service, then usage type, then linked account
- Azure: subscription, resource group, then meter
- Google Cloud: project, service, then SKU
- Credits, discounts and tax shown as separate lines
Read the compute and storage lines first
Compute lines read easily. Hours times the instance rate gives the charge. Look for instances that run all night in a test account, load balancers with no targets and idle Kubernetes nodes.
Storage hides slow growth. Old EBS snapshots, unattached disks and S3 buckets with no lifecycle rule keep billing long after the project that created them has ended and the engineers have moved on. A nightly snapshot kept for two years adds up. Nobody decided that.
Check the tier and class too. Data kept in a hot storage class but read only once a quarter belongs in a cooler tier, even though that tier charges extra whenever the files are retrieved.
- Unattached volumes and disks
- Snapshots older than the retention you actually need
- Buckets without a lifecycle rule
- Stopped instances still holding paid disks
Look for the lines that quietly grow
Data transfer is the classic one. It starts as a small line in month one and becomes a large line a year later, once more customers and more services are talking to each other.
Traffic out to the internet, traffic between zones and traffic through NAT gateways each appear as a separate charge, so the total hides three different habits. Managed services come next. A managed database, a log platform or a queue bills for storage, requests and replicas on top of the instance. Support plans are often priced as a share of the total spend, so they rise whenever the rest rises, even when nothing about the support you receive has changed.
Logging needs its own look. Check ingestion in CloudWatch, Log Analytics or Cloud Logging. Verbose application logs sent to a hosted service can cost more than the servers that wrote them, particularly when debug level was left on after one incident.
Tie every line to a service and an owner
A line needs a name. Create a sheet with the line, the service, the team and the reason it exists, because a sheet works while tagging is still incomplete. Resource tags make this faster later.
Anything unnamed goes on a short list. Post that list in the engineers’ channel. Most unknown lines turn out to be a forgotten experiment, a migration leftover or a proof of concept that went live.
Watch untagged spend monthly. It should never surprise you.
Make the review a monthly habit
Set a fixed day after the invoice closes. Compare each service line with the previous month, write one sentence for every change that matters, and flag any line that moved without a reason. A reason in writing beats a vague feeling.
Keep the same columns every month. Share the sheet with finance and engineering together, so both sides read the same numbers and nobody argues from memory.
Your next step is small. Export last month’s bill, sort it by cost, and name an owner for the top ten lines before the week ends.
Cloud bill reading sheet
A one-page worksheet with six columns: invoice line, provider service, usage type or SKU, owning team, reason it exists and last month’s change. A second block lists the unnamed lines still to be chased, with the engineer asked and the reply date beside each.
Open a blank worksheet to printQuestions owners ask
Why is my invoice different from the console?
The invoice shows billed totals after credits, discounts and tax, while the console shows raw usage as it happens and may still be missing late postings. Compare after the month closes.
Which cloud bill lines should I check first?
Start with the three largest lines, then check data transfer, snapshots and support, because those usually explain most of the growth between one month and the next. Do that every month.
Do I need tags to read the bill?
No. Tags make attribution quicker, but a sheet that pairs each line with a service and an owner works well until tagging is complete.
How often should we review the bill?
Monthly at minimum, shortly after the invoice closes. A weekly glance at the cost dashboard helps catch a sudden jump before it becomes a full month of charges.
