Cloud waste scans

What we scan on each cloud

Detailed catalog of every waste check SpendPilot runs for AWS, Azure, and GCP. Each check is tagged Approve & delete, Approve & stop, Approve & change, or Manual fix. OpenAI, Anthropic, and Gemini checks live under AI waste scans.

What a waste scan does

A waste scan inventories cloud resources and billing signals, then opens savings actions for likely idle or oversized spend. Scans are read-only by default — they never change your cloud until an engineer opts in and confirms Approve & delete or Approve & change.

Findings land on Actions (and roll into Can save /mo on Services). After you fix waste, mark verified so Savings reflects confirmed monthly savings.

  1. 1. Connect

    Link AWS / Azure / GCP under Connections with read access.

  2. 2. Sync costs

    Pull Cost Explorer / Cost Management / billing export for MTD spend.

  3. 3. Scan waste

    Run per account. Findings become open actions with estimated $/mo.

  4. 4. Act

    Approve → fix manually, Approve & delete, or Approve & change when opted in.

Run scans from your dashboard (log in). Review findings on Actions and service rollups on Services.

Amazon Web Services

Amazon Web Services

Uses Cost Explorer, CloudWatch, EC2/RDS/ELB APIs, and Compute Optimizer where available.

Scope Account-level checks once (anomaly, commitments). All other scanners run per selected waste-scan region.

Org / Other

CheckDetectsConfidenceFix in SpendPilot

Spend anomaly

anomaly

Yesterday’s spend ≥ ~25% above a recent daily baselineMedium
Manual fix

RIs & Savings Plans

CheckDetectsConfidenceFix in SpendPilot

Low RI / Savings Plans coverage

commitment_coverage

Low Reserved Instance hour coverage and/or Savings Plans coverageMedium
Manual fix

EBS Storage

CheckDetectsConfidenceFix in SpendPilot

Unattached EBS volume

unattached_ebs

EBS volumes in available (not attached) stateHigh
Approve & delete

Old EBS snapshots

old_snapshots

Owned snapshots older than 90 daysMedium
Approve & delete

gp2 → gp3 opportunity

gp2_to_gp3

gp2 volumes that can move to gp3 in placeHigh
Approve & change

Unused old AMIs

old_ami

Owned AMIs >90 days not used by running/stopped instancesMedium
Approve & delete

EC2 Compute

CheckDetectsConfidenceFix in SpendPilot

Idle EC2 instance

idle_ec2

Running instances with very low average CPU over 14 daysMedium
Approve & stop

Compute Optimizer rightsizing

compute_optimizer

Overprovisioned EC2 / EBS recommendations from AWSMedium
Approve & change

Idle EKS node group

idle_eks

EKS node groups with low CPU — scale-down candidateMedium
Manual fix

Oversized Auto Scaling group

oversized_asg

ASGs with low average CPU over 14 daysMedium
Approve & change

EC2 Other

CheckDetectsConfidenceFix in SpendPilot

Idle Elastic IP

idle_eip

EIPs not associated with an instance or ENIHigh
Approve & delete

Idle NAT Gateway

idle_nat

NAT Gateways with ~0 ActiveConnectionCount over 14 daysMedium
Approve & delete

Unused network interface

unused_eni

Available ENIs (excluding AWS-managed interfaces)Medium
Approve & delete

RDS

CheckDetectsConfidenceFix in SpendPilot

Oversized RDS

oversized_rds

Provisioned RDS with low CPU (skips Aurora Serverless)Medium
Approve & change

Load Balancing

CheckDetectsConfidenceFix in SpendPilot

Unused load balancer

unused_elb

ALB/NLB with no targets, or ALB with ~0 requests over 14 daysMedium
Approve & delete

ElastiCache

CheckDetectsConfidenceFix in SpendPilot

Idle ElastiCache

idle_elasticache

Cache nodes with low CPU over 14 daysMedium
Manual fix

VPC / Endpoints

CheckDetectsConfidenceFix in SpendPilot

Unused VPC interface endpoint

