Azure Cost Optimization: 9 Ways to Cut Your Azure Bill

Azure has its own cost quirks, and the “stopped vs deallocated” trap alone catches almost every team at least once. This is a practical list of nine levers that actually move an Azure bill, with the Azure-specific details that matter.

Most Azure subscriptions carry meaningful waste. Here’s where to find it.

1. Deallocate VMs, don’t just stop them

This is the Azure gotcha. A VM that’s stopped from inside the guest OS still reserves compute and keeps billing. Only a VM that’s deallocated (stopped from the Azure portal/CLI) releases the compute and stops the charge.

Check for VMs in a “stopped” (not “deallocated”) state; they’re billing for nothing. Use auto-shutdown schedules on dev/test VMs to deallocate them automatically overnight.

2. Delete unattached managed disks

When you delete a VM, its data disks can remain. Unattached managed disks bill at full provisioned rate whether attached or not. Filter disks by Unattached state and clean up anything that’s been detached for more than a week (snapshot first if unsure).

3. Buy Reserved VM Instances for your baseline

For steady workloads, Azure Reservations (1- or 3-year) cut VM, SQL Database, Cosmos DB, and other costs substantially. Commit only to baseline usage you’d run regardless, and start with a 1-year term. Azure also offers Savings Plans for compute for more flexibility across instance types.

4. Apply Azure Hybrid Benefit

If you have existing Windows Server or SQL Server licenses with Software Assurance, Azure Hybrid Benefit lets you bring them to Azure and drop the licensing portion of VM cost, often a large discount that teams forget to enable. Check whether your eligible VMs and SQL workloads have it turned on.

5. Rightsize oversized VMs and SQL

Provisioned-for-peak resources sit underused. Use observed metrics to drop oversized VMs a size, and review Azure SQL Database service tiers and DTUs/vCores against actual usage. The serverless tier for Azure SQL can be a big win for spiky or intermittent databases.

6. Act on Azure Advisor recommendations

Azure Advisor generates cost recommendations from your own usage: idle and underused resources, rightsizing, reservation purchase suggestions. Like GCP’s Recommender and AWS Compute Optimizer, it’s specific, free, and routinely ignored. Make reviewing it a habit.

7. Clean up idle networking and public IPs

  • Unused public IP addresses (especially Standard SKU) bill while reserved.
  • Idle load balancers and application gateways cost money with no backend traffic.
  • Unused NAT gateways bill for existing.

Audit these for zero traffic and remove what’s orphaned.

8. Optimize storage tiers

Move infrequently accessed blob data to Cool or Archive tiers with lifecycle management rules. Delete old snapshots and unused storage accounts. As with other clouds, logs and backups rarely belong in the hot tier after a month.

9. Set budgets and watch growth

Use Cost Management + Billing to set budgets and alerts so a runaway resource pages you mid-month instead of surprising you on the invoice. Group costs by resource group and tag to see what’s growing.

Make it recurring

Azure waste regrows like any cloud’s. The deallocate-vs-stop trap in particular tends to recur as new VMs appear. A monthly review of idle resources, unattached disks, and Advisor recommendations keeps the bill flat.

Automating the Azure audit

Checking VM power states, unattached disks, Hybrid Benefit coverage, Advisor tips, and storage tiers by hand across every resource group and subscription is the work that quietly doesn’t happen.

Graymole automates it. It connects with a read-only Reader service principal (no agents, no write access) and sweeps your Azure subscriptions for stopped-but-not-deallocated VMs, unattached disks, oversized resources, idle networking, and storage waste in one pass, with every finding priced in real dollars and a copy-paste fix attached. It covers AWS and GCP in the same scan, so multi-cloud teams get one prioritized list. The first scan is free.

Related reading