# The FinOps app

FinOps is Solidafy's app for cloud spend: where the money goes, which owner team it belongs to, what each team spends against its budget, and where you can save. This page covers setting it up, every page of the app, its settings, and how to reach it from an AI agent.

## Before you start

FinOps is one of the portal's [apps](/docs/getting-started/concepts#apps). It opens from the **Apps** section of the sidebar, which appears once Solidafy has switched apps on for your organisation.

FinOps is for environment owners and admins: they set it up, they open it, and its alerts and notes go to them.

FinOps reads Azure. It works from Azure cost data, either from cost tables you already build or straight from Azure through the connectors below.

## Setting it up

The first time you open FinOps, it shows **Set up FinOps** with two ways in. Whichever you pick, you can change it later in Settings.

### Use your existing cost tables

Pick this when your environment already builds cost tables. FinOps finds the tables that fit by their columns, and you choose which table plays each role:

| Role | What the table needs |
| --- | --- |
| Daily cost | A date, resource group, service and cost. Required. |
| Spend by day | A date and the actual and amortised spend for that day. Optional: without it, FinOps works it out from daily cost. |
| Commitment purchases | A date, service and amount for each savings plan or reservation bought. Optional. |
| Usage tables | Container replicas and CPU, database pool eDTU, storage capacity or virtual machine CPU. Switch on each one you want read. |

FinOps reads these tables as they are and never changes them or the pipelines that build them. Tables in a namespace that starts with `app_`, which is where apps keep their own tables, are never offered.

### Start from scratch

Pick this when you have no cost tables yet. You switch on the Azure sources FinOps reads:

| Source | What FinOps reads from it |
| --- | --- |
| Azure Cost Management | Actual and amortised cost. Required: cost comes from it. |
| Azure Monitor | CPU, memory, replicas and eDTU. |
| Azure Resource Graph | Inventory and configuration, including owner and team tags on resource groups. |
| Log Analytics | Ingestion by table. |

A source that isn't connected yet shows **Connect** next to it. Connecting it opens the same form as **Data Sources**, and the connection is saved there. If you can't manage data sources, the screen says that someone who can needs to connect it.

When you press **Start**, FinOps creates the pipelines for cost, usage and savings and fills in the last 90 days.

### While it sets up

Either way, FinOps builds its own tables in the `app_finops` namespace. Until the first runs finish, the app shows **Setting up FinOps** with how many runs are done. You can leave the page: the app opens on its own once the numbers are in.

## The pages

The rail on the left and the tabs at the top hold five pages.

| Page | Title | What it answers |
| --- | --- | --- |
| Overview | Cloud spend | What did we spend, what is the month on pace for, and what needs someone? |
| Spend | Where the money goes | Which resource groups, services or owner teams cost the most, and what changed? |
| Savings | Savings | What can we save, and what have we decided about each saving? |
| Investigate | Investigate | Which services ran above the forecast? |
| Settings | Settings | How spend gets an owner team, budgets, the savings review, thresholds and data. |

Every amount is in one currency. If your bill holds more than one currency, FinOps shows one at a time and never adds them up.

### Filters

Overview and Spend start with a row of filters:

- **Period**: last 7, 30 or 90 days, or this month.
- **Environment**: all environments, or one your cost data names.
- **Owner team**: any team, one team, or **No owner yet** for spend no rule matches.
- **Currency**: shown only when your bill has more than one.

**Clear filters** puts them back. The filters stay in the page address, so you can share a filtered view by its link.

### Overview

Overview opens with a spend update in a sentence or two: what you spent in the period, what this month is on pace for against the month before, and how much of the spend has no owner team.