unused_vpc_endpoint

Interface endpoints with near-zero ActiveConnectionsMedium
Approve & delete

S3

CheckDetectsConfidenceFix in SpendPilot

Orphaned S3 multipart uploads

s3_multipart

Incomplete multipart uploads older than 7 daysHigh
Approve & delete

OpenSearch

CheckDetectsConfidenceFix in SpendPilot

Idle OpenSearch domain

idle_opensearch

Domains with low CPU over 14 daysMedium
Manual fix

MSK Kafka

CheckDetectsConfidenceFix in SpendPilot

Idle MSK cluster

idle_msk

Clusters with near-zero BytesInPerSec over 14 daysMedium
Manual fix

API Gateway

CheckDetectsConfidenceFix in SpendPilot

Unused API Gateway

unused_apigateway

REST/HTTP stages with near-zero traffic over 14 daysMedium
Manual fix

SageMaker

CheckDetectsConfidenceFix in SpendPilot

Idle SageMaker endpoint

idle_sagemaker_endpoint

InService endpoint with ~0 Invocations over ~14 daysMedium
Manual fix

Bedrock

CheckDetectsConfidenceFix in SpendPilot

Idle Bedrock provisioned throughput

idle_bedrock_throughput

InService provisioned throughput with low InvocationsMedium
Manual fix
Microsoft Azure

Microsoft Azure

Combines resource inventory (Resource Graph) with optional Monitor metrics for idle VMs and Cost Management for anomalies.

Scope Subscription-scoped via Azure Resource Graph, ARM, and Cost Management. One pass covers the whole subscription.

Org / Other

CheckDetectsConfidenceFix in SpendPilot

Spend anomaly

anomaly

Yesterday’s spend spike vs ~7-day Cost Management baselineMedium
Manual fix

Reservations & Savings Plans

CheckDetectsConfidenceFix in SpendPilot

Low Reservation / Savings Plan coverage

commitment_coverage

Low share of Reservation + Savings Plan spend vs on-demand (PricingModel, ~30 days)Medium
Manual fix

Virtual Machines

CheckDetectsConfidenceFix in SpendPilot

Idle virtual machine

idle_vm

Running VMs with very low average CPU over 14 daysMedium
Approve & stopApprove & change

Virtual Machine Scale Sets

CheckDetectsConfidenceFix in SpendPilot

Idle virtual machine scale set

idle_vmss

VMSS with very low average Percentage CPU over 14 daysMedium
Approve & change

Storage

CheckDetectsConfidenceFix in SpendPilot

Unattached managed disk

unattached_disk

Managed disks in Unattached stateHigh
Approve & deleteApprove & change

Old disk snapshots

old_disk_snapshot

Managed disk snapshots older than 90 daysMedium
Approve & delete

Networking

CheckDetectsConfidenceFix in SpendPilot

Unused public IP

unused_public_ip

Public IPs not associated with NIC / LB / NAT / etc.High
Approve & delete

Unused load balancer

unused_lb

Load balancers with no backend pools or no load-balancing rules (scan). Approve & delete only when both backends and rules are empty at click.Medium
Approve & delete

Unused network interface

unused_nic

NICs not attached to a VMMedium
Approve & delete

Azure Bastion host

unused_bastion

Bastion hosts (always-on jump hosts — review before delete)Medium
Manual fix

Azure SQL

CheckDetectsConfidenceFix in SpendPilot

Oversized Azure SQL

oversized_sql

Databases on Premium / high-capacity SKUs (rightsizing candidates)Medium
Approve & change

Kubernetes (AKS)

CheckDetectsConfidenceFix in SpendPilot

Idle AKS cluster

idle_aks

AKS clusters with zero agent nodes (empty / stopped pools)Medium
Manual fix

API Management

CheckDetectsConfidenceFix in SpendPilot

Unused API Management

unused_apim

APIM with no APIs, or leftover Developer SKU gatewaysMixed
Manual fix

Cosmos DB

CheckDetectsConfidenceFix in SpendPilot

Empty Cosmos DB account

