Anonymized audit example

CostPatrol found $284/mo
in savings — in a single region

Anonymized example from a production AWS account in ap-northeast-2. Under 60 seconds. 14 optimization opportunities across 6 rules. Here's every finding.

$284/mo in waste. One EBS volume idle for 1,790 days.

Even in a single region with a modest account, CostPatrol found 14 resources doing nothing. Including a 500GB volume that had been bleeding $50/month for almost 5 years.

Check your account
Total savings
$284/mo
Findings
14
Rules matched
6
Scan time
< 60s

Every finding, with exact fix commands

14 optimization opportunities across 6 rules. Real dollar amounts. Anonymized resource names.

Unattached EBS Volumes
EBS-O002 · 4 resources
$180/mo
staging-load-test
$50.00/mo
gp2 · 500GB · available · 1,790 days unattached
→ Delete volume after creating snapshot if data is needed
$ aws ec2 create-snapshot --volume-id vol-0a1b2c3d4e5f --description "Backup before deletion" $ aws ec2 delete-volume --volume-id vol-0a1b2c3d4e5f
data-pipeline-temp
$50.00/mo
gp2 · 500GB · available · 156 days unattached
→ Delete volume after creating snapshot if data is needed
$ aws ec2 create-snapshot --volume-id vol-1f2e3d4c5b6a --description "Backup before deletion" $ aws ec2 delete-volume --volume-id vol-1f2e3d4c5b6a
analytics-backup
$50.00/mo
gp2 · 500GB · available · 156 days unattached
→ Delete volume after creating snapshot if data is needed
$ aws ec2 create-snapshot --volume-id vol-9a8b7c6d5e4f --description "Backup before deletion" $ aws ec2 delete-volume --volume-id vol-9a8b7c6d5e4f
legacy-webserver
$30.00/mo
gp2 · 300GB · available · 2,451 days unattached
→ Delete volume after creating snapshot if data is needed
$ aws ec2 create-snapshot --volume-id vol-5e4f3a2b1c0d --description "Backup before deletion" $ aws ec2 delete-volume --volume-id vol-5e4f3a2b1c0d
GP2 to GP3 EBS Migration
EBS-O001 · 5 resources
$56/mo
api-server-root
$20.00/mo
gp2 · 1,000GB · attached to i-0a1b2c3d4e5f6789
→ Migrate to GP3 (20% cheaper, 3000 IOPS + 125 MB/s baseline included)
$ aws ec2 modify-volume --volume-id vol-7c8d9e0f1a2b --volume-type gp3
staging-load-test
$10.00/mo
gp2 · 500GB · available
→ Migrate to GP3 (20% cheaper, 3000 IOPS + 125 MB/s baseline included)
$ aws ec2 modify-volume --volume-id vol-0a1b2c3d4e5f --volume-type gp3
data-pipeline-temp
$10.00/mo
gp2 · 500GB · available
→ Migrate to GP3 (20% cheaper, 3000 IOPS + 125 MB/s baseline included)
$ aws ec2 modify-volume --volume-id vol-1f2e3d4c5b6a --volume-type gp3
analytics-backup
$10.00/mo
gp2 · 500GB · available
→ Migrate to GP3 (20% cheaper, 3000 IOPS + 125 MB/s baseline included)
$ aws ec2 modify-volume --volume-id vol-9a8b7c6d5e4f --volume-type gp3
legacy-webserver
$6.00/mo
gp2 · 300GB · available
→ Migrate to GP3 (20% cheaper, 3000 IOPS + 125 MB/s baseline included)
$ aws ec2 modify-volume --volume-id vol-5e4f3a2b1c0d --volume-type gp3
Idle RDS Instances
RDS-O001 · 2 resources
$24 - $33/mo
api-prod-read-replica
$16.27/mo
Zero active connections · idle
→ Stop or delete idle RDS instance
# Option 1: Snapshot and delete $ aws rds create-db-snapshot --db-instance-identifier api-prod-read-replica --db-snapshot-identifier api-prod-read-replica-final $ aws rds delete-db-instance --db-instance-identifier api-prod-read-replica --skip-final-snapshot # Option 2: Stop instance $ aws rds stop-db-instance --db-instance-identifier api-prod-read-replica
api-prod-primary
$8 - $16/mo
Low utilization · underused
→ Stop, downsize, or delete low-utilization RDS instance
# Option 1: Snapshot and delete $ aws rds create-db-snapshot --db-instance-identifier api-prod-primary --db-snapshot-identifier api-prod-primary-final $ aws rds delete-db-instance --db-instance-identifier api-prod-primary --skip-final-snapshot # Option 2: Downsize $ aws rds modify-db-instance --db-instance-identifier api-prod-primary --db-instance-class db.t3.micro --apply-immediately
Unused RDS Read Replicas
RDS-O011 · 1 resource
$16/mo
api-prod-read-replica
$16.27/mo
Read replica with zero replica lag queries
→ Delete unused read replica after confirming no dependent workload
$ aws rds delete-db-instance --db-instance-identifier api-prod-read-replica --skip-final-snapshot
S3 Missing Lifecycle Rules
S3-O001 · 1 resource
$4 - $6/mo
ml-training-data-prod
$3.64 - $6.37/mo
395.94GB · $9.11/mo · No lifecycle policy
→ Add lifecycle policy to transition to Intelligent-Tiering after 30 days
$ aws s3api put-bucket-lifecycle-configuration \ --bucket ml-training-data-prod \ --lifecycle-configuration '{ "Rules": [{ "ID": "TransitionToIntelligentTiering", "Status": "Enabled", "Filter": {}, "Transitions": [{ "Days": 30, "StorageClass": "INTELLIGENT_TIERING" }] }] }'
Orphaned Elastic IPs
EIP-O001 · 1 resource
$3.60/mo
52.78.xxx.xxx
$3.60/mo
Elastic IP not associated with any resource
→ Release orphaned Elastic IP address
$ aws ec2 release-address --allocation-id eipalloc-0a1b2c3d4e5f

What AWS Cost Explorer misses

AWS Cost Explorer
✕ Monthly spend graph — but no resource-level detail
✕ Shows cost went up — but not which volume or instance
✕ No fix commands — you still have to figure out what to do
✕ Can't detect unattached EBS, idle RDS, or orphaned EIPs
CostPatrol
✓ Exact resource name, ID, and savings amount
✓ "This 500GB volume has been unattached for 1,790 days"
✓ Copy-paste AWS CLI commands for every finding
✓ Severity-coded findings sorted by savings impact

AWS tells you your bill went up. CostPatrol tells you which volume has been bleeding $50/mo for almost 5 years — and gives you the one command to stop it.

You've been meaning to do this.

It takes 2 minutes. If there's nothing to find, you lost a coffee break.