Skip to content

Free visibility

Cost chatbot

A plain-language question becomes read-only SQL over your own warehouse, and the model reads the rows that come back.

The chatbot lives on the app’s Chat page, inside the free visibility tier. It answers plain-language questions about your own Azure spend, grounded in the same warehouse as the dashboards.

Responses stream back as they are generated, and each conversation keeps its session history, so a follow-up does not need the context repeated. It goes live with your dashboards, after the first nightly run.

Click any image to enlarge.

The app's Chat page answering the question "What were the top 3 services by cost in June 2026?". Above the conversation sit a read-only badge, the language-model provider in use, and the scope controls: a date range, all subscriptions, all resource groups. The answer names Compute, Management and Governance, and Databases with an amount against each, carrying a dollar sign. Under it, a chip reads "Used 1 tool — run_safe_sql, 1 query", then a bar chart of the same three figures captioned as a guarded read-only query, and a collapsed Sources section.

An answer from NovaPulse, a real production estate with its identifiers replaced, captured 4 August 2026. The estate is billed in euros; the dollar sign on a chat answer is a known formatting defect and does not change the figure.

It is useful wherever the answer lives in your billing or resource data but would normally cost someone an afternoon of portal queries.

Ask aboutFor exampleAnswered from
Spend”what did SQL cost last month?”, “which subscription grew fastest this quarter?”, “what’s our monthly spend on this resource group?“your billing data
Resources”which VMs are in North Europe?”, “what SKUs are our databases on?“anything the resource inventory can see
Movement”why did storage cost go up in May?“the resources responsible for the movement
Commitments”what’s our reservation coverage?“your Reservation and Savings Plan data

Questions are answered by running read-only SQL over your own tenant’s warehouse, the same gold tables the dashboards read. OpenAI’s API writes that SQL and is the only language-model provider in use today. The provider receives more than metadata.

Four things cross to the provider on a question:

  1. Your question, plus the scope it runs under, including the subscription IDs and resource-group names in scope.
  2. The shape of your warehouse: the allowlisted table names and the column names and types the query may touch. Not DDL.
  3. The SQL that ran, as text.
  4. The rows that SQL returned, capped at 50 per query. This is the part people assume does not happen: the model reads the result rows and composes the answer you see from them.

Never sent: credentials, the client secret, anything inside your resources, anything from another tenant. Turns are chained at the provider for the length of a session. Full detail, including what this means for EU residency, is in security and data handling.

  • It does not forecast or project beyond the data. It reports what has already landed.
  • Results are capped at 50 rows per query, so a wider breakdown is better read from the BI view.
  • It explains which resources moved and by how much (the billing “why”), not the business justification for a change.

Cross-check any number it gives you against the matching dashboard tile. Both read the same gold tables, so the two should agree.

The chatbot’s access is deliberately narrow.

ControlWhat it enforces
Single-SELECT SQLOne SELECT at a time. Every query is parsed and validated before it runs, and anything that is not a single read is rejected.
Table allowlistQueries reach only an allowlist of your tenant’s own warehouse tables. No arbitrary schema access.
Row limitsResult sizes are capped, so a question cannot pull an unbounded export.
No cross-tenant accessEach tenant has its own warehouse. The chatbot cannot see, join to, or query another customer’s data.
Nothing inside your resourcesThe roles cannot reach database contents, VM filesystems, or application data. They cannot change workloads or resource configuration. Permissions explains the boundary.
  1. Be specific about time ranges: “last month” and “May” beat “recently”.
  2. Name scopes where you can: a subscription, resource group, or service sharpens the answer.
  3. Ask follow-ups. Each session holds context, so “break that down by resource” works after a spend question.
  4. If tags are poor, ask by resource group or naming pattern instead. Structural queries do not depend on tagging.

Treat it as the fastest route from “that number looks odd” to an explanation. Movements you can’t explain through the chatbot are good candidates to raise in the audit working session. The same correlation work is what produces validated fixes in an engagement.