idle_cosmos

Cosmos accounts with no databases or containersHigh
Manual fix

Azure Cache for Redis

CheckDetectsConfidenceFix in SpendPilot

Idle Azure Cache for Redis

idle_azure_redis

Redis caches with average percentProcessorTime below ~5% over 14 daysMedium
Manual fix

Monitor & Logs

CheckDetectsConfidenceFix in SpendPilot

Long Monitor & Logs retention

idle_log_analytics

Log Analytics workspaces or Application Insights with retention ≥ 90 daysMedium
Manual fix

App Service

CheckDetectsConfidenceFix in SpendPilot

Empty App Service plan

empty_app_service_plan

App Service plans with zero sites (non-Free / Shared SKUs)High
Approve & deleteApprove & change
Google Cloud

Google Cloud

Uses Compute Engine, Cloud Monitoring, Cloud SQL, and BigQuery billing export APIs.

Scope Project-scoped. Compute/network/disk checks respect selected scan regions (or all enabled). Anomaly needs BigQuery billing export configured on the account.

GCS Approve & change updates the bucket default storage class only — existing objects stay on the prior class until you add lifecycle rules or rewrite.

Org / Other

CheckDetectsConfidenceFix in SpendPilot

Spend anomaly

anomaly

Yesterday’s GCP spend spike vs recent baselineMedium
Manual fix

Committed use (CUD)

CheckDetectsConfidenceFix in SpendPilot

Low Committed Use Discount coverage

commitment_coverage

Low CUD credits vs compute-like usage cost in BigQuery billing export (~30 days)Medium
Manual fix

Compute Engine

CheckDetectsConfidenceFix in SpendPilot

Idle / stopped Compute Engine VM

idle_gce

Stopped/terminated VMs still holding disks & IPs, plus RUNNING VMs with very low average CPU over 14 daysMixed
Approve & stopApprove & change

Old custom machine images

old_gcp_image

Project custom images older than 90 daysMedium
Approve & delete

Cloud Storage / Disk

CheckDetectsConfidenceFix in SpendPilot

Unattached persistent disk

unattached_pd

Persistent disks with no attached usersHigh
Approve & deleteApprove & change

GCS default storage class

gcs_storage_class

Buckets whose default storage class can step cooler (STANDARD → NEARLINE, NEARLINE → COLDLINE)Medium
Approve & change

Old disk snapshots

old_disk_snapshot

Global disk snapshots older than 90 daysMedium
Approve & delete

Networking

CheckDetectsConfidenceFix in SpendPilot

Unused static external IP

unused_static_ip

External static IPs in RESERVED stateHigh
Approve & delete

Idle Cloud NAT

idle_cloud_nat

Cloud NAT gateways with little or no byte traffic over 14 days (or sparse metrics)Medium
Manual fix

Unused load balancer / target pool

unused_gcp_lb

Forwarding rules with no backend/target, or empty legacy target poolsMixed
Approve & delete

Cloud SQL / AlloyDB

CheckDetectsConfidenceFix in SpendPilot

Stopped Cloud SQL

oversized_cloudsql

Cloud SQL instances left in STOPPED state (still billable)High
Approve & delete

Kubernetes (GKE)

CheckDetectsConfidenceFix in SpendPilot

Idle GKE cluster

idle_gke

GKE clusters with zero nodes (empty / scaled to zero)Mixed
Manual fix

Vertex AI

CheckDetectsConfidenceFix in SpendPilot

Idle Vertex AI endpoint

idle_vertex_endpoint

Deployed endpoint with near-zero prediction trafficMedium
Manual fix

What scans do not do

  • Purchase Reserved Instances, Savings Plans, Reservations, or CUDs (always Manual fix — never auto-buy)
  • Terminate running VMs, delete live Cloud SQL, or act without account opt-in and engineer confirmation
  • Delete Log Analytics workspaces, or change Monitor retention / APIM without your Manual fix
  • Shrink EBS volumes in place (AWS cannot decrease size via ModifyVolume)

Fix matrix (delete / stop / change / manual)

