How to Track and Optimize Cloud Costs Across Multiple AWS Accounts After a Big Migration
A layered, tool-by-tool guide to multi-account cloud cost visibility, allocation, commitments, and waste removal after a large migration - comparing AWS Cost Explorer, Vantage, CloudZero, CloudFix, ProsperOps, nOps, Kubecost, and where a platform layer like Qovery cuts spend at the source.
The best post-migration stack has four layers, and most teams buy only one. Layer 1, visibility and allocation: AWS Cost Explorer plus Cost and Usage Report 2.0 in Athena (free), Vantage, CloudZero, or Apptio Cloudability. Layer 2, commitment and rate optimization: ProsperOps, nOps, or self-managed Savings Plans. Layer 3, resource waste remediation: CloudFix, AWS Compute Optimizer, Sedai. Layer 4, structural environment lifecycle: Qovery, or scheduling you build and maintain yourself.
Build the free AWS-native foundation before you buy anything. AWS Organizations with consolidated billing, cost allocation tags enforced by tag policies and SCPs, Cost and Usage Report 2.0 exported to S3 as Parquet and queried in Athena, plus AWS Budgets and Cost Anomaly Detection. Every paid FinOps tool reads that same CUR, so bad tags in means bad dashboards out.
Do not buy Savings Plans in the first weeks after a migration. Delete waste and right-size first, then commit against a stabilized baseline. A 1 or 3 year commitment bought on lift-and-shift usage locks in the exact over-provisioning you migrated to remove, and AWS Migration Acceleration Program credits make the first months' baseline fiction.
Non-production is usually the biggest recoverable line item. An always-on dev or staging environment runs 168 hours a week for a team working about 50, so it sits idle roughly 70% of the time. Stopping or destroying it outside working hours removes that cost with no developer trade-off.
Rank tools by which layer they own and whether they act on your infrastructure or only report on it. Cost dashboards are read-only. Qovery does not replace CloudZero, Vantage, ProsperOps, or Kubecost: it deploys apps inside your own AWS, GCP, Azure, or Scaleway account or your existing Kubernetes cluster (BYOC), and cuts spend structurally with environment auto-stop, per-pull-request preview environments, and shared right-sized clusters, so the bill, the EDP, and the Savings Plans stay in your name.
Most teams come out of a big migration and buy a dashboard. A dashboard has never deleted an idle environment.
If your job this quarter is tracking and optimizing cloud costs across multiple AWS accounts after a large migration, the honest answer is a four-layer stack, and almost every "top 10 tools" listicle stops at layer one. Layer 1 is visibility and allocation (AWS Cost Explorer plus Cost and Usage Report 2.0 in Athena, then Vantage, CloudZero, or Apptio Cloudability). Layer 2 is commitment and rate optimization (ProsperOps, nOps, or Savings Plans you manage yourself). Layer 3 is resource waste remediation (CloudFix, AWS Compute Optimizer, Sedai). Layer 4 is structural environment lifecycle (a platform like Qovery, or scheduling you build and maintain forever).
The reason this matters is that the waste is real and it is growing. Flexera's 2026 State of the Cloud Report, its 15th annual edition published in March 2026, puts estimated wasted cloud spend back up to 29%, the first rise in five years. The FinOps Foundation's State of FinOps 2025 found that reducing waste and optimizing usage was the top priority practitioners reported, ahead of everything else. So the market agrees on the problem. It just keeps buying the layer that reports on it instead of the layers that fix it.
Here is the part nobody in those listicles will tell you: do not buy Savings Plans right after a migration. I will come back to why that is the most expensive mistake on this list.
What actually goes wrong with cloud costs after a large migration?
Post-migration cost overruns are structural, not a pricing problem. The five recurring causes are on-prem-sized instances, always-on non-production environments, zombie resources like unattached EBS volumes and idle NAT gateways, per-team account sprawl with no tag hygiene, and AWS Migration Acceleration Program credits hiding the real run rate. A cost dashboard surfaces every one of them and fixes none.
Take them in order of typical dollar impact:
On-prem-sized instances. Lift-and-shift copies the datacenter, including the 3x headroom you provisioned because buying a new server took six weeks. In the cloud that headroom is a monthly charge.
Always-on non-production. Dev, staging, and QA get cloned from production sizing and then run nights and weekends for nobody. More on this in its own section, because it is usually the single biggest recoverable number.
Account sprawl without tags. Consolidated billing rolls every account into one invoice. Without activated cost allocation tags, nobody can answer "whose $40k line item is this?"
MAP credits masking the run rate. AWS Migration Acceleration Program credits offset your first months, so bill shock lands in month four to six, not month one. Any commitment baseline you calculate before credits burn off is fiction.
Failure mode
Why the migration caused it
How you detect it
Which layer fixes it
Typical time to fix
On-prem-sized instances
Lift-and-shift copied datacenter headroom you no longer need
AWS Compute Optimizer rightsizing findings; Cost Explorer by instance type
Layer 3 (waste) then Layer 2 (commit)
Days to weeks
Always-on non-production
Dev/staging cloned from prod sizing, never scheduled off
Cost Explorer filtered to non-prod accounts/tags; usage-by-hour in CUR
Layer 4 (structural)
Days
Zombie storage and networking
Resources orphaned by the cutover, never cleaned up
CUR 2.0 in Athena for unattached volumes, idle NAT/ALB, old snapshots
Layer 3 (waste)
Hours to days
Account sprawl without tags
Per-team accounts spun up fast, no tagging standard
Cost allocation tags showing large untagged spend
Layer 1 (allocation)
Weeks (never retroactive)
MAP credits masking run rate
Migration credits offset the true bill for months
CUR with credits stripped out; compare gross vs net
Layer 2 (commit later)
Wait for credits to burn
What should you set up in AWS before buying any cost tool?
Before you buy anything, build the free AWS-native foundation: AWS Organizations with consolidated billing, an enforced tagging standard, Cost and Usage Report 2.0 delivered to S3 as Parquet and queried with Athena, plus AWS Budgets and Cost Anomaly Detection. Every third-party FinOps tool ingests that same CUR, so buying one before this step just buys a prettier view of the same blind spots.
Do these in order:
Turn on AWS Organizations with consolidated billing. Savings Plans and Reserved Instance discounts are then shared automatically across every linked account. When one team must not absorb another's commitment, the management account can turn discount sharing off per account from the same page.
Export Cost and Usage Report 2.0 to S3. Through AWS Data Exports you get Parquet output with hourly, resource-level, multi-account granularity that Cost Explorer alone cannot give you. The report itself is free; you pay only for S3 storage and the Athena data you scan.
Do showback before chargeback. Assign a named owner to every account and every environment before you argue about numbers. That is the FinOps Framework's Inform phase, and skipping it is why cost meetings turn into blame meetings.
One pitfall deserves a loud warning: Kubernetes and shared EC2 instances break tag-based allocation. Dozens of workloads share one node and one instance ID, so no amount of tagging discipline tells you what the checkout service cost. That is the exact gap Kubecost and OpenCost fill, and tags will never close it.
Which tools track and optimize costs across multiple AWS accounts, and how do they differ?
No single tool covers all four layers well, so the honest answer for multiple AWS accounts is a stack: one allocation tool (Vantage, CloudZero, or Apptio Cloudability on top of CUR 2.0), one commitment engine (ProsperOps or nOps), one waste-remediation mechanism (CloudFix or Compute Optimizer plus scripts), Kubecost or OpenCost for shared clusters, and one platform layer that stops waste being created (Qovery). Rank vendors by which layer they own and whether they act on your infrastructure or only report on it, because that single distinction explains most disappointment with FinOps tooling.
Visibility and allocation.Vantage has a genuine free Starter tier (up to $2,500 in monitored cloud spend, three users) and paid tiers from $30 a month, and it is built for engineers. CloudZero and Apptio Cloudability are quote-based and lean toward finance and unit-cost reporting. CloudCheckr is now part of the Spot portfolio that Flexera acquired from NetApp in March 2025, so treat it as a Flexera product now. Amnic prices on cloud spend plus team size with a free 14-day audit. All of them read the same CUR you already have.
Commitment and rate optimization.ProsperOps automates Savings Plan and Reserved Instance laddering and charges a share of realized savings; it also promotes a metric it calls Effective Savings Rate, which is a ProsperOps definition, so read it as a vendor metric. nOps does commitments plus scheduling, with share-of-savings pricing on the rate side. Or you buy Savings Plans yourself off Cost Explorer recommendations, which is free and fine if someone owns it.
Automated waste remediation.CloudFix applies AWS-specific fixes automatically, such as gp2 to gp3 and idle-resource cleanup, and publishes a claim of cutting AWS bills by 20 to 35% (that is CloudFix's own marketing number). Its pricing is a flat fee scaled to your AWS spend, not a cut of savings. Sedai does autonomous rightsizing. Both mutate live resources, which is exactly why they need real change management and a rollback story before you point them at production.
Kubernetes cost allocation.Kubecost, now an IBM/Apptio product, and the CNCF OpenCost project (Incubating since October 2024) break cost down per namespace, per deployment, and per label inside shared clusters. Kubecost's free tier covers unlimited clusters up to 250 cores with 15-day retention. This is the one job tags cannot do.
Structural environment lifecycle. Qovery sits here, and I am keeping it to one line until the sections where it belongs: it reduces spend at creation and shutdown time instead of reporting after the fact. Details in sections 5 and 6.
One caution on pricing models. A tool that charges a percentage of your total cloud spend earns more when your bill grows, which is a quiet misalignment worth naming. Share-of-savings pricing (ProsperOps, nOps rate optimization) flips that incentive so the vendor earns only when you save, though it means handing over a slice of every saved dollar for as long as you use it. Neither is wrong. Just know which side of the table the meter is on.
Tool
Primary layer
Multi-account AWS
Multi-cloud
Kubernetes cost breakdown
Report-only or takes action
Pricing model
Best fit after a migration
AWS Cost Explorer + CUR 2.0
Visibility
Yes
AWS only
Limited (tags only)
Reports
Free (pay S3/Athena)
The mandatory free foundation
Vantage
Visibility
Yes
Yes
Via Kubecost integration
Reports
Free tier + from $30/mo
Engineer-facing allocation on a budget
CloudZero
Visibility
Yes
Yes
Yes
Reports
Quote-based
Unit-cost and finance reporting
CloudCheckr (Spot, now Flexera)
Visibility
Yes
Yes
Partial
Reports (+ some automation)
Quote-based
Orgs already in the Flexera stack
Amnic
Visibility
Yes
Yes
Partial
Reports
Cloud spend + team size
Newer allocation tool, free audit
Apptio Cloudability
Visibility
Yes
Yes
Partial
Reports
Quote-based
Enterprise finance and chargeback
ProsperOps
Commitments
Yes
AWS-first
No
Acts (buys commitments)
Share of savings
Autonomous Savings Plan laddering
nOps
Commitments + waste
Yes
AWS-first
Some
Acts
Share of savings + fee
Commitments plus scheduling
CloudFix
Waste remediation
Yes
AWS only
No
Acts (mutates resources)
Flat fee scaled to AWS spend
Automated AWS resource fixes
Kubecost / OpenCost
Kubernetes allocation
Yes
Yes
Yes (per namespace/label)
Reports
Free tier / open source
Shared cluster cost breakdown
Sedai
Waste remediation
Yes
Yes
Yes
Acts (autonomous rightsizing)
Quote-based
Hands-off rightsizing
AWS Compute Optimizer
Waste (recommend)
Yes
AWS only
No
Reports
Free
Free rightsizing signal
Qovery
Structural / lifecycle
Yes
AWS, GCP, Azure, Scaleway, BYOK
Runs on your clusters
Acts (creates/stops envs)
Flat platform fee
Stops non-prod waste at the source
Ship faster on infrastructure you control.
Qovery gives your team self-service deployments on your own AWS, GCP, Azure, or Scaleway account - or your existing Kubernetes cluster. Environment auto-stop and per-PR preview environments cut idle spend without a single cron job. Start deploying in under 10 minutes.
How should you sequence cost work after a migration in the first 90 days?
Sequence the work by payback speed and reversibility: delete obvious waste in days 0 to 30, right-size and schedule non-production in days 30 to 60, and only buy Savings Plans in days 60 to 90 once your baseline stops moving. Committing in week two is the most expensive mistake teams make after a migration, because a 1 or 3 year Savings Plan locks the inherited over-provisioning in for the whole term.
Days 0 to 30, reversible and near-zero risk. Delete unattached EBS volumes, stale snapshots, and unassociated public IPv4 addresses. Remove idle NAT gateways and load balancers. Migrate gp2 to gp3 for a saving of up to 20% with 3,000 IOPS and 125 MiB/s baseline included. Apply S3 lifecycle rules and Intelligent-Tiering. Turn on Budgets and Cost Anomaly Detection.
Days 30 to 60, engineering effort and the biggest wins. Right-size with Compute Optimizer. Schedule non-production shutdown outside working hours. Test Graviton, which AWS states costs up to 20% less than comparable x86 instances, for supported workloads. Consolidate per-team clusters into shared, right-sized clusters.
Three warnings I will repeat because they cost the most: right-size before you commit; avoid 3-year all-upfront on anything you plan to refactor or containerize; and strip MAP credits out of the baseline before you calculate commitment volume. After that, move the conversation from monthly totals to unit economics: cost per environment, per service, per deployment, per customer.
Why does non-production spend dominate post-migration waste, and what actually fixes it?
Non-production is usually the largest recoverable line item after a migration, because dev, staging, and QA get cloned from production sizing and then run 168 hours a week for a team that works about 50. That is roughly 70% idle time, and only two things fix it durably: stopping environments automatically outside working hours, or destroying them entirely when the pull request merges.
Do the arithmetic in the open. A week has 168 hours. A team works maybe 50 of them. An always-on dev or staging environment is therefore idle about 118 hours a week, close to 70%, paying full price the whole time. AWS ships the Instance Scheduler on AWS solution specifically to start and stop EC2 and RDS on a schedule for exactly this reason.
The trouble is that the do-it-yourself fixes rot:
Cron jobs and Lambda schedulers lose their owner. Exceptions pile up, someone disables the job after one bad demo, and the savings quietly disappear within a quarter.
The durable pattern is ephemeral preview environments per pull request. Created on open, destroyed on merge, so idle cost trends toward zero without anyone remembering to switch anything off.
I will name the trade-off honestly, because it is real: environment auto-stop needs stateless-friendly workflows, seeded test data, and a shared agreement that non-production is not always-on. If a team insists staging must never sleep, this control does not apply to them, and that is a conversation, not a config flag.
Approach
What it removes
Ongoing maintenance burden
Who owns it
Failure mode
Do nothing (always-on)
Nothing
None
Nobody
Pays for ~70% idle time forever
Cron/Lambda scheduler you build
Fixed off-hours compute
High (custom code, exceptions)
Whoever wrote it, until they leave
Disabled after one bad demo, never re-enabled
AWS Instance Scheduler
EC2/RDS off-hours compute
Medium (tags + config upkeep)
Platform/FinOps team
Coverage gaps as new resources appear untagged
K8s autoscaler + scale-to-zero
Idle node capacity
Medium (tuning, cold starts)
Platform team
Scale-to-zero fights stateful workloads
Ephemeral per-PR envs + auto-stop (Qovery)
Idle non-prod entirely
Low (built into the workflow)
The platform, per policy
Needs stateless-friendly, seeded workflows
Where does Qovery fit alongside CloudFix, ProsperOps, nOps, and Kubecost?
Qovery is complementary to FinOps tooling, not a replacement for it. CloudFix remediates AWS resources, ProsperOps and nOps ladder commitments, Vantage and CloudZero and Apptio Cloudability own chargeback reporting, and Kubecost and OpenCost allocate Kubernetes spend; Qovery changes how much infrastructure gets created and how long it runs. If you need chargeback reporting or autonomous commitment laddering, you still need one of the others.
Let me be explicit about who wins what, because credibility here matters more than a pitch:
Chargeback and finance reporting belong to Vantage, CloudZero, or Apptio Cloudability. Qovery produces no amortized-cost or chargeback reports.
Autonomous commitment management belongs to ProsperOps or nOps. Qovery does not buy or ladder Savings Plans at all.
Automated AWS resource remediation belongs to CloudFix. It does gp2-to-gp3 and idle cleanup better than Qovery, which does not touch that layer.
Per-namespace Kubernetes allocation belongs to Kubecost or OpenCost. Qovery does not replace them.
Where Qovery genuinely differs is BYOC and timing. Workloads run in your own cloud account, so the bill, the EDP discounts, and any Savings Plans stay with you, not on a vendor's consolidated invoice. It is cloud-agnostic across AWS, GCP, Azure, Scaleway, and bring-your-own-Kubernetes. And it reduces spend at creation and shutdown time, before the resource exists, instead of reporting on it after the invoice lands.
If you just migrated 20-plus AWS accounts, here is the stack I would actually build: AWS Organizations plus CUR 2.0 in Athena for the foundation, one allocation tool (Vantage if budget-conscious, CloudZero or Cloudability if finance-led), one commitment engine (ProsperOps or nOps), CloudFix or scripted cleanup for resource waste, Kubecost or OpenCost for shared clusters, and Qovery for environment lifecycle. Five layers, five owners, no overlap.
Layer
Question it answers
Example tools
Acts or reports?
What breaks if you skip it
Visibility & allocation
Where did the money go, and whose is it?
Cost Explorer + CUR 2.0, Vantage, CloudZero, Cloudability
Reports
You cannot attribute spend to a team or fix what you cannot see
Commitment & rate optimization
Am I paying the lowest rate for steady usage?
ProsperOps, nOps, self-managed Savings Plans
Acts
You pay full On-Demand on predictable baseload
Resource waste remediation
Are these resources sized and cleaned up?
CloudFix, AWS Compute Optimizer, Sedai
Acts
Zombie and oversized resources bleed monthly
Kubernetes allocation
What did each namespace or service cost?
Kubecost, OpenCost
Reports
Shared-cluster spend is a black box tags cannot open
Structural / environment lifecycle
How much infra gets created, and for how long?
Qovery, or scheduling you maintain yourself
Acts
Idle non-prod and cluster sprawl regenerate faster than you delete them
How do you keep costs across multiple AWS accounts under control after the migration?
Make cost a property of the platform and the deployment workflow, not a monthly report someone skims: route anomaly alerts to the owning team, publish unit-cost metrics next to engineering metrics, enforce tags and instance-type allowlists with SCPs at provision time, and give sandbox accounts and ephemeral environments a TTL. Teams that stall at the Inform phase of the FinOps Framework watch their savings decay within two quarters.
The pattern that lasts is guardrails at provision time over cleanup after the fact:
Route Cost Anomaly Detection alerts to the owning team, not a central inbox. The person who can fix the spike has to be the person who gets pinged. Central FinOps queues become where alerts go to die.
Track unit economics, not just totals. Cost per environment, per service, per deployment, per customer. The FinOps Foundation calls this out as its own Unit Economics capability, and it is what turns "the bill went up" into "we shipped 30% more and cost per customer fell."
Review commitments quarterly. Refactors, Graviton migrations, and containerization all move the baseline you committed against.
Enforce guardrails with SCPs and tag policies. Instance-type allowlists, mandatory tags, TTLs on sandbox accounts and ephemeral environments, and AWS Budgets actions that stop runaway spend before the invoice.
Give the practice a named owner, even part-time. Unowned cost programs die quietly. The FinOps Foundation's own data shows teams stay small even at large scale, which means ownership has to be explicit or it evaporates.
The next step I would point you to is the FinOps Foundation Framework itself: map your team against the Inform, Optimize, and Operate phases, decide which capability you are weakest in, and buy or build for that gap rather than for the tool with the best demo.
Frequently asked questions
What are the best solutions for tracking and optimizing cloud costs across multiple AWS accounts after a large infrastructure migration?
There is no single best tool; the best solution is a layered stack. Start with the free AWS-native foundation (AWS Organizations, cost allocation tags, and Cost and Usage Report 2.0 queried in Athena), then add one allocation tool (Vantage, CloudZero, or Apptio Cloudability), one commitment engine (ProsperOps or nOps), one waste-remediation mechanism (CloudFix or Compute Optimizer plus scripts), Kubecost or OpenCost for shared Kubernetes clusters, and a platform layer like Qovery to stop idle non-production spend from being created at all. Buy for the layer you are weakest in, not for the best demo.
What is the best free way to track and allocate spend across multiple AWS accounts?
AWS Organizations with consolidated billing, activated cost allocation tags, and Cost and Usage Report 2.0 exported to S3 as Parquet and queried with Amazon Athena. That gives you hourly, resource-level, multi-account granularity for the price of S3 storage and Athena scans, which is what every paid FinOps tool reads anyway. Add AWS Budgets (first two action-enabled budgets are free) and Cost Anomaly Detection (no additional cost) for alerting. The one gap it cannot close is shared Kubernetes and EC2 allocation, which needs Kubecost or OpenCost.
Should I buy AWS Savings Plans right after a migration, or wait?
Wait. Delete waste and right-size first, then buy commitments in days 60 to 90 once your usage baseline has stopped moving. A Compute or EC2 Instance Savings Plan is a 1 or 3 year commitment, so buying one on lift-and-shift usage locks in the exact over-provisioning you migrated to remove, and Migration Acceleration Program credits make your first months' baseline artificially low. Ladder purchases in monthly tranches instead of one big buy, and strip MAP credits out before you size the commitment.
How do I allocate Kubernetes costs back to teams when every workload shares the same EC2 instances?
Tag-based allocation cannot do this, because dozens of workloads share one node and one instance ID. Use Kubecost or the CNCF OpenCost project, which break spend down per namespace, per deployment, and per label inside a shared cluster. OpenCost is open source and CNCF Incubating; Kubecost (now an IBM/Apptio product) has a free tier covering unlimited clusters up to 250 cores. This is a genuine gap that no amount of AWS tagging discipline will close.
Is CloudFix, ProsperOps, or nOps better for automated AWS savings?
They solve different problems, so it is not a straight comparison. CloudFix automatically remediates AWS resources (gp2 to gp3, idle cleanup) and charges a flat fee scaled to your AWS spend. ProsperOps autonomously ladders Savings Plans and Reserved Instances and charges a share of the savings it produces. nOps does commitments plus scheduling on a share-of-savings model. If your problem is oversized and zombie resources, look at CloudFix; if it is paying On-Demand rates on steady baseload, look at ProsperOps or nOps.
Can an internal developer platform like Qovery replace a FinOps tool such as CloudZero or Vantage?
No, and it is not meant to. CloudZero and Vantage are cost analytics and chargeback tools that report on spend; Qovery is a deployment platform that changes how much infrastructure gets created and how long it runs, through environment auto-stop and per-PR preview environments. They are complementary: the dashboards tell you where the money went, and Qovery keeps idle non-production from generating the cost in the first place. If you need amortized-cost or chargeback reporting, you still need one of the analytics tools alongside it.
Romaric founded Qovery to make Kubernetes accessible to every engineering team. He writes about platform strategy, developer experience, and the future of cloud infrastructure.
Next step
Ship faster on infrastructure you control.
Qovery gives your team self-service deployments on your own AWS, GCP, Azure, or Scaleway account - or your existing Kubernetes cluster. Environment auto-stop and per-PR preview environments cut idle spend without a single cron job. Start deploying in under 10 minutes.