Skip to main content

How to Set Up Per-Team Budgets in Azure Cost Management

One budget per team, filtered on the team tag, created through the Azure Budgets API so the definition lives in version control.

Azure budgets are scoped to a management group, subscription or resource group. Teams rarely map neatly onto any of those, so the usual pattern is one budget per team at subscription scope with a tag filter. The Azure CLI’s az consumption budget create does not take notifications, so this guide calls the Budgets REST API through az rest, which does.

Before you start

  • Owner, Contributor or Cost Management Contributor on the subscription. Readers and Cost Management Readers can view budgets but not create them.
  • A consistent team tag on the resources, for example team=checkout. Azure treats tag names as case-insensitive for operations but tag values as case-sensitive, so Checkout and checkout are two different teams in a filter.
  • A brand-new subscription can take up to 48 hours before Cost Management features, budgets included, are available.

1. Write one budget file per team

Save as budget-checkout.json. The filter block limits the budget to usage records tagged team=checkout; the two entries under notifications are an actual-cost alert at 80% and a forecast alert at 100%.

Terminal window
{
"properties": {
"category": "Cost",
"amount": 6000,
"timeGrain": "Monthly",
"timePeriod": { "startDate": "2026-10-01T00:00:00Z", "endDate": "2027-09-30T00:00:00Z" },
"filter": { "tags": { "name": "team", "operator": "In", "values": ["checkout"] } },
"notifications": {
"Actual_GreaterThan_80_Percent": {
"enabled": true, "operator": "GreaterThan", "threshold": 80,
"thresholdType": "Actual", "contactEmails": ["checkout-leads@example.com"]
},
"Forecasted_GreaterThan_100_Percent": {
"enabled": true, "operator": "GreaterThan", "threshold": 100,
"thresholdType": "Forecasted", "contactEmails": ["checkout-leads@example.com", "finops@example.com"]
}
}
}
}

A notification can also list contactGroups (Azure Monitor action group IDs, which is how an alert reaches Teams, a webhook or a runbook) and contactRoles such as Owner.

2. Create it

Terminal window
SUB=$(az account show --query id -o tsv)
az rest --method put \
--url "https://management.azure.com/subscriptions/$SUB/providers/Microsoft.Consumption/budgets/team-checkout?api-version=2026-06-01" \
--body @budget-checkout.json

Repeat per team with a different budget name and tag value. Re-running the same put updates the budget in place.

3. Verify

Terminal window
az consumption budget show --budget-name team-checkout

The response includes currentSpend alongside amount. In the portal the same budget is under Cost Management › Budgets at the subscription scope.

How Azure evaluates it

Cost data typically lands within 8 to 24 hours of usage, budgets are evaluated against it every 24 hours, and emails normally go out within an hour of an evaluation that crosses a threshold. A monthly budget resets itself each period until its end date; an expired budget is deleted automatically. Nothing is stopped or throttled when a threshold is crossed.

Untagged resources fall outside every team budget. On EA and MCA accounts, enabling tag inheritance in Cost Management applies subscription and resource group tags to child usage records, which closes much of that gap without retagging (see tags for cost attribution). Delete a budget with az consumption budget delete --budget-name team-checkout.

Team budgets in ZopNight

ZopNight tracks budgets per team too, but the target is a cloud account, a resource, a resource group, or a connected AI provider rather than a tag filter, so a team whose resources span AWS, GCP and Azure can sit in one resource group with one budget. The team detail page shows the budget breakdown, and threshold crossings go to the same notification channels as schedule events. Spend attribution per team is covered in team showback.

Stop watching the waste.
Start cutting it.

See. Find. Fix. Automatic.

Connect your first cloud account in under 5 minutes. See your first remediation in under 7. No credit card required.

CDCR connect detect classify remediate
full audit every action traceable
read-only default access
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·