Cloud
Azure
Roiva books the Azure spend tagged to each AI initiative, Azure OpenAI included, so its ROI is net of the cloud costs it actually runs on.
What it answers
What each AI initiative's Azure footprint costs, Azure OpenAI included, by the tags you already use
What Roiva reads
Monthly cost by service from Cost Management, and the same filtered by a tag an initiative names. Not by deployment or model.
Setup
An app registration with Cost Management Reader and nothing else, made by a script you run in Cloud Shell
What you can measure with Azure
Spend by tag
Tag the resources an initiative runs on, Initiative=InvoiceAI for instance, and what carries the tag is booked to it, across every service.
azure.cost.service_spend
Whole services
Or map a whole service to an initiative, all of Azure OpenAI for instance, under the cost type you pick.
azure.cost.service_spend
One resource per initiative
Azure tags a resource, not the deployments inside it, so two initiatives on one Azure OpenAI resource can't be told apart. Give each its own and the tag does the rest.
Only the AI part of the bill
AI Spend counts Azure's AI services and what initiatives claim, and lists the rest of the bill as outside its figures.
azure.cost.total_spend
A worked month
An invoice-reading model on Azure OpenAI
Cloud cost, booked from Cost Management by tag, for September
| Azure OpenAI tagged Initiative=InvoiceAI | $5,240 | Azure |
| Azure AI Search with the same tag | $860 | Azure |
| Storage with the same tag | $70 | Azure |
$5,240 + $860 + $70
$6,170 booked to the AP initiative for September, from a $72,400 Azure bill
Azure reports Azure OpenAI as one line for the subscription, so the tag is what separates this initiative's share from another's. The untagged rest of the bill stays out of every initiative.
Illustrative figures. Roiva keeps every input with the entry it calculates, and none of it counts until it's approved.
What gets synced
Roiva writes these metric observations on each sync. Reference the key in a value formula to use this data in your ROI calculations.
Billing
azure.cost.total_spend
Total Spend
currency
azure.cost.service_spend
Per-service spend (one row per service, the service in the row's dimensions)
currency
What Roiva keeps
Reads: Monthly cost by service from Cost Management for the last 12 months, and the same filtered by a tag where an initiative names one.
Keeps: Records of monthly cost by service, plus the totals worked out from them.
Common questions
Does the Azure connection break out Azure OpenAI by deployment or by resource?
How to connect
Roiva is listed on Microsoft Marketplace — you can start free there with your Microsoft work account.
You connect Azure from inside Roiva, so you need a Roiva workspace first. Sign in to connect it now. New to Roiva? Start free with your work email, take the free assessment and create your workspace at the end, or request an invite.
- In Azure: Open Cloud Shell (Bash) as someone who can register apps in Microsoft Entra ID and assign roles on the subscription, and run the setup script below. It registers an app for Roiva, gives it Cost Management Reader on the subscription and nothing else, and prints the Subscription ID and the credentials as tenant_id:client_id:client_secret
- Back in Roiva: Enter the Subscription ID the script printed, paste its credentials line into API Key / Secret, and save the connection
- Back in Roiva: The connection page checks each step as the app and gives the command for anything still missing. Once it's all ticked, click Test Connection
- Back in Roiva: After connecting, link this connection to an initiative on the Initiatives tab
- Back in Roiva: To count one initiative's costs rather than the whole subscription's, which is optional, tag the Azure resources it runs on and choose the tag under Tag key and Tag value where it's linked to the initiative. Counting one initiative's Azure costs walks through it
# Run in Azure Cloud Shell (Bash) as someone who can register apps and
# assign roles on the subscription. It uses the subscription Cloud Shell
# is set to; for another, first run: az account set --subscription <name or id>
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
echo "Subscription ID: $SUBSCRIPTION_ID"
# An app for Roiva that can read this subscription's costs and nothing else.
# The line it prints goes in API Key / Secret: tenant_id:client_id:client_secret.
# Its secret lasts a year.
az ad sp create-for-rbac --name roiva-cost-reader \
--role "Cost Management Reader" \
--scopes "/subscriptions/$SUBSCRIPTION_ID" \
--query "join(':', [tenant, appId, password])" -o tsv
Need help?
Email hello@roiva.ai with what you're seeing, and you'll hear back within one business day.
Azure
Start free, then connect Azure once your workspace is set up. Or begin with the free AI ROI exposure assessment.
Start free → Sign in to connectRelated integrations