Cloud bills don’t spike overnight so much as they leak, quietly, until someone in finance forwards an invoice with a red exclamation point in the subject line. AWS Cost Explorer and AWS Budgets are the two tools that stop that leak before it becomes a headline. Together they turn a vague sense of “we’re spending too much” into a dashboard you can act on, and an alert that fires before the number gets embarrassing. This tutorial walks through enabling Cost Explorer, building the reports that actually matter, wiring up Budgets and Slack alerts, tagging resources for allocation, and automating the whole thing with the AWS CLI and cost anomaly detection, so a team of any size can run its own lightweight FinOps practice without buying a third-party platform.
Don't miss new tech stories on Google
Add Tech Insider once in the Google app and our stories appear in your news suggestions.
Why AWS Cost Explorer and Budgets Matter in 2026
Multi-cloud FinOps has become one of the fastest-growing skill areas in cloud engineering. A 2026 cloud computing syllabus from Scaler now lists FinOps as a core topic alongside containers, Kubernetes, and serverless computing across AWS, Azure, and GCP, which tells you where hiring managers are looking. Search interest in aws cost explorer setup guides has stayed steady through 2026, and for good reason: it’s the free, built-in starting point before anyone reaches for a paid tool like Kubecost or a dedicated FinOps platform.
The pricing pressure is real too. An August 2026 multi-cloud cost comparison found GCP running roughly 11% cheaper than AWS on standard workloads, and up to 30% cheaper on licensed SQL Server workloads, while Azure keeps an edge on Microsoft-stack pricing. That kind of gap only matters if you can actually see where your AWS spend is going in the first place, which is exactly what Cost Explorer is built to show you. AWS itself has kept shipping new cost tooling this year: EC2 I8ge instances built on Graviton4 landed with roughly 60% better compute performance and 55% better storage I/O than the prior generation, and AWS Lambda Durable Functions for .NET reached general availability with support for functions that pause for up to a year, both of which change the math on what “cost-optimized” architecture looks like.
None of that matters if nobody is watching the bill. This guide is written for engineers and aws cost optimization practitioners who want a working setup by the end of the tutorial, not a theoretical overview.
How Cost Explorer, Budgets, and Cost Anomaly Detection Fit Together
It helps to think of these as three layers of the same system rather than three separate tools you have to choose between. Cost Explorer is the rear-view mirror: it shows what already happened, broken down by service, account, region, or tag, with enough history to spot a trend. AWS Budgets is the speed limit sign: you set a number in advance, and it warns you as actual or forecasted spend approaches or crosses it. Cost Anomaly Detection is the collision sensor: it doesn’t care what number you set, it watches for spend that deviates from your account’s own normal pattern and flags it even if you’re nowhere near a budget threshold.
Using all three together is what the FinOps Foundation describes as closing the loop between “Inform,” “Optimize,” and “Operate,” the three phases of the FinOps lifecycle. Cost Explorer handles the Inform phase by making spend visible. Budgets and rightsizing recommendations handle Optimize by giving you concrete levers to pull. Anomaly detection and the automated Slack alerts from Step 9 handle Operate by keeping the system running without someone manually checking a dashboard every day. Skipping any one of the three leaves a gap: visibility without alerts means you find out too late, and alerts without visibility mean you get paged without knowing why.
Cost Explorer vs the AWS Billing Console
New AWS users sometimes confuse Cost Explorer with the basic Billing console, and it’s worth being precise about the difference before diving into setup. The Billing and Cost Management dashboard shows your current month-to-date total and a simple summary chart; it’s what you see by default when you open Billing. Cost Explorer is a distinct, opt-in tool nested inside that same console that adds filtering, grouping by up to two dimensions at once, forecasting, and the rightsizing and Savings Plans recommendations covered in Step 5. If you’ve only ever looked at the top-level Billing dashboard and never clicked into Cost Explorer specifically, you’ve been looking at a fraction of what’s available for free.
Prerequisites and What You’ll Need
Before starting, confirm you have the following in place. None of this requires a paid AWS support plan, but a couple of steps do require root or management-account access.
- An active AWS account (standalone or the management account of an AWS Organizations setup), with at least a few days of billing history if possible
- Root user or IAM Identity Center access with the
ce:*andbudgets:*permissions, or the built-inBillingmanaged policy - AWS CLI v2 (v2.27 or later recommended) installed and configured with
aws configure - Python 3.10+ if you plan to run the optional automation script in Step 11
- An SNS topic or a Slack workspace with an incoming webhook, if you want budget alerts routed to chat instead of only email
- Roughly 90 minutes: about 30 minutes of active configuration, plus up to 24 hours of passive waiting for Cost Explorer’s historical data to populate
If you manage multiple AWS accounts under AWS Organizations, do every step in this guide from the management account first. Linked accounts can view cost data but can’t enable Cost Explorer or change organization-wide budget settings on their own.
Step 1: Enable AWS Cost Explorer
Cost Explorer is not on by default, even though every AWS account technically has access to it. Sign in to the AWS Cost Management console as the root user or an admin-level IAM identity, open the left navigation, and click Cost Explorer. You’ll see a one-time prompt to enable it.
Click Enable Cost Explorer. AWS will immediately start processing your historical billing data, going back up to 13 months, but full backfill can take up to 24 hours to finish populating. Don’t panic if the first charts you see look sparse; check back the next day.
If you’re the management account of an AWS Organizations structure, this single action enables Cost Explorer for the entire organization, letting you view consolidated costs across every linked account. Individual member accounts can view their own slice of the data but cannot re-enable or disable the feature themselves.
Step 2: Understand the Cost Explorer Interface
Once enabled, Cost Explorer opens to a default view showing the last six months of spend grouped by service. Four elements matter most:
- Date range — Cost Explorer holds up to 13 months of historical data and can forecast up to 18 months forward
- Group by — the dimension used to break down the bar chart: Service, Account, Region, Usage Type, or a custom Cost Allocation Tag
- Filters — narrow the view to specific accounts, services, regions, or tags before grouping
- Granularity — daily, monthly, or hourly (hourly requires enabling hourly granularity separately and costs extra)
The single most useful first move is switching Group by to Service and looking at the last 3 months. In most accounts that have never been audited, two or three services (usually EC2, S3, or a forgotten NAT Gateway) account for 60-80% of the bill. Find those first before optimizing anything else.
Step 3: Build Your First Custom Cost Report
Default reports are a starting point, not the finish line. Click New report and build a saved report you’ll actually return to weekly:
- Set Time range to “Last 3 months” with monthly granularity
- Set Group by to Service, then add a secondary group by Linked Account if you run multiple accounts
- Under Filters, exclude credits and refunds so the trend line reflects real usage, not accounting noise
- Click Save as and name it something specific, like “Monthly Spend by Service — Production”
Repeat this for at least one more report grouped by Cost Allocation Tag (covered in Step 6) once tags are in place, so you can see spend by team or environment instead of only by AWS service. Saved reports show up on your Cost Explorer home screen every time you log in, which is what makes this a five-minute weekly habit instead of a rebuild-from-scratch chore.
Step 4: Filter and Drill Down by Tags, Regions, and Usage Type
Once you’ve spotted a service with unexpectedly high spend, drill in. Click into the EC2 line item on your chart, then change Group by to Usage Type. This breaks EC2 costs down into categories like BoxUsage:m6i.xlarge, EBS:VolumeUsage.gp3, and DataTransfer-Out-Bytes, which is usually where the real story is. A surprisingly large chunk of “EC2” spend on many accounts turns out to be attached EBS volumes on stopped instances, or cross-region data transfer that nobody flagged.
Filtering by Region is worth doing at least once a quarter too. It’s common for a test resource spun up in an unused region (say, eu-central-1 when the team only operates in us-east-1) to sit there accumulating small charges for months because nobody looks at that region’s console.
Step 5: Turn On Cost Explorer’s Rightsizing and Savings Recommendations
In the left navigation under Cost Explorer, open Recommendations. This surfaces two distinct views:
- Rightsizing recommendations — flags EC2 instances that are consistently under-utilized (based on CPU, memory, and network metrics collected over the past 14 days) and suggests a smaller instance type or termination
- Savings Plans recommendations — models your last 7, 30, or 60 days of On-Demand usage and estimates the savings from committing to a 1-year or 3-year Compute Savings Plan
Treat these as a starting shortlist, not an auto-pilot decision. Rightsizing recommendations don’t know that an instance is intentionally over-provisioned for a Black Friday-style traffic spike next month. Cross-reference against your own capacity planning before downsizing anything customer-facing.
Step 6: Set Up Cost Allocation Tags
Tags are what turn Cost Explorer from “AWS spent $40,000 last month” into “Team A’s staging environment spent $6,200 and Team B’s production spent $19,000.” Without tags, cost attribution by team, project, or environment is close to impossible at scale.
Go to Billing and Cost Management > Cost Allocation Tags. You’ll see two sections: AWS-generated tags (like aws:createdBy) and user-defined tags, which are the ones you’ve applied to resources via the console, CLI, or infrastructure-as-code. Select the tags you want tracked, such as Environment, Team, or CostCenter, and click Activate. It can take up to 24 hours for a newly activated tag to start appearing in Cost Explorer’s Group By options.
A tagging convention worth adopting from day one, before spend gets messy:
| Tag Key | Purpose | Example Values | Required On |
|---|---|---|---|
| Environment | Separate prod spend from non-prod | production, staging, dev | All billable resources |
| Team | Attribute cost to the owning team | platform, data-eng, mobile | All billable resources |
| Project | Track cost per initiative or client | checkout-v2, internal-tools | Compute and storage |
| CostCenter | Map to finance’s chargeback codes | CC-1042, CC-2201 | All billable resources |
| Owner | Identify who to contact about orphaned resources | email or Slack handle | EC2, RDS, EBS volumes |
Enforce these with an AWS Config rule or a Service Control Policy that denies resource creation without required tags. Retrofitting tags on resources that already exist is tedious; the AWS Resource Groups Tag Editor lets you bulk-apply tags across services in one pass if you’re starting from a completely untagged account.
Step 7: Create Your First AWS Budget
Cost Explorer tells you what already happened. AWS Budgets is what warns you before it happens again. Navigate to Billing and Cost Management > Budgets > Create budget.
Resist the temptation to create one giant budget covering the whole account. A single “catch-all” budget tells you the bill is high without telling you why. Instead, create narrower, purpose-built budgets:
- Choose Customize (advanced), not a template
- Budget type: Cost budget for most use cases (Usage and Savings Plans budgets exist for more specific needs)
- Set the period to Monthly, recurring
- Enter a budgeted amount based on your last 3 months’ average from Cost Explorer, plus 10-15% headroom
- Under Filters, scope this budget to one dimension: a specific tag value (like
Team = platform), a linked account, or a service - Name it precisely, e.g.,
platform-team-production-monthly
Repeat this for each team, environment, or major service you want tracked independently. Five focused budgets tell you more than one broad one.
Step 8: Configure Budget Alert Thresholds
A budget without alerts is just a number nobody looks at. On the same creation flow, scroll to Alert thresholds and add multiple triggers rather than a single one at 100%:
| Threshold | Trigger Type | Typical Action |
|---|---|---|
| 50% | Actual spend | Informational — no action needed yet |
| 80% | Actual spend | Review recent spend drivers in Cost Explorer |
| 100% | Actual spend | Escalate to team lead, investigate immediately |
| 100% | Forecasted spend | Early warning before the month even ends |
The forecasted spend trigger is the one most teams skip and shouldn’t. It uses AWS’s own forecasting model to project where you’ll land by month-end based on the current trend, so you get a warning on day 12 instead of a surprise on day 30. For each threshold, attach an SNS topic (email, or chained into Slack/PagerDuty, covered in Step 9) rather than relying on the AWS console notification alone, which is easy to miss.
Step 9: Route Budget Alerts to Slack
Email alerts get buried. Slack alerts get seen. Here’s the pattern for wiring AWS Budgets into a Slack channel using SNS and a Lambda function:
First, create an SNS topic and subscribe your budget alert to it, either through the console during budget creation or via CLI:
aws sns create-topic --name budget-alerts-platform-team
aws budgets create-budget \
--account-id 111122223333 \
--budget file://budget-definition.json \
--notifications-with-subscribers file://notifications.json
Where notifications.json points the notification at the SNS topic ARN you just created:
[
{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 80,
"ThresholdType": "PERCENTAGE"
},
"Subscribers": [
{
"SubscriptionType": "SNS",
"Address": "arn:aws:sns:us-east-1:111122223333:budget-alerts-platform-team"
}
]
}
]
Next, write a small Lambda function subscribed to that SNS topic that forwards the message to Slack via an incoming webhook:
import json
import urllib.request
SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/T000/B000/XXXXXXXX"
def handler(event, context):
message = json.loads(event["Records"][0]["Sns"]["Message"])
text = (
f":rotating_light: *Budget Alert*\n"
f"Budget: {message.get('budgetName', 'unknown')}\n"
f"Threshold crossed — check Cost Explorer for the driver."
)
req = urllib.request.Request(
SLACK_WEBHOOK_URL,
data=json.dumps({"text": text}).encode("utf-8"),
headers={"Content-Type": "application/json"},
)
urllib.request.urlopen(req)
return {"statusCode": 200}
Subscribe this Lambda function to the SNS topic, and every threshold breach lands directly in your team’s channel within seconds, not whenever someone happens to check their inbox.
Step 10: Enable Cost Anomaly Detection
Budgets catch spend that crosses a threshold you defined in advance. Cost Anomaly Detection catches spend that doesn’t match your normal pattern, even if it’s technically still under budget. It uses machine learning trained on your account’s own historical usage, so it adapts to seasonal patterns instead of relying on a fixed number.
Go to Cost Management > Cost Anomaly Detection > Create monitor. Choose a monitor type:
- AWS services monitor — flags anomalies at the individual service level (recommended starting point)
- Linked account monitor — useful for organizations tracking anomalies per team or subsidiary
- Cost category or Cost allocation tag monitor — flags anomalies within a specific tagged grouping, once tags from Step 6 are active
After creating the monitor, set up an alert subscription with a dollar threshold (e.g., only alert if the anomaly’s impact exceeds $50) so you’re not paged over a $2 fluctuation. This has caught real incidents in practice, like a misconfigured Lambda function in an infinite retry loop or a forgotten load test left running over a weekend, both of which show up as anomalies hours before they’d cross a monthly budget threshold.
Anomaly Detection also improves the longer it runs, since its baseline model needs a few weeks of usage history before it can reliably tell normal variation from a genuine spike. Don’t judge the feature as ineffective if the first two weeks produce no alerts, or produce one that turns out to be a false positive from a legitimate planned deployment. Give it a full billing cycle before deciding whether the dollar threshold needs adjusting.
Step 11: Automate Reporting with the AWS CLI and Cost Explorer API
The console is fine for exploration, but a recurring weekly report should be scripted. The get-cost-and-usage CLI command pulls the same data Cost Explorer’s UI shows, structured as JSON you can pipe into a report, a spreadsheet, or another Slack message:
aws ce get-cost-and-usage \
--time-period Start=2026-07-25,End=2026-08-24 \
--granularity MONTHLY \
--metrics "UnblendedCost" \
--group-by Type=DIMENSION,Key=SERVICE \
--output json > monthly-cost-report.json
A short Python script can turn that raw JSON into a readable weekly digest, sorted by top spenders:
import json
with open("monthly-cost-report.json") as f:
data = json.load(f)
groups = data["ResultsByTime"][0]["Groups"]
sorted_costs = sorted(
groups,
key=lambda g: float(g["Metrics"]["UnblendedCost"]["Amount"]),
reverse=True,
)
print("Top 5 services by cost:")
for g in sorted_costs[:5]:
service = g["Keys"][0]
amount = float(g["Metrics"]["UnblendedCost"]["Amount"])
print(f" {service}: ${amount:,.2f}")
Schedule this with an EventBridge rule triggering a Lambda function weekly, and pipe the output to the same Slack webhook from Step 9. Note that the Cost Explorer API itself carries a per-request charge (currently $0.01 per API request beyond the free console usage), so batch your calls, cache results, and avoid calling it in a tight loop.
For teams that want to go further than a single weekly digest, the AWS Cloud Financial Management blog regularly publishes reference architectures for exporting Cost and Usage Reports (CUR) into Amazon Athena or a BI tool like QuickSight, which is the natural next step once a team outgrows a single Slack digest and wants a shared dashboard multiple stakeholders can query on their own.
Step 12: Set Up Cross-Account Cost Visibility for AWS Organizations
If you run more than one AWS account, don’t leave each team reading its own bill in isolation. From the management account, go to AWS Organizations settings and confirm Consolidated Billing is active (it’s enabled by default when you create an organization). Then, back in Cost Explorer, group any report by Linked Account to see every member account’s spend side by side.
Grant read-only cost visibility to individual team leads using an IAM policy scoped to the ce:GetCostAndUsage and ce:GetCostForecast actions, restricted by a condition on their team’s cost allocation tag or linked account ID. This lets teams see their own numbers without exposing the whole organization’s spend to everyone, which matters more than it sounds like once you’re past a handful of accounts.
Securing Cost Data with Least-Privilege IAM Policies
Billing data is sensitive in a way that’s easy to overlook. Spend broken down by tag can reveal headcount, project priorities, or an unannounced product launch to anyone with read access, so it’s worth locking down Cost Explorer and Budgets permissions the same way you’d lock down access to production databases, rather than defaulting to the broad Billing managed policy for every engineer.
A reasonable baseline policy for a team lead who needs read access to their own team’s costs, without visibility into the rest of the organization, looks like this:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ce:GetCostAndUsage",
"ce:GetCostForecast",
"ce:GetDimensionValues",
"ce:GetTags",
"budgets:ViewBudget"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/Team": "platform"
}
}
}
]
}
Reserve full ce:* and budgets:* access, including the ability to create or delete budgets and activate cost allocation tags, for a small group: usually the platform or FinOps lead plus whoever owns billing in finance. Everyone else should get read-only, tag-scoped access at most. This also protects against a surprisingly common mistake: someone with full budget permissions accidentally deleting a budget while cleaning up test resources, which silences alerts for an entire team without anyone noticing until the next invoice.
Common Pitfalls When Setting Up AWS Cost Explorer and Budgets
These mistakes come up repeatedly in real account audits, and they’re worth checking against your own setup before calling this done.
- Waiting for real-time data. Cost Explorer refreshes roughly once every 24 hours, not in real time. Don’t panic when yesterday’s spend hasn’t shown up yet; it’s a delay, not a bug.
- Creating one budget for the entire account. A single catch-all budget tells you the bill is high without telling you which team or service caused it. Narrower budgets scoped by tag or linked account are far more actionable.
- Forgetting to activate cost allocation tags. Tagging resources in your infrastructure-as-code isn’t enough; the tag also has to be manually activated in Billing and Cost Management before Cost Explorer will let you group by it.
- Only setting an “actual spend” alert at 100%. By the time actual spend crosses 100%, the money’s already spent. Pair it with a forecasted-spend alert so you get warned mid-month.
- Ignoring rightsizing recommendations because they seem aggressive. They’re based on real utilization data, not guesses. Even if you don’t act on every one, review them monthly; ignoring them for a full quarter usually means missing real savings.
- Not excluding credits and refunds from trend reports. A one-time credit can make a cost trend chart look like spend dropped dramatically, masking the real underlying trend the following month.
- Calling the Cost Explorer API in a loop without caching. Each API call carries a small per-request charge. A poorly written automation script that polls every minute can quietly rack up its own line item on the bill.
- Skipping cross-account visibility in multi-account setups. Without consolidated views grouped by linked account, teams operate blind to each other’s spend, and duplicate resources across accounts go unnoticed.
Complete Working Example: A Team Cost Monitoring Stack
Putting the previous steps together, here’s what a complete, minimal cost-monitoring setup looks like for a mid-sized engineering team, defined as infrastructure-as-code-ready pieces:
- Cost Explorer enabled at the management account level, with two saved reports: “Monthly by Service” and “Monthly by Team Tag”
- Five cost allocation tags activated:
Environment,Team,Project,CostCenter,Owner - One AWS Budget per team, each scoped by the
Teamtag, with alerts at 50%, 80%, 100% actual, and 100% forecasted - An SNS topic per team feeding a shared Lambda function that posts formatted alerts to that team’s Slack channel
- A Cost Anomaly Detection monitor scoped to AWS services, with a $50 minimum impact threshold before alerting
- A weekly EventBridge-triggered Lambda function that runs
get-cost-and-usage, formats the top 5 cost drivers, and posts a digest to a shared #cloud-costs channel
This setup costs essentially nothing beyond the small per-request Cost Explorer API charges from the weekly digest script, and it replaces what would otherwise require a third-party FinOps tool subscription for a team under roughly 20-30 engineers.
Example Output: What a Healthy Cost Report Looks Like
After running the Step 11 script against a typical mid-size account, the output should resemble something like this:
Top 5 services by cost:
Amazon Elastic Compute Cloud - Compute: $8,412.55
Amazon Relational Database Service: $3,204.10
Amazon Simple Storage Service: $1,890.44
Amazon CloudFront: $1,102.75
AWS Lambda: $340.12
Budget status:
platform-team-production-monthly: 78% of $12,000 (forecast: 96%)
data-team-staging-monthly: 41% of $3,500 (forecast: 55%)
Anomalies detected this week: 1
Service: AWS Lambda — impact: $61.20 above expected baseline
That output tells a team lead everything they need in fifteen seconds: EC2 is still the dominant cost, the platform team’s production budget is trending toward a forecast overrun before month-end, and something in Lambda is worth a five-minute look before it becomes a real anomaly next week.
Advanced Tips for Ongoing Cost Optimization
Once the basic setup is running, a few refinements separate a team that occasionally checks the bill from one running an actual FinOps practice:
- Use Cost Categories, not just tags, for finance-facing reports. Cost Categories let you define rules (e.g., “if the tag is missing, default to ‘Unallocated'”) so finance never sees a mystery gap in the total.
- Pair Savings Plans recommendations with a coverage report. Cost Explorer’s Savings Plans coverage view shows what percentage of eligible usage is already covered, which matters more than the discount percentage on any single recommendation.
- Review rightsizing recommendations against Kubernetes-hosted workloads separately. Cost Explorer’s rightsizing engine looks at EC2 instance-level metrics, which can be misleading for nodes running mixed Kubernetes pods. Cross-check with Kubecost or OpenCost if a meaningful share of your fleet runs containerized workloads on Kubernetes.
- Set a quarterly tag audit. Resources drift out of compliance with tagging policy constantly as new engineers spin things up. A quarterly Resource Groups Tag Editor sweep keeps allocation data trustworthy.
- Compare month-over-month growth rate, not just absolute spend. A budget at 60% utilization sounds fine until you notice it grew 40% month over month; the forecasted-spend alert from Step 8 is designed to catch exactly this.
Troubleshooting Common Issues
Here are the issues that come up most often once a team has this running in production.
- “Cost Explorer shows no data” after enabling it. This is normal for the first 24 hours. If it’s been longer, confirm you enabled it from the correct account (management account for org-wide data).
- Budget alert never fires even though spend clearly exceeded the threshold. Check that the SNS topic’s subscription confirmation email was actually confirmed; unconfirmed subscriptions silently drop notifications.
- Tag doesn’t appear in the “Group by” dropdown. Cost allocation tags must be manually activated in Billing and Cost Management even if the tag already exists on the resource; activation can take up to 24 hours to reflect.
- Slack alerts arrive but with no useful detail. The raw SNS message from Budgets is fairly bare-bones; the Lambda function in Step 9 needs to enrich it, typically by making a follow-up
get-cost-and-usagecall to identify the actual cost driver before posting. - Forecast numbers look wildly wrong early in the month. AWS’s forecast model needs a baseline of consistent daily usage; forecasts made in the first few days of a month, or right after a major architecture change, will be unreliable until the pattern stabilizes.
- Cost Anomaly Detection isn’t flagging an obvious spike. Anomaly detection compares against your account’s own historical pattern; if a service has always been volatile, a spike within that historical volatility range won’t register as anomalous even if it looks big in absolute dollars.
- API automation script hits a throttling error. The Cost Explorer API has request-rate limits separate from other AWS APIs; add exponential backoff retry logic rather than firing requests in a tight loop.
- Linked account can’t see the budget the management account created. By design, budgets created in the management account aren’t automatically visible to linked accounts unless you explicitly share access via IAM policy or create the budget from within that specific account instead.
AWS Cost Explorer vs Third-Party FinOps Tools
Cost Explorer and Budgets cover most of what a small-to-mid-size team needs, but it’s worth knowing where the built-in tools stop and third-party platforms pick up:
| Capability | AWS Cost Explorer + Budgets | Kubecost / OpenCost | Dedicated FinOps Platform |
|---|---|---|---|
| Base cost | Free (small per-API-call fee for automation) | Free (OpenCost) / paid tiers (Kubecost) | Typically % of managed spend or per-seat licensing |
| Multi-cloud visibility | AWS only | Any Kubernetes cluster, multi-cloud | Usually multi-cloud by design |
| Kubernetes pod-level cost allocation | Limited (node-level only) | Native, pod and namespace level | Varies by vendor |
| Setup time | Under 2 hours | Half a day to a full day | Days to weeks for full rollout |
| Best fit | Single-cloud AWS teams, small to mid-size | Kubernetes-heavy workloads | Large multi-cloud enterprises |
For teams running primarily on AWS without heavy Kubernetes usage, Cost Explorer and Budgets alone, configured the way this tutorial describes, cover the vast majority of what a paid FinOps platform would otherwise charge for.
Frequently Asked Questions
Is AWS Cost Explorer free to use?
Yes, the Cost Explorer console itself is free. Only the underlying API (used for automation like the script in Step 11) carries a small per-request charge, currently $0.01 per API request beyond standard console usage.
How far back does AWS Cost Explorer’s historical data go?
Up to 13 months of historical cost and usage data, plus forecasts up to 12 months into the future.
Do I need AWS Organizations to use Cost Explorer and Budgets?
No. Both work fine on a single standalone account. Organizations adds consolidated, cross-account views on top, which matters once you’re managing more than one account.
Why don’t my newly created tags show up in Cost Explorer right away?
Cost allocation tags must be manually activated in Billing and Cost Management, and it can take up to 24 hours after activation for the tag to appear as a “Group by” option, even if the resource itself was tagged instantly.
What’s the difference between AWS Budgets and Cost Anomaly Detection?
Budgets alert you when spend crosses a fixed threshold you set manually. Cost Anomaly Detection uses machine learning trained on your own historical usage to flag spend that deviates from your normal pattern, even if it’s still technically under budget.
Can I set budgets for a specific team without giving them access to the whole account’s billing?
Yes. Scope the budget by a cost allocation tag (like Team) and grant the team read-only IAM access limited to Cost Explorer actions filtered by that same tag condition.
Should I use Cost Explorer if most of my workloads run on Kubernetes?
Cost Explorer still works, but its cost breakdowns stop at the EC2 node level, not the pod or namespace level. For granular Kubernetes cost allocation, pair it with Kubecost or OpenCost, both of which read your cluster’s actual resource requests and usage.
How often should a team review its AWS Budgets and Cost Explorer reports?
Weekly for the saved Cost Explorer reports is a reasonable baseline for an active team. Budget alerts and anomaly detection run continuously in the background regardless, so the weekly review is about catching slower trends the automated alerts wouldn’t flag on their own.
Related Coverage
- AWS Control Tower vs Azure Landing Zone: $913 Gap [2026]
- AWS Fargate vs Cloud Run vs Container Apps: $29.55 Gap [2026]
- Redshift vs Snowflake vs BigQuery: $1.50/hr vs $4.69/TB [2026]
- EKS vs AKS vs GKE: $73/mo vs Free Control Plane [2026]
- Kubernetes on AWS EKS Setup: 12 Steps, 100 Min [2026]
- How to Set Up AWS Lambda: 12 Steps, 90 Min [2026]


