What it is
An ExpressRoute circuit with no active peerings and a service-provider state of NotProvisioned: it was created in Azure but never actually connected through the carrier, or it was decommissioned on the provider side while the Azure resource lingered. It carries no traffic and never has, yet it bills the full monthly rate for its bandwidth tier.
Why it happens
Standing up ExpressRoute is a two-sided handshake. You create the circuit in Azure, hand the service key to your connectivity provider, and they provision their end. Billing on the Azure circuit begins when the resource exists, not when the provider finishes. So a circuit that stalls at NotProvisioned, because the project paused, the provider order fell through, or the link was later retired, sits on the bill in a state Azure does not consider an error.
Azure Advisor does not surface this case, which is part of why it hides so well. And the circuit is rarely the only charge: the ExpressRoute virtual network gateway you deployed to terminate it is a separate resource with its own hourly rate that keeps running independently.
What it costs / blast radius
Circuit list prices run from about $51/month for the smallest metered tier up to roughly $11,235/month for high-bandwidth unlimited plans, depending on bandwidth and peering location. (List price; your contract may differ.) On top of that, the ExpressRoute gateway bills its own hourly charge. Because these are among the most expensive networking resources in Azure, a single forgotten unprovisioned circuit and its gateway can be one of the largest pure-waste line items in a tenant.
See it
Resources
| where type =~ 'microsoft.network/expressRouteCircuits'
| where tostring(properties.serviceProviderProvisioningState) == 'NotProvisioned'
| where isnull(properties.peerings) or array_length(properties.peerings) == 0
| project name, resourceGroup, subscriptionId,
sku = sku.name,
bandwidthMbps = properties.serviceProviderProperties.bandwidthInMbps// The circuit and the gateway bill separately. Remove both.
az network vnet-gateway delete --name <ergw> --resource-group rg
az network express-route delete --name <circuit> --resource-group rgHow StratoLens helps
StratoLens flags ExpressRoute circuits stuck at NotProvisioned with no peerings, automatically and continuously across every subscription, and shows the monthly cost still accruing. Given the price of these resources, catching one that never carried a packet, along with the gateway that shipped with it, is worth having a check that runs whether or not anyone remembers the circuit exists.