Below it are the key numbers: **Amortised** (when your data has it), **Actual bill**, **On pace for** this month (against the team's budget when you filter to a team that has one), **No owner team**, **Above the forecast**, and **Ready to save** from the latest savings review.

Then:

- **Where it goes**: the biggest services or owner teams, with their share of spend and the change on the period before.
- **Movers**: the resource groups whose spend changed most in the last 7 days against the 7 before.
- **Worth a look**: things that need someone, such as a large share of spend with no owner team, or services above the forecast. Each opens the page that explains it.

### Spend

Spend lists every resource group, service or owner team, 25 at a time, with its spend, the change on the period before, and the last 8 weeks. Besides the filters, it has:

- **Search**: by name or owner team.
- **Group by**: resource group, service or owner team.
- **Sort by**: spend or change.
- **Export all (CSV)**: downloads the whole list, not just the rows on screen.

Opening a row shows what is inside it (a resource group's services, or a service's or team's resource groups) and its facts, such as its owner team and how many cost rows it rolls up.

### Savings

Savings is where the savings review lands. The review is a fixed set of rules over each resource's usage: the rules decide what counts as an opportunity and how much it saves, and Scout runs them and explains what they found. Nobody keeps the list by hand.

- The key numbers: **Ready to save** a month, **New this month**, **Resolved** since the review before, and the **Biggest saving**.
- **Monthly savings review by Scout**: when it last ran, when it runs next, and **Run now** to run it straight away.
- **Suggested Jira tickets**: one ticket per fix, biggest saving first, each with a **Preview** of its text.
- **Opportunities**: in **Open**, **Dismissed** and **Resolved** tabs. Each shows its area (Compute, Containers, Databases, Storage, Logging or Commitments), what was found, the action, the saving a month, what the resource costs, how sure the review is, and the owner team.

For an open opportunity you can **Confirm** it, or **Dismiss** it with a reason: the capacity is needed, already planned another way, the numbers are wrong, or something else. A dismissed opportunity stays dismissed until its numbers change materially, and then the review brings it back. An opportunity is resolved when the next review no longer finds it.

### Investigate

Investigate compares each service's spend in the last 14 days with what the 28 days before it would lead you to expect.

- **Spend above the forecast**: the services that ran above the expected line by at least the thresholds you set in Settings.
- **Expected against actual**: every service side by side, with the ones above the forecast marked.

### Settings

Settings has five sections. You change any of them as one draft: a bar at the bottom says which sections changed, **Discard** throws the draft away, and **Review and apply** shows what each change does before you **Apply** it. If someone else applies settings while you edit, your changes are kept on top of theirs.

| Section | What it holds | When a change takes effect |
| --- | --- | --- |
| Ownership | Rules that give a resource group an owner team when its name contains some text. Rules apply in order and the first match wins. An owner or team tag on the resource group comes first when Azure Resource Graph is connected. | Once the pipelines rebuild, which Apply starts. |
| Budgets | A monthly budget for each owner team. | At once. |
| Savings review | How often the review runs (monthly on the 1st, or weekly on Mondays), which areas it checks, and the limits it uses, such as when a virtual machine can be one size smaller or how few replicas a production container may have. Commitments are always checked. | From Scout's next review. |
| Thresholds | How far above the forecast a service must be, in percent and in money, to count, and the currency your cost data is in. | At once. |
| Data | The tables or Azure sources FinOps reads. Your own tables are never changed. | Once the pipelines rebuild. |

Above the settings, an **Updates** card shows the version of FinOps in place and what a newer one brings. Some updates apply themselves, others wait for an admin to press **Apply update**.

## Alerts and Scout

FinOps raises alerts in your portal notifications when a service runs above the forecast by your thresholds, and when an owner team's month is on pace to go past its budget. Each alert is raised once and only raised again after it clears.

When you start FinOps, it installs an [operator](/docs/operators/overview) called Scout, which you find under **Workspace > Operators**. After each savings review, every environment admin gets a short savings note in their notifications: what is new, what was resolved, what is ready to save, and the one or two opportunities to act on first.

## Using FinOps from an AI agent

FinOps answers four tools on the MCP server's Data Explorer address, for people who can open the app. They read the same numbers as the screens, as you:

| Tool | What it answers |
| --- | --- |
| `get_finops_overview` | Spend in the period against the period before, what the month is on pace for, the share with no owner team, services above the forecast, and the biggest services. |
| `list_finops_spend` | The 25 biggest resource groups, services or owner teams by spend, with the change on the period before. |
| `list_finops_savings` | What the latest savings review found that is still open. |
| `run_finops_savings_review` | Runs the savings review if this period's hasn't run yet, and says what it found. It never runs twice in a period. |

Each takes an optional `period` (`7`, `30`, `90` or `month`) and `team`, and `list_finops_spend` also takes `group` (`rg` for resource group, `service` or `team`). See [AI agents and MCP](/docs/cli/ai-agents) for connecting an agent.

## Uninstalling

At the bottom of Settings, under **Danger zone**, an environment admin can choose **Uninstall app**. FinOps first lists everything it will remove: its operator and schedules, its pipelines and their runs, its tables, and its saved settings and records. You type FinOps to confirm. The data sources FinOps created are kept unless you tick **Also remove the data sources this app created**, and data sources you created yourself are never removed. Afterwards the app opens on its Start screen again.