Every waste check in one table. Opt-in on the cloud account is required for Approve & delete, Approve & stop, and Approve & change. Manual fix is detect-only — you change it in the cloud console.

CloudCheckFix in SpendPilot
aws

Spend anomaly

Manual fix
aws

Low RI / Savings Plans coverage

Manual fix
aws

Unattached EBS volume

Approve & delete
aws

Old EBS snapshots

Approve & delete
aws

gp2 → gp3 opportunity

Approve & change
aws

Unused old AMIs

Approve & delete
aws

Idle EC2 instance

Approve & stop
aws

Compute Optimizer rightsizing

Approve & change
aws

Idle EKS node group

Manual fix
aws

Oversized Auto Scaling group

Approve & change
aws

Idle Elastic IP

Approve & delete
aws

Idle NAT Gateway

Approve & delete
aws

Unused network interface

Approve & delete
aws

Oversized RDS

Approve & change
aws

Unused load balancer

Approve & delete
aws

Idle ElastiCache

Manual fix
aws

Unused VPC interface endpoint

Approve & delete
aws

Orphaned S3 multipart uploads

Approve & delete
aws

Idle OpenSearch domain

Manual fix
aws

Idle MSK cluster

Manual fix
aws

Unused API Gateway

Manual fix
aws

Idle SageMaker endpoint

Manual fix
aws

Idle Bedrock provisioned throughput

Manual fix
azure

Spend anomaly

Manual fix
azure

Low Reservation / Savings Plan coverage

Manual fix
azure

Idle virtual machine

Approve & stopApprove & change
azure

Idle virtual machine scale set

Approve & change
azure

Unattached managed disk

Approve & deleteApprove & change
azure

Old disk snapshots

Approve & delete
azure

Unused public IP

Approve & delete
azure

Unused load balancer

Approve & delete
azure

Unused network interface

Approve & delete
azure

Oversized Azure SQL

Approve & change
azure

Idle AKS cluster

Manual fix
azure

Unused API Management

Manual fix
azure

Empty Cosmos DB account

Manual fix
azure

Idle Azure Cache for Redis

Manual fix
azure

Long Monitor & Logs retention

Manual fix
azure

Empty App Service plan

Approve & deleteApprove & change
azure

Azure Bastion host

Manual fix
gcp

Spend anomaly

Manual fix
gcp

Low Committed Use Discount coverage

Manual fix
gcp

Idle / stopped Compute Engine VM

Approve & stopApprove & change
gcp

Old custom machine images

Approve & delete
gcp

Unattached persistent disk

Approve & deleteApprove & change
gcp

GCS default storage class

Approve & change
gcp

Old disk snapshots

Approve & delete
gcp

Unused static external IP

Approve & delete
gcp

Idle Cloud NAT

Manual fix
gcp

Unused load balancer / target pool

Approve & delete
gcp

Stopped Cloud SQL

Approve & delete
gcp

Idle GKE cluster

Manual fix
gcp

Idle Vertex AI endpoint

Manual fix

Shipped Approve & delete

  • AWS: unattached_ebs, idle_eip, old_snapshots, old_ami, unused_eni, s3_multipart, unused_elb, idle_nat, unused_vpc_endpoint
  • Azure: unattached_disk, unused_public_ip, old_disk_snapshot, unused_nic, empty_app_service_plan, unused_lb
  • GCP: unattached_pd, unused_static_ip, old_disk_snapshot, old_gcp_image, unused_gcp_lb, oversized_cloudsql

Shipped Approve & stop

  • AWS: idle_ec2 (Stop EC2 instance)
  • Azure: idle_vm (Deallocate Azure VM)
  • GCP: idle_gce (Stop GCE instance (low-CPU running only))

Shipped Approve & change

  • AWS: gp2_to_gp3, compute_optimizer, oversized_rds, oversized_asg
  • Azure: idle_vm, unattached_disk, empty_app_service_plan, oversized_sql, idle_vmss
  • GCP: idle_gce, unattached_pd, gcs_storage_class