Home · Solutions · IT & services
Solution · IT & servicesEvery Azure resource with an owner, every euro with a cost centre, every anomaly with a name
Cloud spend explained to the people who cause it
Robots collect Azure cost and usage every day, chase untagged resources back to the person who created them, allocate spend to cost centres, and put shutdown decisions in Microsoft Teams.
Executive summary
A third of your resources have no owner, so the invoice is explained with a screenshot of a chart.
The cycle answers a question this company cannot answer quickly today: which euro belongs to whom, and what is nobody using.
Every euro on the invoice carries a cost centre, a product and a named owner, so the monthly conversation starts from evidence instead of a chart.
resource tags and state through the Azure management API; the allocation workbook in Microsoft Excel on SharePoint; the Power BI showback model
Business problem
Cloud economics
Cloud spend is created by one group of people and paid by another. An engineer who needs a test environment has it in four minutes, and nothing in that transaction shows a price. The invoice arrives four to six weeks later as one number per subscription, by which time the creator has moved on and the environment is still running.
Turning that number into something a budget owner can be asked about is manual work. Somebody exports the usage detail, joins it to an owner tag covering two thirds of the estate, matches the rest against a hand-kept lookup, and drops the remainder into a shared pool split by headcount. That split is not evidence; it survives because nobody can disprove it.
Anomalies surface the same way, which is to say late. A retention setting changed on a log workspace, a premium tier accepted as the default, an autoscale rule with no ceiling: each is in the data the day after it starts and found when the month closes. By then nobody can separate more customers from more price from an environment somebody forgot to switch off.
How it works today
This is the shape it takes in most companies running a few hundred resources across several teams.
- WaitingThe month closes, the usage detail settles days later, and allocation starts in the second week
- PersonAn engineer exports cost and usage from Microsoft Cost Management and pivots it in Excel by resource group
- PersonRows are matched to cost centres through a hand-kept lookup; what has no usable tag goes into a shared pool split by headcount
- Risk of errorUntagged rows carry no creator, so nobody is asked and the split is defended rather than corrected
- PersonIncreases above a threshold are chased by asking a Teams channel who created rg-xyz and whether it is still needed
- WaitingAnswers arrive over days and some never arrive; an idle environment noticed in March is switched off in June
- PersonA cost chart per subscription goes to the monthly IT review, and last month's actions are not tracked to a close
- Risk of errorReservations renew with nobody comparing the commitment to the current estate
Why the current process costs more than it appears
The most expensive part of this process has no cost line.
- Allocation is not the expensive part; the unallocated part is. Every euro in the shared pool is one no budget owner has been asked to justify, and the pool grows because nothing in it belongs to anyone.
- Waiting for the closed month makes every decision late by design. Consumption billed on the third is found in the second week of the next month, so a mistake runs for weeks before anyone prices it.
- Nobody is rewarded for deleting anything. Removing an idle environment saves a number on no team's scorecard and carries the risk of having removed something that mattered.
- Commitment decisions rest on the same weak picture. A reservation bought against an estate you cannot describe by owner or lifecycle is a bet, and it is priced as one.
Cost of inaction
Where does the €192,000 come from? From €2.4m of annual consumption and an assumed eight percent sitting in resources that are idle, oversized or simply forgotten. Eight percent is a modelling placeholder, arguable in both directions, not a benchmark and nobody's measured result; the first pass over your own estate replaces it. The third row carries effort and pool into a second year on a bill fifteen percent larger.
Left alone, the estate grows faster than anyone's ability to describe it. Untagged resources accumulate because nothing forces the question at creation, the shared pool absorbs them, and each budget round closes on a number the platform team cannot defend line by line. A reservation bought against an estate nobody can attribute is either an overpayment or a discount left unused.
A plausible organisation with realistic proportions. The figures are there to be recalculated on your data; they are not a client result.
A European digital business on Microsoft Azure: eleven product teams, four subscriptions, roughly 1,900 resources, Microsoft 365 E3, annual Azure consumption near €2.4m.
Some €200,000 a month across four subscriptions and 34 resource groups; a third of resources carry no usable owner tag; two people spend three days each a month on allocation and clean-up.
Usage detail is exported once the month closes, matched to cost centres with a hand-kept lookup, and whatever has no tag is split across teams by headcount.
Six person-days a month of exporting, matching and chasing, and a cost picture three to six weeks old at the moment of decision. The untagged share never falls, because nothing forces an answer.
Daily collection of cost, usage and inventory; tag claims put to the creator in Teams; allocation to cost centres and products; anomalies against a rolling baseline; a priced list of idle and oversized resources; a monthly showback pack per owner.
In the modelled case allocation becomes a review of exceptions, the unallocated share falls to what is genuinely shared, an anomaly is seen the next morning rather than next month, and every clean-up decision carries a euro figure. Every figure belongs to the model above; none was measured on a client estate.
Proposed solution
The cycle answers a question this company cannot answer quickly today: which euro belongs to whom, and what is nobody using. A scheduled robot reads the daily Cost Management export of amortised cost and usage and pairs it with one Azure Resource Graph query returning every resource in the four subscriptions with its tags, type and group. Where a row has no owner tag, the activity log names the identity that created it and Microsoft Entra ID turns that into a person.
Tag discipline is handled at both ends. Azure Policy stops the backlog growing, requiring owner and cost-centre tags at creation and inheriting them from the resource group. What already exists is cleared one owner at a time: each untagged resource becomes a claim task in Microsoft Teams for the person who created it, showing what it has cost so far and three answers: claim it with a cost centre, mark it shared, or propose it for removal.
Waste and anomalies run on the same daily data. Spend per resource group and service is compared with a rolling baseline, and a deviation beyond the threshold posts an alert card into the platform channel naming the resource, the change and the run rate it implies. Rules built with your engineers read utilisation from Azure Monitor and mark what is idle, oversized, unattached or running outside its environment's hours, each priced with its monthly saving. Proposals reach the owner as approvals in Teams; approved actions execute through the Azure management API, tagged with the approver and the rollback window, and the showback pack refreshes in Power BI.
Microsoft Cost Management scheduled exports; Azure Resource Graph queries across subscriptions; Azure Policy tag effects with remediation; Azure Monitor metrics; Microsoft Entra ID; UiPath Orchestrator schedules, queues and credential stores; UiPath Action Center tasks in Microsoft Teams; Power BI
The collection and the join between cost, inventory, tags and identity; the allocation model agreed with finance; the claim workflow and its escalation; the anomaly baseline; the waste rules and their pricing; the approval and rollback record; the showback pack
Cost Management, Resource Graph and activity-log reads through the Azure management APIs, using the UiPath Microsoft Azure connector and API workflows
How the automated process works
- AutomationA daily schedule picks up the Cost Management export of amortised cost and usage and runs one Resource Graph query for the inventory with tags
- SystemEvery cost row is joined to a resource, an owner, a cost centre, a product and an environment; what cannot be resolved joins the untagged list with its run rate
- AutomationFor each untagged resource the activity log gives the creating identity, Microsoft Entra ID gives the person, and a claim task is raised in Teams with the cost so far
- AutomationDaily spend per resource group and service is compared with the rolling baseline; a deviation posts an alert card naming the resource, the change and the implied run rate
- AutomationThe waste rules read utilisation from Azure Monitor and assemble the idle, oversized, unattached and out-of-hours candidates, each with its monthly saving
- PersonThe owner approves stop, resize, keep or a standing exception in Microsoft Teams, within their subscription and threshold
- AutomationApproved actions execute through the Azure management API tagged with the approver and the rollback window, and the Power BI showback pack refreshes
Human-in-the-loop model
Automation handles
- Daily collection of cost, usage, inventory, tags and utilisation, and the join between them
- Finding the identity behind an untagged resource and putting the claim in front of that person
- The rolling baseline, the waste rules and the pricing of every proposal
- Execution of approved actions and the refresh of the showback pack
People decide
- Whether a resource is stopped, resized, kept or recorded as a standing exception
- Which cost centre and product a claimed resource belongs to, and who owns it from then on
- The thresholds: what counts as idle, how large a deviation is an anomaly, which environments may stop overnight
- Reservations and savings plans; the cycle supplies the evidence, finance signs
Before and after
Systems and integrations
The stack is deliberately short: one engine, one execution layer, one place where a person decides.
Inputs
- Microsoft Cost Management exports of amortised cost and usage
- Azure Resource Graph inventory and tags
- the Azure activity log
- Azure Monitor metrics
- the cost-centre master from the ERP
Automation layer
- UiPath Orchestrator
- UiPath Robots
- UiPath Integration Service (Microsoft Azure, Microsoft Teams and Microsoft OneDrive & SharePoint connectors)
- UiPath Action Center
Target systems
- resource tags and state through the Azure management API
- the allocation workbook in Microsoft Excel on SharePoint
- the Power BI showback model
Human touchpoints: claim tasks and shutdown approvals in Microsoft Teams; the anomaly alert card in the platform channel; the monthly showback pack per owner
Technologies used
daily amortised cost and usage per resource, delivered to a storage account
Aone query returns every resource across the subscriptions with its tags, type and group
Arequires owner and cost-centre tags at creation, inherits them from the resource group
Athe utilisation evidence behind every idle and oversized proposal
Arun the daily cycle, queue each resource, execute approved actions, hold the audit trail
Aclaim tasks, anomaly acknowledgements and shutdown approvals
Aturns the creating identity into a person and a team
Athe showback pack per owner, cost centre and product
AIllustrative economic model
Numbers you can check against your own data.
The whole model is six person-days, and it is deliberately narrow: it prices the assembly work, not the bill that work describes. One person-day is 480 minutes, so the arithmetic runs on days rather than transactions. €44 is a fully loaded hourly cost for a platform-engineering or cloud-finance role in Central Europe, and every number belongs to the illustrative company above. The pool this exercise exists to find is sized separately in the next section.
Run the numbers on your data
An illustrative estimate from your own inputs. It models released capacity; it is not a promise of savings.
Business benefits
- Every euro on the invoice carries a cost centre, a product and a named owner, so the monthly conversation starts from evidence instead of a chart
- Untagged resources stop being an accepted condition: each has a person to ask, a deadline and an escalation, and the untagged run rate is measured daily
- A misconfiguration is priced within a day of appearing rather than found at month close, which shortens the expensive part of the mistake
- Idle and oversized resources arrive with a euro figure against each line, and allocation becomes a review of exceptions, releasing the six person-days a month now spent exporting, matching and chasing
The management view
- Cloud spend becomes an ordinary budget line with owners attached, so it can be forecast, challenged and defended like any other cost
- Growth becomes decomposable: how much of the increase is more customers, how much more price, how much waste nobody removed
- Every claim, stop and resize carries an approver, a timestamp and its evidence, so the estate can be explained to an auditor
- The control scales with the estate rather than headcount; a fifth subscription is a configuration change, not another person
Board-level KPIs
Security and governance
Security is designed with the process, not after it.
- Collection runs as a service principal with reader rights on the billing scope and the subscriptions; nothing in the daily cycle can change a resource
- Execution is a second identity with a narrow role: stop, start, resize and tag inside named resource groups and nothing else, scoped per subscription
- No secret is written into a workflow. Each is drawn at run time from the Orchestrator credential store, or your own Azure Key Vault, and rotates on your existing schedule
- Nothing changes on a robot's authority: every action carries an approver, a timestamp and the proposal behind it, recorded in Orchestrator and in the resource tag
- The only personal data is the creating identity and the owner; the cost and inventory data around them stays in your Azure tenant and in UiPath Automation Cloud's EU region
Why now
Cloud consumption changes by the hour and is reported once a month; that gap is where the money goes, and it widens with every team that can create a resource without asking.
Waste compounds rather than sitting still: an oversized tier is billed every hour until somebody removes it, and removal never happens without a euro figure beside the resource. Counting it by hand costs the modelled €2,112 a month.
Cost Management exports, Resource Graph queries and Azure Policy tag remediation are API-readable, and approvals complete inside Microsoft Teams. What once needed a separate cost platform is now largely rules and configuration.
Relevant executive roles
The cloud line stops being an unexplained increase and becomes a cost per cost centre, per product and per named owner
One monthly artefact answers what the estate costs, who owns it and what can be removed, instead of three separate arguments
Tag discipline and clean-up become a queue with deadlines rather than goodwill, and commitment decisions get evidence
Cloud cost per active customer becomes a number tracked with the other unit economics, not a lump in the IT budget
Common questions and objections
Asking people to tag resources in general does fail. Asking one named engineer to claim one specific resource, with the cost it has run up and three buttons, does not. Azure Policy stops the backlog growing at creation; the claim workflow clears what exists, one owner at a time.
It does, and the cycle uses that data. What the platform cannot do is join a recommendation to a cost centre, put it in front of the budget owner, take a decision and execute it with an audit trail. That join is where the saving is realised.
No. The execution identity may stop, resize and tag inside named resource groups, deletion is never its first action, and production scopes can stay proposal-only indefinitely.
When this is not the right solution
- A cloud bill in the low tens of thousands a year, where a quarterly look at Cost analysis and a tagging convention cost less than anything automated
- One team owns the whole estate and pays for it from one budget, so allocation answers a question nobody is asking
- Most of the spend sits in a few committed workloads whose size is set by architecture; there the answer is an architecture review
A question for the next management meeting
If our Azure bill rose ten percent next quarter, could this company say how much of that was more customers, how much was more price, and how much was nobody removing anything?
Implementation approach
A scope without ambiguity, before anything is signed.
We deliver
- A read of the current estate: subscriptions, resource groups, tag coverage and where the untagged spend sits
- The daily collection and join: Cost Management exports, Resource Graph inventory, activity log and metrics
- The allocation model agreed with finance: cost centre, product, environment, and the rule for shared spend
- The claim workflow in Teams, the rolling baseline and the waste rules, each proposal priced at its saving
- Approvals in Teams executed by the robot with a rollback record, and the Power BI showback pack
We need from you
- Reader access to the billing scope and the subscriptions, issued to a service principal
- The cost-centre list and the rule finance wants applied to shared spend
- A named owner per subscription who takes the escalation when a claim goes unanswered
- One decision on thresholds: what counts as idle, and which environments may stop overnight
Stages
Discovery
Tag coverage, where the untagged spend sits, and which teams already have owners
Design
The allocation model, the claim workflow, the thresholds and who approves what
Build
Collection and join, the rule sets, the Teams tasks, the Power BI showback model
Validation
A parallel month against your last hand-built allocation, every difference explained
Go-live
Proposal-only for the first cycle, then execution switched on subscription by subscription
Optimisation
Threshold tuning, new waste rules, evidence for each commitment renewal
Departmental. Effort is driven by the number of subscriptions and billing scopes, how far tag discipline has been applied, and how much of the estate sits in shared services.
Nobody removes a resource whose price they cannot see.
Send us one month of Cost Management export and an inventory of the tags you carry today. We come back with your tag coverage, where the untagged spend sits, and the first rules we would apply.
Attribute one month of your Azure billThe neighbouring process usually has the same problem
Leavers, duplicates and dormant accounts keep their paid seats until somebody rebuilds the list by hand.
View solution Management & planningThe management pack in Power BI, not fourteen Excel filesThe board pack should not depend on which analyst merged which spreadsheet on which day.
View solution IT & servicesEvery laptop accounted for, from order to wipe certificateHardware ordered by email, handed over without a record, and written off when the auditor asks.
View solutionIndustries we deliver this in most oftenRetail & e‑commerceServices & ITFinance & insurance