Tag coverage is the share of cost that carries a value for a given tag key, measured in money per key and per period. It is the tagging part of allocation coverage, which also counts accounts and rules. The number says how much of the bill a report by team, product or cost centre can explain. The rest is untagged cost, and what it is made of decides whether tagging can shrink it at all. How a tag reaches the billing data is covered in tags and labels; which keys are mandatory is set by the tagging policy.
How it works
The calculation
For one key and one billing period, coverage is the cost of all lines with a value for that key divided by the cost of all lines. It is measured per key, because a line can carry a cost centre and still have no owner. Numerator and denominator use the same cost column. Google's example queries by project, folder and tag add credits to cost; the query by label key sums cost alone. Where commitments exist, coverage comes out higher on amortized cost than on billed cost: AWS notes that Reserved Instance and Savings Plans fees cannot be tagged, but that the amortized cost of the usage they cover can be grouped by tag keys. Unused commitments stay untagged in both views.
Three groups below one hundred per cent
| Group | What belongs to it | What shrinks it |
|---|---|---|
| Untaggable | purchases, commitment fees, charges on no resource | a rule that carries them as shared or unallocated cost |
| Tag never reaches the usage data | services without tags in their usage data, AWS keys not activated, Azure group or subscription tags without inheritance | activation, inheritance, backfill |
| Untagged by omission | resources missing the key | tagging the resource |
Azure separates part of this itself. In cost analysis grouped by a tag, purchases, tenant resources outside any subscription, resources outside a resource group and classic resources appear as "Tags not supported", services that put no tags into their usage data as "Tags not available", and everything else without a value as "Untagged". Resources whose tag sits only on the resource group or subscription also appear as "Untagged" while inheritance is off. AWS states that resources of all cost-accruing services can be tagged and lists a few older services for which it recommends newer ones that support tagging.
Finding the gap
On AWS, grouping by a tag key in Cost Explorer and its API returns every value including the empty one, which holds the cost without the key; the ABSENT match option shows only that cost. AWS Resource Explorer finds the resources behind it: the query tag:none returns resources without user-created tags, -tag.key:costcenter those missing that key. The tag policy compliance report does not help here, because untagged resources do not appear as noncompliant in it; it is generated from the management account in us-east-1 only and re-evaluated every 48 hours. Cost Explorer itself is covered in AWS Cost Explorer and AWS Budgets.
On Azure, cost analysis shows these three categories as soon as it is grouped by a tag key; cost analysis itself is covered in Azure Cost Management and Billing.
On Google Cloud the number comes from the BigQuery export. Google's example query puts the key condition into the LEFT JOIN over the labels rather than the WHERE clause, so cost without the key stays in the result with an empty value. Project labels sit in their own field, project.labels, and tags inherited through the hierarchy in tags, flagged inherited.
Closing the gap
A tag on a resource counts from the day it is set. On AWS a new key shows up on the cost allocation tags page up to 24 hours later, and activation takes up to another 24 hours. For the past, the management account can request a backfill for up to twelve months: today's activation status is applied backwards, but values appear only where the resource carried the tag at the time. Only one backfill runs at a time, at most one per 24 hours, and Cost Explorer, Data Exports and the Cost and Usage Report pick it up with their daily refresh.
Azure's tag inheritance writes subscription and resource group tags, and on a Microsoft Customer Agreement billing profile and invoice section tags too, onto the usage records. Inheritance is available for Enterprise Agreement, Microsoft Customer Agreement and Microsoft Partner Agreement with Azure plan, takes 8 to 24 hours and applies from the first day of the current month, with the tags as they stand on the day of the change; earlier months stay as they were. Purchases and resources that emit no usage at subscription scope get no tags.
On Google Cloud every line in a project carries the project's labels, and tags bound to a folder or the organisation are inherited by the resources below. Whatever is still missing after that is closed by rules, as virtual tags and allocation rules explains.
What it means for your cost
A coverage report shows coverage per mandatory key and per team for each month, as a trend. The three groups stay apart because they have different owners: omission belongs to the teams, missing activation or inheritance to whoever administers the management account or billing account, and the untaggable part to the rule for shared cost or to the unallocated remainder. The untaggable share therefore belongs in no tagging target; tagging cannot reduce it.
A backfill changes past months: a previous month's coverage rises after the fact, and a report pulled before the backfill no longer matches one pulled later. Azure's tag inheritance changes only the current month. A period comparison therefore needs the date of such changes.
Where it goes wrong
- A filter instead of a join. Symptom: the query on the BigQuery export reports full coverage. Cause: the key condition sits in the WHERE clause and drops every line without the key from the result.
- Compliance read as coverage. Symptom: the tag policy report shows no violations while Cost Explorer shows a large group without a value. Cause: untagged resources do not count as noncompliant in the tag policy check.
- A backfill without historical tags. Symptom: earlier months stay empty after the backfill. Cause: the backfill carries only the activation status back; values exist only where the resource carried the tag at the time.
- Inheritance expected to reach back. Symptom: previous months on Azure still show "Untagged". Cause: tag inheritance applies from the current month.
- Project labels overlooked. Symptom: Google Cloud coverage looks low although every project is labelled. Cause: the query reads
labelsonly, notproject.labels.
Sources
Read on 2026-10-16. AWS backfill cost allocation tags, activating user-defined cost allocation tags, evaluating organization-wide compliance, what is Tag Editor?, example Resource Explorer search queries, GetCostAndUsage, TagValues and building a cost allocation strategy; Microsoft group and filter options in cost analysis and group and allocate costs using tag inheritance; Google Cloud example queries for Cloud Billing data export and structure of Standard data export.