How to Build Your Own AWS Cost and Usage Dashboard

If you've ever opened an AWS bill and felt a mix of confusion and dread, you're not alone. AWS billing is notoriously complex — hundreds of services, dozens of pricing models, and line items that seem to multiply overnight. That's exactly why we built this AWS Cost and Usage Reporting (CUR) dashboard: to turn raw billing data into clear, actionable insights without requiring a PhD in cloud economics.

To build your own dashboard, open the template in the local Moment app, which is free to download and use. The dashboard, including all of the database queries and visualizations, is built entirely from Markdown files. Use the dashboard as is, or easily customize it with a coding agent like Claude Code. We call these Documents That Do Things and they form the core of our vision to help you Run your entire business from a Markdown file. 

Here's a walkthrough of every page of the dashboard and what you can do with it. (This entire blog post is written using Moment. The images in the post are not at all static images. They are React components backed by database queries embedded in a Markdown file.)

The entire dashboard runs on your CUR data queried through Athena — no third-party services, no data leaving your account. Set up a CUR export with Athena integration, configure three environment variables, log in via AWS SSO, and every page lights up with your real cost data. Whether you're an engineering manager trying to understand monthly trends or a platform engineer hunting for untagged resources, this dashboard puts the answers at your fingertips.

Cost Dashboard: Your Executive Summary

The Cost Dashboard is your landing page and the quickest way to answer the question every engineering leader asks: "How much are we spending, and is it going up?"

At the top, three summary cards show your total spend, the savings you're getting from Savings Plans and Reserved Instances, and your overall SP/RI coverage percentage. Below that, two side-by-side charts give you the full picture. The Savings Plan Coverage chart is a stacked bar showing how much of your daily spend is covered by Savings Plans, Reserved Instances, and on-demand pricing, with coverage percentages labeled above each bar. The Monthly Spend chart aggregates everything into monthly totals and projects the current month's spend based on the daily average so far — invaluable for catching runaway costs before the bill closes.

A period selector lets you toggle between three-month, six-month, and twelve-month views, so you can zoom in on recent anomalies or zoom out to see long-term trends.

Report: All Resources — Find Your Biggest Cost Drivers

The All Resources report is the page you go to when you need to answer "what exactly is costing us so much?" It queries CUR at the individual resource level and returns up to 1,000 of your most expensive resources, ranked by total unblended cost.

Each row shows the resource ID, a human-readable name (pulled from the Name cost allocation tag if you've activated it), the AWS service, region, and account. You can filter by service, account, and region, search by keyword, and sort by any column. Rows are expandable — click one to see the daily cost trend for that specific resource rendered as a mini chart. Resource IDs are copyable with a single click, making it easy to jump into the AWS console to investigate further.

This page is the CUR equivalent of tools like Vantage Resource Reports, but running entirely on your own data with no third-party access required.

Report: Data Transfer — The Hidden Cost Center

Data transfer charges are one of the most commonly overlooked line items in AWS bills. Cross-AZ traffic, internet egress, inter-region replication — they add up fast and are rarely visible in high-level billing summaries.

The Data Transfer report isolates every line item where product_product_family = 'Data Transfer' and breaks it down by transfer type, service, region, or account. Summary cards at the top show total cost, total volume in GB or TB, and average cost per GB. Below that, color-coded badges highlight each transfer type — Internet Egress in red, Cross-AZ in amber, Inter-Region in orange — with both the dollar amount and its percentage of total transfer spend.

A stacked daily bar chart lets you visualize trends over time, and the grouped table below is expandable to show individual usage types within each group. Filters for transfer type, service, account, and a free-text search make it easy to drill into specific patterns, like "how much is our NAT Gateway costing us in us-east-1?"

Report: RI and SP Coverage — Are Your Commitments Working?

Reserved Instances and Savings Plans can cut your compute bill by 30-70%, but only if they're properly sized and actually covering your usage. The RI and SP Coverage report answers that question definitively.

The headline metric is your overall coverage percentage, color-coded green (above 70%), amber (40-70%), or red (below 40%). Four summary cards show total eligible spend, on-demand spend, and estimated savings from your existing commitments. A breakdown section splits costs into Reserved Instance, Savings Plan, and On-Demand buckets with both dollar amounts and percentages.

You can group the data by service, region, or account to find exactly where coverage gaps exist. The stacked daily chart can be viewed by coverage type (showing the RI/SP/On-Demand split over time) or by any of the grouping dimensions. The expandable table lets you click into any row to see per-service, per-region, per-account detail. If you notice that EC2 in eu-west-1 has only 20% coverage while us-east-1 is at 85%, you've just found your next Savings Plan purchase.

Tag Hygiene Report — Track Your Tagging Discipline

Cost allocation tags are the foundation of cost attribution — without them, you can't answer "which team owns this cost?" or "how much does the staging environment cost?" But activating tags is only half the battle. You also need to make sure resources are actually tagged.

The Tag Hygiene Report scans your CUR data for every activated cost allocation tag and computes coverage percentages. A summary table lists each tag with its coverage rate, tagged spend, and untagged spend, along with a color-coded progress bar. Click any tag to drill into per-service coverage — you might discover that your EC2 instances are 95% tagged but your Lambda functions are only 30% tagged.

The most actionable section is at the bottom: a table of your top untagged resources by cost for the selected tag, complete with resource IDs, service, region, and account. This gives your team a concrete punch list — "tag these 20 resources and you'll go from 60% to 85% coverage on the Team tag."

Frequently Asked Questions (FAQ)

Is this dashboard free?

Yes, the AWS Cost and Usage Dashboard template is offered free of charge (it consists of markdown files), and the Moment application can be used by individuals for free (or, in a team setting for a small per month charge).

How Do I Set This up to Work with My AWS Account?

The entire dashboard runs on your CUR data queried through Athena — no third-party services, no data leaving your account. Set up a CUR export with Athena integration, configure three environment variables, log in via AWS SSO, and every page lights up with your real cost data.

Log in via AWS SSO using the AWS login button

The following values are hardcoded in the topResourcesRequest request page — update them if your CUR setup differs:

Athena database: athenacurcfn_moment_c_u_r_athena

CUR table: momentcurathena

S3 output location: s3://momentcurathena/query-results/

Cost allocation tags — to see resource names and custom tags in your reports, activate them in AWS:

Go to Billing → Cost allocation tags in the AWS console

Activate any user:* tags you want to appear in CUR (e.g., Name, Environment, Team)

Tags take 24 hours to start appearing in new CUR data

Only activated tags show up as resource_tags_user_* columns in Athena

EKS Split Cost Allocation Data — to get pod/namespace-level Kubernetes cost breakdowns in CUR:

Go to AWS Billing & Cost Management → Preferences (left nav) in the AWS console

Scroll to Split Cost Allocation Data and enable it for Amazon EKS

Once enabled, CUR will populate split_line_item_* columns with per-pod cost allocation

Takes ~24 hours to start appearing in new CUR data

Key columns: split_line_item_parent_resource_id, split_line_item_split_cost, split_line_item_split_usage_ratio

This is required for the Kubernetes Costs page to work without needing OpenCost/Kubecost




Appendix