# Finout Documentation

Explore our knowledge base for all the right answers, your go-to resource for all things Finout!

***

Welcome to the Finout documentation hub! \
\
Find everything you need to manage your cloud financial operations with ease. Our updated articles, clear guides, and step-by-step instructions help you make the most of the Finout platform.  Whether you're just getting started or optimizing your workflows, we aim to empower you with the knowledge to take full control of your cloud costs.

## Discover Finout

***

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><p><strong>Get Started with Finout</strong><br></p><p>Start running Finout and take control of your cloud financial management.</p></td><td></td><td></td><td><a href="/pages/4VrJpIiKAPPQkOgJyahX">/pages/4VrJpIiKAPPQkOgJyahX</a></td><td><a href="/files/KjBoVvzOykHpwCbVEJAf">/files/KjBoVvzOykHpwCbVEJAf</a></td></tr><tr><td><strong>Integrations</strong><br><br>Connect Finout with your existing tool stack for a unified experience. </td><td></td><td></td><td><a href="/pages/SrRpGF8wxLQrGr7jivOq">/pages/SrRpGF8wxLQrGr7jivOq</a></td><td><a href="/files/8P5nUUmrdEfin7vfJtuN">/files/8P5nUUmrdEfin7vfJtuN</a></td></tr><tr><td><strong>User Guides</strong><br><br>Make the most of Finout’s features for seamless adoption. </td><td></td><td></td><td><a href="/pages/VGijdUBNWs9dKAsyNWrJ">/pages/VGijdUBNWs9dKAsyNWrJ</a></td><td><a href="/files/vSwv775mQKxEIuWOajR0">/files/vSwv775mQKxEIuWOajR0</a></td></tr></tbody></table>

## Configuration and Administration

***

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Finout API</strong><br><br>Extend Finout's functions into your workflows with APIs. </td><td></td><td></td><td><a href="/files/8bLu6fkVNlhFLadPdWkK">/files/8bLu6fkVNlhFLadPdWkK</a></td><td><a href="/pages/NpIvicl0VT06kkYqjArr">/pages/NpIvicl0VT06kkYqjArr</a></td></tr><tr><td><strong>Role-Based Access Control</strong> <br><br>Control permissions and secure access to protect your data. </td><td></td><td></td><td><a href="/files/JJxkowwAyqkY4HSwGDXH">/files/JJxkowwAyqkY4HSwGDXH</a></td><td><a href="/pages/vTGnJxEXFVLHV5gC0sM2">/pages/vTGnJxEXFVLHV5gC0sM2</a></td></tr><tr><td><strong>Product Updates and Blogs</strong></td><td>See our latest features and informative blogs. </td><td></td><td><a href="/files/O1T2yU3V5C3Yvc7XbC2Y">/files/O1T2yU3V5C3Yvc7XbC2Y</a></td><td><a href="https://www.finout.io/product-news">https://www.finout.io/product-news</a></td></tr></tbody></table>

## Finout Demo

***

{% embed url="<https://youtu.be/91Nb4zSXpiI?si=3JCYp1RgdqZRm6aG>" %}

{% hint style="info" %}
Finout Support

If you need help with anything, please reach out to <support@finout.io> - we're here to help!
{% endhint %}


# Introduction to Finout's Suite of Features

Finout is a comprehensive cloud cost management solution that empowers FinOps, DevOps, and Finance teams to effectively manage and reduce cloud spend while improving profitability without requiring code changes or modifying existing tags.

Our comprehensive suite of features is strategically divided into three key phases of the FinOps lifecycle: **Inform**, **Optimize**, and **Operate**.

### Inform <a href="#h_8b46fb6ee2" id="h_8b46fb6ee2"></a>

* [MegaBill](/user-guide/inform/megabill): Enables you to view all your costs for any cloud provider or service such as AWS, Datadog, GCP, Global, Kubernetes, Snowflake out-of-the-box and easily apply a wide range of quick and advanced source object filters to view the relevant categorized costs.
* [Virtual Tags](/user-guide/inform/virtual-tags): Allows you to tag and aggregate various resources (across technologies) by creating rules that group and label costs. This eliminates the need to relabel the original resources. Each virtual tag comprises one or more rules.
* [FinOps Dashboards](/user-guide/inform/finops-dashboards): Easily visualize and summarize your costs with Finout's customizable dashboards and widgets. Choose from our library of predefined dashboards or create your own with ease, providing actionable insights for your FinOps strategy.
* [Financial Plans](/user-guide/inform/financial-plans): Finout’s solution enables you to plan your company's annual financial plan and expected budgets so that you can allocate accordingly by planning, managing, and monitoring cloud spending.
* [Data Explorer](/user-guide/inform/data-explorer): A powerful, insight-driven tool that enables users to generate comprehensive, multi-dimensional reports, offering unparalleled flexibility in aggregating data across various fields for tailored cost measurements and dimensions.

### Optimize <a href="#h_3c949acf4f" id="h_3c949acf4f"></a>

* [CostGuard](/user-guide/optimize/costguard): Finout “scans” and analyzes your infrastructure and identifies cost waste and cost optimization opportunities. As cost optimization is always a high priority, CostGuard provides a comprehensive solution that is seamlessly integrated with the MegaBill.
* [My Commitments](/user-guide/optimize/my-commitments): Provides you with an in-depth view of your cloud commitments.
* [Commitments Log](/user-guide/optimize/commitments-log): Provides you with a comprehensive audit and monitoring capability for all AWS Reserved Instance actions.
* [Anomalies](/user-guide/optimize/anomalies): Finout's anomaly engine utilizes your MegaBill historical data to identify major cost anomalies that may occur. Anomalies can be sent as alerts to your email or as a message to a designated Slack channel.

### Operate <a href="#h_6a8b9a02a3" id="h_6a8b9a02a3"></a>

* [Reports](/user-guide/operate/reports): Presents daily, weekly, or monthly reports based on your dashboards. A report can be sent periodically to your email or posted as a message to Slack.
* [Governance](/user-guide/operate/tag-governance): Tag governance ensures consistent and effective resource management across cloud environments. It involves defining, enforcing, and monitoring organizational policies for tagging cloud resources, such as virtual machines, databases, and storage.
* [Endpoints](/settings/endpoints): Proper endpoint configuration ensures that your teams are always informed and equipped to act swiftly, keeping operations running smoothly and costs under control.


# Onboarding New Users to Your Finout Account

Only users with admin privileges have the exclusive right to access the Finout admin portal, which encompasses role management and inviting new members to the platform.

## Adding a New Finout User <a href="#h_e8b7a7acc6" id="h_e8b7a7acc6"></a>

1. Log into your Finout account with **Admin role** credentials.<br>

   <figure><img src="/files/WvWELmbZ9MOTQmwRFUXO" alt=""><figcaption></figcaption></figure>
2. Click on your username, then select **Admin Portal**.<br>

   <figure><img src="/files/1JCjTPjNefy0Q8Ul0jaJ" alt=""><figcaption></figcaption></figure>
3. Navigate to the **Users** section.

<figure><img src="/files/NMrpgZOSbSw5rWyStKaK" alt=""><figcaption></figcaption></figure>

4. Choose **Invite User**.\
   The **Invite User** popup appears.

<figure><img src="https://finout.intercom-attachments.eu/i/o/6277506/7cb12b75e935cd0fc5a56f30/jXNIXios0HxgSMs8Jj7MQPyWu1fanKTUUtv8iQzZQAAzAkgETpWP59BuKgwu8aRlEBcKWPRUttH64X9kFgIXWEhLpxmNePmiALG80lXy7Cb9dXRuBM_yqIWq1_in_LCdec3MmHxQII9eo9gMJQ-KLj4?expires=1724340600&#x26;signature=1b4b1226af3d21aca57786b826b39745d6babe2ff4ad1fd1344f38c1ffb4d1b7&#x26;req=1tdowl36qnsp0xr0v9tnpJhYcFMANHy%2FJDOpmT8RZ6oFPYtswmyj00B66oAK%0A" alt=""><figcaption></figcaption></figure>

5. Provide the new user’s Email.
6. Click **Select role** and assign appropriate user roles. For a detailed explanation of user roles, refer to [Role Based Access Control](/settings/role-based-access-control-rbac).
7. Fill in the user’s Full Name.
8. Optionally enter the user’s Phone Number.
9. Optionally copy the invite link and forward it directly to the user.
10. &#x20;Click **Invite**.

Following this, the new user’s status will display as Pending approval. Once the user activates their account, which can be done through the email link or the shared direct link (instructions provided below), and the setting up of a password, their joining date will be reflected in the **Joined** column.

<figure><img src="https://finout.intercom-attachments.eu/i/o/6277507/51f65cf0312aa4f24deeccbc/j_r3VHzrtCtt_dO9N_lGIEEF14_Kb8gvmgG_cYRj1V6Ee-nvaozvZTeU5BLIO5hceQN2BYBErPy7Lh0fHs-MwWI_poAmPNilqve0cby170ZEmoqslg6D4O4LEeFmMMyha0_NW7pL-f5SIJUCTIiEJyg?expires=1724340600&#x26;signature=f6c50b1812d8305f162453ebce146c05ccf1ec312750448b1286dee70e9da798" alt=""><figcaption></figcaption></figure>

## Account Activation for New Users <a href="#h_e3e7f95fba" id="h_e3e7f95fba"></a>

As a new user of Finout, account activation is a necessary step before diving in.\
\
**To activate your  Finout account:**

1. Access the **Activate Your Account** email.

   <figure><img src="https://finout.intercom-attachments.eu/i/o/6277508/ddc3431281849f16b6fe6f20/8wXL02HqYB4-973_NfFPFXxFWvDXrSZp4ZTzxIfTl7G6WzWs4zZs3Q47hYGW9tPlBejtM8HJLfPOGMKaUgYzzyWaLQQ95PBX0tMxPFLWewEzoRSITrlWQLZR_S_Zzp8aq1dbbxAy32GyMZMyLYhK40k?expires=1724340600&#x26;signature=6a7bf2a62ea5e7cfbe32ef0da389266424b7c55a534bd8ff99c136e6174a1773&#x26;req=1tdowl36pHsp0xr0v9tnpIy1pbnG6NektRg7j4mrCNrvftWmtRkvyKCKkPfH%0A" alt=""><figcaption></figcaption></figure>
2. Click on **Activate my account**.

   <figure><img src="https://finout.intercom-attachments.eu/i/o/6277509/5be2e26f281fb15a10245329/kC0A5587CfVgurp7UEGNjaoqKrQ6ttlsO9g4W3vLGOIbcCX1zJrZq-A1fXgm1tpKzcWBNj_iQeh0gKlMEz9cTbHDeB9-xAIQb7hybnRZ6_glqSc9j2c8T6oRHJFI7KIdtcOuPvbHfo-5Xbu__6OZCpQ?expires=1724340600&#x26;signature=7df96f0ade7e16c42899065997726e7959bc8f0a3bcfc4bf887658f1b313fabd&#x26;req=1tdowl36pXsp0xr0v9tnpFoIN2gGDxPbI8K4rB%2BvYXsBZyz%2B9%2BpK19JFcWvL%0A" alt=""><figcaption></figcaption></figure>
3. Set a **New password** and **Confirm new password**.
4. Click **Activate**. Following this, you are all set to explore Finout.


# Single Sign-On (SSO) Setup

## SSO Overview <a href="#h_b94fb6bffe" id="h_b94fb6bffe"></a>

Single Sign-On (SSO) setup simplifies user authentication and access management across multiple applications within an organization. It allows users to securely authenticate once and access various services without having to re-enter credentials. Integrating your SSO providers with Finout enhances security and streamlines administration by reducing the risk of credential-based attacks.

## Connect Your ​​SSO Providers to Finout <a href="#h_54bed064d4" id="h_54bed064d4"></a>

Follow this procedure to integrate your SSO provers with Finout.

**To connect SSO providers to Finout:**

1. In Finout, navigate to the **Admin Portal**.<br>

   <figure><img src="/files/xz8ErElvoE9RlI351ojm" alt=""><figcaption></figcaption></figure>
2. In the Admin Portal navigation bar, click **SSO**.\ <br>

   <figure><img src="/files/u2I2hM2JYt79kffHFX3W" alt=""><figcaption></figcaption></figure>
3. Click on **Setup SSO** connection.\
   The **Setup SSO** connection appears.

<figure><img src="https://finout.intercom-attachments.eu/i/o/8218171/cf9a408a31463fdb87c3aa23/DuOQgmyH0eX7FZpgGk7G6gWWtDaYzL85dntANchtpqnTVIXvRBtLUIVoz0jar3DbelumNatk1L2SBlAoQZDmjPHpzfiP9QYmlQkJ_ZI6odz6Wk6g6tYnyESxPDFM0DHNblXBOnYdIzQ0fRNRrOyHDX4?expires=1724340600&#x26;signature=a07c311e3af3d36dd5b5e194084ec83c97fbf1f003b95bbc1c45a38d594cf5a6&#x26;req=2NduzVn9rXsp0xr0v9tnpEDicMgFuM14zXpKY44Uf19gbCC6s34SLdqPCqXV%0A" alt=""><figcaption></figcaption></figure>

4. Select the SSO provider with which you wish to connect with Finout.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: It is recommended to choose the SAML integration.</p></div>
5. Follow the onscreen instructions for the chosen SSO provider.\
   You are redirected to the Self-service SAML configuration/SSO configuration.<br>

   <figure><img src="/files/k0oUU1Wx4cWCcRaFfWh0" alt=""><figcaption></figcaption></figure>
6. Enter a **Domain Name** and click **Proceed**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The domain must be claimed by copying the TXT record and applying it to your DNS provider.</p></div>

   The **Record Name** and **Record Value** appear.

   <figure><img src="/files/QBE2qSzYyFzLkwofX7u7" alt=""><figcaption></figcaption></figure>
7. Copy this data and add it to a new TXT record in your DNS file, then click **Proceed**.\
   You are brought to the **Manage Authorization** step.<br>

   <figure><img src="/files/HJruZvIU6cwPLVQEnNrf" alt=""><figcaption></figcaption></figure>
8. Assign default roles to all SSO users by adding one or more account roles from your list of predefined roles.
9. You can optionally map your IdP groups to roles available in the application.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Ensure that your IdP passes the  <code>groups</code> attribute that is sent in the SAML Assertion.</p></div>

   <figure><img src="/files/TZfg0UC0taWKwfoux7OT" alt=""><figcaption></figcaption></figure>
10. Click **Done** and save the connection.
11. Login into Finout using the SSO to ensure that it is enabled.<br>

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: For more information, see <a href="https://developers.frontegg.com/guides/authentication/sso/self-service/saml">Frontegg documentation</a>.</p></div>

## FAQs <a href="#h_6b212d4255" id="h_6b212d4255"></a>

**If a user has the following groups:**

* Group A in Active Directory: Connected to Group 1 in Finout.
* Group B in Active Directory: Connected to Group 2 in Finout.

**What permissions will the user have if they are moved from Group A to Group B?**

The user will have access to both Group 1 and Group 2 in Finout. To remove access to Group A, you must remove it from Group A in Finout.

**What happens if a user is part of an Active Directory group and belongs to another group in Finout?**

The user will have access to both groups in Finout. This access will be effective immediately upon the next login.

**If a user belongs to multiple SAML groups with corresponding groups in Finout, will Finout assign the user to all these matching groups?**

Yes, if a user belongs to multiple SAML groups with corresponding groups in Finout, Finout will assign the user to all of these matching groups.

**Does Finout support re-evaluating user group memberships upon every SAML login?**

No, group provisioning happens only when the user onboards Finout. Then, they need to manage the groups in the admin portal and Finout groups settings.&#x20;


# Cost and Usage Types

When interacting with the Finout MegaBill, whether you're creating a new [Data Explorer](/user-guide/inform/data-explorer), building a [widget](/user-guide/inform/finops-dashboards), or using other system features, you can select from various cost and usage types, each representing a different method of accounting for your cloud service charges. This provides detailed insights into your financial data.

Finout adopts AWS’s cost dataset terminology as a standard, ensuring consistency in cost language across all providers and services. The [table below](#h_3aede87a5e) provides a clear representation of this cross-platform cost terminology alignment in Finout.

## What is a Cost Type? <a href="#h_8ce18f53e3" id="h_8ce18f53e3"></a>

A cost type indicates how costs are calculated and presented for each cloud service based on the amount of resources used. The default cost setting in Finout is the net amortized cost. If you need to change this default setting, navigate to **Settings > Advanced Settings** to select a different cost type.

## Cost Type Definitions <a href="#h_0a6317d959" id="h_0a6317d959"></a>

* **Unblended Cost**- This is the actual cost as detailed on your invoice, including charges for resources consumed and any upfront costs associated with Reserved Instances or pre-paid services. It reflects the direct expenses recorded and paid by your finance department, ensuring that the charges on the invoice match the actual payments made. Understanding Unblended Costs is essential for accurate financial accounting.
* **Net Unblended Cost**- The Net Unblended Cost reflects the costs after all applicable discounts have been directly applied to the service. Unlike the standard Unblended Cost, where discounts are usually itemized separately on different lines of the invoice, showing the "regular" costs of services, the Net Unblended Cost integrates these discounts directly into the service costs themselves.
* **Amortized Cost**- Amortized costs distribute the expenses of commitment payments across the duration of the Commitment Plan (SP, RI), matching costs with the actual service usage. This represents the usage costs of your Committed Plans. In contrast, Unblended Cost accounts for expenses as they occur.<br>

  <figure><img src="/files/2XZXcnMm3QqkyYfzWouN" alt=""><figcaption></figcaption></figure>
* **Net Amortized Cost**- This cost type represents the total expenses after applying all relevant discounts to the amortized costs.
* **Blended Cost**- Blended rates average the costs of Reserved Instances and On-Demand Instances across all accounts. The total cost is calculated by dividing the total cost of services by the amount of data stored or the service usage, excluding monthly CSP/RI fees or upfront RI fees.
* [FairShare Cost](/get-started-with-finout/cost-and-usage-types/fairshare-cost) - This cost type eliminates the randomness often seen in AWS's default cost allocation by ensuring discounts are applied fairly across all relevant resources according to actual usage and eligible commitments. This structured approach resolves misaligned costs and inaccurate showback reports, offering a logical and equitable way to allocate savings in environments with multiple teams, regions, and services.\
  Contact Finout support at <support@finout.io> to enable this feature.
* **Net FairShare Cost** - The AWS refund is factored into the cost of each included service, with the FairShare formula applied afterward. Conversely, for FairShare costs, the refund (e.g., PrivateRateDiscount) is handled as a separate billing line and excluded from the formula.\
  Contact Finout support at <support@finout.io> to enable this feature.
* [**List Cost**](/get-started-with-finout/cost-and-usage-types/list-cost): List Cost reflects public cloud pricing, showing what you would pay without discounts, commitments, or Enterprise Discount Plans. It provides a clear, unbiased view of your cloud spend, making cost analysis easier.<br>

## **Cost Type Mapping Across Providers**

Finout standardizes cost calculations across cloud providers and services, ensuring a consistent and accurate view of spending. The table below outlines how Finout's cost types align with different providers.

<table data-header-hidden><thead><tr><th width="135"></th><th width="138"></th><th width="134"></th><th width="112"></th><th width="114"></th><th width="134"></th><th width="126"></th><th></th><th></th></tr></thead><tbody><tr><td></td><td><strong>AWS</strong></td><td><strong>Azure</strong></td><td><strong>GCP</strong></td><td><strong>Snowflake</strong></td><td><strong>Datadog</strong></td><td><strong>Confluent</strong></td><td><strong>OCI</strong></td><td></td></tr><tr><td><strong>Unblended</strong></td><td>Unblended</td><td>Actual</td><td>Cost</td><td>Cost</td><td>Cost</td><td>Amount</td><td>Cost / MyCost</td><td></td></tr><tr><td><strong>Net Unblended</strong></td><td>Net Unblended</td><td>Actual</td><td>Cost</td><td>Cost</td><td>Cost</td><td>Amount</td><td>Cost / MyCost</td><td></td></tr><tr><td><strong>Amortized</strong></td><td>Amortized</td><td>Amortized</td><td>Cost</td><td>Cost</td><td>Finout’s Amortization Calculation</td><td>Amount</td><td>Cost / MyCost</td><td></td></tr><tr><td><strong>Net Amortized</strong></td><td>Net Amortized</td><td>Amortized</td><td>Cost</td><td>Cost</td><td>Finout’s Amortization Calculation</td><td>Amount</td><td>Cost / MyCost</td><td></td></tr><tr><td><strong>Blended</strong></td><td>Blended</td><td>Amortized</td><td>Cost</td><td>Cost</td><td>Cost</td><td>Amount</td><td>Cost / MyCost</td><td></td></tr><tr><td><strong>List Cost</strong></td><td>Public Pricing</td><td>Not Available</td><td>Public Pricing</td><td>Not Available</td><td>Not Available</td><td>Not Available</td><td>Not Available</td><td></td></tr><tr><td><strong>FairShare Cost</strong></td><td><p>Finout FairShare Calculation</p><p><br></p></td><td>Not Available</td><td>Not Available</td><td>Not Available</td><td>Not Available</td><td>Not Available</td><td>Not Available</td><td></td></tr><tr><td><strong>Net FairShare Cost</strong></td><td>Finout Net FairShare Calculation</td><td>Not Available</td><td>Not Available</td><td>Not Available</td><td>Not Available</td><td>Not Available</td><td>Not Available</td><td></td></tr></tbody></table>

## AWS References <a href="#h_2cba15bdce" id="h_2cba15bdce"></a>

* <https://aws.amazon.com/blogs/aws-cloud-financial-management/understanding-your-aws-cost-datasets-a-cheat-sheet/>
* <https://docs.aws.amazon.com/cost-management/latest/userguide/ce-advanced.html>
* <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/con-bill-blended-rates.html#Blended_S3_Stand_Storage>


# FOCUS in Finout

## Overview

[FOCUS ](https://focus.finops.org/what-is-focus/)(FinOps Open Cost and Usage Specification) is a billing data standard developed by the FinOps Foundation. It aims to standardize cost and usage data across cloud providers, simplifying analysis and enabling consistent reporting.

There are three ways to implement FOCUS:

* [**Custom Focus CSV Upload**](#custom-focus-csv-upload): Users can bring their own FOCUS-compliant CSV and onboard it as a [custom cost center](/billing-integrations/custom-cost-sources/custom-cost-centers).
* [**Default FOCUS Table (Finout native)**](#default-focus-table-finout-native): Finout automatically unifies billing exports from all major cloud providers (AWS, GCP, Azure, and more) into a single, queryable cost table, eliminating manual normalization and making cross-cloud spend easy to analyze and report.
* [**FOCUS Virtual Tags**](#focus-virtual-tags-coming-soon)**:** Finout Virtual Tags provide a ready-made, cross-cloud tagging layer that standardizes cost dimensions so you can slice and analyze spend immediately, without manual setup.

## **How to Implement FOCUS in Finout**

### **Custom FOCUS CSV Upload**

Bring your own FOCUS cost file and onboard it as a Custom Cost Center in Finout.&#x20;

**What do you need to provide?**

* A CSV file that follows the [FOCUS export specification](https://focus.finops.org/what-is-focus/).

**How does it work?**

* Share the FOCUS CSV with Finout support at <support@finout.io>.
* Finout will load it as a Custom Cost Center. See the [Custom Cost Centers](/billing-integrations/custom-cost-sources/custom-cost-centers) documentation for more details.

**When is it a good fit?**

* You manage your own billing pipeline and want a vendor-neutral format.
* Your vendor already exports FOCUS (e.g., Azure, AWS, Oracle).

### Default FOCUS Table (Finout-native)

Finout **automatically builds** a unified, normalized dataset from your existing billing exports across all supported cloud providers with no setup required. It standardizes cost and usage data to simplify analysis and enable consistent reporting. This table combines diverse billing formats into a single structure, making it easy to analyze and report all your cloud spending in one place without manually normalizing data. **You can access** **this unified table** through custom dashboards, exports, and queries.

### [**FOCUS Virtual Tags** ](/user-guide/inform/virtual-tags/finout-virtual-tags)

Finout Virtual Tags give you an out-of-the-box way to slice and analyze your cloud costs without having to build complex rules from scratch. Based on Finout’s FOCUS cost model, these predefined tags normalize core dimensions like provider, service, region, charge category, and pricing type, creating a consistent cross-cloud structure from day one.

## FAQs

**Does Finout support FOCUS across all cloud providers?**\
Yes. Finout supports any FOCUS file from any cloud provider as a custom cost center.


# FairShare Cost

## Introduction <a href="#h_e272f20760" id="h_e272f20760"></a>

The FairShare Cost type is an advanced solution for the fair distribution of discounts from Reserved Instances (RIs), Spot Instances, and Savings Plans (SPs), as well as On-Demand costs, across Amazon EC2, AWS Lambda, Amazon ECS, and Compute Savings Plans, RDS, Elasticache, DynamoDB, and RedShift. Designed for organizations managing commitments centrally, it addresses the complexities of AWS’s discount allocations and provides transparency and control over cloud expenses.

{% hint style="info" %}
**Note**: K8s costs in FairShare are supported only for AWS, with costs allocated to a node’s pods proportionally based on their usage within the same hour.
{% endhint %}

FairShare Cost eliminates the randomness often seen in AWS's default cost allocation by ensuring discounts are applied accurately across all relevant resources according to actual usage and commitments. This structured approach resolves misaligned costs and inaccurate showback reports, offering a logical and equitable way to allocate savings in environments with multiple teams, regions, and services. See [our blog](https://www.finout.io/blog/finouts-aws-fairshare-cost-type) for more information.

{% hint style="info" %}
**Note**: Contact Finout support at <support@finout.io> to enable this feature.
{% endhint %}

## Challenges and Solutions <a href="#h_f7a56d08af" id="h_f7a56d08af"></a>

**Let’s start with a simple story…**

Two brothers buy apples daily, and each apple typically costs $10. They receive a total discount allocation for both apples that equals 4$; however, the store allocates this discount randomly, which varies daily.

{% hint style="info" %}
**Note**: The discounts in the following scenarios have a given rate, expressed as a percentage, and are converted into dollar value, which is then subtracted from the apple's total price.
{% endhint %}

On the first day, Alex’s apple gets a $3 discount, costing $7, while Jon’s apple receives only a $1 discount, costing $9. While the apples are identical, the discounts applied to them vary.<br>

<figure><img src="/files/TzmhqTpdLehSUW9f72GI" alt=""><figcaption></figcaption></figure>

The next day, the discounts are reversed: Jon’s apple gets a $2.50 discount, costing $7.50, while Alex’s apple only gets a $1.50 discount, costing $8.50. While the apples are identical, and the total discount remains the same, the discount allocation per apple varies.

<figure><img src="/files/szDM73GSE8YX0gKBRmuX" alt=""><figcaption></figcaption></figure>

This pattern continues daily, with the total discount remaining the same and the brothers buying identical apples. However, each brother sometimes pays significantly less or more for the same apple. By the end of the week, both brothers are confused—their apples are identical, but their costs fluctuate unpredictably due to the varying discounts applied each day.

The story of these two brothers mirrors the challenges faced by different development teams with identical usage in managing cloud costs, where unpredictable discount allocation creates confusion and unfair distribution, much like the fluctuating discounts on identical apples. Imagine you’ve carefully rightsized your EC2 instances, expecting a reduction in costs, but the next month’s bill unexpectedly increases. Upon closer inspection, you discover that while Reserved Instances (RIs) and Savings Plans (SPs) were applied, the distribution of these discounts varied unpredictably. Some resources received discounts on certain days but not others, causing the anticipated savings to fluctuate.

This issue is compounded by AWS’s discount allocation system, where RIs and SPs may be applied arbitrarily, sometimes with little connection to actual resource usage. For example, discounts meant for production might apply to unrelated environments, such as development, leading to inaccurate budget attribution and distorted cost tracking. This misalignment can inflate costs for the teams requiring savings and disrupt finance teams’ forecasting, budgeting, and reporting. By using FairShare Cost, teams can address these issues, ensuring more predictable and equitable discount distribution across resources.

**AWS Pricing Structure Challenges:**

* *Random Discount Allocation:*
  * AWS may arbitrarily apply RIs and SPs to your environment, often unrelated to actual resource usage.
  * Teams that don’t need specific resources might receive discounts, while those requiring savings pay full price.\
    ​
* *Misaligned Costs and Usage*:\
  ​
  * Discounts for specific workloads or environments (e.g., production) can be applied to unrelated teams (e.g., development), leading to incorrect budget attributions.
  * This misalignment distorts cloud spend tracking and creates false perceptions of departmental consumption.\
    ​
* *Inconsistent and Unpredictable Billing*:\
  ​
  * The lack of structured allocation makes forecasting cloud expenses challenging, hindering accurate budgeting.
  * Finance teams struggle to generate reliable showback reports, causing planning disruptions and financial disputes.

**Story Continued…**

To resolve the confusion, the brothers introduced a predictable discount system with a set price for red apples and a set price for green apples.

{% hint style="info" %}
**Note**: The discounts in the following scenarios have a given rate, expressed as a percentage, and are converted into dollar value, which is then subtracted from the apple's total price.
{% endhint %}

*Red Apple Discount:* \
The brothers buy two red apples that each get a 2$ discount costing 8$ per apple. This lowers the price of each apple from $10 to $8, ensuring consistent pricing and eliminating unexpected price fluctuations.

<figure><img src="/files/5bkvMspFXixJOFML6Z1U" alt=""><figcaption></figcaption></figure>

*Green Apple Discount*:\
After receiving the discount on red apples, the brothers also decided to buy green apples as well. All green apples share a total $3 group discount, distributed equally across the three apples so that each gets a $1 discount, reducing their price from $10 to $9.

<figure><img src="/files/zVM3HK1UPXRv9BcSLz92" alt=""><figcaption></figcaption></figure>

*Apples Plan*:\
In addition to the group discounts, the store decided to add a total $10 global discount (equivalent to SP and not EDP) applied to all apples regardless of their color. Since the apples are the same size and there are a total of 5 apples, the global discount of $10 is distributed equally, resulting in a $2 discount per apple.

<figure><img src="/files/s5MSJDFyxpLNKQVn9wUI" alt=""><figcaption></figcaption></figure>

*Summary of final apple prices*:

The brothers finally have a fair and predictable discount allocation for all apples.

Red Apples:

* Group Discount: $2 per apple (from the $4 total group discount distributed evenly across all 2 red apples, $4 ÷ 2 = $2 each)
* Global Discount: $2 per apple (from the $10 total global discount distributed evenly across all 5 apples, $10 ÷ 5 = $2 each)
* Final Price: $10 - $2 (Group) - $2 (Global) = $6 per red apple

Green Apples:

* Group Discount: $1 per apple (from the $3 total group discount distributed evenly across all 3 green apples, $3 ÷ 3 = $1 each)
* Global Discount: $2 per apple (from the $10 total global discount distributed evenly across all 5 apples, $10 ÷ 5 = $2 each)
* Final Price: $10 - $1 (Group) - $2 (Global) = $7 per green apple

<figure><img src="/files/fZdKJrMQ0owjy8yVWEjz" alt=""><figcaption></figcaption></figure>

Both brothers now enjoy a stable, predictable cost structure for their apples. The total discount is permanent, and with the new system, the allocation is also predictable. Similarly, Finout’s FairShare Cost model offers a solution to the AWS discount confusion by providing consistent discount allocation across Amazon EC2, AWS Lambda, Amazon ECS, Compute Savings Plans, RDS, Elasticache, DynamoDB, and RedShift. Each resource will get a fair share of its eligible discounts (RIs, Spot Instances, and Savings Plans) based on usage. This helps teams track and optimize cloud spending without surprises, providing the same predictability and stability the friends now experience with their apples.

**FairShare Cost Solutions:**

* *Analyze the Past - Showback and Chargeback*:\
  ​\
  You gain a transparent and accurate view of cloud costs, with each team or service being charged based on actual usage, free from the distortions caused by arbitrary discount allocations.
  * Eliminates anomalies and false positives
  * Simplifies analysis of historical spending patterns
  * Provides accurate and actionable cost insights\
    ​
* *Plan the Future - Modern Financial Planning*:\
  ​\
  FairShare Cost allocation ensures that no team benefits unfairly from discounts intended for other workloads, aligning costs with usage and fostering accountability across departments.
  * Aligns costs with actual usage
  * Enhances predictability in billing
  * Supports precise budget planning and resource allocation\
    ​
* *FinOps Adoption - A Core Product Value* :\
  ​\
  Structured and predictable cost allocation enables finance teams to generate reliable reports and forecasts, enabling better budgeting and planning.
  * Simplifies cost models for clarity
  * Reduces organizational noise
  * Fosters cross-team collaboration with a shared language

## FairShare and Amortized Cost Comparison <a href="#h_07ff25a8b3" id="h_07ff25a8b3"></a>

An apple stand sells red and green apples. Each type of apple has unique qualities, and discounts need to be allocated fairly across both types according to specific criteria.

This scenario, along with the various commitment combination types, highlights the similarities and differences between FairShare and Amortized costs, using an apple as a metaphor for a resource.

There are four types of commitment combinations in cost calculations: No Commitments, Group Commitments Only, Global Commitments Only, and Group and Global Commitments, each defining how FairShare and AWS Amortized costs are applied based on eligible discounts and allocation methods.

{% hint style="info" %}
**Note**: The discounts in the following scenarios have a given rate, expressed as a percentage, and are converted into dollar value, which is then subtracted from the apple's total price.
{% endhint %}

1. **No Commitments**\
   ​

   *Scenario continued*:

   Both red and green apples are sold at a standard price of $10, without special discounts or commitments. Both apple groups have the same discount, with no adjustments for specific requirements or categories.<br>

   *Explanation*:

   All resource costs are calculated on an On-Demand basis (no discount applied). The FairShare cost and the AWS Amortized cost are the same.<br>

   <figure><img src="/files/6MLAcN982NotPr0eSmUc" alt=""><figcaption></figcaption></figure>
2. **Group Commitments Only**\
   ​\
   ​*Scenario continued*:\
   Only red apples receive a special discount, reducing their cost over time through a prepaid commitment. This discount is divided evenly among all red apples, ensuring each one benefits equally. Green apples, however, continue to be sold at the public price of $10 with no discount applied.\
   ​\
   ​*Explanation*:\
   Resources with group commitments receive eligible discounts, allocated by the usage ratio calculated through the FairShare cost type (group allocation), while all other resources are calculated at the On-Demand rate (which have no discount). Groups that receive a discount will show different FairShare and Amortized costs, while groups without a discount will have equal FairShare and Amortized costs, reflecting the on-demand rate.<br>

   <figure><img src="/files/ACR7PUQcfOw5PzYs4ZAE" alt=""><figcaption></figcaption></figure>
3. **Global Commitments Only**<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>:​ Not including EDP</p></div>

   *Scenario continued*:\
   A general discount is applied to all apples.\
   ​\
   ​*Explanation*:\
   All resources are calculated using the Fairshare cost calculation (global allocation calculation) and receive their relative discount according to usage. The Fairshare cost for individual resource groups may differ from the AWS Amortized cost but the total price of all resources together will be the same for both cost types.<br>

   <figure><img src="/files/z4oAxGNEI7ibQ5O5yyLg" alt=""><figcaption></figcaption></figure>
4. **Group Commitments and Global Commitments**\
   ​\
   ​*Scenario continued*:\
   The store gave a discount to all the apples and also an additional discount to each apple type.\
   ​\
   ​*Explanation*:\
   All resources are calculated using the Fairshare cost calculation by both Reserved Instances (RIs) and Savings Plans (SPs) allocation, according to the eligible discounts. The Fairshare cost for individual resource groups may differ from the AWS Amortized cost but the total price of all resources together will be the same for both cost types.<br>

   <figure><img src="/files/PgGtVipLg501beJ52NqP" alt=""><figcaption></figcaption></figure>

**Summary of Fairshare Cost and AWS Amortized Cost Comparison:**

The Fairshare cost for individual resource groups may differ from the AWS Amortized cost. Still, the total price of all resources combined will remain the same for both cost types because the total discount is the same; it’s allocated differently between these cost types.

<div align="left"><figure><img src="/files/enguIyS86BrW2iu7rufa" alt=""><figcaption></figcaption></figure></div>

\
​**Visualization of Finout’s Fairshare vs. AWS’s Net Amortized cost allocation:**

Using Fairshare, you can accurately allocate 100% of each discount to its owner, making showback and chargeback straightforward and efficient.

<figure><img src="/files/Nc2ApgkPkAISDTrt93rk" alt=""><figcaption></figcaption></figure>

<figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/27101163/095978171d37c4014da99f370946/AD_4nXcZljDCl2274G87V-Z1_eX_rd5ZXrs-8ByrVYOQ-HmNO-e6QMI-YQhkbI1AhrprDJHSqBSzNM_FNHYAX_0sB8qFHXOfFB5RSGK1bkGzKJZqoW-a727xjigJlFQ7BSwoENCXvcQV?expires=1733304600&#x26;signature=975bb6ce376a92c2c3a90b943e5961654d1b41abc03bd8007c44d6dd863f1736&#x26;req=0tJuxVn7qjRk2hL085ZhoTYrykG29%2FfeNR7EDe8Pdi78rsByEjmVzW8L3N6J%0AL91i84OgNtiyIfCP%0A" alt=""><figcaption></figcaption></figure>

## Use Cases <a href="#h_21363150d5" id="h_21363150d5"></a>

Inconsistent discount allocation in AWS cloud services presents challenges for organizations across various roles. When Reserved Instances (RIs), Savings Plans (SPs), and Spot Instance discounts are applied unpredictably, it disrupts accurate financial reporting, stable budgeting, and reliable cost tracking. For FinOps managers, finance leaders, developers, and DevOps engineers alike, these fluctuations can lead to inefficiencies and budget disputes, making optimizing and managing cloud costs challenging. The following use cases illustrate how unpredictable AWS discount distribution impacts each role and highlight the need for a consistent cost allocation model.

**FinOps**

*Use Case: Ensuring Accurate Showback and Chargeback Reporting*

As a FinOps manager, I’m responsible for generating accurate showback and chargeback reports for each team based on their cloud usage. This reporting helps allocate costs fairly and allows teams to track their spending against their budget. However, AWS’s unpredictable discount allocations, where RIs and SPs may apply randomly to different resources, cause inconsistencies in the cost data. For instance, in one month, Team A’s instances received discounts that Team B’s identical instances didn’t receive, making it appear that Team A’s costs are lower despite similar usage. This creates disputes between teams and makes it challenging to allocate budgets fairly, requiring manual adjustments and reducing the accuracy of our financial reports.

**Finance**

*Use Case: Forecasting Cloud Expenses for Budget Planning*

As a finance manager, I need reliable cost data to forecast expenses and plan budgets accurately. However, AWS’s fluctuating discount allocations make this problematic. For example, when preparing the quarterly budget, I notice that cloud spending in one month was significantly lower than in the next, despite stable usage. After investigating, I found that the first month benefited from more RI and SP discounts than the second. These unpredictable shifts mean that projected costs can deviate widely from actual cost, complicating financial planning and making it harder to meet budget goals.

**Development**

*Use Case: Tracking Cost Savings Through Instance Rightsizing*

As a developer focused on reducing my team’s EC2 costs, I regularly rightsize instances to match cloud usage better. I recently adjusted our instances, expecting a drop in costs for the following month. To my surprise, the costs remained high and sometimes even increased. After investigating, I found that AWS had inconsistently applied RI and SP discounts to our resources, with some instances receiving discounts and others not, despite identical configurations. This inconsistency makes it challenging to assess the impact of my optimization efforts and accurately communicate cost savings to my manager.

**DevOps**

*Use Case: Stabilizing Cloud Costs for Resource Optimization*

As a DevOps engineer, I aim to stabilize cloud costs by monitoring usage and adjusting resources as needed. However, AWS’s variable discount allocations make this problematic. For instance, I track our EC2 usage closely, but in one week, our costs spike without any change in demand. Upon investigation, I found that fewer instances received RI or SP discounts that week compared to the previous one. This irregularity in discount distribution complicates my cost management efforts, as it’s hard to pinpoint actual areas for optimization when costs fluctuate unpredictably.

## How Does It Work? <a href="#h_1fa20a5a3b" id="h_1fa20a5a3b"></a>

The FairShare Cost cost type is built to allocate cloud discounts fairly and accurately, ensuring that each resource receives the appropriate cost reductions based on usage and eligible commitments. This sophisticated cost type guarantees that discounts from Reserved Instances (RIs), Spot Instances, Savings Plans (SPs), and On-Demand costs are distributed equitably across all relevant resources. It addresses the complexities of AWS pricing mechanisms by clearly defining how different types of cost commitments are applied across various services.

### FairShare Cost Calculation <a href="#h_add5f2c1ee" id="h_add5f2c1ee"></a>

1. **Commitment and Discount Categorization:**

   Finout categorizes resource discounts into two types: Group and Global Commitments:

<figure><img src="/files/ykmFHyeE0ntrb5wEYidp" alt=""><figcaption></figcaption></figure>

* **Group-Level Discounts**: These include **Reserved Instances** (RIs) and **Spot Instances**, which are applied to specific groups of resources sharing attributes such as region, operating system, instance type, and size. For example, if RIs are purchased for EC2 instances in a specific region and instance type, only those instances will benefit from the discount. Finout ensures that these group-level discounts are distributed proportionally across all resources within the group that meet the eligibility criteria, preventing unrelated resources from receiving unintended discounts.
* **Global Discounts**: These include **Savings Plans** (SPs) and **On-Demand**, which are applied across all relevant resources, regardless of region or OS. SPs offer flexible discounts that cover multiple services, such as EC2, Lambda, and Fargate. Finout ensures that these global discounts are distributed proportionally based on the actual usage of each resource, ensuring fairness and transparency across all services.

2. **Resource Usage Share:**\
   After identifying a resource's group and global commitments, Finout divides the discount for each resource by the resource usage.<br>

   <figure><img src="/files/O45g6F0hVLSPu6BDBK3F" alt=""><figcaption></figcaption></figure>

<figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/27101702/b29ee74ff1397ff8f1ce39078e7e/AD_4nXcYTBwrfa04DsqVVHZJlnX6uGyZjb-vNWcq1eLEQVGJ-1wjXoLChWkPqmrsKbcdQYhNB_HTUqpApwtlRfXwGnKrW2-d7IOuZv3fPhS46HeQc4XDNIacBfIsmBPXyqMpB5HMlBHRZQ?expires=1733304600&#x26;signature=5bd683f9092a022843e71b22d186cd6d85351a55f8527f18072855c40fc18a74&#x26;req=0tJuxVn9rDVk2hL085ZhoTGOYg8Db62s1%2BpHv%2Fg18RO0HFJICqvOyMxitizz%0A8g%3D%3D%0A" alt=""><figcaption></figcaption></figure>

* **Relative Group Cost** - measures how much the resource contributes to the total on-demand cost within its specific group (e.g., region or instance type).\
  ​*Formula*: Relative Group Cost = resource’s on-demand rate / on-demand group cost
* **Relative Global Cost** - shows the resource's contribution to the total on-demand cost across all groups and services globally.\
  ​*Formula*: Relative Global Cost = resource’s on-demand rate / on-demand total cost\
  ​

3. **Fair Discounts Allocation:**

This ensures the discounted costs account for eligible discounts and the relative usage.After configuring the relative cost, FInout multiples the relative cost by the resource commitments, having the discounted cost consider the eligible discounts and the relative usage.

<figure><img src="/files/SD6RAnHEYD9U0YXmQmBq" alt=""><figcaption></figcaption></figure>

<figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/27101732/0d8785051afa3118b10156085370/AD_4nXfchHwKz-aLfr2fj-B40hKKPahzLS13u2Ssb-uBeCJL2nE3XxmvULKDmQjFW1ObAkti_CETyULmse0ikJDSOuMvFMrt_Wb1cnhKVtMku8fZOC1AAZNUykbSJdo8N3dtcw?expires=1733304600&#x26;signature=5db72ac07abddafb6d36d8b14a474e4bb61ca639761397f97fdb838d94d0f3e2&#x26;req=0tJuxVn9rzVk2hL085ZhoVGG%2F%2BWT6mMyhXyi5pNoj5MroTH5AHWqayXvNRxd%0AxQ%3D%3D%0A" alt=""><figcaption></figcaption></figure>

* **Group Allocation** - Combines group-level commitment and relative group cost to represent the adjusted or allocated cost at the group level.\
  ​*Formula*: Group Level Commitments × Relative Group Cost
* **Global Allocation** - Combines global-level commitment and relative global cost to represent the adjusted or allocated cost at the global level.\
  ​*Formula*: Global Level Commitments × Relative Global Cost

4. **FairShare Cost:**\
   Combines the Group and Global allocation as the resource can benefit from both discounts.

*Formula*: (Relative Group Cost × Group-Level Commitments) + (Relative Global Cost × Global Commitments)

{% hint style="info" %}
**Note**: In Net FairShare cost, the AWS refund is incorporated into the cost of each included service, and the FairShare formula is applied on top of that. In contrast, for FairShare cost, the refund (e.g., PrivateRateDiscount) is treated as a separate billing row and excluded from the formula.
{% endhint %}

*Net FairShare Formula*: (Relative Group Net Cost × Group-Level Commitments) + (Relative Global Net Cost × Global Commitments)

### Technical Use Case <a href="#h_d95338e56b" id="h_d95338e56b"></a>

#### Resources <a href="#h_c41689ebf6" id="h_c41689ebf6"></a>

***Group A** (us-west-1, Linux, m5.large):*

* *10 On-Demand EC2 instances*
* *5 Spot Instances at $0.25 per hour*
* *On-Demand Rate: $1 per hour*

*- Cost Breakdown:*

* *On-Demand Group Cost (Group A):*\
  *-For 10 on-demand instances, the total cost is: $1 \* 10 = $10.00 per hour*\
  *-The 5 spot instances cost: $0.25 \* 5 = $1.25 per hour*\
  *Total On-Demand Cost for Group A = $10.00 + $1.25 = **$11.25 per hour***\
  ​

***Group B** (us-east-1, Windows, t3.medium):*\
​

* *15 On-Demand EC2 instances*
* *On-Demand Rate: $1.20 per hour*

*-Cost Breakdown:*

* *On-Demand Group Cost (Group B):*\
  *Total On-demand cost for 15 instances is: $1.20 \* 15 = **$18.00 per hour***

\
**​*****Lambda Functions**:*

* *20 Lambda functions across multiple regions*
* *On-Demand Rate: $0.15 per function invocation*

*Cost Breakdown:*

* *On-Demand Group Cost (Lambda):*\
  *Total cost for 20 Lambda invocations instances is: $0.15 \* 20 = **$3.00***

\
**​Total On-Demand Cost** = $11.25 + $18.00 + $3.00 = **$32.25**

#### Commitments <a href="#h_b81c610d9c" id="h_b81c610d9c"></a>

* **Reserved Instances (RIs)**: 5 RIs for Group A, 7 RIs for Group B
* **Spot Instances**: 5 Spot instances for Group A
* **Savings Plans (SPs)**: A global savings plan covering both EC2 instances and Lambda functions, with a $5/hr commitment

#### FairShare Cost Calculation for a Resource in Group A <a href="#h_748702a037" id="h_748702a037"></a>

**Global Commitments**:

* On-Demand Cost (globally):\
  On-demand cost for Group A: $5.00\
  On-demand cost for Group B: $9.60\
  Total On-Demand Global Cost = $5.00 + $9.60 = $14.60

Total Savings Plan Commitments = $5.00

**Relative Group Cost:**

* RI Cost for Group A:\
  Total RI commitment cost = $2.00 (for 5 RIs)\
  Discount: 60% discount applied, so cost per hour = $0.40/hr
* Spot Cost for Group A:\
  Total Spot commitment cost = $1.25 (for 5 Spot instances)\
  Discount: 75% discount applied, so cost per hour = $0.25/hr

**Discount Allocation**:

* Relative Group Cost (for Group A) =\
  On-Demand rate / On-Demand group cost\
  \= $1 / $11.25 = 0.0889 (Relative cost for Group A)
* Relative Global Cost =\
  On-Demand rate / Total On-Demand cost\
  \= $1 / $32.25 = 0.0310 (Relative global cost)

**FairShare Calculation Group A**<br>

<figure><img src="/files/0tOx2BUMNxylcmj3Ntu1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/27102308/2a9abb4ff2480559fd3828c0f95f/AD_4nXcu3s9yEhmhd32Z-nTzyEOiZ8ZMvuji4Cd95WUFVtPbVhi6qVFNRsMFk2i00hrg05YmLuglltS6bQRMMdfW1Y0sQhL123GW3M2R3F1JmpjDEF52w1v_chJwz2nOvP0fvFGNv6UPZw?expires=1733304600&#x26;signature=28e54eea0b2b7c41c8a43bd276175db0a4e7e8ed15bead8fcc1aa7630cf7dd22&#x26;req=0tJuxVr5rD9k2hL085Zhoa5NNxiZeKN4hQQBNZxplAMwFxTjLOVXdxeZ3pQ6%0AbDAGqV9aAX6z4EoF%0A" alt=""><figcaption></figcaption></figure>

**FairShare Cost for Group A** = 0.896 per hour

#### FairShare Cost Calculation for a Resource in Group B <a href="#h_66fe4716fa" id="h_66fe4716fa"></a>

**Relative Group Cost**:

* RI Cost for Group B:\
  Total RI commitment cost = $3.50 (for 7 RIs)\
  Discount: 41.6% discount applied, so cost per hour = $0.50/hr
* Global Commitments:\
  Same total global on-demand cost of $14.60 as Group A

**Discount Allocation**:

* Relative Group Cost (for Group B) =\
  On-Demand rate / On-Demand group cost\
  \= $1.20 / $18 = 0.0667
* Relative Global Cost =\
  On-Demand rate / Total On-Demand cost\
  \= $1.20 / $32.25 = 0.0372

**FairShare Calculation Group B**:<br>

<figure><img src="/files/7VowDOCRbsqtdegTCZZ8" alt=""><figcaption></figcaption></figure>

<figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/27102449/ee1a43d790419a6ea5cda58555f1/AD_4nXeGNF4C_IIeNM5ZCdVecw6WmwW4mat2Nuk1uuQEPSIlwaOSIzlXBKqHUyOTlnu6A8Tgs_NH2FemO4smFaGQ4D-swr71VO7AD7yW_c6VFuTHQUR7bA1I8HQD7FOV_6SwVzIoKUDX?expires=1733304600&#x26;signature=f8db03bbd91f4ec6c986a97bbc36bed545761f577fc6d4e0d8968105f1d422b0&#x26;req=0tJuxVr%2BqD5k2hL085ZhoUtVEOdN%2FaPWGuDEjKtomBoAeVeVkzHOLEUvlKY%2B%0AGEoCKKSu9ewvXlhM%0A" alt=""><figcaption></figcaption></figure>

**FairShare Cost for Group B** = 0.886 per hour

## FAQs

#### **Does FairShare support Kubernetes (K8s) costs?**

K8s costs in FairShare are supported only for AWS, with costs allocated to a node’s pods proportionally based on their usage within the same hour.

#### **What is the difference between FairShare and Net FairShare cost types?**&#x20;

FairShare Cost includes both Group and Global allocation, but AWS refunds (e.g., PrivateRateDiscount) are treated as separate billing rows and excluded from the formula. Net FairShare cost types, on the other hand, incorporate AWS refunds directly into the cost of each service before applying the FairShare formula.

#### **Why is there a discrepancy between (Net) FairShare Cost and (Net) Amortized Cost for the current month?**

This discrepancy is expected and occurs due to different algorithms between these two cost types.&#x20;

**Here’s why**:

At the beginning of each month, AWS reports the full RI Fee (Reserved Instances Fee) as a single charge on its 1st day. This charge represents the total RI commitment for the entire month.

As the month progresses, the actual RI usage appears on a daily basis under discounted usage.&#x20;

On the 1st of the month, the RI Fee includes both the actual unused portion from the days that have already passed and the committed cost for the remaining days in the month.

After the month is complete, the RI Fee reflects only the unused portion of the commitments

* In Finout cost types other than FairShare (e.g., (Net) Amortized), RIFee rows are filtered out during the current month to avoid artificial cost spikes at the beginning of the month. These fees are incorporated into the cost only at the end of the month, once usage is finalized. If any portion of the commitment remains unused, it continues to appear as RI fee  on the first day of the month.
* In FairShare, the daily cost includes the full RI commitment for that day, regardless of whether the entire commitment was utilized. This means each day's cost reflects both the used and unused portions of the RIs.

On the monthly level, this design ensures that FairShare Cost reflects a usage-based and transparent cost allocation model. While the total monthly cost will align by the end of the month between FairShare and Amortized cost types, the daily breakdowns may differ. That’s because FairShare attributes each portion of the Reserved Instance fee (RIFee) directly to the day it was actually unused—rather than reporting the entire unused amount on the 1st of the month,according to the amortized calculation drives from the cur.  FairShare Costoffers a more accurate daily representation of actual RI utilization and waste.

**Finout’s Recommendation**: Compare (Net) FairShare and (Net) Amortized cost types only for completed months.

#### Why do (Net) Amortized and (Net) FairShare Costs differ for services?

The difference arises from how Savings Plan discounts are allocated:

* *Amortized Cost* follows AWS’s native method, assigning the discounts to specific services.
* *FairShare Cost* distributes the discount across all Saving Plans eligible services, based on their usage share.\
  \
  As a result, when filtering by a single service type (like EC2), you may see differences between FairShare and Amortized costs. This is expected behavior. Looking at just one service type in isolation may show a discrepancy, but total costs at the account level will align.

To make accurate comparisons, it’s essential to consider all Savings Plan eligible services together as a whole, including:

* Amazon EC2
* AWS Lambda
* Amazon ECS
* Compute Savings Plans

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: For services that are only eligible for Reserved Instances (RIs) and used consistently throughout the full month, the (Net) Amortized Cost and (Net) FairShare Cost will be identical—even when viewed at the individual service level:</p><ul><li>Amazon RDS</li><li>Amazon ElastiCache</li><li>Amazon DynamoDB</li><li>Amazon Redshift</li></ul></div>


# List Cost

## Overview

List Cost shows the public pricing for your cloud resources, reflecting what you would have paid without any discounts, commitments, or Enterprise Discount Plans. It uses the baseline retail price of services, offering a clear and unbiased view of your cloud spend. This empowers you to take control of your cloud expenses by providing clear, actionable insights based on public pricing data.

**What are the benefits of List Cost?**

* *Benchmark Costs*: See the raw, unadjusted pricing of your cloud usage.
* *Simplify Analysis*: Understand the true value of your resources without financial manipulations such as Reserved Instances (RIs), promotions, or commitment plans.
* *Improve Accountability*: Evaluate cost anomalies and missed savings opportunities due to lack of coverage or unused resources.

**How does it work?**

Finout calculates List Cost by sourcing public pricing data from each provider:

* *AWS*: Based on the column pricing\_public\_on\_demand\_cost.&#x20;
* *GCP*: Based on the column cost\_at\_list.
* *Azure*: Finout calculates Azure List Cost following the FOCUS specification using this calculation varies by Azure account type:&#x20;

  * **Microsoft Customer Agreement (MCA) List Cost** = PayGPrice × ExchangeRate × Quantity&#x20;
  * **All the rest will be List Cost** = PayGPrice × Quantity

  <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Important</strong>: </p><ul><li><p><code>List Cost</code> returns <code>0</code> for the following cases:</p><ul><li>Enterprise Agreement (EA) Marketplace charges</li><li>EA reservation usage when cost allocation is enabled</li><li>Microsoft Customer Agreement (MCA) reservation usage.</li></ul></li></ul></div>

## **Add List Cost to a View**

Add List Cost to your view to analyze your cloud spend at its raw retail value without the noise of discounts or commitments.

Navigate to any cost-related view in Finout and choose **List Cost** as the cost type.

* Dashboards / Widgets<br>

  <figure><img src="/files/zqiaBbliRBWc2v4OEoB6" alt=""><figcaption></figcaption></figure>
* Data Explorer<br>

  <figure><img src="/files/mW9TKH7SlHkbwPWVXI7j" alt=""><figcaption></figcaption></figure>
* Resources<br>

  <figure><img src="/files/sAzYPLEB0mHMofD6NO45" alt=""><figcaption></figcaption></figure>

## FAQs

**Where can I see List Cost in Finout?**

List Cost is available across all cost-related views in Finout, including MegaBill, Dashboards/Widgets, Data Explorer, Resources, etc

**Why is List Cost missing or displayed as null for a Cost Center?**

When a Cost Center doesn't support List Cost, Data Explorer will show null values in the cost column, while other views and features will filter out unsupported Cost Centers to keep the functionality streamlined.


# Appearance (Beta)

Finout lets you choose how the interface looks — Light, Dark, or System, which matches your operating system's current theme. This is a personal preference: each user sets it independently, and it only affects their own view of Finout.

### Set your appearance

1. Click your name or avatar in the **top-right corner** of Finout.\
   The user menu opens.

<figure><img src="/files/l4QWz9jQH4SkGcJx9Nxa" alt=""><figcaption></figcaption></figure>

2. Locate the **Appearance** row. It contains three icons:

* ☀️ **Light mode** — always use the light theme (default).

<figure><img src="/files/EAW9QLCOFnheL9y5cKtb" alt=""><figcaption></figcaption></figure>

* 🌙 **Dark** **mode** — always use the dark theme.

<figure><img src="/files/4qJt7xjp7HUjKtwjpAMs" alt=""><figcaption></figcaption></figure>

* 🖥️ **System** **mode** — follow your operating system's light/dark setting.

3. **Click** the icon for your preferred theme.\
   **Result**: The interface switches immediately. Your preference is saved and applies every time you log in.

{% hint style="info" %}
Appearance is a personal setting — it does not affect how other users in your account see Finout.&#x20;
{% endhint %}


# Cloud Providers

Finout simplifies cloud cost management with seamless integrations across major cloud providers. By unifying billing data from multiple platforms into a single view, Finout empowers you to precisely track, analyze, and optimize your cloud expenses, regardless of where your resources are hosted.

The following Cloud Providers can be integrated with Finout:

* [AWS](/billing-integrations/cloud-providers/connect-to-aws)
* [Azure](/billing-integrations/cloud-providers/connect-to-azure)
* [Oracle](/billing-integrations/cloud-providers/connect-to-oracle)
* [GCP](/billing-integrations/cloud-providers/connect-to-gcp)


# Connect to AWS

## AWS Integration Overview

Integrate AWS with Finout to generate comprehensive cost and usage reports tailored to your organization's needs. Configure Finout to generate detailed reports using AWS data, either for specific accounts or for your entire organization. This integration enables in-depth expense analysis and management, providing valuable insights into cost allocation and usage trends across your AWS infrastructure.

**AWS Configuration Workflow:**

1. [Create a CUR in AWS](#h_9785239bf6)
2. [Create the Cost Optimization Export](#h_159429fe73)
3. [Verify that your tags are activated](#h_b3045b894b)
4. [Obtain External ID from Finout](#h_7a1110d3b6)
5. [Grant Finout Access to Your CUR Bucket](#h_cb44a06282)
6. [Integrate AWS with Finout](#h_159429fe73-1)

## Prerequisite <a href="#h_9785239bf6" id="h_9785239bf6"></a>

To create a Cost Optimizer export, your AWS account must have the service-linked role:\
`AWSServiceRoleForCostOptimizationHub`

To create this role, the AWS account Admin should follow the [official AWS instructions](https://docs.aws.amazon.com/cost-management/latest/userguide/cost-optimization-hub-SLR.html).

## 1. Create a CUR in the AWS Console <a href="#h_9785239bf6" id="h_9785239bf6"></a>

To begin using Finout to monitor your cloud bill costs, Finout needs access to your Amazon Cost and Usage Report (CUR).

{% hint style="info" %}
**Note**: If you have several Amazon accounts, provide access to the parent or EDP account.
{% endhint %}

\
**​To create a CUR in AWS:**

1. Sign in to your AWS console and [create a new CUR](https://us-east-1.console.aws.amazon.com/costmanagement/home?region=us-east-1#/bcm-data-exports/create?e=\&tableName=COST_AND_USAGE_REPORT).<br>

   <figure><img src="/files/qZY3wSEXrkq9tjsLkVnj" alt=""><figcaption></figcaption></figure>
2. Mark **Legacy CUR export**.

   <figure><img src="/files/HEEKNUBhlBoLh3MtdnXb" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/UvXNIDOM8AXu8kDPZ75j" alt=""><figcaption></figcaption></figure>
3. In **Export name**, enter a report name.\
   Example: `yourcompanyname-billing-reports`
4. **Export content**:

   \- In **Additional export content**, mark the following:

   1. **Include resource IDs** - Ensure that this is marked for successful configuration.
   2. **Split cost allocation data** - Optionally mark to add more detailed cost and usage data. Enabling split cost allocation does not make any changes to the Finout console.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Pod label enrichment remains a separate Finout feature that is not covered in AWS's split data. Finout will also continue providing Kubernetes rightsizing recommendations.</p></div>

   \
   \- In **Data refresh settings**, ensure the **Refresh automatically** is marked.
5. **Data export delivery options**:

   <figure><img src="/files/BzhhHHzi49FO6uXpj63t" alt=""><figcaption></figcaption></figure>

   1. Ensure the time granularity is marked **Hourly**.
   2. Choose either **Create new report version** or **Overwrite existing report.** Both report versioning types are supported.
   3. Choose the **Parquet** compression type.

      <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Non-alphanumeric characters — such as <strong>:</strong>, <strong>/</strong>, or <strong>.</strong> — are replaced by AWS with underscores (<strong>_</strong>) in the column names of the Parquet files.</p></div>
6. **Data export storage settings**:<br>

   <figure><img src="/files/oxtbt6iULvd9CV9ttKPn" alt=""><figcaption></figcaption></figure>

   1. In **S3 Bucket**, click **Configure**.\
      The **Configure S3 Bucket** window appears.\
      \
      ![](/files/sQIeQzI14Kodasj620vk)\ <br>
      * Create the destination bucket to store the cost and usage data:
        1. Add a bucket name. Save it for future use in step [Integrate AWS to Finout](#h_159429fe73-1).
           1. Choose a region. Save it for future use in step  [Integrate AWS to Finout](#h_159429fe73-1).
           2. Mark **The following default policy will be applied to your bucket**.
           3. Click **Save**.\
              Your bucket is created.
   2. Add your **S3 path prefix**. Save it for future use in step  [Integrate AWS to Finout](#h_159429fe73-1).
7. Click **Next** and then **Review and Complete**.\
   The report is created within a few hours.

## 2. Create the Cost Optimization Export <a href="#h_159429fe73" id="h_159429fe73"></a>

1. In the AWS Console, open **Billing & Cost Management**.
2. Go to **Data Exports**.
3. Click **Create**.<br>

   <figure><img src="/files/L2rBm9ObLos7JwCC3tnp" alt=""><figcaption></figcaption></figure>
4. Choose **Standard data export**.
5. Name: e.g., finout-aws-recommendations.
6. Under **Data table content settings** select **Cost optimization recommendations**.
7. Under **Data table configuration**, check **Include all recommendations**.
8. Under **Column selection,** all columns are selected by default. This behavior should remain unchanged.<br>

   <figure><img src="/files/eNeqA0xumpOqHAsVClAf" alt=""><figcaption></figcaption></figure>
9. Under **Data export delivery options**, choose **parquet- Parquet**.
10. Under **File version,** choose **Overwrite existing data export file**.<br>

    <figure><img src="/files/bh8HHNIjqozDfsisrmmM" alt=""><figcaption></figcaption></figure>
11. Under **Data Export Storage Settings**, click **Configure** to choose **Optimization S3 Bucket**.\
    \
    When creating your Cost Optimization export, use the S3 bucket you used for your AWS billing export. Use an Existing Bucket:
    1. Choose **Select existing bucket**.
    2. Select the same **S3 bucket used for your billing export**.
    3. Check **I agree to overwrite my S3 bucket policy**, then click on **Select bucket**.
12. Add your S3 path prefix. <br>

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The prefix must be different from the billing.</p></div>

    <figure><img src="/files/iMpy0tW80gjwDXESVJKf" alt=""><figcaption></figcaption></figure>
13. Click **Create**.

## 3. Verify Tag Activation <a href="#h_b3045b894b" id="h_b3045b894b"></a>

Verify that the tags you want included in your CUR are activated so that Finout can provide visibility for those tags.

{% hint style="info" %}
**Note**: AWS uses two types of tags:

* **Resource Tags** – Applied to AWS resources but **not included** in billing data by default.
* **Cost Allocation Tags** – Tags that you **activate** in the billing console, which appear in the **Cost and Usage Report (CUR)**.

Finout only reads data from the CUR and does not query AWS resources directly.\
This means Finout can use **only activated cost allocation tags**. If a tag is not activated, it will **not** appear in the CUR and cannot be added retroactively.
{% endhint %}

**To check if tags are activated**:

1. Go to the cost allocation tags screen: <https://console.aws.amazon.com/billing/home#/tags>
2. Ensure that all the tags you want Finout to analyze, both now and in the future, are **activated**.

{% hint style="warning" %}
**Important**: If a tag is not activated, the data will not be tagged in the CUR and cannot be added retroactively.
{% endhint %}

## 4. Obtain External ID from Finout <a href="#h_7a1110d3b6" id="h_7a1110d3b6"></a>

Get the external ID in order to Grant Finout Access to Your CUR Bucket.

1. Navigate to **Settings > Cost Centers** and click **Add cost center**.\
   The **Connect Accounts** window appears.

   <figure><img src="/files/eW6d9b6ghunhO6er7uru" alt=""><figcaption></figcaption></figure>
2. In AWS, click **Connect Now**.\
   The Connect to AWS window appears.\
   ​

   <figure><img src="/files/qoJ4VYIOT3NeQXPD75bg" alt=""><figcaption></figcaption></figure>
3. Copy the **External ID** and continue to grant Finout access to your CUR bucket.

{% hint style="info" %}
**Note**: Save this ID for later and keep this window open for future use.
{% endhint %}

## 5. Grant Finout Access to Your CUR Bucket <a href="#h_cb44a06282" id="h_cb44a06282"></a>

Once the CUR is created, grant Finout access to your CUR bucket by creating an IAM role. This can be done manually or by using CloudFormation.

{% hint style="info" %}
**Note**: It is recommended to grant access through CloudFormation.
{% endhint %}

{% hint style="success" %}
**Prerequisite**: Obtain an External ID from Finout.
{% endhint %}

#### **To grant access using CloudFormation:**

1. Create a CloudFormation Stack from a template by following the[ instructions on the AWS website](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html).\
   ​
2. Use the following [Amazon S3 URL](https://finout-public-assets.s3.amazonaws.com/FinoutBillingAndMetricsReadOnlyRole.json) for your Stack template. \
   ​

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/16684370/269302a6b0c8c8e29d661c32/AD_4nXdJ9gbvAIKXfio1e-bO7Mn67i69wNhRp9xcT7kx0koU41K9VH0bEzFCOZcjhDHvFc_j4_Bg1ivBZ8gXY_U1qQBv_cfP2-BRLZwat8f_WkPpQ_pRRl9hqghqEp4zVEAiYPVS1gP2-1WkZQzl5cm3wGHPXAg?expires=1725348600&#x26;signature=f44b54b714b9a74a8989d5d1f2fa66d66be9c888cd7ad5fa30b66c02747922be&#x26;req=0dNpzVz5qzdk2hL085ZhoXQWuvre5DvKuZjeqAiGWqM%2BH4opso%2FE4Zl2Mw7o%0ATw%3D%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>

   <div align="left"><figure><img src="/files/YuCFWldsx8PrAsI6YDGM" alt=""><figcaption></figcaption></figure></div>
3. Complete the steps by adding the “external-id” (obtained in step 4) and the bucket name created for your CUR (step 1).
4. Click **Next** and then **Submit**.\
   ​You are brought to the **Stack details page**.

   <figure><img src="https://finout.intercom-attachments.eu/i/o/16684371/172e0ce42bbed5ff50806cf1/AD_4nXc4icyPw8yeqwXIw6JeQdh7aaiAVQhQxHX9O-343TphGeFHmfhiFL4Bo-4lijpPnStHfabkb2SUvLn9Ovqn9rb2bVyojKE_4bUa2xlrwwfAPXItIhtnkX3zn1dDwTUVThO9dltSKZlXi0jajl5KZz1M2esQ?expires=1725348600&#x26;signature=e982db55d17db47f9efa522b7f2641fb8ac4d0b7b105dff7f3f04bc0ad0dfaf3&#x26;req=0dNpzVz5qzZk2hL085ZhoZeQw%2BseQEewACUAhEgjwraHInrQ3OnJZYbEe%2B3E%0AEg%3D%3D%0A" alt=""><figcaption></figcaption></figure>

   <div align="left"><figure><img src="/files/OhGDuc6EhGRGqs9xZW7f" alt=""><figcaption></figcaption></figure></div>
5. Click **Outputs** and copy the ARN IAM role value. Save it for future use in step [Integrate AWS to Finout.](#h_159429fe73-1)

#### **To grant access manually:**

1. Click on[ creating a new cross-account role in IAM](https://console.aws.amazon.com/iam/home?region=us-east-1#/roles%24new?step=type\&roleType=crossAccount) to create a role for another AWS account.

   <figure><img src="/files/F8DtlMWAGMxjU4uQcazw" alt=""><figcaption></figcaption></figure>
2. In the account ID, enter: `277411487094`.
3. Paste the **Require external ID** and enter the “`external-id`” (obtained in step 4).<br>

   <figure><img src="/files/m9T8XTMoa9mndzktqHYB" alt=""><figcaption></figcaption></figure>
4. Click **Next**.\
   ​The **Review** step appears.<br>

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/16684376/387541e0df84a02a7d1fd8a5/AD_4nXc9jD34jQO46GChzk9CZFqNlIWD2301fo2ytIkouficrJFWk9g1lxIAdpIrARc3bwcAT8hwq6cjhn6i-ONJkuM7uJb-JHNKe1bUw456YEplumYKkvOupxb0Onzlf7GdRu8KsEpr9TvJh2u-4H1GLlYI9nw?expires=1725348600&#x26;signature=36e5b1b1d0ae705eed040a6e30abe4738795db5b8d245e8368375ca32c985c15&#x26;req=0dNpzVz5qzFk2hL085ZhoSmp26Mb0OpbUfXxe9oU6ncZWSfbUtLtHoifCGBT%0ApA%3D%3D%0A" alt=""><figcaption></figcaption></figure></div>

   <div align="left"><figure><img src="/files/uuCbJ9nied9nGD8gkmfP" alt=""><figcaption></figcaption></figure></div>
5. Add a Role name: `FinoutMetricsReadOnlyRole` and then configure the role.\
   A new role is created.
6. Go to your new role in **Summary**.<br>

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/16684378/083485521454b31c0fe6ec89/AD_4nXf80WkpD9IBk8-mARISmZfX1JoIHUgt4WF9gA0vFmZOQYKTP_2uuXLN001UxG8Q1mgOZBmsWnGn-h1Yn_oZ2nZWKvZYK47EG3QsrWQytBOrrLp9BDkE7bPFwbKTFRh9jF3vac_zNHhZW0z3nTnwHAqft7g5?expires=1725348600&#x26;signature=37316e001f1f9d18ce4596caaea7b41f6e8e8b343bdb00f697e78fb1b826b9a2&#x26;req=0dNpzVz5qz9k2hL085ZhoWTJlO7r%2FZazZ89RAAAVjWGzagUTEBIn3g7uf5WF%0AnQ%3D%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>

   <div align="left"><figure><img src="/files/qCCb6g2tI66dyQqc6JeW" alt=""><figcaption></figcaption></figure></div>
7. Copy the Role ARN. Save it for future use in step [Integrate AWS to Finout](#h_159429fe73-1).
8. Click on **Add permissions** and choose **Create inline policy**.
9. Choose JSON format and paste the following JSON:\
   Replace `<CUR_BUCKET_NAME>` with the name of the bucket you created in step 1 or your existing CUR bucket:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "tag:GetTagKeys"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": "arn:aws:s3:::<CUR_BUCKET_NAME>/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": "arn:aws:s3:::<CUR_BUCKET_NAME>"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeReservedInstances*",
        "ec2:GetReservedInstances*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "savingsplans:DescribeSavingsPlan*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "organizations:ListAccounts",
        "organizations:ListTagsForResource"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ce:GetReservationUtilization",
        "ce:GetSavingsPlansUtilization",
        "ce:GetSavingsPlansUtilizationDetails",
        "ce:GetCostAndUsage",
        "ce:GetCostAndUsageWithResources"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:ListMetrics",
        "cloudwatch:GetMetricData",
        "cloudwatch:GetMetricStatistics"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVolumes"
      ],
      "Resource": "*"
    }
  ]
}
```

10. Click **Next** until the **Review** step, and name it `finout-access-policy`.
11. Click **Create policy**.\
    Your IAM role is finalized and created.

## 6. Integrate AWS with Finout <a href="#h_159429fe73" id="h_159429fe73"></a>

After creating your CUR in AWS and granting Finout access to your CUR bucket, you can add your AWS details to Finout.

**To add bucket details in Finout:**

1. Return to Finout.<br>

   <figure><img src="/files/fbyd4F7XkTDLrDM8fmXd" alt=""><figcaption></figcaption></figure>
2. Fill in the following fields:
   1. Add a personalized **Cost Center Name**.
   2. Add the **Role ARN** from step [Grant Finout Access to Your CUR Bucket](#h_cb44a06282).\
      The Amazon Resource Name (ARN) specifies the role.
   3. Add the **Bucket Name** from [Create a CUR in the AWS Console](#h_9785239bf6).\
      This is the name under which AWS stores your cost and usage reports.
   4. Add the **S3 Path Prefix** from[ Create a CUR in the AWS Console](#h_9785239bf6).\
      This is the folder in S3 in which the CUR files are located.
   5. Add the **Region** from [Create a CUR in the AWS Console](#h_9785239bf6).
3. Click **Next**.\
   You are brought to the **Connect AWS Cost Optimization** step.<br>

   <figure><img src="/files/rAcjmLxhtrLc8RgRTGVg" alt=""><figcaption></figcaption></figure>
4. Add the required details:
   1. **Bucket Name**: Enter a bucket name. You can reuse the S3 bucket used for billing, or specify a separate bucket for cost optimization data.
   2. **Path Prefix**: Enter a Path Prefix. The path prefix must be different from the one used in the billing setup.
   3. Click **Next**.\
      After verifying the information, Finout will create a new cost center.

## Connect AWS China to Finout Billing <a href="#h_13497c0c3e" id="h_13497c0c3e"></a>

Connect AWS China to Finout billing to securely share your AWS China billing data with Finout. Once the files are copied to a non-China region, continue with the regular AWS integration.

* **Connect AWS China to Finout:**\
  To connect AWS China to Finout, ensure your AWS China billing data is copied to an S3 bucket outside of China. This is crucial for Finout to access and process the data effectively.
* **Billing Data Conversion:**\
  ​Finout support can help convert billing data from Chinese Yuan to US Dollars, ensuring your financial data is consistent and manageable. For assistance, contact support at <support@finout.io>.
* **CostGuard Support Limitations:**\
  Finout does not support CostGuard for AWS China accounts because the necessary metrics and permissions required for CostGuard scans are not accessible outside of China. This means that some detailed cost management features for other regions may not be available for AWS China.

**AWS China Known Limitations:**

When connecting Finout to AWS China, please be aware of the following limitations:

* **Account Names:**
  * Account names are not included in the Cost and Usage Report (CUR) files provided by AWS China. As a workaround, Virtual Tags can be used to manage and identify accounts.
* **Enrichments:**
  * Enrichments that require data beyond the CUR files, like Account-Level Tags, are not supported. This limitation exists because Finout only has access to the CUR files and lacks the additional permissions needed to retrieve these enrichments.
* **Resource and Metric Access:**
  * Finout does not have access to any AWS resources or metrics within the China region. The integration is limited to processing the billing files that are exported to an accessible location outside of China.

{% hint style="info" %}
**Note**: We are actively exploring more native solutions to address these limitations and improve our integration with AWS China.
{% endhint %}

## FAQs <a href="#h_f941cd0d2b" id="h_f941cd0d2b"></a>

* **What format should the CUR file be in for optimal integration with Finout?**\
  ​\
  We recommend using the CUR file in the Parquet format for optimal integration, although Finout also supports CSV/csv.gz format. The Parquet format is preferred for its efficiency in processing and analytics, especially for large-scale data handling.
* **Does the CUR file need to be located in the master payer account?**\
  ​\
  No, the CUR file does not need to be in the master payer account. The important requirement is to be comprehensive of all billing data for the master payer to ensure accurate and complete data analysis.
* **Is it acceptable for the CUR file to overwrite itself throughout the month?**\
  ​\
  Yes, it is acceptable for the CUR file to overwrite itself throughout the month. This allows for up-to-date data analysis as new billing information becomes available.
* **Can we use a CUR file from CloudHealth or another third-party service?**\
  ​\
  Yes, you can use a CUR file from services like CloudHealth as long as it matches the settings required by Finout and contains all necessary billing data. For integration, the directory structure should be in the format: `s3://bucket_name/cur/year=2023/month=12/*.parquet.`
* **How long does it usually take for data to appear in the Finout platform?**\
  ​\
  Finout usually takes about 24 hours to complete the first fetch of data from AWS. We recommend checking first thing in the morning (10 AM your local time) the next day.
* **What Should I Do If My AWS Self-Onboarding Process Fails?**\
  \
  If the self-onboarding process fails, check the following:
  * **Verify S3 Bucket Content:** Ensure that your S3 bucket contains the CUR files and is not empty.
  * **Check S3 Path Prefix:** An incorrect S3 path prefix is the most common issue. The path prefix should typically follow the format your-organization-name/cur-report-name/. Avoid including the date-range part in the prefix, as it is replaced dynamically with the actual date range.\
    ​*Example*: Use myorg-org/finout-cur instead of including the date range in the path.
  * **Manifest.json File:** Confirm that the Manifest.json file is in your S3 bucket, as it's essential for the CUR integration.\
    If the problem persists, contact Finout support with the credentials for further debugging.
* **How can I correct an incorrect S3 path prefix?**\
  \
  The S3 path prefix should be static and consistent with the location of the CUR files in your S3 bucket without including date ranges. If you included the date range in your path prefix, remove it and try again.\
  Example: Use *`your-path/cur-report-name/`* instead of *`your-path/20240101-20240201/`*.
* **What if validations pass locally but fail during onboarding?**\
  ​\
  If validations pass locally but fail during onboarding, double-check the S3 path prefix to ensure that it matches the CUR setup in your S3 bucket. The prefix provided to Finout should match the prefix where the CUR files are stored. If you have made changes and everything is set up correctly, attempt the onboarding process again.
* **Can I enable encryption on a S3 bucket created for cost reports?**\
  ​\
  Yes, the S3 encryption is supported.
* **Why do some column names in my Parquet files contain underscores?**\
  \
  AWS CUR generates column names that must comply with Athena and AWS Glue naming requirements, which only allow lowercase letters, numbers, and underscores.\
  When AWS converts CUR data (including cost allocation tags) into a Parquet schema compatible with Athena, any characters outside these rules are automatically replaced with underscores.

  This transformation affects column names (tag keys) only, not tag values.\
  Tag values retain their original characters and are not altered by AWS CUR or Parquet conversion.


# Cost Archiver

## Overview

Finout offers a straightforward solution for managing long-term cost data storage by allowing you to archive data in an AWS S3 bucket you own. This setup consolidates your company’s cloud spending data from various cost centers into a structured and easily accessible format.

The Archiver feature enhances data management by introducing a partitioned data structure in S3, enabling faster access with reduced processing overhead. The data format is in Parquet, which improves processing efficiency. Additionally, a manifest file is included with each archiver run, providing visibility into data export status. This design supports a scalable system capable of handling large data volumes with minimal delays while maintaining alignment with Finout’s data delivery SLAs.

{% hint style="info" %}
**Note**: The Archiver provides all fields, enrichments, costs, virtual tags, and values, *except for virtual tag reallocation*.
{% endhint %}

**Cost Archiver Workflow:**

1. [Create a New Bucket](#id-1.-create-a-new-bucket)
2. [Obtain an External ID from Finout](#id-3.-obtain-an-external-id-from-finout)
3. [Grant Finout Access to your Archiver Bucket](#id-4.-grant-finout-access-to-your-cur-bucket)
4. [Add AWS Bucket Details to Finout](#id-5.-adding-aws-bucket-details-to-finout)

### Archiver files structure

Cost data will be updated once a day in the following structure:&#x20;

Archiver/\<archiver\_name>/v2/year=\<year>/month=\<month>/day=\<day>/\*.snappy.parquet

### Cost data structure

| Field name         | Type                            | Description                                                                                                                                                                               |
| ------------------ | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| time               | Date (YYYY-MM-DDT00:00:00.000Z) |                                                                                                                                                                                           |
| service            | String                          | The type of service the cost is related to, for example, “EC2” (in AWS) or “Compute Engine” (in GCP).                                                                                     |
| region             | String                          | The region the cost is associated with.                                                                                                                                                   |
| cost\_center\_type | String                          | AWS / GCP / K8s / Snowflake                                                                                                                                                               |
| costs              | dict\<string, double>           | All the following costs: amortized\_cost, net\_amortized\_cost, blended\_cost, unblended\_cost, net\_unblended\_cost, uncovered\_cost, reservation\_cost, savings\_plan\_cost, spot\_cost |
| metadata           | dict\<string, string>           | All metadata relevant to this cost line.                                                                                                                                                  |

### Manifest file structure &#x20;

The new manifest file will provide transparency and allow clients to monitor data export consistency. This file will be maintained under destination-archiver/version=2/manifest.json and will document each archiver run, detailing the date and scope of data exported, run ID, and the export timestamp.

```
{
"latest_export_time": 
"exports": [
	{	
		"archiver_id": "<archiver_id>", 
		"run_id": "<external_exporter_run_id>",
		"export_time": "<Current time in UTC in ISO format>", 
		"expored_partitions": ["<year=yyyy>/month=<mm>/day=<dd>"]
		},
	{	
			"archiver_id": "<archiver_id>", 
			"run_id": "<external_exporter_run_id>",
			"export_time": "<Current time in UTC in ISO format>",
		"	expored_partitions": ["<year=yyyy>/month=<mm>/day=<dd>"]
	}	,
		....
]	
}
```

## Setting Up Cost Archiver

Set up Cost Archiver in Finout to efficiently store and manage your organization’s cost data in an AWS S3 bucket, enabling structured, scalable, and easily accessible long-term storage.

### 1. Create a New Bucket

To output cost data, Finout requires write and delete permissions to an S3 bucket. To do so, create a new bucket or a new folder within an existing S3 bucket used for your Archiver.

{% hint style="info" %}
**Note**: Save your bucket name for step 3.
{% endhint %}

### 2. **Obtain an External ID** from Finout

Get the external ID to Grant Finout Access to Your Archiver Bucket.

1. In Finout, navigate to **Settings** > **Cost Centers** > **Add cost center**.\
   The **Connect Accounts** page appears.<br>

   <figure><img src="/files/Ei3uuJPKos5bGRVcRcX0" alt=""><figcaption></figcaption></figure>
2. Click **Connect Now**.<br>

   <figure><img src="/files/6WgObMzpF4pDyFWTnSux" alt=""><figcaption></figcaption></figure>
3. &#x20;Copy the **External ID** and continue to grant Finout access to your Archiver bucket (Save for step 4).&#x20;

### 3. Grant Finout Access to your Archiver Bucket

Once the Archiver bucket is created, grant Finout access to the bucket by creating an IAM role. This can be done manually or by using CloudFormation.

{% hint style="info" %}
**Note**: It is recommended to grant access through CloudFormation.
{% endhint %}

{% hint style="success" %}
**Prerequisite**: Obtain an External ID from Finout. (Step 2)
{% endhint %}

**To grant access using CloudFormation:**

1. Create a CloudFormation Stack after logging to your  [AWS account](https://eu-north-1.signin.aws.amazon.com/oauth?client_id=arn%3Aaws%3Asignin%3A%3A%3Aconsole%2Fcloudformation\&code_challenge=9at2qlfz2hoSdir6XSHnxUhVnR8-vrS0hI-RCxafu2o\&code_challenge_method=SHA-256\&response_type=code\&redirect_uri=https%3A%2F%2Fconsole.aws.amazon.com%2Fcloudformation%2Fhome%3FhashArgs%3D%2523%252Fstacks%252Fquickcreate%253Fparam_OrgEnabled%253DDisabled%2526param_OrgId%253D%2526param_ExternalID%253D%2526param_BucketName%253D%2526param_BucketPrefix%253D%2526stackName%253DFinout-Archiver-Connector%2526templateURL%253Dhttps%253A%252F%252Ffinout-public-assets.s3.us-east-1.amazonaws.com%252Farchiver%252Ffinout-archiver-connector-org.json%26isauthcode%3Dtrue%26oauthStart%3D1739268570916%26state%3DhashArgsFromTB_eu-north-1_50753c08f8ab9b15). <br>

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXd23d9Im4UcWtiagKhpMhgiH6TFeTiQntL22TN91DZtbgGP0sAsVS_J9U619_KtVsoDYSetQ5j7YG0zHBvD50rLqEQG1M80D091sPNffUyrYVDeFzkn8HRnkZDbYa4x2GUJyrNyvw?key=pacRQa4h1RWT_wxFaHKrY-C5" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/F7Uy6rG6BSLJMZgrlbsq" alt=""><figcaption></figcaption></figure>
2. Add the necessary information above, as well as the “external-id” (obtained in step 2) and the bucket name created for your Archiver (step 1).
3. Click **Next** and then **Submit**.\
   ​You are brought to the **Stack details page**.

   <figure><img src="https://finout.intercom-attachments.eu/i/o/16684371/172e0ce42bbed5ff50806cf1/AD_4nXc4icyPw8yeqwXIw6JeQdh7aaiAVQhQxHX9O-343TphGeFHmfhiFL4Bo-4lijpPnStHfabkb2SUvLn9Ovqn9rb2bVyojKE_4bUa2xlrwwfAPXItIhtnkX3zn1dDwTUVThO9dltSKZlXi0jajl5KZz1M2esQ?expires=1725348600&#x26;signature=e982db55d17db47f9efa522b7f2641fb8ac4d0b7b105dff7f3f04bc0ad0dfaf3&#x26;req=0dNpzVz5qzZk2hL085ZhoZeQw%2BseQEewACUAhEgjwraHInrQ3OnJZYbEe%2B3E%0AEg%3D%3D%0A" alt=""><figcaption></figcaption></figure>
4. Click **Output** and copy the ARN IAM role value to add in Finout (step 4).

**To grant access manually:**

1. Navigate to creating a new cross-account role in IAM , sign in the your[ AWS account](https://eu-north-1.signin.aws.amazon.com/oauth?client_id=arn%3Aaws%3Asignin%3A%3A%3Aconsole%2Fcloudformation\&code_challenge=9at2qlfz2hoSdir6XSHnxUhVnR8-vrS0hI-RCxafu2o\&code_challenge_method=SHA-256\&response_type=code\&redirect_uri=https%3A%2F%2Fconsole.aws.amazon.com%2Fcloudformation%2Fhome%3FhashArgs%3D%2523%252Fstacks%252Fquickcreate%253Fparam_OrgEnabled%253DDisabled%2526param_OrgId%253D%2526param_ExternalID%253D%2526param_BucketName%253D%2526param_BucketPrefix%253D%2526stackName%253DFinout-Archiver-Connector%2526templateURL%253Dhttps%253A%252F%252Ffinout-public-assets.s3.us-east-1.amazonaws.com%252Farchiver%252Ffinout-archiver-connector-org.json%26isauthcode%3Dtrue%26oauthStart%3D1739268570916%26state%3DhashArgsFromTB_eu-north-1_50753c08f8ab9b15), and then create a role for another AWS account.\ <br>

   <figure><img src="/files/A71wRqtuNvSXFSBBgtDM" alt=""><figcaption></figcaption></figure>

2. In the account ID, enter: 277411487094.

3. Paste the **External ID** and enter the “`external-id`” (Obtained in step 2). <br>

   <div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXePL6_zRXTBVitm7ZYa3Oj16FreqlHrOCNXIrEqeVQOvn-O-CefHivic3st4ogy62aCHluJRVMzgtwFawj0BKLW0yzi2p-smrQ82LsWH0pVyE4y9pDxwpW3N5_ZKIjf-ZYil-Po?key=pacRQa4h1RWT_wxFaHKrY-C5" alt=""><figcaption></figcaption></figure></div>

4. Click **Next**. ​\
   The **Review** step appears.<br>

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXf9TkemkmHaNpd4bFhDtE9ckxGLKWWHJbsYnVRyJDRMK4Vn3M4HUKVr3VX7CUSv4qdQ-ydz9zJZAdLVDiUCaAHLDhof6e83UfQRsDExALtEoEAsinHIjrcX2G9YhckjxcqslL8FUw?key=pacRQa4h1RWT_wxFaHKrY-C5" alt=""><figcaption></figcaption></figure>

5. Add a Role name: `FinoutArchiverRole` and then configure the role. \
   A new role is created.

6. Go to your new role in **Summary**.<br>

   <figure><img src="/files/4Qf0MI2jalkErrlCe7MG" alt=""><figcaption></figcaption></figure>

7. Copy and save the **Role ARN**.

8. Click on **Add permissions** and choose **Create inline policy**.\
   Choose JSON format and paste the following JSON:

   ```
     {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:PutObjectAcl",
                   "s3:ListMultipartUploadParts",
                   "s3:ListBucket",
                   "s3:DeleteObject"
               ],
               "Resource": [
                   "arn:aws:s3:::finout-data-archiver/*",
                   "arn:aws:s3:::finout-data-archiver"
               ]
           }
       ]
   }

   ```

9. Click **Next** until the Review step, and name it `finout-access-policy`.

10. Click **Create policy**.\
    Your IAM role is finalized and created.

### 4. Adding AWS Bucket Details to Finout

After creating your bucket in AWS and granting Finout access, send the following bucket details to Finout support.

1. **Role ARN** -The Amazon Resource Name (ARN) specifies the role.&#x20;
2. **Bucket Name** -This is the name under which Finout will write archiver data.
3. **S3 Path Prefix** - This is the folder in S3 in which the archiver files are written.

## FAQs

**How does Finout ensure data accuracy and reliability with the manifest file?**

Finout ensures data accuracy and reliability through automated systems that monitor and reprocess any failed exports, eliminating the need for manual intervention. While the manifest file enhances transparency by providing visibility into data export processes, Finout’s robust validation mechanisms ensure consistent and accurate data without requiring clients to check the manifest manually.

**How does Cost Archiver handle data updates over time?**

Cost Archiver  is designed to handle retrospective data updates, which are common with sources like AWS CUR that may reflect changes for several months. It ensures that past data is updated to include late adjustments, with the manifest file clearly indicating which dates have been modified. Finout’s automation ensures data completeness and reliability throughout this process.

**What mechanisms are in place for maintaining data consistency with partitioned files?**

Cost Archiver performs automatic checks to identify and update partitioned files whenever source data changes. Finout updates relevant partitions and logs these updates in the manifest file.  This approach guarantees consistency and integrity across the partitioned data structure.

<br>


# Connect to Azure

## Azure Integration Overview

Integrate Azure with Finout to generate comprehensive cost and usage reports tailored to your organization's needs. Configure Finout to create detailed reports using Azure data, either for specific subscriptions or across your entire organization. This integration allows for in-depth analysis and management of expenses, offering valuable insights into cost allocation and usage trends across your Azure infrastructure. See [Azure documentation](https://learn.microsoft.com/en-us/azure/cost-management-billing/costs/tutorial-improved-exports) to learn more about creating and managing cost management exports.

**Azure Configuration Workflow:**

1. [Create a Service Principal for Finout](#h_caeb06e4d5)
2. [Create the Billing Export](#h_b1296fde84)
3. [Grant Finout Read-Only Permission from the Export Storage](#h_3457a15897)
4. [Connect Azure Advisor to Finout](/billing-integrations/cloud-providers/connect-to-azure#h_81357dba78)
5. [Connect Azure Commitments to Finout](#h_81357dba78-1)
6. [Integrate Azure with Finout](#h_81357dba78-1)

## 1. Create a Service Principal for Finout <a href="#h_caeb06e4d5" id="h_caeb06e4d5"></a>

Integration with Azure is achieved using an [Azure service principal](https://learn.microsoft.com/en-us/azure/active-directory/fundamentals/service-accounts-principal).\
\
There are two options:\
a. [Create a service principle using the CLI.](#h_39705424de)

b. [Create a service principal using the Azure portal](#h_9306e184ac) and [set up an authentication](#h_d5c901358e).

#### a. Create a service principal using the CLI <a href="#h_39705424de" id="h_39705424de"></a>

1. From the CLI, type the following:

```json
az ad sp create-for-rbac -n "finout"
```

2. You will receive an output similar to the following:

```json
{
  "appId": "3c666g0g6-8cb8-8b33-cba6-abc7676a8989",
  "displayName": "finout",
  "password": "789************************",
  "tenant": "6666b777-ba88-44a9-a4aa-666ccb222a91"
}
```

{% hint style="warning" %}
**Important**: Save the following details to use in the Finout console (step 5):

* appId → Application (client) ID
* tenant → Directory (tenant) ID
* password → Application password (Client Secret
  {% endhint %}

#### b. Create a service principal using the Azure portal <a href="#h_9306e184ac" id="h_9306e184ac"></a>

1. From your Azure portal, search for and select **Azure Active Directory**.
2. Select **App registrations**, then click **New registration.**<br>

   <figure><img src="/files/dYp4cNQztCeEfP1UEi45" alt=""><figcaption></figcaption></figure>
3. Name the application (For example, "Finout").
4. Leave the default values in the rest of the parameters and click **Register**.
5. The **Overview** page provides two of the credentials required for the Finout console (step 4) the **Application (client) ID** and the **Directory (tenant) ID**.<br>

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277242/a6670f0def974ac7ae240810/36-ftrPjoZM62-euWYBLmz30upVfzSUpNrH-W7dqSKuiueHek7yDSuQdxOQ_sBR5NaNhipU0LmO_cXMWKCyTC6w3OQhWTp3CdtNvg07vn2PiTcxQ8ZRWdYjOA2035sJaUpaCMY4wJtgpcgIAr7PZUDw?expires=1725353100&#x26;signature=827903fb482a5e54a176e5746e436ed208a27526a9e8c21d9ba19e86c1168aec&#x26;req=1tdowlr%2Brnsp0xr0v9tnpJz832knGZjLCCFvpe6WxHwRzXNE2ItQkfGpiQxe%0AEjdMjdPQxRDOm2M%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>

   <figure><img src="/files/lIUIddKSJRr2sA7bqJn6" alt=""><figcaption></figcaption></figure>

   <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>Important: Save the following details to use in the Finout console (step 4):</p><ul><li>appId → Application (client) ID</li><li>tenant → Directory (tenant) ID</li></ul></div>

#### b-2 Set up the authentication <a href="#h_d5c901358e" id="h_d5c901358e"></a>

For the Finout integration, use the **password-based authentication (application secret)** method by following these steps:\
​

1. Select **Certificates & secrets** from the left-hand menu on the app registration page.

   <figure><img src="https://finout.intercom-attachments.eu/i/o/6277243/a6a513b91a2744be0c00a3fd/O0brJDUQh8XhFFwVY4ZV-hMrYa2AbsCabQadhEX72VIvq6W5gSIHu6eNtGxIK9hVle9RumKFcVrqXZty7Or3R6q7CP4NHtLqiAUiqV1jOnFUmgBE5mwZdkvj6wmFoRpXE29rI08YNVr9SPu2YOIYPy0?expires=1725353100&#x26;signature=dd85dbb8d7490c54ec1ae6b5a56a4e3a4e1b2717fb33358a20ee5de7593dbf9b&#x26;req=1tdowlr%2Br3sp0xr0v9tnpA80LpyXaLnONbm9j7GxXmd%2BC15NaY0YhHFxlTMA%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/0d1ZmvXovg4Cs1fO06zt" alt=""><figcaption></figcaption></figure>
2. Click **+ New client secrets** to create a new client secret.
3. Select an expiration time frame, add a description, and then click **Add**.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: If the secret is set to expire, you must remember to renew the credentials and reconfigure it in the Finout console.</p></div>
4. Copy the **Value** from the Client secret to the **Application secret** field in the Finout console (step 4).<br>

   <figure><img src="/files/kWSUcWDQNcLBj18o7RYG" alt=""><figcaption></figcaption></figure>

## 2. Create the Billing Export <a href="#h_b1296fde84" id="h_b1296fde84"></a>

In this step, create the export for the billing scope and grant Finout read-only access to these export files.

{% hint style="warning" %}
**Important**: Ensure you're on the billing scope when performing the following step.\
To ensure you're on the billing scope, check the text on your cost management screen that states **Billing account.**
{% endhint %}

{% hint style="info" %}
**Note:** When creating an export for the billing scope, you can choose to configure Azure settings by **overwriting the same file** or by **generating a new file** **for each run**.
{% endhint %}

#### Create the report exports on the billing scope: <a href="#h_5b555b6c74" id="h_5b555b6c74"></a>

The reports must be exported twice, once for each of the following cost types:

1. Actual cost
2. Amortized cost

You should provide a different directory for both exports, but both exports must be exported to the same container.

**To create an export in your Azure portal:**

1. In Azure, navigate to **Cost Management.**

   <div align="left"><figure><img src="https://downloads.intercomcdn.eu/i/o/18754062/702b4dfc9e4fea30dc467dc5/image.png?expires=1725353100&#x26;signature=73fb914bfdc87f3208f15effc7466b45b3deac3777dcf7fb418d6f5f718784e8&#x26;req=0d1owFz6qjVk2hL085ZhofjS2T%2BDFUO4oEN25Mc%2Fz%2BSxNxX%2B7Z%2BJ5F8DCX8p%0Aag%3D%3D%0A" alt=""><figcaption></figcaption></figure></div>
2. Click **Exports** in the left-hand menu.

   <div align="left"><figure><img src="https://downloads.intercomcdn.eu/i/o/18754081/a5a018ce0118e5d85f2a6389/image.png?expires=1725353100&#x26;signature=dcc312d4480221ef63949723675ee537c1660586f9fd50caa3baa24c49d2d585&#x26;req=0d1owFz6pDZk2hL085ZhoWL5%2BNn9XGxyS1mWuUOCuRSw72XsjqxVsjojNhGr%0AHg%3D%3D%0A" alt=""><figcaption></figcaption></figure></div>
3. From the **Export** screen, click **+ Create**.\
   The **New export** page appears.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/18754215/c1a54be856ad4fb8afe80999/image.png?expires=1725353100&#x26;signature=49b1bc359899591655d41e2bf5662e98cd1d2b37ebe9575a246d805d6d272dc2&#x26;req=0d1owFz4rTJk2hL085Zhod%2Bd21cZ%2F57EB4aAEETibbA2O%2FcJ71C4gtXcG40e%0AvQ%3D%3D%0A" alt=""><figcaption></figcaption></figure>
4. Click **Cost and Usage** (actual or amortized).<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>​<strong>Note</strong>: The reports must be exported twice, once for each cost type. You should provide a different directory for both exports, but both exports must be exported to the same container.</p></div>

   \
   You are brought to the **Datasets** tab.<br>

   <figure><img src="/files/tDYatbzT7OhQdSLjxRfI" alt=""><figcaption></figcaption></figure>
5. Add the **Export Profile** name and click **Next**.\
   You are brought to the **Destination** tab.

   <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Important</strong>:<br>- Ensure that the Format is CSV.<br>- Ensure that the Compression type is None.</p></div>

   <figure><img src="/files/zbawY41h91cjEcBGnb78" alt="" width="563"><figcaption></figcaption></figure>

   \
   Fill in the details required on the destination page.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Save the following details to add to Finout (step 4):<br>-Storage Account</p><p>-Container</p><p>-Actual Cost Directory and Export Name</p><p>-Amortized Cost Directory and Export Name</p></div>
6. Click **Next**.\
   You are brought to the **Review and Create** tab.
7. Review the summary and click **Create**.
8. After the export is created, select it from the export page and click **Run now**.

## 3. Grant Finout Read-Only Permission from the Export Storage <a href="#h_3457a15897" id="h_3457a15897"></a>

Grant read-only permission by using Azure CLI or the Azure portal.

#### Grant permissions using Azure CLI <a href="#h_e6ae8d8d37" id="h_e6ae8d8d37"></a>

* Type the following command in your CLI and fill in the parameters according to the role and storage details:

  ```
  az role assignment create --assignee <app_id> --role "Storage Blob Data Reader" --scope /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Storage/storageAccounts/<storage_account_name>/blobServices/default/containers/<container_name>
  ```

#### Grant permissions using the Azure portal <a href="#h_6c5103e70c" id="h_6c5103e70c"></a>

1. From your **Storage account** page, click **Containers** and select the export container.
2. Select **Access control** (IAM).
3. Click **+Add** and then click **Add role assignment**.
4. Search for **Storage blob data reader**, select it, and then click **Next**.
5. Click + **Select members** and find the Finout service principal.
6. Select the Finout service principal and click **Select**.
7. Click **Review + Assign**.

{% hint style="info" %}
This step is currently in Alpha.
{% endhint %}

## **4. Connect Azure Advisor to Finout**  <a href="#h_81357dba78" id="h_81357dba78"></a>

Connect a subscription scope in two ways: Use the [**Azure Portal**](#using-the-azure-portal) or the [**Azure CLI**](#using-azure-cli)**.**

#### **Using the Azure Portal:**

1. In your Azure portal, go to **Subscriptions** and then select your subscription.

   <figure><img src="/files/ipes8zN9PYx9CLRX8m5b" alt=""><figcaption></figcaption></figure>
2. Click **Access control (IAM)**, **+ Add**, then **Add role assignment**.

   <figure><img src="/files/heXMKgux4AGthjGG7cQ8" alt=""><figcaption></figcaption></figure>
3. Choose **Reader** and click **Next**.<br>

   <figure><img src="/files/Bc9WMcZm8bxPS80bsh7z" alt=""><figcaption></figcaption></figure>
4. Under **Members**, select your **Finout service principal**.
5. Click **Review + assign**.

#### Using Azure CLI:

1. Copy this command:

   ```json
   az role assignment create --assignee <appId> --role Reader
   --scope /subscriptions/<subscription_id>
   ```
2. Replace placeholders   \
   ● Replace <mark style="color:green;">\<appId></mark> with your Finout Service Principal App ID.   \
   ● Replace <mark style="color:green;">\<subscription\_id></mark> with the ID of the Azure subscription you want to   \
   connect.
3. Run this command separately for every subscription you want   &#x20;Finout to access.

## 5. Connect Azure Commitments to Finout <a href="#h_81357dba78" id="h_81357dba78"></a>

To bring your Azure Savings Plans and Reservations data into Finout, assign two additional read-only roles to the **same** Finout service principal you used in the previous steps.&#x20;

Both roles are assigned tenant-wide. Assign each one separately, using either the Azure portal or the Azure CLI.

{% hint style="info" %}
**Note**: Use the same service principal that was configured for the Azure billing and Azure Advisor integrations. The same one is used for both the Savings Plans and Reservations role assignments.
{% endhint %}

#### a. Assign the Savings Plan Reader role

Assign the **Savings Plan Reader** role at the **Microsoft.BillingBenefits** scope (tenant-wide).

**Using the Azure Portal:**

1. In the Azure portal search bar, search for and select **Savings Plans**.

![](/files/umyiotbcrF6fMhdmIckc)

2. Select **Role assignments** from the left-hand menu.
3. In **Access control (IAM)**, click **+ Add**, then **Add role assignment**.

![](/files/W7KolTD6JvrNIxKXHrxC)

4. Search for the **Savings Plan Reader** role, select it, and click **Next**.

![](/files/6XWwNbVJCI2Toc8ndPph)

5. Under **Members**, click **+ Select members**, find your **Finout service principal**, and select it.
6. Click **Review + assign**.

**Using Azure CLI:**

Run the following command, replacing `<appId>` with your Finout Service Principal Application (client) ID:&#x20;

```json
az role assignment create --assignee --role "Savings Plan Reader"
--scope "/providers/Microsoft.BillingBenefits"
```

{% hint style="info" %}
**Note**: The **Savings Plan Reader** role is not listed in the standard Azure built-in roles reference, but it is a valid, supported role within Azure RBAC.
{% endhint %}

#### b. Assign the Reservations Reader role

Assign the **Reservations Reader** role at the **Microsoft.Capacity** scope (tenant-wide).

**Using the Azure Portal:**

1. In the Azure portal search bar, search for and select **Reservations**.

<img src="/files/t4N5kws6vFFOEVPUnKOp" alt="" height="111" width="624">

2. Select **Role assignments** from the left-hand menu.
3. In **Access control (IAM)**, click **+ Add**, then **Add role assignment**.
4. Search for the **Reservations Reader** role, select it, and click **Next**.

![](/files/g54fRzYLF7eBirbRPfE3)

5. Under **Members**, click **+ Select members**, find your **Finout service principal**, and select it.
6. Click **Review + assign**.

**Using Azure CLI:**

Run the following command, replacing `<appId>` with your Finout Service Principal Application (client) ID:

```json
az role assignment create --assignee --role "Reservations Reader"
--scope "/providers/Microsoft.Capacity"
```

## 6. Integrate Azure with Finout <a href="#h_81357dba78" id="h_81357dba78"></a>

1. Navigate to **Settings > Cost Centers** and click **Add cost center**.\
   The **Connect Accounts** window appears.

   <div align="left"><figure><img src="https://downloads.intercomcdn.eu/i/o/18755693/e2031fa8acdd7b163c58ecd8/image.png?expires=1725353100&#x26;signature=e27654f3c6f02fbec8fe5d26c24718a0f434537c1ecab605f7038e73469dd182&#x26;req=0d1owF38pTRk2hL085ZhoWdvlGpvjxpq1CEFSLWXXbFkCHwWNZmErl9J8xsb%0AOA%3D%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>
2. In Azure, click **Connect Now**.\
   The Azure integration window appears.

<figure><img src="/files/AGb4FInHbfbMAFc0vL3M" alt=""><figcaption></figcaption></figure>

3. Add the details saved from [step 1](#h_caeb06e4d5) and click **Next**.\
   You are brought to the **Create the billing export** step.

<figure><img src="/files/DCVT1PtcRN9wEHV9vKbY" alt=""><figcaption></figcaption></figure>

4. Add the details saved from [step 2](#h_b1296fde84) and click **Next**.

{% hint style="warning" %}
**Important**: To successfully finish the Azure integration with Finout, ensure the export files exist in the given container.
{% endhint %}

You are brought to the **Connect Azure Advisor Recommendations** step.<br>

<figure><img src="/files/r7y7nEPkoR7nNSRkqVUk" alt=""><figcaption></figcaption></figure>

5. Mark **I've granted the reader role to the Finout Service Principal** and click **Next**.               You are brought to the **Connect Azure Commitments** step.&#x20;
6. After assigning both roles (see [step 5](#h_81357dba78-1)), select **I've granted the Savings Plan Reader and Reservations Reader roles to the Finout Service Principal**, then click **Close**.\
   Your cost center has been created. You will receive an email notification once the data is retrieved and the setup is complete.

<figure><img src="/files/ItgS1YxvvTAzV1SCB6Jk" alt=""><figcaption></figcaption></figure>

## Historical Backfill Export

Finout supports **two methods** for backfilling historical Azure cost and usage data:

**1.** **Standard Backfill via Blob Storage (Recommended)**\
\
This is the default and preferred method. Finout accesses your Azure Blob Storage using the permissions granted during Cost Center onboarding. From there, it pulls historical amortized and actual cost and usage files—even for periods prior to the Cost Center's integration—ensuring a complete and continuous cost history.

If you want Finout to backfill data for a specific period, contact Finout support and specify the desired date range in complete calendar months. Support will then access the container and import the data into your account.

{% hint style="info" %}
**Note**: You must ask Finout support to fetch this as it is not fetched automatically.
{% endhint %}

**2.Alternative: Manual One-Time Export**

If historical files are **not available** in your Blob Storage, you can generate a **Finout-supported manual Azure export** using Azure’s Cost and Usage Export feature.\
This one-time export should include amortized and/or actual cost data and must be uploaded to the same Blob Storage Finout has access to. Once uploaded, Finout will automatically detect the files, fetch the data, and ingest it into your account for the desired backfill period.

This manual method should be used **only when the standard Blob Storage backfill is not possible**.

{% hint style="info" %}
**Prerequisite**: \
You must have one of the following Azure permissions:

* Owner/Contributor role
* A custom role with:
  * Microsoft.Authorization/roleAssignments/write
  * Microsoft.Authorization/permissions/read
    {% endhint %}

1. **Open the Azure Portal**\
   Go to your [Azure Portal](https://portal.azure.com/) and navigate to **Cost Management and Billing**.
2. **Navigate to Exports**:
   1. Select the relevant **billing scope.**
   2. In the left sidebar, click **Exports.**
   3. Click **Create New Export.**<br>

      <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcUuFQk2x-xpyljKjB75DhcxYNve99zMwSqGPVb6lNrzR6AZKKEkJ5ViMidRB7ABsEJH4SyTZSJ7gnnY1wjYhO7a1vnA1vfxZ38LhYvE1e1qJdkvJMvjWLg7yFZEWyhtTxwfjcstg?key=vFnz9sLuyFFZ6of2mDOGHg" alt=""><figcaption></figcaption></figure>
   4. Choose **Cost and usage (actual + amortized) export.**<br>
3. **Create Actual and Amortized Exports**

   <div data-gb-custom-block data-tag="hint" data-style="success" class="hint hint-success"><p><strong>Note</strong>: You will need to create two separate exports:</p><ul><li>One for Actual Cost and Usage</li><li>One for Amortized Cost and Usage</li></ul></div>

   1. Choose an  **Export Name / Prefix.**<br>

      <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdLHhDDm-MDoG1IzDUlgqDscJC9OQdI0m648D-gJstSYd7dZqbDKK08TpXadnyuGkxGzw2w0l23n0ZmzPNkClLc1PufZ2MlEMVVmSErQD9S0PBCZ2DUvz5-7MvPaxRPrq0iu0u-mg?key=vFnz9sLuyFFZ6of2mDOGHg" alt=""><figcaption></figcaption></figure>
   2. Edit the **Export information**:<br>

      <div align="left"><figure><img src="/files/LQomKQvDur5aCEr1NgSY" alt=""><figcaption></figcaption></figure></div>

      1. Choose a **Data Type**
      2. Add an **Export Name**
      3. Choose a **Domain version**
      4. **Frequency**: One-time
      5. **Time Period**: A full calendar month

         <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Important</strong>: <em><strong>Azure allows exporting only one month at a time. To export additional months, repeat the process.</strong></em></p></div>
      6. Add an **Export description**
4. **Set Destination**<br>

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXej0I4TLqj_YTRtPA2ddLTLLqzdLjJni_3FGmGQlHb6rUhedPAXQvEbBRD-s8741Qw40rrX0KJY5i9T_ZfX3AKdHR0k_ahrxiJ5vp2r3_K8Fw0O40-olJ92zbU6Y2bYlQoGcSpl3Q?key=vFnz9sLuyFFZ6of2mDOGHg" alt=""><figcaption></figcaption></figure>

   1. **Storage Type**: Azure Blob Storage
   2. **Destination and storage**: Use existing
   3. Enter your **Subscription** and **Storage account**.
   4. **Container**: Select an existing container in your Azure account — this must be the same one you granted Finout access to during the Azure Cost Center onboarding. This container stores your billing data.
   5. **Directory**: make sure to export the actual file and the amortized file into **different** directories.&#x20;
   6. **Format**: CSV
   7. **Compression type**: Gzip
   8. Enable **Overwrite data**
5. **Review and Create**

   After creating both exports, ensure both actual and amortized appear in the export list.<br>

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXefKrexXdPnULpggzVBojQzeExcyRRG__Pm-jvD76qZEvFzIHa0JPsu8gDWqg1K5p6fXFkGk9lRSWyFyUIlU6xtXVj0saAPGa8fklgb8Mm0crpbET_quNY54bcdptb6t36FOpL5oQ?key=vFnz9sLuyFFZ6of2mDOGHg" alt=""><figcaption></figcaption></figure>
6. Run the **Export.**<br>

   <div data-gb-custom-block data-tag="hint" data-style="success" class="hint hint-success"><p><strong>Note</strong>: You will need to run two separate exports:</p><ul><li>One for Actual Cost and Usage</li><li>One for Amortized Cost and Usage</li></ul></div>

   1. In Exports, click ![](/files/1LzkZmJNQtno7dvIj4KT) on the right side of each export.\
      \
      ![](/files/iLtWBPvUEpkmEukaWvso)<br>
   2. Select **Run now** and choose the relevant month.
7. **Locate and Share Files**:\
   Once complete, both files will be available in the Blob Storage container you specified. Contact Finout support and they will then access the container and import the data into your account.

(Optional) Create the same export for additional months:

1. In Exports, click ![](/files/1LzkZmJNQtno7dvIj4KT) on the right side of each export.\
   ![](/files/pxnLu3DHFwr577d6bIxp)
2. Click **Export for selected dates**, and configure another full calendar month.<br>

   <figure><img src="/files/qsz6pK9SfKFU7aAvFtkn" alt=""><figcaption></figcaption></figure>
3. Click **Execute** and then **Run the exports**.

## FAQs

* **What does the Azure Advisor integration in CostGuard do?**\
  It brings Azure’s native cost optimization recommendations directly into CostGuard. This allows you to review and act on Azure insights side-by-side with recommendations from other providers within a unified interface, eliminating the need to switch between multiple tools or dashboards.
* **What’s required to enable Azure Advisor?**\
  Complete the Azure onboarding to authorize Finout’s access to Azure Advisor. That’s the only prerequisite. To enable Azure Advisor integration in CostGuard, you must complete the Azure onboarding process, which authorizes Finout’s access to Azure Advisor. This includes following the step-by-step instructions from the [Azure onboarding documentation](/billing-integrations/cloud-providers/connect-to-azure) to configure the connection in your Azure Portal or via the Azure CLI. Once onboarding is finalized, CostGuard will automatically begin pulling Azure Advisor recommendations.
* **When will I see the recommendations?**\
  Once onboarding is complete, Azure Advisor recommendations will appear in CostGuard on the following scheduled scan (typically the following day). It will continue to update automatically and appear alongside your other provider recommendations.
* **Can I use a custom role limited only to Azure Advisor permissions for the Finout integration?**

  Yes. You can use a **read-only custom role** scoped specifically to Azure Advisor.

  To allow Finout to read Azure Advisor recommendations, the following action is sufficient:

  ```
  Microsoft.Advisor/recommendations/read
  ```

  Assign this role to the service principal used by Finout for the Azure Advisor integration.
* **Can I assign the role at the Management Group level instead of per subscription?**

  Yes. You can assign either the **Reader** role or your Azure Advisor–scoped **custom role** at the **Management Group** level.

  This lets Finout access Azure Advisor data for all subscriptions under that Management Group. However, make sure that the **same subscriptions are also onboarded to Finout billing**. Otherwise, you may see Azure Advisor recommendations for resources that do **not** have matching billing data in Finout, which can limit cost insights.
* **Will Finout automatically discover all subscriptions under the Management Group, including future ones?**

  Yes. When you assign the role at the **Management Group** level, Finout will automatically discover:

  * All **current** subscriptions under that Management Group
  * Any **future** subscriptions added to that Management Group

  As long as those subscriptions are also connected to Finout billing, their Azure Advisor recommendations will be available in Finout.
* **Can I use certificate-based authentication instead of client secrets?**

  No. Finout **currently supports client secrets only** for authenticating the Azure integration.

  You must configure the service principal with a client secret; certificate-based authentication is not currently supported.


# Connect to Oracle

## Oracle Integration Overview

{% hint style="warning" %}
**Note**: This topic covers a new capability that is currently in beta and will replace the existing topic in the future. If this functionality is not yet available in your account, contact Finout support at <support@finout.io> to enable it.&#x20;
{% endhint %}

Integrating Finout with Oracle Cloud Infrastructure (OCI) allows you to ingest, analyze, and optimize your Oracle cloud costs within Finout. Once connected, you can track OCI usage, monitor spending trends, allocate costs across teams and cost centers, and gain full visibility into your Oracle environment alongside your other cloud providers.

Finout supports two integration methods:

* [**Console-Based Integration**](#console-based-integration) – Manual setup through the OCI Console.
* [**CLI-Based Integration**](#cli-based-integration) – Automated setup using the Oracle CLI, recommended for faster onboarding and repeatable configuration.

This guide walks you through both methods so you can choose the approach that best fits your organization’s security model and operational preferences.

## Console-Based Integration

### 1. Create a New Group for Finout <a href="#h_60fc961389" id="h_60fc961389"></a>

Access permissions in Oracle are assigned to groups. Create a separate group for Finout to ensure access only to the necessary billing resources.

1. Go to the OCI navigation menu → **Identity & Security** → **Domains** → \<Finout domain> → **Groups** (in the right-hand menu).

{% hint style="info" %}
**Note**: If you choose to use a domain other than “Default” to set up the integration user make sure that both the user and group are contained in the same domain.
{% endhint %}

<figure><img src="https://finout.intercom-attachments.eu/i/o/14463067/4be11f5640765680c1dadeca/AD_4nXfvsIaEVGg3UntNiRhsj6j-_uuQ6UKfrXss-VDdH-tWPEPFxLhNKUonfccXQU57LF9gUdGjF2dIIhVM3C0cwgZPL2Lm9SWSrgLFS7tS2g6DQi62PGkZI8sQU38IIeZwlG1jMb7y6iyfObrADD4zSfGlKpyk?expires=1725534000&#x26;signature=9b9f17f49bb22d65b5bd9e5a485dc00281c468e9cc58d1f644a625973c5424a9&#x26;req=0dFrw1v6qjBk2hL085ZhoQX35blI%2FV%2BYfpBCCo79HpZWQKT%2BXPRZKUCcBl3n%0A8Q%3D%3D%0A" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ULZ8qPDhrW6T4KKPPpWL" alt=""><figcaption></figcaption></figure>

2. Click **Create Group**.<br>

   <figure><img src="/files/z1D9b8mHGwrqIxydjbBp" alt=""><figcaption></figcaption></figure>

<div data-full-width="true"><figure><img src="https://finout.intercom-attachments.eu/i/o/14463069/4f72503e08fef4704138a914/AD_4nXc17WtjbFCMXWeMcZado1ACBPgVGlyNSk8IHUcYA7y3aYODeRbPQmbM6ayXAZt90rVZqoqCK2dI41VBhDEY4KKWyx9_swW2jgI_v5p2l6I7iC1O680yYMhbf1Uk_q6DHTjUZg6Uzw-7KBqurU9y06JjdLCw?expires=1725534000&#x26;signature=70e39f5b95e357b0e775fc3cf7dc18a946b5029bec4cc646889cefae5733991c&#x26;req=0dFrw1v6qj5k2hL085Zhodd0k%2F6aFe4CDYe4vLhW3I2ScstyLAH2kLK7%2F%2BYx%0ADQ%3D%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>

3. Fill in the **Group Name** and add some **Description**.<br>

   <div align="left"><figure><img src="/files/3R4wiIPL8xQODgDUE4Gf" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/14463072/8d578f985b5f8fc3d5d87939/AD_4nXfI6-_yhwYpqqo2KG-Jki1eetn5bqVFFiJvB8mKMuu-PxkMD0a_Uz-AwPPxdm9XikwLE9B5eZNe8uro1atJ8aCQdwmYbkgGPNwDcBhtFS9n5mckMyFBQC7iTLOuqmHNFzLuzftDA-EA7VefQjQpGdzfkExJ?expires=1725534000&#x26;signature=4fc2ef68acae443b94e574188e53053c5dfa14d1e33fc2de59c737470908ed08&#x26;req=0dFrw1v6qzVk2hL085ZhoU%2BlrcMGhV82yiTMOpBaiIQyRyDf0fN5sSZDq74q%0Afg%3D%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>

4. Click **Create.**

### 2. Add a Policy to a Group <a href="#h_4d3b21f51f" id="h_4d3b21f51f"></a>

Assign a policy to the group for accessing cost reports. In OCI, group permissions are managed through policies. By assigning a policy to the Finout group, you ensure that all its members can access only what the group policies allow.

1. Go to the OCI navigation menu → **Identity & Security** → **Policies**.

   <figure><img src="/files/qIuR3FJ3QnsGybwGI9KT" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/14463073/0fb7e6fa0e989d664b03c010/AD_4nXcU6DJLvzohT8PhQwvRaz1FU89HOnaSvIBi0Fb7_MkiNr6JFTsF6_9iGNzDxL2RRxd-JnpZuUgqdpLrdvMCeic1Vjo1EAc7SNnQcCMklva66-ufwdW14b6UHRME6DsSJcEK-v68OsqUmTrXxzgr?expires=1725534000&#x26;signature=eaac27ef91fcd6933a3c8ad6b38861e563618fa93272807b4c73f81eacc6eaef&#x26;req=0dFrw1v6qzRk2hL085ZhoUzyIrlqRO0gm91LQAw2kA45KL80arqiBO7eWOer%0AMQ%3D%3D%0A" alt=""><figcaption></figcaption></figure>
2. Click **Create policy**.<br>

   <figure><img src="/files/F9ZfuJrEeyWvr3Hm44bL" alt=""><figcaption></figcaption></figure>
3. Choose a **name** for the policy that clearly indicates its purpose for accessing cost reports.
4. In the policy builder box at the bottom of the screen, activate the **Show manual editor** button and enter the following statements:

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Save your tenancy for step 5.</p></div>

   * Statement 1:

     <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Important</strong>: The following statement is not an example. You need to run this statement exactly as it is shown below.</p></div>

     \
     *`define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wffbilvqknstgtvzub7vhqkggq`*\
     This specifies the tenancy for usage reports, which is in a bucket owned by Oracle.
   * Statement 2:\
     *`endorse group <group name> to read objects in tenancy usage-report`*\
     Replace *`<group name>`* with the name of the group created for Finout. If you want your own groups/users to access the cost reports as well, add another policy with the relevant *`<group name>`*.

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Examples:</strong> <br></p><ul><li>If you chose the “Default” domain:<br><code>endorse group default to read objects in tenancy usage-report</code></li><li>If you chose a custom domain named “finoutdomain”:<br><code>endorse group finoutdomain/default to read objects in tenancy usage-report</code></li></ul></div>
5. Click **Create**.

   <figure><img src="https://finout.intercom-attachments.eu/i/o/14463075/5b7639d95fc9cf092f98611a/AD_4nXehwyijWq7DZSUxpjgQhh81V7rBknNEuP5-cQ8cmCcEn1o0zkBIZnwzPeW9leHxjZxug1kRCl1beZ1aVuZ38YQQDDldLGNEuwmFGrBtlT-U3aaimvU9gcd-vvdDa7UZ5sorJL4v-aFH5h8mZ1o5Px3OGN51?expires=1725534000&#x26;signature=a6a90786554a190709b41052e4cf3a4d13c7213fd374d444c21605c3cfa1f670&#x26;req=0dFrw1v6qzJk2hL085ZhoeVQCixmHXHUwkD%2BvfmxLghNcK26Kl8lQ5M0jZdK%0AQQ%3D%3D%0A" alt=""><figcaption></figcaption></figure>

### 3. Create a User for Finout <a href="#h_44220cee8f" id="h_44220cee8f"></a>

1. Go to the OCI navigation menu → **Identity & Security** → **Domains** → **Users**.

   <figure><img src="/files/3qXSpkcWndWL8R9osrRd" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/14463076/01711405b8a7804b0eecd532/AD_4nXdKRDIy6fJ_eUngDI4uaL09PMbKW7PwROG1fMgbACzsv7QEeGQMgOsQgriIec4VEJ3gnGN9Now6dmDLm2xIGAZtBjsqpcQjxlTvqcYmp1ijJClUI7WzXXQvNolzMvTUWPMvUhN6LTwLsJUJaW8E9te8wn4p?expires=1725534000&#x26;signature=75f33c3ad2a13b7f6fe02194e3379bd4ac7c17f9ed069ed2fe793775e786504e&#x26;req=0dFrw1v6qzFk2hL085ZhoVGKlX3vpEO1KXQpjvCajDu0MZLTxrd1vA9gC7%2BY%0AJA%3D%3D%0A" alt=""><figcaption></figcaption></figure>
2. Click **Create User**.

   <figure><img src="/files/5NhPzrzbQFad8GQS77hW" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/14463078/3bbcdcd927cccae0ec4e1b16/AD_4nXd-sBdDk6dQ-9Gr10jtOszJUopXB74QbqMGFPj1Y5owl9w4vA4S-WLotguNP4Sl5JSxN0D5RBcFBkJR206q1sMvi24eub_TfBTVm8zgrkGbsmQcX1Bs8M2B-t1yj6OglTdh_M6NQcQkNuohuSm2HEsEIWto?expires=1725534000&#x26;signature=16e2889fe324114cd54ab24158aef5c61ef8139ad5703cb2e59180b85c2ec7e5&#x26;req=0dFrw1v6qz9k2hL085ZhoUR2KTLEvG0c5C24vSA9OZdKLE6e1%2BiOy0WdhxHj%0AgA%3D%3D%0A" alt=""><figcaption></figcaption></figure>
3. Fill in the name and email of the Finout user.
4. Assign the user to the new Finout group you created in [step 1](#h_60fc961389) by selecting the appropriate box under the **Groups** section.

{% hint style="info" %}
**Note**: This setup ensures that a Finout user will have access only to the specified policies, specifically the cost reports bucket. It's important to avoid selecting the administrator option and instead choose only the group dedicated to Finout for proper access control.
{% endhint %}

5. Click **Create**.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can Edit the user capabilities and limit to only API keys.<br><img src="/files/GI7wAiVQxQYVolM2N9bi" alt=""></p></div>

### 4. Generate an API Key <a href="#h_cdbaad95f1" id="h_cdbaad95f1"></a>

Generate an API key to enable Finout users to access the reporting bucket via the Oracle API key.

For detailed instructions, refer to the official Oracle documentation [here](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm#two).

**Create an API key pair in the OCI console to enable API signing for the Finout user:**

1. Ensure an administrator user is logged into Oracle, as only administrators can perform these steps.
2. Navigate to **Identity & Security** → **Domains** → \<Finout user domain> → **Users**, and click the Finout user to access their profile.

   <figure><img src="/files/ZZkX4cJPGSENEoMwkGWl" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/14463081/548446bc92c9775810c47db7/AD_4nXdKRDIy6fJ_eUngDI4uaL09PMbKW7PwROG1fMgbACzsv7QEeGQMgOsQgriIec4VEJ3gnGN9Now6dmDLm2xIGAZtBjsqpcQjxlTvqcYmp1ijJClUI7WzXXQvNolzMvTUWPMvUhN6LTwLsJUJaW8E9te8wn4p?expires=1725534000&#x26;signature=b95acf14f13fb9a767dafa4d5da41bc6cc6967bf723ed50469495c190cfdab53&#x26;req=0dFrw1v6pDZk2hL085ZhoUh%2BQKUwVzKuYnPTlSd8o%2Fi8vVuWxhRTqykLkQTA%0AbA%3D%3D%0A" alt=""><figcaption></figcaption></figure>
3. Navigate to the **Resources** section in the bottom left screen and select **API keys**.

   <figure><img src="/files/cWs4F0bsvqYcjrnZAvca" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/14463083/8cc9280debc89313981d1959/AD_4nXeZmESJ42kCo2lznGUNuBaNNgUkJc1HIw0UL2nMuRvNiEm3krJdmlbvLEpMNCleOMC0JNLujQ6XojtrurQBGsfJSK7NhscRbv5WPPQXDa0oUkFqrUXIn9Kw92Swlj9DPk5k4rprlp55lGBiToJsPwMI1Ssz?expires=1725534000&#x26;signature=60e1a49f43232e0fc362b49c8da20a472a7c34e96ee9740da428d348555c302f&#x26;req=0dFrw1v6pDRk2hL085ZhoYqL2%2F6JqiWMjDYm5267Fx%2Bb2StmPxLjpx6Jrbhv%0AqQ%3D%3D%0A" alt=""><figcaption></figcaption></figure>
4. Make sure that the **Paste a public key** pair is chosen.<br>

   <figure><img src="/files/J57ClLKYndiRPxUCXdAQ" alt=""><figcaption></figcaption></figure>
5. Click **Download Private Key** and save the key in a local directory.
6. A configuration is displayed. Click on the copy button below the text box and paste it into a local file editor (save for step 5). <br>

   <figure><img src="/files/6Aq000ufe72AweDk1jsF" alt=""><figcaption></figcaption></figure>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The Oracle <a href="https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm#two">documentation</a> offers alternative methods for generating the key. Ensure that you have the complete configuration details as outlined in the following step.</p></div>

### 5. Generate a Public Key from Finout

1. In Finout, navigate to **Settings > Cost Centers** and click **Add cost center**.\
   The **Connect Accounts** window appears.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/25585922/4b5e7a3b349798fd5bf943b4941d/AD_4nXdGWDFdxxLmwDujPD6A0oehRHTPOj9Y9drPM30Fi5F6DqRk_GrU4sdEO9VFnGPqtKGFbMkcHC0B_OQaBJEZTsd4RcaPwOJIM5l1aeEZ2X-Pa1S5VN95N2oXRhyN4x5Qfme71oUdYw?expires=1732627800&#x26;signature=8f85b7d764f840abf0cec93382a4eac3cccb27a070cd9ed8a2b077ca5fc61079&#x26;req=0tBqzV3zrjVk2hL085ZhoXj2%2FgsqWaK0q2sUm17ISIl%2FqBh171RT13I7rnYv%0Ayg%3D%3D%0A" alt=""><figcaption></figcaption></figure>

2. In **Oracle Cloud**, click **Connect Now**.\
   The **Select connection method** appears.<br>

   <figure><img src="/files/VN95ExFaR74DjhXaftRw" alt=""><figcaption></figcaption></figure>

3. Select **Console**.\
   You are brought to the **Connect to OCI** step.

   <figure><img src="/files/BHLzJRtJqFVhFfvBKbSd" alt="" width="563"><figcaption></figcaption></figure>

4. Copy the **Public key** and return to Oracle.

### 6. Obtain the Configuration File Information

<figure><img src="/files/tdZ1K3s2BB0psQNwQ4w9" alt=""><figcaption></figcaption></figure>

1. Click **Add API Key**.

   <figure><img src="/files/yospHNWB6TJH3Ikk3SmW" alt=""><figcaption></figcaption></figure>
2. **Paste the Public key** obtained from Finout in the previous step.
3. A configuration is displayed. Click on the copy button below the text box and paste it into a local file editor (save for the next step).

   <figure><img src="https://finout.intercom-attachments.eu/i/o/14463087/364b94bb9f65435735f3b6c7/AD_4nXcVurWnX6LY3sXBFFdkuCZIxp4fumS-pbIs_wUyjOMY1ufMI0RZKalHeH_BhMIydcmgkB3P3QLSL7kLZvhxhVjbY_VUmDkXuXXw1khQ-rBEbjiNPw4QkgakFPsUSnp9YdHMnj-2q91Mhf07NkLnMgNdFnlA?expires=1725534000&#x26;signature=fbccc4484e4adbf98350d7a8d81c66a4db036723fb761231ffab13e454a49699&#x26;req=0dFrw1v6pDBk2hL085ZhoSw9YXaAlJaJfGVDSH2F5jgznazMJ0gEXhkzUKYz%0AqA%3D%3D%0A" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**: The Oracle [documentation](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm#two) offers alternative methods for generating the key. Ensure that you have the complete configuration details as outlined in the following step.
{% endhint %}

### 7. Integrate Oracle with Finout <a href="#h_bf23787458" id="h_bf23787458"></a>

<figure><img src="/files/LCncd86AO7o9c0KHaM4q" alt="" width="563"><figcaption></figcaption></figure>

1. Back in Finout, fill in the relevant fields from the "Configuration file preview" text box that you copied in the previous step. &#x20;

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Finout generates the key pair for you. Finout securely stores the private key, and you receive the public key, which you can copy and paste into the OCI Console.</p></div>
2. Click **Complete Integration**.\
   The cost center is created.

## CLI-Based Integration

{% hint style="info" %}
**Note**: The CLI script is currently supported on macOS and Linux only. If you are using Windows, please follow the Oracle Console setup instead.
{% endhint %}

### 1. Select Connection Method

1. In Finout, navigate to **Settings > Cost Centers** and click **Add cost center**.\
   The **Connect Accounts** window appears.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/25585922/4b5e7a3b349798fd5bf943b4941d/AD_4nXdGWDFdxxLmwDujPD6A0oehRHTPOj9Y9drPM30Fi5F6DqRk_GrU4sdEO9VFnGPqtKGFbMkcHC0B_OQaBJEZTsd4RcaPwOJIM5l1aeEZ2X-Pa1S5VN95N2oXRhyN4x5Qfme71oUdYw?expires=1732627800&#x26;signature=8f85b7d764f840abf0cec93382a4eac3cccb27a070cd9ed8a2b077ca5fc61079&#x26;req=0tBqzV3zrjVk2hL085ZhoXj2%2FgsqWaK0q2sUm17ISIl%2FqBh171RT13I7rnYv%0Ayg%3D%3D%0A" alt=""><figcaption></figcaption></figure>

2. In **Oracle Cloud**, click **Connect Now**.\
   The **Select connection method** appears.<br>

   <figure><img src="/files/n9I60lt2jREQP7IAFXGc" alt=""><figcaption></figcaption></figure>

3. Click **CLI**.\
   You are brought to the **Set Up CLI Parameters**.

### 2. Install and Authenticate the CLI

1. Install OCI command line as instructed in the [Oracle official docs](https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm). Skip this step if you already have the OCI command line installed.
2. Authenticate. You have two options:
   * Follow the authentication guide in the [Oracle official docs](https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm#configfile).
   * Authenticate using the browser by running `oci session authenticate`\ <br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Before running the authentication command, ensure that any existing OCI configuration files are removed, as they may have been left over from a prior integration run.</p></div>

     1. This will open a browser window in which you will need to authenticate.
     2. Once authentication is complete, you will have a file named `rm -rf ~/.oci/config` containing all the necessary configuration, including a temporary authentication token.
3. Run a small test to see if you are authenticated:
   * oci --auth security\_token iam availability-domain list
4. Choose the domain
   1. Print domains

      ```
      OCI_TENANCY=$(awk -F'=' '/^tenancy/ { gsub(/ /, "", $2); print $2; exit }' ~/.oci/config) && \
        oci iam domain list \
        --compartment-id "$OCI_TENANCY" \
        --all \
        --auth security_token \
        --query 'data[].{name:"display-name", id:id, url:url}' \
        --output table
      ```
   2. Ensure that it looks like:

      ```
      +--------------------------------------------------------------------------------+-------------+----------------------------------------------------------------------------+
      | id                                                                             | name        | url                                                                        |
      +--------------------------------------------------------------------------------+-------------+----------------------------------------------------------------------------+
      | ocid1.domain.oc1..aaaaaaaaxnavpemxabcdabcdabcd7kplabcdzle5pppj6prsdznykjp2urbq | Default     | https://idcs-a1s2d3f4g5c6425398a8ddf963660fbf.identity.oraclecloud.com:443 |
      | ocid1.domain.oc1..aaaaaaaa46euetfik5sqk4zemxabcdabcdabcd7kplafshpmwi2rvhqnztha | asdasd-cost | https://idcs-a1s2d3f4g5924f1995523f8ec5662c67.identity.oraclecloud.com:443 |
      +--------------------------------------------------------------------------------+-------------+----------------------------------------------------------------------------+
      ```
   3. Pick one and use it below as OCI\_DOMAIN\_NAME.
5. A key is generated:
   * The public key will be used as the value in FINOUT\_PUB\_KEY.
   * The private key will be saved when saving the credentials to the cost center to authenticate in the data pipelines.
6. Provide the input details as instructed previously, then run the script provided below.

   Once the execution is complete, please review the results and extract the necessary details from the output, as shown in the example format:<br>

   ```
   -----------------------
   User ID: ocid1.user.oc1..8m3k9p2v7x1w4q5z6n0y8j3t2r9f5k7b4v1m6b8i3k2f8p7r9d0a2v3c
   API Key fingerprint: 3d:f8:12:91:c4:7e:0a:b5:82:39:e1:6f:4a:d0:8c:9b
   Tenancy: ocid1.tenancy.oc1..aaaaaaaalzf62oj3gqksyjc6jiee7na3m7ne7ebvecslrbk6xfhqgrlqbrka
   Region: us-ashburn-1
   -----------------------
   ```
7. Fill the form.

### 3. Set Up CLI Parameters

<div align="left"><figure><img src="/files/nmpVE8seZ8xsDbTekTnE" alt=""><figcaption></figcaption></figure></div>

1. In Finout, review and adjust the CLI parameters below, then run the generated script.
2. Update the editable fields at the top of the script:

   * FINOUT\_USERNAME - ask the user for the name of the user we will create for him.
     * Can only contain: A-Z, a-z, 0-9, hypen(\`-\`), period(\`.\`), underscore(\`\_\`), plus sign (+) and at sign (@)
   * FINOUT\_EMAIL - ask the user for the email for the user we will create for him
     * Make sure it’s a valid email
   * FINOUT\_FIRST\_NAME and FINOUT\_LAST\_NAME - same
   * GROUP - IAM group name they wish to create the use at:
     * Choose a group name, but it must consist of letters, numbers, dots, dashes, and underscores.
   * OCI\_POLICY\_NAME - Policy name they wish to create (this is the one that allows the group to read the OCI usage reports)
   * FINOUT\_PUB\_KEY-
     * Generate a pair of public/private keys, similar to those commands:
       * z - this creates a private key file
       * openssl rsa -pubout -in finout\_user\_private.pem -out finout\_user\_public.pem - this extracts the public key from the private key file.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Group names may contain only letters, numbers, dots (.), dashes (-), and underscores (_).</p></div>
3. Copy the generated script. Run this script in your terminal to set up the OCI integration.&#x20;
4. Click **Next**.

### 4. Run the Script in the CLI

1. Copy and run the script below into a file called oci-setup.sh (this contains your own specific one-time public key in the script):\
   `chmod +x oci-setup.sh`\
   `./oci-setup.sh`\
   \ <br>

This option uses a single CLI script to automatically create all required OCI resources, reducing setup time and minimizing configuration errors.

**What the script does:**

* Creates or reuses an IAM group
* Creates or reuses a read-only IAM policy for cost and usage reports
* Creates or reuses an IAM user in the selected identity domain
* Adds the user to the group
* Uploads the public API key provided by Finout
* Outputs all required identifiers for Finout

{% hint style="info" %}
**Note**: If resources already exist, they will be reused. If not, they will be created.
{% endhint %}

2. Copy the following values from the CLI script:

* User ID
* API Key Fingerprint
* Tenancy
* Region

### 5. Connect to OCI

<div align="left"><figure><img src="/files/M5mVVXvHHUZ0DwuHF8Xf" alt=""><figcaption></figcaption></figure></div>

1. Back in Finout, fill in the values from the CLI.
2. Click **Complete Integration**.\
   The integration is completed.


# Connect to GCP

## GCP Integration Overview

Connecting Google Cloud Platform (GCP) to Finout enables seamless tracking and monitoring of your cloud expenses. By integrating GCP, Finout provides detailed insights into your usage, allowing you to visualize costs, optimize spending, and manage budgets across your GCP resources. The connection process involves securely linking your GCP billing account to Finout for real-time cost analysis.

**GCP Configuration Workflow:**

1. [Billing Export from GCP](#h_f20fd69ab4)
2. [Granting Finout Access to GCP](#h_3d95d5002b)
3. [Connect GCP to Finout](#id-3.-connect-gcp-to-finout)

## 1. Billing Export from GCP <a href="#h_f20fd69ab4" id="h_f20fd69ab4"></a>

{% hint style="warning" %}
**Important**: Skip this step if GCP detailed billing has already been activated.
{% endhint %}

1. Log in to your Google Cloud account and select **Billing**.<br>

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277354/f15820f081062ea191c9f024/nEDGgsVcdjGSnjdh1JQZ_8jxhxxgJSP9xOe0AMkEG6EH38d5eiyG9fY7JTLkqY9e3Yi0KrI7htFaP2CKtrl-wI7Ipa0JP_Dlf-ITvRQkrqotmxOPhusTOmmmZXnQMI-HOIzV9WkAoQ6pV10YNceCATA?expires=1725536700&#x26;signature=da7756818f2305facab4fcbac48006231f8947f287183e161a501e08df398337&#x26;req=1tdowlv%2FqHsp0xr0v9tnpOyz2ggOioYeKrZUiVyYKLLt5fBUnc7Mj%2BvrVcgo%0A" alt="" width="563"><figcaption></figcaption></figure></div>

   <div align="left"><figure><img src="/files/H73tAf0Cw4bmoIUcE0Km" alt=""><figcaption></figcaption></figure></div>
2. Choose **Billing export**.

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277355/0eace4c5abe6a77dd733ef2a/G4w-JXgJSHPLUvfZI9Doz6LKJxxgK5m8jOERUBbRHW0HyfpX_ueyK8wlOnD59YKhklElFvAsvglBiUpaUt3xdh6nIgIVS4j4bXBpQC9IwpaUdRz8YBmw6ajKq5OZAd7iVHDP3GrE-nzeW5JcRkXEgQQ?expires=1725536700&#x26;signature=e2dd2c19afa934f7be4956143a0379b61ba6dc7ee0594ea63fe7a6cab41d5fbe&#x26;req=1tdowlv%2FqXsp0xr0v9tnpGux%2B%2FzyONVMxQu1tmCSO6UoXSuo96OHrXVOuQqL%0A" alt="" width="563"><figcaption></figcaption></figure></div>
3. Make sure that the **Detailed usage cost** is enabled.

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277356/3360bc1ca1339aaa19f858f3/KPUnrNz1O0-HxH631yCFXnSI49ocTRq3kwI3X609C5UuuhIxNwxhAPVB9MsKK9zXhuo6vg4edhuMIrrF9kF9iYNdXbnuqrvHi29vGK_35hNcSy_Fjs-ksdwC3W9WxVeE7sDjWLHPL-wCjQpFn9pvGUo?expires=1725536700&#x26;signature=a47a553b5bf0c3ff68686e91518fba6e578458387126e865f5f561080669870e&#x26;req=1tdowlv%2Fqnsp0xr0v9tnpIjW0qgAxqI68g06D%2FjwhVZZEXNVE4TZeeB45u%2Bf%0A" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Note**: Enabling Detailed usage cost is a one-time action for the entire billing account. This setting applies to all projects under the billing account, so there is no need to enable it individually for each project.
{% endhint %}

## 2. Granting Finout Access to GCP <a href="#h_3d95d5002b" id="h_3d95d5002b"></a>

To connect GCP, Finout requires minimal permission to BigQuery in the project that is tied to your billing. To identify that project, check your billing page to see the connected project.

Perform the following steps after selecting the correct project:<br>

<figure><img src="/files/GShZ2QyJxX7BDsTXYuuf" alt=""><figcaption></figcaption></figure>

1. In **Service Accounts**, click **Create service account.**

<div align="left"><figure><img src="/files/H83JY4kjxljFCLW2duu3" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277357/5fd55f40cbf97b526a8c0bd7/lb9t5QCLwvbPEbXuhravXQf9NHQNk29M7fRz8gbfSK1fQWsp_XAIYVkVXlNE7xAGCiUG6Hk36zgVwhYJCmJE6wHWQjTyd7E89lwAj-amKLr889UTMZFUBBEpcyAROBhp_J8wyJc5NZakGU16p26qVMM?expires=1725536700&#x26;signature=e680cf7b068a56605c858c079bc96092ca1e8b2dc41555931ccf34495fd7e874&#x26;req=1tdowlv%2Fq3sp0xr0v9tnpBjdZz6ssiaT5eCsPQ7CZQHfn%2FIwmFuAcGOEanG7%0A" alt="" width="563"><figcaption></figcaption></figure></div>

1. Configure these three roles:

   `BigQuery Data Viewer BigQuery Job User BigQuery Read Session User`

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277358/9da88f59c6b4f866f21a9e6a/iEWD41eFQ8_RfW1S3AjO1AsR7hvWRZMDYoQkxUJetVDDUBIaO42y_x8M1cGH0oWBsaq8BLpdtySuLzjOGNgZeHVEvQG9FTmIP65vqqwvop9oneOSVBhB2XLfCOZTMHKRmFLx7YTOZaPVGI95nRVlK5M?expires=1725536700&#x26;signature=d23d7e7ff0f2847d3c870400d870f79bd4962fb42f86525a286efc61b77602d3&#x26;req=1tdowlv%2FpHsp0xr0v9tnpI26Q3LF%2FLOFK7rBhsemadlk7q3bkf8njIHA6GkZ%0A" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Note**: Every role assigned to Finout’s service account by the customer can be restricted to a specific project, dataset, table, or other resource, ensuring access is limited to only the necessary tables.\
\
**To add a specific condition to a role:**\
1\. Click **Add condition**.\
The condition builder appears.\
2\. Choose a **key name**.\
3\. Apply the following format to the table for which you want to grant permissions:\
`projects/<project-id>/datasets/<dataset-id>/tables/<table-id>`\
For all format types, see [GCP documentation](https://cloud.google.com/iam/docs/conditions-resource-attributes?_gl=1*debr52*_ga*MTgwMzUzOTQyNi4xNzM4MjQ1OTk3*_ga_WH2QY8WWF5*MTczODc2NzUwMy44LjEuMTczODc2NzgyNy40OC4wLjA.#resource-name).
{% endhint %}

3. Leave section 3 blank and click **Done**.
4. Back in the menu, click the **Keys** tab.

   <figure><img src="/files/ZrpMrN3taFnfQbvU9yts" alt=""><figcaption></figcaption></figure>

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277359/f94aa94a398678be0effe674/PRJJjn2bAiEyuU2IapdEbSk727iDBYaGBB7ofDbsiv5IosILzRHP3Em1yQpda1EEU89qOnl6ErKFNfJ_mYxg3fOwOQmZDMU1zc-nrqvUJ3BJcfmO2C5CQYXqXiUfZX9kmzb6EI1NfFTyibOS1xVymxM?expires=1725536700&#x26;signature=93b72e4f470c23f80af0a72c0c47f951cf5cd4315605460c507ff943856e7ddd&#x26;req=1tdowlv%2FpXsp0xr0v9tnpCoxN5Z%2F%2FDwuL4ruyUAxd83n%2B2QNqYH7B2CmpUgS%0A" alt="" width="563"><figcaption></figcaption></figure></div>
5. Click **Add Key** and then **Create New Key**.<br>

   <figure><img src="/files/5kV96DOjk1uMJRqIYppu" alt=""><figcaption></figcaption></figure>
6. Select JSON and click **Create**.\
   The private key is created.

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277360/db08c8e84a7fd386e638fa93/Bexdfecav_iVsCb5cFR0hRVAAInPbNOsNm-CLhmvKJ3nZ5PU5zy8KZ5yvtIL1O-_Gz26-YHSFT8PlYFuOi5LP9YI0q8mFMrKpwWQfxP1Oq-r1tJdYhtYoMvAO56Eigv5oUbD5aHDVAQY2hQ7Z8pOPnc?expires=1725536700&#x26;signature=6dbd3a5394b1a5259f8876b862ce644addccb03170a985dc91235d4abeed5722&#x26;req=1tdowlv8rHsp0xr0v9tnpJGdGna5Gek%2FUDRl0%2FB4U9f0C6ow3%2F6133mBjfjo%0A" alt="" width="563"><figcaption></figcaption></figure></div>

   <figure><img src="/files/MxvVROGuXLY3K5ImNylj" alt=""><figcaption></figcaption></figure>

### (Optional) Surface the Billing Account Name

By default, Finout identifies your GCP billing accounts by their **Billing Account ID** — a non-human-readable identifier such as `012345-67890A-BCDEF0`. If you manage more than one billing account, you can grant Finout one additional read-only role so the human-readable **Billing Account Name** is available as a filter and group-by dimension alongside the ID.

You can do this during your initial GCP setup, or add it later to a GCP cost center that's already connected — the steps are identical.

This step is optional:

* **If you grant it**, the Billing Account Name becomes available as a filter and group-by dimension in your GCP cost data.
* **If you skip it**, GCP onboarding works exactly the same — you continue to see the Billing Account ID, you just won't see the name.

{% hint style="info" %}
**Note**: The Billing Account Name is read from GCP's Cloud Billing API, not the BigQuery billing export. The export does not include the display name, so this role is the only way for Finout to read it.&#x20;
{% endhint %}

The Billing Account Name is read using the **Billing Account Viewer** role (`roles/billing.viewer`). The three BigQuery roles above are granted on the **project** tied to your billing; this role is added to the **same Finout service account** one level up, at the **organization** scope. You don't need a new key or a new service account — you add the role to the principal you already created.

To enable it:

1. In the Google Cloud console, go to **IAM & Admin**.

<figure><img src="/files/YBhqrbv2Yno04ms6AUzr" alt=""><figcaption></figcaption></figure>

2. Using the resource selector at the top left, switch the scope to your **Organization**.
3. Locate the **Finout service account** (shown as a `…iam.gserviceaccount.com` principal in the list) and click **Edit principal**.
4. Click **Add another role**.
5. Select the **Billing Account Viewer** role (`roles/billing.viewer`).

<figure><img src="/files/KDlEu18tPAdH9VmBAcAE" alt=""><figcaption></figcaption></figure>

6. Click **Save**.

Once granted, the **Billing Account Name** becomes available as a filter and group-by dimension in your GCP cost data on the next data refresh.

## 3. Connect GCP to Finout

1. Navigate to **Settings > Cost Centers** and click **Add cost center**.\
   The **Connect Accounts** window appears.<br>

   <figure><img src="/files/J4oQI7hfWLxyd65llVJ9" alt=""><figcaption></figcaption></figure>
2. Under GCP click Connect Now.<br>

   <div align="left"><figure><img src="/files/kd6ldneu9tkDWdKR2dEx" alt=""><figcaption></figcaption></figure></div>
3. Enter a **Cost Center Name** and add the **JSON key** and click **Next.**\
   You are brought to the **Select billing export dataset** ste&#x70;**.**<br>

   <figure><img src="/files/ZrYlPJfNa4Ku25A5gJK5" alt=""><figcaption></figcaption></figure>
4. Select an **Export Dataset**, **Export Table**, and then click **Complete Integration**.\
   The Integration is completed&#x20;

## GCP Credit Types

GCP credit types enable users to categorize and display different types of credits. This addition, which includes the ability to group and filter GCP credit types and show original costs, is an effective tool for cloud expense management. It aims to deliver clarity and ease in financial analysis, empowering users with a more transparent view of their GCP billing and spending patterns.

This feature allows users to easily identify and analyze different types of GCP credits impacting their costs. It simplifies understanding how these credits play a role in overall expense management.

**Common GCP credit types**

* Sustained use discounts: For continuous resource usage.
* Committed use discounts: For consistent resource usage over time.
* Free tier usage: Covering costs under the GCP Free Tier.
* Promotional credits: Offered during promotions or special events.
* Research credits: Provided for academic or research-related purposes.

**Cost without Credits:** \
When no credits are applied to a cost, the **Credit Types** field displays **Cost Without Credits**, a Finout-calculated value representing the **original cost before any credits are applied**. \
This distinction ensures clarity in cost analysis by helping you separate discounted from non-discounted expenses. By showing the original cost before credits, Finout allows you to understand your true usage spend without the influence of promotions or discounts, giving you a more accurate view of overall spending and credit effectiveness.

{% hint style="info" %}
**Note**: Currently, the Cost without credits metric also **includes CUD (Committed Use Discounts).**
{% endhint %}

* **Key feature functionalities:**
  * Grouping by Credit Types: Offers an aggregated view of how different credits influence your total cloud expenses.
  * Filtering by Credit Types: Allows for targeted analysis of specific credit types, offering deeper financial insights.

{% hint style="info" %}
**Note**: As of **August 15th, 2025**, this field (Cost without Credits) includes the newly introduced **GCP Committed Use Discount (CUD) credits**.
{% endhint %}

## FAQs

**How can I grant Finout access to my GCP billing table through a custom project instead of the primary project?**

This setup is not available through the app’s onboarding process. If you need Finout to access your billing table through a custom project for security reasons, contact Finout support at [**support@finout.io**](mailto:support@finout.io) and provide the following details:

* **Project Name**
* **Dataset**
* **GCP Table**

{% hint style="info" %}
**Note:** Ensure the table includes the full Google billing table structure, including the partitioned time column.
{% endhint %}


# Observability Platforms

Observability platforms help you monitor, troubleshoot, and analyze your systems by collecting metrics, logs, and traces.

In Finout, integrations with observability platforms allow you to allocate and analyze costs based on usage signals such as hosts, containers, or custom metrics. This helps you understand how infrastructure and application behavior drive costs.

The following Observability Platforms can be integrated with Finout:

* [Datadog](/billing-integrations/observability-platforms/connect-to-datadog)


# Connect to Grafana

## Overview

Finout's Grafana Cloud integration ingests cost and usage data via Grafana's FOCUS-standardized API, and makes it available in MegaBill alongside your other cloud and SaaS services, for a unified view.

With this integration, you can:

* Connect one or more Grafana Cloud organizations
* Break down costs by service (Metrics, Logs, Traces, Profiles, and more), service category and resource name.&#x20;
* Include Grafana Cloud cost and usage data in custom dashboards, set up alerts to track anomalies, and incorporate it into your financial plans

{% hint style="info" %}
Finout uses read-only access to the Grafana Cloud FOCUS API. It does not perform actions that can create, modify, or incur costs.
{% endhint %}

### Before you start

Connecting Grafana Cloud requires a Cloud Access Policy token scoped to `org-billing-focus:read`.

{% hint style="success" %}
**Prerequisite:** You must have the **Admin** role within the Grafana Cloud Portal to create an access policy and token at the organization level.
{% endhint %}

### Generate a Grafana API token

1. Sign in to Grafana Cloud and select your organization from the drop-down at the top of the page.
2. Locate **Security** in the left-hand navigation and select **Access Policies**.
3. Select **Create access policy**.
4. Enter a **Display Name** for the access policy.
5. From the **Realm** drop-down, select your organization (so the policy applies across all stacks).
6. Under **Scopes**, select **org-billing-focus:read**.
7. Select **Create** to add the access policy.
8. Choose the access policy you just created, then select **Add token** to open the **Create new token** dialog.
9. Enter a **Display name** for the token, and optionally an expiration date.
10. Select **Create**, then **Copy to clipboard** to copy the generated token — you'll need it in Finout in the next step.

{% hint style="info" %}
The token is only shown once. Copy and save it in a safe place before continuing.
{% endhint %}

### 2. Integrate Grafana Cloud with Finout

1. In Finout, navigate to **Settings > Cost Centers**.
2. Under **Grafana Cloud**, click **Connect**.

<figure><img src="/files/ubf82XkBMkfbufuWCucG" alt=""><figcaption></figcaption></figure>

3. Fill in the following fields:
   1. **Cost Center Name** — pre-filled with "Grafana Cloud"; you can edit this if you'd like a different display name.
   2. **Grafana Org Name** — your Grafana org slug (for example, `mycompany`), found in your Grafana Cloud URL.
   3. **Grafana API Token** — the token generated in step 1.
4. Click **Complete Setup**.

Finout validates the connection immediately by querying Grafana API with the values you entered. If the token or org name is invalid, or the token doesn't have the `org-billing-focus:read` scope, you'll see an error before the Cost Center is created.

<figure><img src="/files/8FfMzUmU3gOb39lvQ3wI" alt=""><figcaption></figcaption></figure>

Your Cost Center is created, and data becomes available in Finout within 24 hours.&#x20;

### FAQ

**How far back can Finout backfill Grafana Cloud cost data?**

Up to 60 days upon setup. Grafana’s FOCUS API provides a fixed trailing 60-day window of cost data and does not support backfilling beyond that timeframe.


# Connect to Datadog

## Datadog Overview

With Finout's seamless Datadog integration, gain precise cost and usage visibility and monitor expenses daily. Conveniently view your Datadog spend alongside other providers, facilitating easy cost allocation for teams, applications, and environments. Utilize Finout's comprehensive cost governance suite for anomaly detection, budget enforcement, and accurate bill forecasting. The Datadog integration in Finout is based on Usage Attribution Tags (UAT), which enhances the visibility and granularity of Datadog cost and usage data in Finout, providing deeper insights and better control. See [Usage Attribution Tags (UAT) documentation](/billing-integrations/observability-platforms/connect-to-datadog/datadog-usage-attribution-tags-uat) for more information.

### **Integration Types:** UAT (Default) and Custom Tags

Finout supports two types of Datadog integrations based on account configuration: [**UAT Integration (Default)**](/billing-integrations/observability-platforms/connect-to-datadog/datadog-usage-attribution-tags-uat) and **Custom Tags Integration**. These integrations differ in how they retrieve and break down data, leading to functional differences. **UAT Integration** brings both cost and usage data into Finout, allowing for detailed breakdowns using **Usage Attribution Tags (UATs)**, Datadog organizations, and regions. This method ensures accurate and consistent data tagging across all Finout features while supporting multiple Datadog products, making it the preferred integration. **Custom Tags Integration**, on the other hand, retrieves only cost data and relies on user-defined custom tags. These tags may vary across different Datadog products, leading to potential inconsistencies in cost breakdowns. UAT is the default integration method, offering more usage data, data breakdown for multiple products, and accurate and consistent data tagging across all Finout features.

{% hint style="info" %}
**Note:** Currently, the default integration is Custom Tags. However, for new accounts created since April 2025, the default state is [UAT-based integration](/billing-integrations/observability-platforms/connect-to-datadog/datadog-usage-attribution-tags-uat). For accounts older than that, the default remains Custom Tags, and they should contact Finout support at <support@finout.io> to transition to UAT-based integration.
{% endhint %}

## **Datadog Integration** <a href="#h_4e104f0fbc" id="h_4e104f0fbc"></a>

To set up the Datadog integration, you first create an API key and an application key in your Datadog account to establish secure access. Then, in the Finout console, enter these keys to connect Datadog with Finout. Once integrated, Finout syncs usage and cost data, offering detailed cost breakdowns, resource categorization, and actionable insights.

{% hint style="success" %}
**Prerequisites:**&#x20;

* The UAT feature is available only for Enterprise/Pro accounts in Datadog; If your Datadog account doesn't support it, you will be limited to using the Custom Tags integration in Finout.
* Ensure that your data is tagged using UAT at the parent organization level in Datadog.\
  \
  **Note**: If you are unsure how to verify these, please contact Finout support at <support@finout.io> for further assistance.
  {% endhint %}

### **1. Create an API Key** <a href="#h_4e104f0fbc" id="h_4e104f0fbc"></a>

1. Log into your Datadog account.<br>

   <figure><img src="/files/8AOoatczq2baQjAkA9It" alt=""><figcaption></figcaption></figure>
2. Hover over your Datadog user and select **Organization Settings.**\
   The **Organization Settings** view appears.<br>

   <figure><img src="/files/vEw9rbogQy4Qnjm61H0w" alt=""><figcaption></figcaption></figure>
3. Click **API Keys**.\
   The **New API Key** pop-up appears.<br>

   <figure><img src="/files/ESXKk9hEms4WjgMIZgAx" alt=""><figcaption></figcaption></figure>
4. Enter an API key name and click **Create Key**.<br>

   <figure><img src="/files/tBEeM4F05fBjw7MW5ZaW" alt=""><figcaption></figcaption></figure>
5. Copy the new API key, save it for later (step 3), and click **Finish**.

### **2. Create an Application Key** <a href="#h_1589c03d0d" id="h_1589c03d0d"></a>

<figure><img src="/files/RpRAs1FLE4hCnAqXiTTY" alt=""><figcaption></figcaption></figure>

1. In your Datadog account, hover over your Datadog user and select **Organization Settings.**<br>

   <figure><img src="/files/glcfTaREQUsOhbjQaNyh" alt=""><figcaption></figcaption></figure>
2. Choose **Application Keys.**<br>

   <figure><img src="/files/wNT4HwcYEyLLx6F5Rtct" alt=""><figcaption></figcaption></figure>
3. Enter an API key name and click **Create Key**.<br>

   <figure><img src="/files/24NC0MFE6xTErFAQGNOi" alt=""><figcaption></figcaption></figure>
4. The default configuration is a non-scoped app key. \
   To scope the API key, click **Edit** under the scope section.\
   The **Edit Key Scope** appears.<br>

   <figure><img src="/files/xsIlJYePLEjrfQrmRxW1" alt=""><figcaption></figcaption></figure>
5. Choose the relevant scopes according to [this table](/billing-integrations/observability-platforms/connect-to-datadog/datadog-integration-levels) and click **Save**.<br>

   <figure><img src="/files/WKn255beo81QJmFxdtnk" alt=""><figcaption></figcaption></figure>
6. Copy the new App key and save it for later (step 3).

### 3. Finout Console Integration <a href="#h_e9a4eded92" id="h_e9a4eded92"></a>

1. In Finout, navigate to **Settings**.<br>

   <figure><img src="/files/JzKv6QVTvr2Sr4Jvu16t" alt=""><figcaption></figcaption></figure>

2. Click **Cost Centers.**\
   You are brought to the cost centers page.<br>

   <figure><img src="/files/zQ3lnb9b7TCMmmrZTv1Z" alt=""><figcaption></figcaption></figure>

3. Click **Add cost center**.\
   The **Connect Accounts** popup appears.\ <br>

   <figure><img src="/files/VObbRxZJdG6lDEpxt7PB" alt=""><figcaption></figcaption></figure>

4. Find Datadog and click **Connect Now**.\
   The **Datadog integration** popup window appears.<br>

   <div align="left"><figure><img src="/files/iSKdSOANJ3uwbkK1hxgQ" alt=""><figcaption></figcaption></figure></div>

5. Add a **Cost Center Name.**

6. **Select the integration type:**
   * **Cost Center:** Continue with this integration flow.
   * **Kubernetes metrics + Cost Center:** Follow the instructions in [DataDog Kubernetes Integration](https://docs.finout.io/billing-integrations/observability-platforms/pages/gL5fLllKfYrxbKg9vwme#id-3.-create-the-datadog-kubernetes-cost-center-in-finout) to continue with this choice.

7. **Select the Datadog account type: Enterprise or Non-Enterprise (Free/Pro).**\
   &#x20;This selection determines the integration method:
   * **Enterprise/Pro accounts** use [**UAT** integration](/billing-integrations/observability-platforms/connect-to-datadog/datadog-usage-attribution-tags-uat) (default method).
   * **Free accounts** use **Custom Tags** integration.

     <figure><img src="/files/nIaLZFaExmq0eAtoLc2c" alt=""><figcaption></figcaption></figure>

8. Add the API key and APP key (created in steps 1 and 2) and click **Next**.\
   The cost center is created, and your Datadog billing data will be available in the next 48 hours.

## Limitations

### Integration Limitations

* **Single Integration Type:** Finout supports a single DataDog integration method per account.
* **Impact of Transitioning to UAT:** Migrating from Custom Tags to UAT Integration might break certain application features that rely on the existing Datadog data. Affected features may include:
  * Saved Views
  * Widgets
  * Virtual Tags
  * Reallocations
  * Anomalies
  * Datadog Scans
  * Data Explorer Queries
* **No Support for Unique Sub-Organization Tags:** Finout allows data break down based on the parent organization UATs. When the sub-organizations tags are different, their data will be allocated under "N/A" when grouping/filtering by the parent's UATs.

### Historical Data Limitations

* **New Cost Centers Limitation**: The Datadog Cost API only provides daily data for the most recent 60 days. This means new cost centers cannot be back-filled with historical data beyond two months at daily granularity. This is relevant regardless of the integration method.
* **Existing Cost Centers - No Limitation**: Accounts with an **existing Datadog cost center** can access historical data beyond the standard 60-day window, as Finout retains accumulated daily-level data over time. If Custom Tags were previously used, this historical data can also be reprocessed and migrated—for example, to populate a UAT environment.

## FAQs

* **How do Usage Attribution Tags (UATs) work in Finout?**\
  \
  [Usage Attribution Tags (UATs)](/billing-integrations/observability-platforms/connect-to-datadog/datadog-usage-attribution-tags-uat) in Datadog enables cost and usage breakdown by parent account's UATs, organizations (including sub-organizations), and regions. Finout retrieves tags based on the **parent organization** and categorizes costs accordingly.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The UAT feature is available only for Enterprise/Pro accounts in DataDog; If your DataDog account doesn't support it, you will be limited to use the Custom Tags integration in Finout. If you are unsure how to verify that, please contact Finout support at support@finout.io for further assistance.</p></div>

* **What happens to my sub-organization tags?**<br>

  If sub-organizations use the same tags as the parent organization, their data can also be broken down using these tags.

* **What if sub-organization Tags differ from the Parent organization?**\
  \
  Finout allows presentation and data breakdown only based on the parent organization's tags. Data using different tags will appear as "N/A" when filtering/grouping by the parent’s tags. Breakdown by sub-organization tags is not yet supported.

* **Which Datadog API endpoint does Finout use to retrieve UAT data?**\
  \
  Finout retrieves UAT cost and usage data from Datadog using the [**Hourly Usage Metering API**](https://docs.datadoghq.com/api/latest/usage-metering/#get-hourly-usage-attribution), specifically the following endpoint: <https://api.datadoghq.com/api/v1/usage/hourly-attribution>.

* **What are the key differences between UAT and Custom Tag's integrations?**\
  \
  Finout has two integration methods with Datadog: **UAT** (Default) and **Custom Tags. They** differ in how they retrieve and break down data. UAT Integration provides both cost and usage data with standardized tagging across multiple Datadog products. At the same time, Custom Tags Integration retrieves only cost data, relying on user-defined tags that may vary across products. the main differences between the integration types are:\
  \
  **Current Datadog Integration (Custom Tags)**

  The existing integration relies on **Custom Tags**, which are not Datadog’s native cost allocation method. This approach comes with several limitations:

  * **Missing Usage Data** – Only cost data is fetched, with no support for usage data.
  * **Limited Product Support** – Tag-based cost breakdown is available only for Timeseries and Indexed Logs, while cost data is fetched for all Datadog products.
  * **Estimated Cost Allocation** – Since Custom Tags are not Datadog’s standard method, Finout applies manipulations that may lead to potential inaccuracies.
  * **Inconsistent Tagging Across Products** – Custom Tags vary between Datadog organizations, causing inconsistencies in cost breakdowns across different products.

  \
  **UAT Integration (Usage Attribution Tags - Default)**

  The [UAT integration](/billing-integrations/observability-platforms/connect-to-datadog/datadog-usage-attribution-tags-uat) ensures consistency in cost and usage data by leveraging Usage Attribution Tags (UATs) that remain uniform across all supported products. Additionally, it supports a broader range of Datadog products, making it a more robust and comprehensive solution for accurate and effective cost allocation.\
  UATs provide a **native** and **unified** way to break down cost and usage data in Datadog. Key benefits and considerations include:

  * **Datadog Usage**: Supports the fetching, presentation, and breakdown by tags of Datadogs usage data.
  * **More Datadog Products**: Supports cost and usage breakdown by tags for more Datadog products (38 vs. 2 in the old integration).
  * **Accurate Cost and Usage Allocation**: UAT directly leverages Datadog's cost and usage allocation by tags, eliminating the need for Finout’s previous estimation methods, and leading to more accurate and reliable cost distribution.
  * **Additional Breakdown Features**: In addition to UATs, we are able to breakdown the data based on organizations and regions.
  * **Detailed & Consistent Cost Breakdown**: UAT provides standardized cost and usage insights across organizations, sub-organizations, and regions, unlike custom tags that vary by product.<br>

* **How can I use UAT in Finout?**\
  See [Usage Attribution Tags (UAT)](/billing-integrations/observability-platforms/connect-to-datadog/datadog-usage-attribution-tags-uat) for more details.<br>

* **Who has UAT Integration in Finout?** \
  \
  Currently, the default integration is Custom Tags. However, for new accounts created since April 2025, the default state is [UAT-based integration](/billing-integrations/observability-platforms/connect-to-datadog/datadog-usage-attribution-tags-uat). For accounts older than that, the default remains Custom Tags, and they should contact Finout support at <support@finout.io> to transition to UAT-based integration.<br>

* **What should I do to transition to the UAT-based integration?**&#x20;
  * **If you currently have Datadog integration that uses Custom Tags**: \
    No integration configuration changes are required once the UAT feature is enabled. \
    The transition might affect the following features:

    * Saved Views
    * Widgets
    * Virtual Tags
    * Reallocations
    * Anomalies
    * Datadog Scans
    * Data Explorer Queries<br>

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>:  Contact support support@finout.io to get the list of the affected features within your account.</p></div>
  * **If you never integrated Datadog with your account before**:\
    If you have never integrated Datadog with your account before, contact support at <support@finout.io> to enable the feature before proceeding with the integration configuration steps.<br>

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>:  The required migration might affect and break your current objects.</p></div>

* **Is any action required if an account was previously configured with the Custom Tags integration and UAT integration has been activated?**\
  \
  You do not need to take any action because the integration configuration remains the same.<br>

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Transitioning to UAT-based integration might require migration of the application features currently using Custom Tags data</p></div>

* **Can I use different integration types across multiple cost centers in my account?** \
  No. Finout supports only one Datadog integration method per account. You cannot mix Custom Tags and UAT integration methods across different cost centers within the same account, as both methods interact with the same Datadog Cost API, which would result in data duplication.

* **Are there any limitations on historical data backfill?**
  * **New Datadog Cost Centers**: The Datadog Cost API only provides daily data for the most recent 60 days. This means new cost centers cannot be back-filled with historical data beyond two months at daily granularity. This is relevant regardless of the integration method.
  * **Existing Datadog Cost Centers**: Accounts with an **existing Datadog cost center** can access historical data beyond the standard 60-day window, as Finout retains accumulated daily-level data over time. If Custom Tags were previously used, this historical data can also be reprocessed and migrated—for example, to populate a UAT environment.


# Datadog API Cost Calculation

Finout offers a structured breakdown of Datadog costs by Datadog products and additional tags using an [estimated cost summary API](https://docs.datadoghq.com/account_management/plan_and_usage/cost_details/) for a detailed product cost breakdown. Each day, the API reports the total cost accumulated so far in the month. For example, on the 3rd of the month, the data reflects the total for the 1st, 2nd, and 3rd days combined. To isolate the cost for just the 3rd, we subtract the cumulative cost up to the 2nd from that of the 3rd. This difference gives us the specific cost for the 2nd day.

## On-Demand vs. Commitment Costs <a href="#h_8176c02208" id="h_8176c02208"></a>

### Datadog on-demand costs <a href="#h_55c5daa7d9" id="h_55c5daa7d9"></a>

These represent pay-as-you-go expenses, accruing and displaying on the relevant days when on-demand usage occurs.

### Datadog commitment costs <a href="#h_50bc444216" id="h_50bc444216"></a>

Commitment costs are usually displayed on the 1st of every month, while on-demand costs will be presented on the day they occur.

Commitment costs can be categorized into different models:

* Usage-based- In this model, your commitment costs are based on a predetermined “bank” of usage. Once you run out of your usage, on-demand charges kick in.
* Host/ Hourly commitment- An hourly commitment is set, beyond which on-demand rates are applicable.

## Finout’s Model for Commitment Costs Across the Month <a href="#h_7d8867512a" id="h_7d8867512a"></a>

### API Cost (“Unblended Costs”) <a href="#h_6952293c32" id="h_6952293c32"></a>

Unblended costs represent the expenses as received from Datadog. In the case of commitments, these are shown on the 1st of the month, while on-demand costs are displayed on the relevant day of usage.

### “Amortized” Costs <a href="#h_81276fc4cf" id="h_81276fc4cf"></a>

Finout uses the [usage API](https://docs.datadoghq.com/api/latest/usage-metering/) to divide these costs across all days of the month to spread out the commitment cost throughout the month.

* Usage-based- Finout’s algorithm calculates daily costs based on usage, adapting the rate based on historical and current monthly data. Since the discounted rate isn't reflected in the API and may vary, Finout's dynamic adjustment, leveraging the data received through the APIs, ensures the most current and precise cost representation.

  <div align="left"><figure><img src="/files/WFaKoutepWPb90nGyhHR" alt=""><figcaption></figcaption></figure></div>

  <figure><img src="https://finout.intercom-attachments.eu/i/o/8842538/5d19bfb85a5a0c59970ba3dc/kcKxZvaIgI-pmNvUEKj2qOf2V3xFwL2yOttKbwLHhu4C8BSGE3L7f8wiL4oXyvKU0J6LCMIgGdL1eRHJAqLVzp24OuaeT_GRAPbJ0bKmwh8OUfIgYOwUGnaquTFKDprOg2Wc7hL-OayFVKCqZrLGiNY?expires=1725881400&#x26;signature=2f6d4403d7364ad5720a46a4985de8506fcf750841e78f79f3326b0d317e7f9c&#x26;req=2N1rx135pHsp0xr0v9tnpHEk%2FjXpfFNH2mYtmAfyulv5m5dcFhAycG5cbTkw%0A" alt=""><figcaption></figcaption></figure>
* Host- The commitment is evenly divided across the month's total hours, ensuring a consistent and understandable cost breakdown.

  <div align="left"><figure><img src="/files/maE2V30CQbTGBhRawBOK" alt=""><figcaption></figcaption></figure></div>

  <figure><img src="https://finout.intercom-attachments.eu/i/o/8842539/f0f368172111ed69facf3cfd/gKTiIjDyGo2G2Hgt3haNaGtiWALkgYccYnrCesT7Dgt28bntXyCTxKzglNQO8DBWNwRodSoMax9Edt1_iuPbprZAJBLfvxnO1Zzo89XOcjWflP-TsuKg7b2WENRSbDVU01Eh9QC4WJy4ch-40kAJqiE?expires=1725881400&#x26;signature=46574ec48cfaca9f812044e030a183715c4b822796a56fd88b9d5254a720a607&#x26;req=2N1rx135pXsp0xr0v9tnpJVfn0n47yZXGOze0fp5Zq7jEF6ZQg5UUx9ZVqrh%0A" alt=""><figcaption></figcaption></figure>

### Reasoning for Infra host, APM hosts, and Timeseries cost spikes on the 1st of the month <a href="#h_a45345ee32" id="h_a45345ee32"></a>

1. Infra host, APM host products-[ The monthly cost is updated daily based on the top 99th](https://docs.datadoghq.com/account_management/plan_and_usage/cost_details/) percentile of usage, with the final cost confirmed on the last day of the month.

   Datadog tracks hourly host counts for Infrastructure and APM [billing](https://docs.datadoghq.com/account_management/billing/), with end-of-month billing based on the 99th percentile usage. The billable host count is calculated using the highest count in the lower 99% of usage hours, excluding the top 1%, to mitigate the impact of usage spikes.
2. Timeseries (custom metrics)- The billable count for custom metrics is determined by averaging the number of custom metric hours over the month. Your monthly billable count for custom metrics (reflected on the Usage page) is calculated by taking the total of all distinct custom metrics recorded each hour throughout the month and dividing this month’s cumulative hours to receive a monthly average value.


# Datadog Integration Levels

Finout connects to Datadog using [API and Application keys](/billing-integrations/observability-platforms/connect-to-datadog#h_4e104f0fbc) generated in your Datadog account.

During setup, Datadog will require you to select the permission scopes granted to the Application key. These scopes determine what data Finout can access and, therefore, which Finout features can be enabled.

Because of this, the Datadog integration is structured in multiple integration levels. Each level requires a different set of scopes and unlocks different functionality inside Finout.

As broader scopes are granted, Finout gains access to additional Datadog data, enabling more advanced features.

### Integration Levels Overview

The following table summarizes the Finout functionality available at each integration level and the required Datadog scopes.

| **Datadog scopes**                                                                                | **Finout platform functionality**                                                                                                                                                                                                                                                                                                                                                                                                                                                               | **Organization keys level**                            | **API Used**                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p>usage\_read,<br>billing\_read</p>                                                              | [Basic Datadog cost center integration](#h_854ed40993) - View Datadog’s products in Finout’s MegaBill with breakdowns by usage type (committed / on-demand cost), products, and organization.                                                                                                                                                                                                                                                                                                   | Only Parent organization                               | <p><a href="https://docs.datadoghq.com/api/latest/usage-metering/#get-hourly-usage-by-product-family">get-hourly-usage-by-product-family</a></p><p><a href="https://docs.datadoghq.com/api/latest/usage-metering/#get-estimated-cost-across-your-account">Get estimated cost</a></p>                                                                                                                                                                                                      |
| <p>usage\_read,</p><p>metrics\_read, timeseries\_query<br>logs\_read\_config<br>billing\_read</p> | [Enhanced Datadog integration- Default Datadog list of tags per product](#h_165a2c438c)                                                                                                                                                                                                                                                                                                                                                                                                         | Parent organization + all multiple child-organizations | <p><a href="https://docs.datadoghq.com/api/latest/metrics/#query-timeseries-points">query-timeseries-points</a></p><p><a href="https://docs.datadoghq.com/api/latest/metrics/#list-tags-by-metric-name">list-tags-by-metric-name</a></p>                                                                                                                                                                                                                                                  |
| monitors\_read, dashboards\_read                                                                  | <p><a href="#h_8bb6bc58d2">CostGuard</a>- Out-of-the-box actionable cost optimizations for Idle Synthetics.<br><strong>Note</strong>: Currently, the default integration is Usage Attribution Tags for new Datadog cost centers created since April 2025. For cot centers created before that, the default integration remains Custom Tags, and they should contact Finout support at <support@finout.io> to transition to <a href="/pages/n9YgUhe9XzLIIsFGTiP2">UAT-based integration</a>.</p> | Parent organization + all multiple child-organizations | <p><a href="https://docs.datadoghq.com/api/latest/dashboards/#get-all-dashboards">get-all-dashboards</a></p><p><a href="https://docs.datadoghq.com/api/latest/dashboards/#get-a-dashboard">get-a-dashboard</a></p><p><a href="https://docs.datadoghq.com/api/latest/monitors/#get-all-monitor-details">get-all-monitor-details</a></p>                                                                                                                                                    |
| <p>logs\_read\_config,<br>metrics\_read,<br>hosts\_read,<br>timeseries\_query</p>                 | [Enhanced Datadog integration- Kubernetes cost and unit metrics](#h_a57d7c84b8)                                                                                                                                                                                                                                                                                                                                                                                                                 | Parent organization + all multiple child-organizations | <p><a href="https://docs.datadoghq.com/api/latest/logs-indexes/#get-all-indexes">Logs Indexes</a><br><a href="https://docs.datadoghq.com/api/latest/metrics/#list-tags-by-metric-name">Metrics</a><br><a href="https://docs.datadoghq.com/api/latest/hosts/#get-all-hosts-for-your-organization">Hosts</a><br><a href="https://docs.datadoghq.com/api/latest/metrics/#query-timeseries-points">Metrics</a></p>                                                                            |
| Not scoped                                                                                        | <ol><li><a href="#h_8bb6bc58d2">Enhanced Datadog integration- custom tags set by the customer</a></li><li>Products basic list of tags- Indexed Log</li></ol>                                                                                                                                                                                                                                                                                                                                    | Parent organization + all multiple child-organizations | <p><a href="https://docs.datadoghq.com/api/latest/logs-indexes/#get-all-indexes">get-all-indexes</a></p><p><a href="https://docs.datadoghq.com/api/latest/metrics/#list-tags-by-metric-name">list-tags-by-metric-name</a></p><p><a href="https://docs.datadoghq.com/api/latest/hosts/#get-all-hosts-for-your-organization">get-all-hosts-for-your-organization</a></p><p><a href="https://docs.datadoghq.com/api/latest/metrics/#query-timeseries-points">query-timeseries-points</a></p> |

To learn more about each capability and the data it requires, see the detailed explanations below.

#### [Basic Datadog Integration](https://docs.finout.io/integrations/third-party/connect-to-datadog)

The Basic Datadog integration enables Datadog cost visibility in Finout.

With this integration:

* Datadog is added as a cost center in Finout
* Datadog costs appear in the MegaBill
* Costs can be analyzed by:
* Datadog product
* usage type (committed vs on-demand)
* Organization
* Usage Attribution Tags

Finout retrieves this information using Datadog billing APIs, allowing organizations to monitor their Datadog spend directly within Finout.

Required scopes: `usage_read`, `billing_read`

#### [Enhanced Datadog Integration](https://docs.finout.io/integrations/third-party/connect-to-datadog#faqs)

The Enhanced Datadog integration expands the basic integration by enabling deeper cost analysis using Datadog tags and metric metadata.

This allows Finout to:

* Break down Datadog costs using the default Datadog custom tags
* Provide richer cost attribution across Datadog services
* support analysis across parent and child Datadog organizations

These capabilities rely on additional Datadog APIs that provide access to metrics and metadata.

Required scopes: `usage_read`, `metrics_read`, `timeseries_query`, `logs_read_config`, `billing_read`

#### [Kubernetes Metrics Integration](/kubernetes-integrations/kubernetes/datadog)

Datadog can also be used as a Kubernetes metrics source in Finout.

When enabled, Finout retrieves Kubernetes resource usage metrics from Datadog to calculate how to distribute cluster infrastructure costs across Kubernetes workloads.

This enables Finout to:

* Allocate Kubernetes cluster costs across namespaces, workloads, and pods
* Combine Kubernetes usage metrics with cloud infrastructure billing data
* Provide Kubernetes cost visibility across Finout dashboards and analysis tools

This integration relies on Datadog timeseries metrics APIs to retrieve CPU and memory usage metrics.

Required scopes: `logs_read_config`, `metrics_read`, `hosts_read`, `timeseries_query`

#### [CostGuard Integration](https://docs.finout.io/user-guide/optimize/costguard)

The CostGuard integration enables Finout’s Datadog optimization insights.

With this level enabled, Finout can analyze Datadog configuration data to generate cost-optimization recommendations.

This includes:

* Identifying Idle Synthetics
* Surfacing optimization opportunities within CostGuard
* Providing actionable insights to reduce unnecessary Datadog spend

To enable this functionality, Finout requires read access to Datadog monitors and dashboards.

Required scopes: `monitors_read`, `dashboards_read`


# Datadog Usage Attribution Tags (UAT)

## What are Usage Attribution Tags (UAT)?

UAT or user-defined tags in Datadog allow you to categorize resources and allocate costs using key-value pairs, such as team:engineering or project:beta. This feature enables more granular insights into usage patterns and cost breakdowns, helping you optimize your Datadog spend effectively. See [Datadog documentation](https://docs.datadoghq.com/account_management/billing/usage_attribution/) for more details.

{% hint style="info" %}
**Note**:&#x20;

* This feature is available only for accounts using Datadog’s Enterprise/Pro.&#x20;
* UATs can be created per Datadog organization (both parent and sub).&#x20;
* Each organization (parent/sub) supports up to 3 different UAT types.&#x20;
* Every parent /sub organization can select its own Usage Attribution Tags, they don’t have to be identical between different organizations.&#x20;
* UATs apply across all Datadog products the organization uses for cost and usage tracking.&#x20;
  {% endhint %}

### **Integration Types:** UAT (Recommended) and Custom Tags

Finout supports two Datadog integrations: UAT Integration (recommended) and Custom Tags Integration. UAT Integration provides detailed cost and usage breakdowns using Usage Attribution Tags, Datadog organizations, and regions, ensuring accurate data across all Finout features. At the same time, Custom Tags Integration retrieves only cost data based on user-defined tags, which can vary across products.<br>

**Key Benefits of Datadog UAT Integration:**

* **Datadog Usage**: Easily track and analyze your **Datadog usage** with full support for fetching, presenting, and breaking down usage data by tags for deeper cost insights.
* **More Coverage Across Datadog Products** – Allows the breakdown of cost and usage data of [multiple products](#uat-integration-with-datadog-products), unlike the previous Custom Tags integration.
* **Accurate Cost and Usage Allocation** – UAT uses Datadog's native cost and usage allocation, eliminating guesswork and ensuring accurate and reliable cost distribution.
* **Deeper Insights with Additional Breakdown Options** – Beyond UATs, you can also segment data by organizations and regions for a clearer financial picture.
* **Consistent and Standardized Reporting** – Unlike custom tags, which vary by product, UAT provides a uniform and structured breakdown across organizations, sub-organizations, and regions.

### Prerequisites

* UAT Integration is available only for Datadog Enterprise/Pro accounts. If your account is not on an Enterprise plan, you can use the Custom Tags integration as an alternative.
* Your Usage Attribution Tags must be tagged at the parent organization level with an Enterprise/Pro account in Datadog.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: If you currently have the<a href="/pages/EbdNtlj44lv7hVNGB29H"> Custom Tags integration</a>, contact us at support@finout.io to enable UAT.</p></div>

### [UAT integration](/billing-integrations/observability-platforms/connect-to-datadog) with Datadog Products

Datadog supports data breakdown by UATs, organizations, and regions for the following products:

{% hint style="info" %}
**Note**: \
\- This provides data presentation, cost, and usage data for all Datadog products, with a detailed breakdown of DataDog cost and usage by the parent organization's UATs.\
\- General cost and usage data is presented for all the following products.
{% endhint %}

* APM Fargate
* APM Host
* APM Trace Search
* Application Security Host
* CI Pipeline
* CI Pipeline Indexed Spans
* CI Test Indexed Spans
* Custom Event
* CWS Host
* Database Monitoring (DBM) Host
* Database Monitoring (DBM) Normalized Queries
* Fargate Container
* Fargate Container Profiler
* Infrastructure Container
* Infrastructure Host
* Ingested Spans
* Ingested Timeseries
* Lambda Function
* Logs Indexed (15 Days)
* Logs Indexed (180 Days)
* Logs Indexed (30 Days)
* Logs Indexed (3 Days)
* Logs Indexed (7 Days)
* Logs Indexed (90 Days)
* Logs Ingested
* Network Performance Monitoring (NPM) Host
* Online Archive
* Profiler Container
* Profiler Host
* RUM Replays
* RUM Lite
* Sensitive Data Scanner
* Serverless Invocation
* Security Information and Event Management (SIEM)
* Synthetics API Tests
* Synthetics Application Testing
* Synthetics Browser Checks
* Timeseries

{% hint style="info" %}
**Note**: Contact Customer Support at <support@finout.io> to enable the breakdown of cost and usage by UAT, Organization, Region, and additional products not found on this list.
{% endhint %}

## How Does UAT Work?

Usage Attribution Tags (UATs) in Datadog enable cost and usage breakdown by parent account's UATs, organizations (including sub-organizations), and regions. Finout retrieves tags based on the parent organization and categorizes costs and usage accordingly. If sub-organizations use the same tags as the parent organization, their data can be broken down using these tags. However, if sub-organization tags differ from the parent organization's, data will be categorized as "N/A" when filtering/grouping by the parent’s tags, as breakdowns by sub-organization tags are not yet supported.

{% hint style="info" %}
**Note**: If your UATs are tagged based on sub-organizations, contact support at <support@finout.io>. This is currently not supported.<br>
{% endhint %}

## How can UAT be used in Finout?

Usage Attribution Tags (UATs) in Datadog enable you to break down cost and usage data by your parent account's UATs, organizations (including sub-organizations), and regions. With UAT, you can analyze this data across all Finout features (except CostGuard) to make better-informed decisions and optimize cost management. For more details on integrating with Datadog, see [Connect to Datadog](/billing-integrations/observability-platforms/connect-to-datadog).

**Use case: UAT in MegaBill**

In Finout's MegaBill, you can view Datadog cost and usage data by grouping resources based on your UATs, organizations, or regions. This offers detailed insights into your Datadog's cost and usage. This analysis extends across features like Virtual Tags, Widgets, and Views, enabling better-informed decisions for optimizing cost management. Additionally, it improves your showback reports, providing clearer visibility into cost allocation and accountability.

*Applying group-by for teams (where "team" is one of the accounts UATs):*<br>

<figure><img src="/files/13yCwOTcfDXuopu18IEX" alt=""><figcaption></figcaption></figure>

*Daily Datadog team cost for the last seven days:*

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdIdpSQJAxI0_VOyeS4F2O1hJAch_LQzs8mlznZWtnTJWts1fjDE-C0eXUas78NxNZBruQP8kkvpEaWISsJ2qWodGpWyKsCEGGa-Fgh_HWUAcIVnq2vy-SBGu7tsk_Mune1crKdGQ?key=FmO8NoV_jyMQ_-G2yqHqG6MW" alt=""><figcaption></figcaption></figure>

*Daily Datadog team usage for the last seven days:*

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc1RdtBxYLvgnG7n_Plq4aWV8vLXiqbpPU_99fEvx1j4q5Wdj4VH6jMTGzvWA7zyNprRFnRkwWxEYTd_z8f9faqPRAjko0mVwf_FJwTeWoBvH-ZsJpkWhF7mAELG0R6oYWagzkhRw?key=FmO8NoV_jyMQ_-G2yqHqG6MW" alt=""><figcaption></figcaption></figure>

\
**To integrate Usage Attribution Tags for Datadog, see**[ **Connect to Datadog**](/billing-integrations/observability-platforms/connect-to-datadog)**.**


# Data & Engineering Platforms

Data and engineering platforms are used to process, store, and move large-scale data across your organization.

In Finout, integrations with these platforms enable you to analyze costs for data processing, storage, and streaming workloads. This helps you understand how data pipelines and analytics infrastructure contribute to your overall cloud spend.

The following Data and Engineering Platforms can be integrated with Finout:

* [Databricks](/billing-integrations/data-and-engineering-platforms/connect-to-databricks)
* [Snowflake](/billing-integrations/data-and-engineering-platforms/connect-to-snowflake/connect-to-snowflake-account-level-integration)
* [Confluent](/billing-integrations/data-and-engineering-platforms/connect-to-confluent)


# Connect to Snowflake

Snowflake's organization-level integration connects your entire Snowflake organization through a single setup. Cost data pulls directly from Snowflake's billing schema in invoice currency - no credit-rate configuration needed, and costs match your invoice exactly."

With this integration you can:

* Track Snowflake spend alongside your other cloud and SaaS costs in a single view
* Break down costs by account, region, service type, user, role, and query type
* Use Snowflake tags for cost allocation and chargeback in Finout
* Include Snowflake cost data in custom dashboards, [Anomalies](https://docs.finout.io/user-guide/optimize/anomalies), and financial plans

{% hint style="info" %}
Finout uses read-only access to Snowflake's organization-level usage schema and does not modify or delete any of your data. Queries run against the schema using `finout_warehouse` and consume Snowflake compute credits.
{% endhint %}

***

### Prerequisites

Before starting, make sure you have:

* A Snowflake account with access to the Snowflake Console
* The `ORGADMIN` role in Snowflake, required to grant organization-level permissions

***

### 1. Create Permissions in Snowflake

1. **Log in** to your Snowflake account.
2. **Open a new worksheet** in your Snowflake console.
3. **Paste and run** the following commands as a user with the `ORGADMIN` role:

```sql
USE ROLE orgadmin;

CREATE WAREHOUSE IF NOT EXISTS finout_warehouse
  WITH WAREHOUSE_SIZE = 'MEDIUM'
  AUTO_SUSPEND = 30
  INITIALLY_SUSPENDED = TRUE;

CREATE ROLE IF NOT EXISTS finout_role;

CREATE USER IF NOT EXISTS finout_user
  PASSWORD = '<YOUR_PASSWORD_HERE>'
  DEFAULT_ROLE = finout_role;

GRANT USAGE ON WAREHOUSE finout_warehouse TO ROLE finout_role;
GRANT ROLE finout_role TO USER finout_user;

-- Organization-level grants required for invoice-accurate cost data
GRANT DATABASE ROLE SNOWFLAKE.ORGANIZATION_USAGE_VIEWER TO ROLE finout_role;
GRANT DATABASE ROLE SNOWFLAKE.ORGANIZATION_BILLING_VIEWER TO ROLE finout_role;
GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE finout_role;

CREATE OR REPLACE NETWORK POLICY FINOUT_NETWORK_POLICY
  ALLOWED_IP_LIST = (
    '34.196.241.137',
    '54.163.113.82',
    '44.196.75.137',
    '212.59.64.84'
  );

ALTER USER finout_user SET NETWORK_POLICY = FINOUT_NETWORK_POLICY;
```

<figure><img src="/files/M7CUotV3ejyaYZyhe36v" alt=""><figcaption><p>Run the setup commands in a new Snowflake worksheet using the ORGADMIN role</p></figcaption></figure>

***

### 2. Connect Snowflake to Finout

#### Step 1 — Connect Organization

1. In Finout, **navigate to** **Settings > Cost Centers**.
2. Under the Snowflake tile, **click** **Connect Now**. The **Snowflake integration** wizard opens on the **Connect Organization** step.

<figure><img src="/files/OIRQ6QNXpIXC5uE9jNCc" alt=""><figcaption><p>Click Connect Now on the Snowflake tile to open the setup wizard.</p></figcaption></figure>

3. **Enter** the following details:

| Field                         | Description                                                            |
| ----------------------------- | ---------------------------------------------------------------------- |
| Cost Center Name              | A name for this Cost Center in Finout                                  |
| Organization Account Username | `finout_user` (the user created by running the script above)           |
| Organization Account URL      | Your Snowflake organization account URL                                |
| Role                          | `finout_role` (the role created by running the script above)           |
| Database                      | `SNOWFLAKE`                                                            |
| Warehouse                     | `finout_warehouse` (the warehouse created by running the script above) |

4. **Click** **Next**.<br>

   <figure><img src="/files/2wTPz6an6N2WOMfoIBgV" alt="" width="563"><figcaption><p>Verify your organization account details - they should match the pre-filled values.</p></figcaption></figure>

***

#### Step 2 — Authenticate Organization

Finout generates a key pair for you. The private key is stored securely by Finout; you apply the public key to your Snowflake user.

1. **Open** a new worksheet in your Snowflake console.
2. **Run** the following command using the public key displayed in Finout:

```sql
ALTER USER <your_username> SET RSA_PUBLIC_KEY='<public_key>';
```

Replace `<your_username>` with your Snowflake username and `<public_key>` with the key shown in Finout.

3. **Return** to the Finout wizard.
4. **Check** *I ran these commands in Snowflake*.
5. **Click** **Next**.<br>

   <figure><img src="/files/qb0JdRIJhtzsJAZo3UCL" alt="" width="563"><figcaption><p>Copy the public key, run the ALTER USER command in Snowflake, then check the confirmation box.</p></figcaption></figure>

***

#### Step 3 — Connect Accounts

Finout automatically detects all child accounts under your Snowflake organization and displays them in a table.

| Column       | Description                |
| ------------ | -------------------------- |
| Account Name | Name of the child account  |
| Account URL  | Account URL in Snowflake   |
| Status       | Connected or Not connected |

1. **Review** the list of detected accounts.
2. **Deselect** any accounts you do not want to connect.
3. **Click** **Next**.

{% hint style="info" %}
Use the search bar to filter accounts by name if your organization has many child accounts.
{% endhint %}

<figure><img src="/files/aZBtmLEBzR2NjSjdQjAf" alt="" width="563"><figcaption><p>Finout detects all child accounts automatically. Deselect any you want to exclude.</p></figcaption></figure>

***

#### Step 4 — Authenticate Accounts

For each account selected in the previous step, run the SQL commands that Finout provides to grant the required permissions.

1. **Expand** an account row by clicking the arrow next to the account name.
2. **Open** a new worksheet in your Snowflake console for that account.
3. **Copy and run** the SQL commands displayed in Finout for that account.
4. **Check** *I ran these commands in Snowflake* for the account.
5. **Repeat** steps 1-4 for each account.

**If an account uses different credentials from the organization account:**

* **Check** *Connection values differ from parent account*.
* **Enter** the account-specific **Snowflake Account Username**, **Role**, and **Warehouse** in the fields that appear.

<figure><img src="/files/0Pzaby9nTL0gghh5n41Y" alt="" width="563"><figcaption><p>Copy the SQL commands for each account, run them in Snowflake, then check the confirmation box.</p></figcaption></figure>

6. Once all accounts are confirmed, **click** **Complete setup**.

**Result:** A "Cost center created successfully!" confirmation appears.

{% hint style="info" %}
&#x20;A single [Cost Center](https://docs.finout.io/billing-integrations/cost-centers) covers your entire Snowflake organization and all child accounts. You will receive an email notification once Finout has retrieved your data and set up your Cost Center. Organization-level cost data appears in Finout within 24 hours.
{% endhint %}

### FAQs

**Which Snowflake services does Finout support?**

The org-level integration sources costs from Snowflake's `USAGE_IN_CURRENCY_DAILY` view, which captures all services Snowflake charges for — past and future.

**Does Finout support granting nested roles in Snowflake?**

No. Finout only supports roles with permissions directly assigned to them. Nested roles are not supported.

Still need help? Reach out to our team at <support@finout.io>.


# Connect to Snowflake - Account Level Integration

{% hint style="warning" %}
Finout now recommends the organization-level integration over per-account connections. To migrate existing account-level cost centers, contact your Finout CSM.
{% endhint %}

Connect Finout to your Snowflake account to gain detailed insights into your Snowflake costs. Choose from two secure authentication methods—key-pair authentication or password-based—to integrate your data seamlessly. This setup allows you to visualize and analyze your expenses precisely, offering a clear view of cost trends and allocations within your Snowflake environment.

What you will do for the Snowflake configuration:\
1\. [Create permissions in Snowflake](#id-1.-create-permissions-in-snowflake)\
2\. [Authenticate Snowflake into Finout](#id-2.-integrate-snowflake-in-finout)

### 1. Create Permissions in Snowflake

1. Log into your Snowflake account using your login credentials.
2. **Create a Finout Permissions in Snowflake:**
   1. Open a new worksheet in your Snowflake console.
   2. To set up a dedicated warehouse, role, and user for Finout, paste the following query, ensure secure access by restricting the connection to specific IP addresses used by Finout, and then run the  following command:

      <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: If you choose to use Key-pair authentication, you do not need to set a password when creating the user.</p></div>

```
use role accountadmin;
CREATE WAREHOUSE if not exists finout_warehouse WITH WAREHOUSE_SIZE = 'XSMALL' AUTO_SUSPEND=30 INITIALLY_SUSPENDED=TRUE;
create role finout_role;
create user finout_user password = '<YOUR_PASSWORD_HERE>' default_role = finout_role;
grant USAGE ON WAREHOUSE finout_warehouse to role finout_role;
grant role finout_role to user finout_user;
grant imported privileges on database snowflake to role finout_role;
CREATE OR REPLACE NETWORK POLICY FINOUT_NETWORK_POLICY ALLOWED_IP_LIST = ('34.196.241.137', '54.163.113.82', '44.196.75.137');
alter user finout_user SET NETWORK_POLICY = FINOUT_NETWORK_POLICY;
```

### &#x20;2. Integrate Snowflake in Finout

1. Navigate to **Settings > Cost Centers** and click **Add Cost Center**.\
   The **Connect Accounts** window appears.\
   ​

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXebsgz6ITfvMs7ujpSjyC6QSYc4MV2nGrjLq8nCXWMeFz5Mqpk54F5-fN05ikDIs-N4RUkihNU_kBh2vXh3R14CF6AlPpojnLpDtFfs24l5qN7ish-7RF8iGlp1cyeFeU1w4spcaBARVoAkyJUhGVXZIbw?key=_IpI_7KIyJ145uuX3b5IJA" alt=""><figcaption></figcaption></figure>

2. In Snowflake, click **Connect Now**.\
   The **Connect Snowflake** wizard appears.<br>

   <figure><img src="/files/YN1dNgLuoDQiHsGrNBYW" alt=""><figcaption></figcaption></figure>

3. Enter the following details:
   * *Cost Center Name*: Enter the name of the cost center associated with this Snowflake account.
   * *Username*: Provide the username of the dedicated Finout user created in Snowflake.
   * *Snowflake URL*: Enter your Snowflake account URL.
   * *Warehouse*: Specify the warehouse (finout\_warehouse) that was created for Finout.
   * *Role*: Enter the role (finout\_role) created for Finout in Snowflake.
   * *Database*: Specify the Snowflake database where your cost data resides.
   * *Price per TB of storage*: Add the price per TB of storage credits.
   * *Price per compute credit:* Enter the Snowflake credits per compute and storage services. Finout calculates the cost based on the credits provided.<br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: </p><ul><li>Single organization accounts are automatically created when credit cost data is provided.</li><li>For multiple organization accounts, compute and storage credits might change over time. Ensure that you update Finout support to keep your Snowflake cost accurate. Finout calculates the cost using usage * credit rate.</li></ul></div>

4. Click **Next**.\
   You are brought to the **Set Up Authentication** step.\ <br>

   <figure><img src="/files/0lH12HlhXnBzF9HeOUla" alt=""><figcaption></figcaption></figure>

5. To connect Finout to Snowflake, Finout must securely store the private key because it initiates the connection to Snowflake. That’s why both keys need to be generated: the private key is securely stored by Finout, and you set the public key on your Snowflake user. This ensures secure access without requiring you to manage private credentials directly.

   \
   **Key-Pair Generation**: \
   Finout will generate the key pair for you. We will securely store the private key, and you will receive the public key.<br>

   **1. Update Your Snowflake User Table:**

   * Open a worksheet in your Snowflake console.
   * Use the public key provided by Finout to update your Snowflake user permissions/authentication method:&#x20;

     ```
      ALTER USER <your_username> SET RSA_PUBLIC_KEY='<public_key>';
     ```

     &#x20;

     * Replace \<your\_username> with your Snowflake username.
     * Replace \<public\_key> with the public key provided by Finout.<br>

   **2. Complete the Setup in Finout:**

   \
   Return to the Finout console, mark **I have completed the ALTER USER command in Snowflake**, and click **Next**.\
   Snowflake is onboarded and you will see Snowflake data in Finout within 24 hours.

   <br>

## FAQs

**Which Snowflake services are currently supported by Finout?**

* Snowflake - Warehouse Reader Credits (Compute)
* Snowflake - Warehouse Credits (Compute)
* Snowflake - Warehouse Credits (Cloud Services)
* Snowflake - Storage
* Snowflake - Serverless Task Credits
* Snowflake - Search Optimization Credits
* Snowflake - Replication Credits
* Snowflake - Pipe Credits
* Snowflake - Materialization Credits
* Snowflake - Auto Clustering Credits

**I already have a Snowflake Cost Center (CC) with password authentication. How can I change it to key-pair authentication?**

Follow these steps to switch from password to key-pair authentication:

1. **Request the public key**: Contact Support to obtain the public key.
2. **Update the Snowflake user**: Insert the provided public key in your Snowflake console using the `ALTER USER` command. Finout generates the key pair for you—securely storing the private key while giving you the public key to complete the setup.<br>

   <figure><img src="/files/ZsPnpVvQZscvn1xIv8Dq" alt=""><figcaption></figcaption></figure>

   1. Open a worksheet in your Snowflake console.
   2. Use the public key provided by Finout to update your Snowflake user permissions/authentication method: `ALTER USER <your_username> SET RSA_PUBLIC_KEY='<public_key>';`
   3. Replace \<your\_username> with your Snowflake username.
   4. Replace \<public\_key> with the public key provided by Finout.
3. **Notify Support**: Contact Support once you’ve added the public key so they can update the authentication method in Finout from password to key-pair.
4. **Change or deactivate the password**: Change or deactivate the password only after Support confirms that everything is working correctly.

**Does Finout support granting nested roles in Snowflake?**

No. Finout only supports roles with permissions directly assigned to them. Nested roles are not supported.

**Can I connect custom cost centers via Snowflake?**

Yes. You can connect custom cost centers by configuring your Snowflake integration. Use the following table structure in Snowflake to enable Finout to ingest custom data:

```
create or replace TABLE FINOUT_COST_EXPORT ( SOURCE VARCHAR(100), USAGE_DATE DATE, SERVICE_NAME VARCHAR(1000), COST FLOAT, METADATA OBJECT );
```

Where:

* `SOURCE` is an indication to the source cloud or system, i.e Datadog, Azure etc.
* `USAGE_DATE` is the date you would want to add the costs to.
* `SERVICE_NAME` is a sub-service within the source, `COST` is the cost in USD.
* `METADATA` is a custom key-value object for tags, optional.

**How do Snowflake storage costs work?**

To display daily costs, Finout calculates a derived **daily rate** by dividing the **monthly storage cost per Table** by the number of days in that month. Since months like **February have fewer days**, the daily rate appears higher, even though the total monthly cost remains unchanged. For a full breakdown of Snowflake’s storage pricing, refer to the official [Snowflake documentation](https://docs.snowflake.com/en/user-guide/cost-understanding-data-storage).

**How is storage cost per table tracked?**

Storage cost per table is tracked as a daily snapshot from TABLE\_STORAGE\_METRICS. Each snapshot captures the cost at a specific point in time.

**Will storage cost values update retroactively if something changes?**

No. Storage cost values are snapshot-based, so historical data is not retroactively updated or recalculated—once captured, those values remain fixed. If a snapshot isn’t captured for any reason, storage cost data for that day will be missing and cannot be recovered.

**Why don't I see table-level cost data in Snowflake for the current month?**

Table-level cost granularity in Snowflake is only available starting from the **first full month after the integration date**.\
For example, if you connected your Snowflake account on **June 14th**, table-level costs will only be available from **July 1st** onward. Prior to July 1st, costs are shown only at the database level.\ <br>


# Connect to Databricks

Connecting Databricks to Finout gives your team visibility into Databricks spend across all your workspaces, alongside your other cloud and SaaS costs. A single account-level connection covers every workspace automatically, with costs broken down by workspace, cluster, SQL warehouse, job, and pipeline - no manual DBU rate configuration required.

{% hint style="warning" %}
**Note for accounts with multiple workspaces**

By following the steps below and giving Finout access to a Unity Catalog-enabled workspace, the costs reported in Finout will cover your whole account.

You don't have to repeat this setup for multiple workspaces under the same account.
{% endhint %}

With this integration you can:

* Track Databricks spend alongside your other cloud and SaaS costs in a single view
* Break down costs by workspace, cluster, SQL warehouse, job, and pipeline
* Use [Virtual Tags](https://docs.finout.io/user-guide/inform/virtual-tags) that include Databricks dimensions to allocate costs by team, project, or environment
* Use [Shared Cost Reallocation](https://docs.finout.io/user-guide/inform/shared-cost-reallocation) to distribute shared cluster or warehouse costs across teams
* Include Databricks cost data in custom [Dashboards](https://docs.finout.io/user-guide/inform/dashboards), [Anomalies](https://docs.finout.io/user-guide/optimize/anomalies), and financial plans

{% hint style="info" %}
Finout uses read-only access to Databricks system tables and does not modify or delete any of your data. Queries consume Databricks compute credits (DBUs).
{% endhint %}

***

### Prerequisites

Before connecting, make sure you have:

* A Databricks account with account admin privileges
* Unity Catalog enabled on any workspace — see the Databricks documentation for [AWS](https://docs.databricks.com/aws/en/data-governance/unity-catalog/manage-privileges/), [Azure](https://learn.microsoft.com/en-us/azure/databricks/data-governance/unity-catalog/manage-privileges), or [GCP](https://docs.databricks.com/gcp/en/data-governance/unity-catalog/manage-privileges/)
* Metastore owner status for the Unity Catalog-enabled workspace

***

### 1. Set up in Databricks

#### Step 1 — Collect your Account ID and Workspace URL

1. **Log in** to the Databricks account console.
2. **Click** your avatar in the top right and copy your **Databricks Account ID** — save this for the steps below.

   <img src="/files/MVFtAHA4X1jffWM52hlS" alt="" height="121" width="512">
3. **Click** **Workspaces** and select a Unity Catalog-enabled workspace.
4. **Copy** your **Workspace URL** — save this for the steps below. Then open the workspace.<br>

   <img src="/files/Ncnba82mSNBUYvKJVcWK" alt="" height="229" width="624">

***

#### Step 2 — Create a service principal

1. **Click** your avatar in the top right of the workspace and select **Settings**.
2. Under **Workspace admin**, select **Identity and access**.
3. Next to **Service principals**, click **Manage**.<br>

   <img src="/files/NAU41N7sImRY8bNwJUxn" alt="" height="164" width="512">
4. **Click** **Add service principal** > **Add new**.
5. For **Service principal name**, enter `finout-billing-serviceprincipal`, then click **Add**.<br>

   <img src="/files/9W1yTlaq549TB6aoUcZV" alt="" height="211" width="556">
6. **Open** the newly created service principal and select the **Secrets** tab.
7. **Click** **Generate secret**.
8. Set a **Lifetime** of `730` days, then click **Generate**.<br>

   <img src="/files/Rjsq4xXPzSBKT2oVE0dw" alt="" height="196" width="441">

{% hint style="warning" %}
When the secret expires after 730 days, you will need to generate a new one and update the integration in Finout.
{% endhint %}

9. **Copy** both the **Client Secret** and **Client ID** — save these for the Finout connection.<br>

   <img src="/files/YqdA1PSTvRn1Hyb0YoJv" alt="" height="333" width="512">

***

#### Step 3 — Create a SQL warehouse

1. From the left navigation, under **SQL**, click **SQL Warehouses**.
2. **Click** **Create SQL warehouse** and enter the following:

| Field        | Value                      |
| ------------ | -------------------------- |
| Name         | `finout-billing-warehouse` |
| Cluster size | `2X-Small`                 |
| Type         | `Serverless`               |

<img src="/files/T7i1K5QlUCbXjjtChMFY" alt="" height="233" width="460">

3. **Click** **Create**.
4. In the **Manage permissions** modal which opens next, search for and select `finout-billing-serviceprincipal`.
5. Set the permission to **Can Use** and click **Add**.<br>

   <img src="/files/v57pGdUVnMOnwqIS5s16" alt="" height="193" width="624">
6. **Close** the modal and copy the **Warehouse ID** displayed next to the warehouse name — save this for the connection with Finout.<br>

   <img src="/files/3z3ghJfozB32GOvbhw5J" alt="" height="300" width="624">

***

#### Step 4 — Grant data reader permissions

1. From the top of the left navigation, click **Catalog**.
2. Expand **My Organization > system**.
3. For each of the following schemas, select the schema, click **Permissions > Grant**, add `finout-billing-serviceprincipal` as the principal, set **Privilege presets** to **Data Reader**, and click **Confirm**:
   * `system.access`
   * `system.billing`
   * `system.compute`

<img src="/files/dLdLC5S04glBdPOLDYPn" alt="" height="277" width="377">

***

### 2. Connect Databricks to Finout

1. In Finout, **navigate to** **Settings > Cost Centers**.<br>

   <figure><img src="/files/oXDbRk6vnMPRHhj7K7WI" alt=""><figcaption></figcaption></figure>
2. **Click** **Add Cost Center** and select **Databricks**. The **Connect Databricks** wizard opens.

<figure><img src="/files/2spgMBXcS37jI15rSb3x" alt=""><figcaption></figcaption></figure>

3. **Enter** the following details:

<table><thead><tr><th width="282.21875">Field</th><th>Description</th></tr></thead><tbody><tr><td>Cost Center Name</td><td>A name for this Cost Center in Finout</td></tr><tr><td>Service Principal Client ID</td><td>Client ID of the service principal created in Databricks</td></tr><tr><td>Service Principal Client Secret</td><td>Client secret generated in Databricks</td></tr><tr><td>Account Workspace URL</td><td>Workspace URL collected in Databricks (e.g. <code>acme-inc.cloud.databricks.com</code>)<br><br>Make sure to remove your URL schema (e.g. https://) and any query params or paths following the top level domain (any ?xxx or /xxx after .com, .net etc.)</td></tr></tbody></table>

4. **Click** **Next**. Finout validates your credentials, warehouse access, and permissions on all required system tables. If validation fails, an error message identifies the specific issue to fix.

**Result:** Your Databricks Cost Center is created, and data should be available within 24 hours.

***

Still need help? Reach out to our team at <support@finout.io>.


# Connect to GitHub

#### Overview

Finout's GitHub integration ingests billing data across **Actions, Copilot, Codespaces, Git LFS, Shared Storage, and Packages**, so your GitHub spend appears alongside your other cloud and SaaS costs in [MegaBill](https://docs.finout.io/user-guide/inform/megabill).

With this integration, you can:

* See GitHub costs broken down by **service** (Actions, Copilot, Codespaces, etc.), **SKU**, **organization**, and **repository**, as well as service-specific fields like **Copilot Model**
* See both the **net billed cost** and the **list cost before discounts** for each service
* See **usage quantity** alongside cost, in each service's native unit (minutes, seats, AI credits, GB)

{% hint style="info" %}
The token scopes this integration requires (`manage_billing:enterprise` and `manage_billing:copilot`) grant GitHub billing and Copilot management access at the enterprise level, since this is the minimal privilege required to report costs and usage.

Finout **only ever reads** billing and usage data with this token — it never modifies billing settings, Copilot seats, repositories, code, or any other GitHub resource.
{% endhint %}

#### Before you start

This integration supports **GitHub Enterprise Cloud accounts only**. Organizations on the GitHub Teams or Free plans aren't supported, since enterprise-level billing data isn't available on those plans.

Authentication uses a **Classic Personal Access Token (PAT)**. Fine-grained tokens aren't supported, since GitHub doesn't expose billing data to fine-grained tokens.

You'll need:

* A GitHub Enterprise Cloud account
* Permission to assign the **Enterprise Owner** or **Billing Manager** role to a GitHub account
* Admin access in Finout

#### Step 1: Create a dedicated service account in GitHub

{% hint style="success" %}
**Recommended:** Use a dedicated service account rather than a personal account, so the integration doesn't break if that person leaves or loses access.
{% endhint %}

1. **Create** a new GitHub account using a shared email address (for example, `finout-integration@yourcompany.com`). This account doesn't need access to any repository or source code — only billing permissions.
2. **Assign** the account one of the following roles on your GitHub Enterprise account:

| Role                 | What it allows                                                           |
| -------------------- | ------------------------------------------------------------------------ |
| **Enterprise Owner** | Full access to enterprise billing data across all organizations          |
| **Billing Manager**  | Read access to enterprise billing data — sufficient for this integration |

To assign the role, go to **github.com > your Enterprise > Settings > People > Invite member** (or **Manage roles** for an existing account).

If you'd rather use a personal account, you can skip creating a service account — just make sure that account already holds the Enterprise Owner or Billing Manager role.

#### Step 2: Generate a Classic Personal Access Token

While logged in as the service account (or the personal account you're using):

1. **Click** your profile picture (top right) **> Settings**.
2. Scroll to the bottom of the left sidebar and **click Developer settings**.
3. **Click Personal access tokens > Tokens (classic)**.
4. **Click Generate new token > Generate new token (classic)**.
5. **Fill in** the token fields:

| Field       | Value                                                                                 |
| ----------- | ------------------------------------------------------------------------------------- |
| Note (name) | `Finout Billing Integration` (or any descriptive name)                                |
| Expiration  | 1 year recommended — set a calendar reminder to rotate it before it expires           |
| Scopes      | `manage_billing:enterprise` and `manage_billing:copilot` — no other scopes are needed |

6. **Click Generate token**.
7. **Copy** the token immediately — GitHub only shows it once.

{% hint style="info" %}
`manage_billing:enterprise` grants access to GitHub billing costs (Actions, Copilot, Codespaces, and so on). `manage_billing:copilot` grants access to Copilot usage metrics. Both scopes must be on the same token.
{% endhint %}

#### Step 3: Find your GitHub Enterprise slug

The enterprise slug identifies which GitHub Enterprise account to connect.

1. While logged in to GitHub, **navigate** to your Enterprise account.
2. **Copy** the part of the URL after `/enterprises/` — for example, in `github.com/enterprises/acme-corp`, the slug is `acme-corp`.

If you're not sure which URL to use, go to github.com, click your profile, then **Your enterprises** — the slug appears in the URL once you select your enterprise account.

#### Step 4: Connect GitHub to Finout

1. In Finout, **navigate to Settings > Cost Centers** and **click Add Cost Center**.

   <figure><img src="/files/qwjEDHKnZ9kappXN5W6M" alt="" width="563"><figcaption></figcaption></figure>
2. **Find GitHub** and **click Connect Now**. The Connect GitHub wizard opens. <br>

   <figure><img src="/files/lPlVBQuwrzMvFzpgglVF" alt="" width="563"><figcaption></figcaption></figure>
3. **Enter** the following details:

| Field                 | Description                                                                                         |
| --------------------- | --------------------------------------------------------------------------------------------------- |
| Cost Center Name      | A name for this Cost Center in Finout. Defaults to `GitHub`.                                        |
| Enterprise Slug       | The slug you copied in Step 3.                                                                      |
| Personal Access Token | The Classic PAT you generated in Step 2. Stored as a secret and never displayed again after saving. |

4. **Click Next**. Finout validates the credentials with a lightweight call to the billing API before saving.

If validation fails, Finout shows one of the following errors:

| Error                                      | Message to you                                                                                                                   |
| ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| Invalid or wrong token                     | Authentication failed. Please check your token and try again.                                                                    |
| Wrong enterprise slug or insufficient role | Enterprise Slug not found. Check your enterprise slug and ensure your token has Enterprise Owner or Billing Manager permissions. |
| Missing scopes on token                    | Your token is missing required permissions. Ensure it includes `manage_billing:enterprise` and `manage_billing:copilot` scopes.  |
| Invalid slug format                        | Invalid enterprise slug format. Please check and re-enter.                                                                       |

If validation passes, the connection is saved and an initial data sync begins automatically.

#### What happens next

On first connection, Finout pulls the current month plus up to two previous full months of billing data, so you have historical context from day one. After that, GitHub costs refresh daily — each run fetches the last 7 days of data to capture any retroactive adjustments GitHub makes to prior days.

#### Editing your integration

You can update your Enterprise Slug or Personal Access Token at any time from **Settings > Cost Centers**. All fields are editable, and historical data is preserved when you update credentials. The token field shows as a secret — you'll need to re-enter the whole token to update it.

#### FAQs

**Why doesn't Finout support GitHub Team or Free plans?**

Enterprise-level billing data — the source this integration reads from — is only exposed by GitHub on Enterprise Cloud accounts. GitHub doesn't expose an equivalent billing API for Team or Free plans.

**Does this integration give Finout access to my repositories or code?**

No. The token scopes used (`manage_billing:enterprise` and `manage_billing:copilot`) grant enterprise billing and Copilot management access — per GitHub's own scope definitions, `manage_billing:enterprise` technically permits both reading and writing billing data, and `manage_billing:copilot` technically permits managing Copilot seats. Neither scope grants any access to repositories or code. Finout only uses this token to read billing and usage data — it never writes to your GitHub billing settings, Copilot seats, or any other resource.

**Why is Repository Name empty for some line items?**

GitHub only attributes a repository to certain charges (for example, Actions minutes). Org-level charges, such as Copilot seats, aren't tied to a single repository, so `repositoryName` is empty for those rows.

**What happens if my Personal Access Token expires?**

Once the token expires or is revoked, GitHub data stops refreshing. Generate a new Classic PAT with the same scopes and update it from **Settings > Cost Centers** — if any days were missed in the meantime reach out to Finout Support to backfill them.

***

{% hint style="info" %}
**Need help?** If you run into any issues during setup, contact our support team at <support@finout.io> — we're happy to help.
{% endhint %}


# Connect to Confluent

Confluent is a full-scale, advanced data [streaming platform](https://docs.confluent.io/platform/current/_glossary.html#term-event-streaming-platform) that facilitates seamless access storage, and management of continuous real-time data streams.

​​The Confluent cost center is available in the [MegaBill](/user-guide/inform/megabill), providing breakdowns by services, clusters, usage type (e.g., network write, storage), and network access type (e.g., Peered VCP, Internet).

This integration ensures a unified view of all associated costs, combining the environment's expenditures with its related cloud expenses. [Virtual Tags](/user-guide/inform/virtual-tags) can be utilized to further consolidate costs and obtain a comprehensive view.

{% hint style="info" %}
**Note**: To retrieve cost data from Confluent, use the following endpoint:\
​`http://api.confluent.cloud/billing/v1/costs`
{% endhint %}

## **1. Connect ​​Confluent to Finout** <a href="#h_05d366f3c0" id="h_05d366f3c0"></a>

1. Navigate to confluent cloud home.<br>

   <div align="left"><figure><img src="/files/Jpsapt2A83xWXnyCujJ7" alt="" width="375"><figcaption></figcaption></figure></div>
2. Select the menu on the right and choose **Cloud API keys**.<br>

   <div align="left"><figure><img src="/files/6yaIw92IdqLlkpF1u8qm" alt="" width="563"><figcaption></figcaption></figure></div>
3. Click on **Add** key.

   <div align="left"><figure><img src="/files/btCp4x7MYE1NXRmUUeS8" alt="" width="563"><figcaption></figcaption></figure></div>
4. Choose **Granular access**.

   <div align="left"><figure><img src="/files/mjEBPjx3BReCwAArIRT8" alt="" width="563"><figcaption></figcaption></figure></div>
5. Select **Create a new one**, input a new service account name and description, and proceed (a new service account will be created).
6. Once the key is generated, an option to describe it appears. Click **Download** and continue.

## **2. Grant permissions to the cloud API key**

1. On the right menu, select **Accounts and Access**.

   ![](/files/8WJrxm9bgTODDLPworeL)

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277265/ac31771dcba0fc411868bdfa/OD5lvyWgjNLw4c0m4NSFaoq9DeK1mPuv9VNrty2T2muZ3ga_1in05Lm3dMLgnHqb1riq_fo11z4tC-Ndl2JXQRc7arixLjRJadyzElvGiXdpYaPuoZiwFftcYKJYEwDt6YbDA1oyt1koMdRgzgH47OE?expires=1725883200&#x26;signature=124cd56e96da962e0579d56322489ea596644aace7c6de29b0c790727d894cc9&#x26;req=1tdowlr8qXsp2RPy89osp64xZUyPnpvDUrLYvmfscL5dNgXWMBUmy4AfN3Is%0A%2FQ5LtH5FBsc%2FWgcEZx7sheo%3D%0A" alt="" width="375"><figcaption></figcaption></figure></div>
2. Navigate to **Service Accounts** under **Accounts**.
3. Search for the newly created service account and select it.

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277266/75c380fb64a934444b263537/bcljiv7D0NVrs4ZTn7eFQU8DK2bgske-QiczqogaFV7zVWWgdfPiB2LYpbjETJEEEIHkpzbUHAH6RhSX5JZkaFUw-h4GB9oHYXSvA10astPnUsL6IPAx7JsjnB6aON-x1Hh7Jy-UUYkPV5LQDF3rAhk?expires=1725883200&#x26;signature=9a864b27a773b03aa2cc19e0f911b1e94a20639d53054ddd9f4269b4693c75cf&#x26;req=1tdowlr8qnsp2RPy89ospwJXD4nrYvtOqN4EVgosu%2BMpxnnCmLG7%2F9d6ka3G%0AmonvivtZYW1Fky%2FIBc1Tgj8%3D%0A" alt="" width="375"><figcaption></figcaption></figure></div>

   <figure><img src="/files/3fMDPYrkrLqp7XXORT7S" alt=""><figcaption></figcaption></figure>
4. Select **Add role assignment** under organization.

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/6277267/0d98bec2d42b29e8d3cbc891/65xbfKImi_PErSizSoxS4bz32YoEl0ZjdpNMl3FqvJ8JXTh8zFVgzdr8HRE342oRhg4HInzR49GsCJ4igUkqWGvOyJuH_pc1Q5npaIhCcaRoOU1k8UkMVWMIt6Kh184BS6CBWXx_TG10WSR6k8ya-Cg?expires=1725883200&#x26;signature=5701783edd1a2aa44d3521da8a58aaf12c7a6d9e9d3a654bcffe7810f2b53667&#x26;req=1tdowlr8q3sp2RPy89osp2jP5wj31Vj60Hk0bqAi6IkqUg97VgTZtyNtXf52%0An9HLJr1pBmOYJY4xyv%2FLAXk%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>

   <figure><img src="/files/9DsmjN2BjvHhViVHLX7H" alt=""><figcaption></figcaption></figure>
5. Choose **BillingAdmin** and confirm this choice - crucial for successful integration.

   <div align="left"><figure><img src="https://downloads.intercomcdn.eu/i/o/15121663/374c3a6891043fd58098c6b1/Screenshot+2024-06-19+at+15_25_11.png?expires=1725883200&#x26;signature=0946ce30c126bc0a7f9eb9e81ce51b3836f616f43ac2a7bdfff5bd51a1f55b9f&#x26;req=0dBux1n8qjRk2hj99dpg6k0rEyQ8M3uJDvmcO31uWNChrkendTndTvbDfjuS%0AulSdS%2F5mYb2ysJgY3dEFzupn%0A" alt="" width="563"><figcaption></figcaption></figure></div>

   <div align="left"><figure><img src="/files/Ct0OjqEhkMcwGAV9Y1f0" alt=""><figcaption></figcaption></figure></div>

## **3. Integrate Confluent with Finout**

1. In Finout, navigate to **Settings > Cost Centers**.<br>

   <figure><img src="/files/zBX7eM2m1bmsfblxJENy" alt=""><figcaption></figcaption></figure>
2. Under Confluent, click **Connect Now**.

   You are taken to the **Connect Confluent** step.<br>

   <figure><img src="/files/nrZWR8quhP2SQCWfZusy" alt=""><figcaption></figcaption></figure>
3. Fill in the following fields:
   1. API Key - generated in the first step
   2. Secret - generated in the first step
4. Click **Complete Setup**. Your Cost Center is created - data should become available in Finout within 48 hours.

## FAQ

**How far back can Finout backfill Confluent cost data?**

Confluent's Costs API only exposes cost data with a start date up to one year in the past. This affects backfill as follows:

* **New Cost Centers**: Historical data can be backfilled for up to 12 months from the integration date. Data older than one year cannot be retrieved from Confluent and is not recoverable through the API.
* **Existing Cost Centers**: Finout retains accumulated daily-level data over time, so accounts with an existing Confluent Cost Center keep access to historical data beyond the one-year window.<br>


# Connect to CircleCI

## Overview

Finout calculates CircleCI costs by multiplying the number of credits consumed by the credit price you configure. Finout does **not** pull invoice data directly from CircleCI.

With this integration, you can:

* View CircleCI spend over time, broken down by organization, project, workflow, and job
* Configure credit pricing across different date ranges to reflect contract changes
* Monitor CI/CD costs using budgets and anomaly detection
* Include CircleCI in showback and chargeback reporting alongside cloud and SaaS costs

#### How it works

Finout ingests usage data from CircleCI’s API and applies your configured credit pricing to calculate cost.\
Because CircleCI’s API does not provide cost data, all cost calculations in Finout are derived.

{% hint style="info" %}
**Note**: CircleCI’s Usage API does not expose cost data. As a result, you may see small differences between:

* Costs calculated in Finout
* Costs displayed in the CircleCI Plans UI

For more details, refer to [CircleCI’s documentation on API limitations](https://support.circleci.com/hc/en-us/articles/34924793126427-Understanding-the-Difference-Between-CircleCI-s-Usage-API-and-Plans-UI).
{% endhint %}

#### Prerequisites

Before you begin, make sure you have:

* A CircleCI account with **Organization Admin** permissions.
* Your contracted credit price(s) and their effective date ranges.
* A Finout account with permissions to create a cost center.

***

## CircleCI Integration

### Step 1: Generate a CircleCI Personal API Token

<figure><img src="/files/r9n6Lli8034VQeIVgdUe" alt=""><figcaption></figcaption></figure>

1. In the CircleCI app, go to **User Settings.**\
   You are brought to the **User Settings page**.<br>

   <figure><img src="/files/fySiL53q0wZm6ZANmXnc" alt="" width="563"><figcaption></figcaption></figure>
2. Click **Personal API Tokens.**\
   You are brought to the **Personal API Tokens** pag&#x65;**.**<br>

   <figure><img src="/files/I9L3xpx637euCnlCcSVI" alt=""><figcaption></figcaption></figure>
3. Click **Create New Token**\
   The **Create New API Token** pop-up appear&#x73;**.**<br>

   <figure><img src="/files/0goCD1IziR6UFZBIimI3" alt=""><figcaption></figcaption></figure>
4. Enter a **Token name** (for example: `finout-integration`) and click **Add API Token.**<br>

   <figure><img src="/files/Bt8aotZAsX9rsmJbn6qY" alt=""><figcaption></figcaption></figure>
5. Copy the token and store it securely (it will not be shown again).

**Important:**

* This token provides access to CircleCI’s API. Finout uses it only to read usage data.
* Store the token securely and do not share it.
* CircleCI API v2 requires a **Personal API Token**. Project tokens are not supported.

***

### Step 2: Find your Organization ID

<figure><img src="/files/wcbnHzCGeHUmW8jwSy2F" alt="" width="563"><figcaption></figcaption></figure>

1. In the CircleCI app, go to **Organization Settings → Overview.**
2. Copy the **Organization ID** (UUID format).

***

### Step 3: Connect CircleCI in Finout

1. In Finout, navigate to **Settings > Cost Centers** and click **Add cost center**. The **Connect Accounts** window appears.<br>

   <figure><img src="/files/mtHuIIt77PXUHMytyNuJ" alt=""><figcaption></figcaption></figure>
2. In **CircleCI**, click **Connect Now**. \
   The **CircleCI** window appears.<br>

   <figure><img src="/files/q3N1wpm2rDS1ymE1U4mi" alt=""><figcaption></figcaption></figure>
3. Fill in the following fields:
   * *Cost Center name* - A display name for this connection (Example: *My Org - CircleCI*)
   * *Organization ID* - The Organization ID from CircleCI
   * *API Token* - The Personal API Token generated in Step 1
4. Click **Next**.\
   You are brought to the **Configure Credit Pricing** step.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This step is required. Finout calculates the cost based on the credit price you define. If pricing is not configured, cost data will not be calculated correctly.</p></div>

   <figure><img src="/files/RAuZgQoCponYTU7FCGdc" alt=""><figcaption></figcaption></figure>
5. Ongoing Pricing:\
   Fill in the following fields:
   * Enter the current price per credit
   * Enter the start date
6. *Optional*: **Historical Pricing for Backliling**\
   Fill in the following fields:Complete the following fields.&#x20;

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: It's recommended to cover 13 months to align with the maximum range supported by the CircleCI API.</p></div>

   * Effective From - Start date for this price (inclusive)
   * Effective To - End date for this price (leave empty if current)
   * Price per Credit (USD) - Your contracted credit price (for example: `0.0006`)

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> To add another pricing period, click <strong>+ Add pricing period</strong> and enter the same credit pricing fields.<br>Make sure your pricing periods cover the entire time range—from your earliest start date through the current (ongoing) pricing period. The UI will not allow submission if there are gaps between periods.</p></div>
7. Click **Next.**\
   You are brought to the **Credit Pricing Summary** ste&#x70;**.**<br>

   <div align="left"><figure><img src="/files/qSgTFLmg2aMMkcbbR0vj" alt=""><figcaption></figcaption></figure></div>
8. Review the credit pricing and then click **Complete setup**.\
   The cost center is created and data should become available within 48 hours.

***

### FAQs

#### Why does Finout not match CircleCI exactly?

Finout calculates cost based on usage and your configured pricing. CircleCI’s console may include additional internal calculations that are not exposed via the API. This difference is due to [limitations on CircleCI’s side](https://support.circleci.com/hc/en-us/articles/34924793126427-Understanding-the-Difference-Between-CircleCI-s-Usage-API-and-Plans-UI), not because Finout performs fewer calculations.

If you notice discrepancies, verify that the pricing you configured in Finout accurately reflects your CircleCI pricing.

#### Can I update pricing later?

If you update historical pricing, contact Finout support so we can reprocess your historical data using the updated values.


# Connect to Twilio

## Overview

Connect Finout to your Twilio account to track and analyze your Twilio spending alongside your other infrastructure costs.

Once connected, your Twilio costs can be broken down on Finout's platform by product category.

**Twilio configuration workflow:**

1. Locate your Account SID in Twilio
2. Create an API Key and Secret in Twilio
3. Connect Twilio in Finout

***

## Connect to Twilio

### 1. Locate Your Account SID

Your Account SID is available on the Twilio Console home page and identifies the Twilio account Finout will connect to.

**To locate your Account SID:**

1. Log in to the [Twilio Console](https://console.twilio.com).
2. On the **Dashboard**, locate the **Account Info** panel.
3. Copy the **Account SID**. Save it for use in step 3.

***

### 2. Create an API Key and Secret in Twilio

Finout uses a Twilio API Key and Secret to authenticate and retrieve your billing data. You generate these in the Twilio Console. The API Secret is only shown once - copy it before closing the page.

**To create an API Key:**

1. In the Twilio Console, navigate to **Account > API Keys & Tokens**.
2. Click **Create API Key**. The **New API Key** form appears.
3. Enter a **Friendly Name** for the key, for example: `finout-billing-read`.
4. Set the **Key Type** to **Standard**.
5. Click **Create API Key**. The **API Key** and **API Secret** appear.\
   **Important**: Copy the API Secret now. Twilio does not display it again after you close this.
6. Copy both the **API Key (SID)** and the **API Secret**. Save them for use in step 3.
7. Click **Done**.

***

### 3. Connect Twilio in Finout

With your Account SID, API Key, and API Secret ready, add Twilio as a Cost Center in Finout.

**To connect Twilio:**

1. In Finout, navigate to **Settings > Cost Centers** and click **Add cost center**. The **Connect Accounts** window appears.
2. Find **Twilio** and click **Connect Now**. The **Connect Twilio** wizard appears.
3. Enter the following details:
   * **Cost Center Name**: Enter a name for this Twilio cost center.
   * **Account SID**: Paste the Account SID copied in step 1.
   * **API Key**: Paste the API Key SID copied in step 2.
   * **API Secret**: Paste the API Secret copied in step 2.
4. Click **Complete Integration**. Your Twilio Cost Center is created.

{% hint style="info" %}
**Note**: Twilio data appears in Finout within 48 hours
{% endhint %}

***

### Data coverage and invoice reconciliation

Finout retrieves Twilio cost data through the Twilio Usage Records API. There are two known gaps between what the API returns and what appears on your Twilio invoice. Understanding them helps you reconcile Finout's figures against your invoice.

**Flat category hierarchy**

The Twilio Usage Records API returns data at multiple levels of the same hierarchy under the same column.

For example, `calls` appears as a single total alongside its sub-categories `calls-inbound` and `calls-outbound`. Similarly, `sms` appears alongside `sms-inbound`, `sms-outbound`, `sms-outbound-shortcode`, and `sms-outbound-longcode`.

Since the same spend is represented at every level of the hierarchy, in effect **the API reports the same cost multiple times**, which Finout deduplicates.

{% hint style="danger" %}
When categories are reported by the API that are outside Finout's deduplication allow-list, it may lead to missing costs; Finout will actively add new categories to this list to mitigate this gap.
{% endhint %}

**Products not available via the API**

Not all Twilio products that appear on your invoice are accessible through the Usage Records API. The following products return no records through the API and are therefore not reflected in Finout:

* **Flex**
* **Taxes**

{% hint style="danger" %}
**Important**: Because these products are not exposed by Twilio's API, the total cost shown in Finout will be lower than your Twilio invoice total. This gap cannot be closed through data processing alone. Contact <support@finout.io> if you need guidance on accounting for these costs alongside your Twilio cost center.
{% endhint %}


# AI Providers

AI providers offer managed services for running machine learning and generative AI workloads, such as large language models and embeddings.

In Finout, integrations with AI providers allow you to track and analyze costs based on usage metrics like tokens, requests, or compute consumption. This helps you understand how AI workloads contribute to your overall spend and optimize usage across models and applications.

The following AI Providers can be integrated with Finout:

* [Open AI](/billing-integrations/ai-providers/connect-to-openai)
* [Anthropic](/billing-integrations/ai-providers/connect-to-anthropic)


# Connect to OpenAI

### Overview

Finout's OpenAI integration ingests usage and cost data across two surfaces — **OpenAI Platform** (API-based usage via the Cost API) and **OpenAI Codex** (Enterprise usage via the Codex Analytics API). You connect either or both, and your OpenAI spend appears alongside your other cloud and SaaS services in [MegaBill](https://docs.finout.io/user-guide/inform/megabill) for a unified view.

The two surfaces are:

* **OpenAI Platform** — usage and cost data via the Cost API (models, tokens, projects, users).
* **OpenAI Codex** — usage and cost data via the Codex Analytics API, across the CLI, IDE extension, cloud agent, desktop app, and GitHub/Code Review surfaces.

With this integration, you can:

* Connect one or both OpenAI surfaces, and one or more OpenAI organizations.
* Include OpenAI cost and usage data in [custom dashboards](https://docs.finout.io/user-guide/inform/finops-dashboards), set up alerts to [track anomalies](https://docs.finout.io/user-guide/optimize/anomalies), and incorporate it into your [financial plans](https://docs.finout.io/user-guide/inform/financial-plans).

{% hint style="info" %}
**Note:** Finout uses read-only access to OpenAI APIs. It does not perform actions that can create, modify, or incur costs.
{% endhint %}

### Before you start

Each surface you connect requires its own credentials:

* **OpenAI Platform** requires an **Admin API key**. You must be an **Organization Owner** to create one.
* **OpenAI Codex** requires an **Analytics API key** and your **Codex Workspace ID**. You must have Codex enabled on a **ChatGPT Enterprise** plan, with owner or admin access to the [OpenAI Admin Console](https://admin.openai.com) to create the key and find your Workspace ID.

#### Step 1: Create your OpenAI credentials

Create a key for each surface you plan to connect.

**OpenAI Platform — Admin API key**

{% hint style="success" %}
**Prerequisite:** Only Organization Owners can create Admin API keys.
{% endhint %}

1. **Go to** the [OpenAI Admin Keys page](https://platform.openai.com/settings/organization/admin-keys).
2. **Click** **+ Create new admin key**.
3. **Add** a **Name** (e.g. "Finout Integration") and set **Permissions** to **Read only** (or **Restricted**, with the Usage API scope and Organization Administration set to read-only).\
   ![](/files/WxcLIWeU4kgwCY6BO2e1)
4. **Click** **Create admin key**. Copy it immediately — it will not be shown again.

{% hint style="info" %}
**Note:** Only Admin API keys can access the Usage API endpoints. Finout cannot perform any actions that incur costs, but OpenAI requires an Admin key to read usage data.
{% endhint %}

**OpenAI Codex — Analytics API key and Workspace ID**

{% hint style="success" %}
**Prerequisite:** You must be an owner or admin on a ChatGPT Enterprise plan with Codex enabled.
{% endhint %}

**Collect your Workspace ID:**

1. **Log in** to the [ChatGPT Admin console](https://chatgpt.com/admin).
2. **Navigate** to **Workspace details**.
3. **Copy** your **Workspace ID** — this is a ChatGPT UUID, distinct from your OpenAI organization ID. Save it for the connection step below.

**Create an Analytics API key:**

The Codex Analytics API key is created in the [OpenAI Admin Console](https://admin.openai.com).

1. **Log in** to the [OpenAI Admin Console](https://admin.openai.com) as a workspace owner or admin.
2. **Go to** **Credentials > Admin keys**.
3. **Click** **Create new admin key**, then **select** your workspace.
4. **Add** a **Name** (e.g. "Finout Codex Analytics") and set **Permissions** to **Restricted**.
5. Under the analytics permissions, **enable** **Codex Analytics: Read** (`codex.enterprise.analytics.read`).
6. **Click** **Create admin key**. Copy it immediately — it will not be shown again.

{% hint style="info" %}
**Note:** This key is workspace-scoped, not project-scoped — it's independent of any OpenAI Platform Admin key you've already connected.
{% endhint %}

#### Step 2: Connect OpenAI to Finout

1. In Finout, **navigate** to **Settings > Cost Centers** and **click** **Add cost center**.

<figure><img src="/files/FIeYWUaPYdDwgfbBCA6l" alt="" width="563"><figcaption></figcaption></figure>

2. Under **OpenAI**, **click** **Connect Now**. The OpenAI integration pop-up opens.

<figure><img src="/files/pLlexMPZhDL2d2e23d1R" alt="" width="563"><figcaption></figcaption></figure>

3. **Enter** a **Cost Center Name**.
4. Under **Select the OpenAI products to connect**, **select** **OpenAI Platform**, **OpenAI Codex**, or both.

<figure><img src="/files/8T6Mg3QwgPSqzRPa4NH1" alt="" width="563"><figcaption></figcaption></figure>

5. **Enter** the credentials for each product you selected:
   * **OpenAI Platform API Key** — the Admin API key from Step 1.
   * **OpenAI Codex API Key** — the Analytics API key from Step 1.
   * **OpenAI Codex Workspace ID** — the Workspace ID from Step 1.
6. **Click** **Complete Setup** if you selected OpenAI Platform only, or **Next** if you selected OpenAI Codex, to continue to credit pricing.

{% hint style="info" %}
Finout validates each credential on submit with a lightweight, read-only check. If a key or Workspace ID is invalid, the error identifies exactly which field failed.
{% endhint %}

If you connected OpenAI Platform only, your Cost Center is created here — skip ahead to What happens next. If you connected OpenAI Codex, continue below.

#### Step 3: Configure Credit Pricing (OpenAI Codex only)

OpenAI's Codex Analytics API reports **credit consumption**, not dollars. Finout calculates your cost as credits × price per credit, using the rate(s) you enter here — this figure comes from your OpenAI contract and isn't available through any API, so confirm it with your OpenAI account manager if you're unsure.

<figure><img src="/files/F8iCjkUgAXDLDQCHf5FG" alt="" width="563"><figcaption></figcaption></figure>

**1. Ongoing pricing** — the rate applied to your current usage onward:

* **Price Per Credit (USD)**
* **Start Date** — the date this rate takes effect

**2. Historical pricing for backfilling (optional)** — define previous pricing periods, for up to 13 months, so backfilled historical data is costed at the rate that was actually in effect at the time.

**Click Next** to review your entries on the **Credit Pricing Summary** step, then **click Complete Setup**.

#### What happens next

Your Cost Center is created, and you'll receive an email notification once Finout has retrieved your data. OpenAI data is backilled for the current month and up to two previous months.

#### Editing your integration

You can edit your OpenAI Platform key, Codex key, Workspace ID, price-per-credit schedule, or Cost Center Name at any time from **Settings > Cost Centers**. Editing a credential re-triggers the same validation check. Once done, you can contact Finout support at <support@finout.io> to back-correct data based on your edit.

### Understanding the OpenAI Origin dimension

When you connect both surfaces, every OpenAI row in MegaBill carries an **OpenAI Origin** dimension identifying which surface it came from:

* **OpenAI Platform** — rows ingested via the Cost API.
* **Codex** — rows ingested via the Codex Analytics API.

Some fields apply to only one surface:

| Field                                       | OpenAI Platform | OpenAI Codex                                                          |
| ------------------------------------------- | --------------- | --------------------------------------------------------------------- |
| Project Name, Project ID                    | Yes             | Empty                                                                 |
| API Key                                     | Yes             | Empty — Codex usage is user-authenticated, not key-metered            |
| Organization ID                             | Yes             | Empty — Codex is workspace-scoped                                     |
| Speed (standard / fast)                     | Empty           | Yes                                                                   |
| User Email                                  | Empty           | Yes, when your workspace exposes it — falls back to User ID otherwise |
| Actor Type (Account User / Service Account) | Empty           | Yes                                                                   |
| Model, Token Type, User ID                  | Yes             | Yes                                                                   |

### Codex API Constraints

* **Codex Enterprise seat fees aren't included.** OpenAI invoices flat per-seat Codex fees separately, and they never appear in the Analytics API — Finout reflects consumption spend only.
* **Token-level cost isn't available for Codex.** The Codex API reports credits per user, day, model, and speed, but doesn't break credits down by token type — so token type rows show usage without cost.

### FAQs

**Which OpenAI services does Finout support?**

* Finout retrieves cost data for all OpenAI Platform services, and detailed usage data for Completions and Images. Usage data for Embeddings, Vector Stores, Code Interpreter Sessions, Moderations, Audio Speeches, and Audio Transcriptions is expected in upcoming months.

{% hint style="info" %}
**Note:** If you identify a service that isn't yet supported, contact Finout support at <support@finout.io>
{% endhint %}

**Does Finout track historical name changes to OpenAI Projects or Users?**

Finout shows data exactly as returned by OpenAI's API, which doesn't provide point-in-time names for Projects or Users. Project IDs and User IDs are unique and immutable, so this only affects display names: renaming a Project or User in OpenAI updates the name across all historical data, and if a User is deleted, Finout still shows the user ID but not the name.

**Can I use one Cost Center for both OpenAI Platform and Codex?**

Yes. They're two ingestion paths under a single OpenAI integration — connect either or both under one Cost Center Name.

**Why is my Codex cost lower than my OpenAI invoice?**

Codex Enterprise seat fees are invoiced separately by OpenAI and aren't included in Finout's Codex numbers — Finout reflects consumption (credit) spend only.

**Why don't I see my onboarded Codex cost center?**

Codex is reported as part of an OpenAI cost center. For Codex-specific costs, use the Origin dimension and filter it for the 'Codex' value.

***

{% hint style="info" %}
**Need help?** If you run into any issues during setup, contact our support team at <support@finout.io> — we're happy to help.
{% endhint %}


# Connect to Anthropic

## Overview

Finout's Anthropic integration ingests cost and usage data across both Anthropic surfaces — the Admin API for API platform spend, and the Enterprise Analytics API for Claude.ai spend. You connect either or both, and your Anthropic spend appears alongside your other cloud and SaaS services in MegaBill for a complete, unified view.&#x20;

The two surfaces are:

* **Claude Platform** — API-based usage, models accessed via the Anthropic API.
* **Claude.ai** — chat, Claude Code, Cowork, and other claude.ai products.

With this integration, you can:

* Connect one or both Anthropic surfaces
* Connect one or more Anthropic organizations
* Include Anthropic cost and usage data in custom dashboards, set up alerts to track anomalies, and incorporate it into your financial plans to keep spending within budget

### Before you start

Each surface you connect requires its own key, generated in Anthropic:

* **Claude Platform** requires an **Admin API key**. You must have the Anthropic admin role in your organization to create one.
* **Claude.ai** requires an **Analytics API key**, available on Anthropic Enterprise plans only. You must be a Primary Owner on your Anthropic Enterprise account to create one. See Limitations below for plan and historical-data constraints.

{% hint style="info" %}
**On a Team plan?** The Claude.ai surface requires an Anthropic Enterprise plan. If you are on a Team plan, see [Tracking Claude.ai Spend](https://docs.finout.io/billing-integrations/ai-providers/connect-to-anthropic/tracking-claude.ai-spend) for a workaround.
{% endhint %}

### Step 1: Create your Anthropic keys

Create a key for each surface you plan to connect.

#### Claude Platform — Admin API key

{% hint style="success" %}
**Prerequisite:** You must have the Anthropic admin role in your organization to create an Admin API key.
{% endhint %}

1. **Navigate** to the Anthropic Console → [Admin keys page](https://console.anthropic.com/settings/admin-keys).
2. **Click** **+ Create Admin Key**.
3. **Enter** a **Name** with a clear identifier (e.g. Finout Integration) and **click** **Add**.
4. **Copy** the key immediately and store it securely — it will not be shown again.

<figure><img src="/files/aEsOejiMgqKtBgDKK17s" alt=""><figcaption></figcaption></figure>

#### Claude.ai — Analytics API key

{% hint style="success" %}
**Prerequisite:** You must be a Primary Owner on your Anthropic Enterprise account to create an Analytics API key.
{% endhint %}

1. In Claude.ai, **navigate** to **Analytics > API keys**.
2. **Find** the **Access** toggle under **Analytics API** and turn it on.
3. **Click** **+ Create key** to generate a new key.
4. **Copy** the key immediately and store it securely — it will not be shown again.

### Step 2: Connect Anthropic to Finout

1. In Finout, **navigate** to **Settings > Cost Centers** and **click** **Add cost center**.
2. Under **Anthropic**, click **Connect Now**.&#x20;

<div align="left"><figure><img src="/files/8jdJQcFtiZx5CSiOKEOx" alt=""><figcaption></figcaption></figure></div>

3. **Enter** the **Cost Center Name**.&#x20;
4. Under **Select the Anthropic products to connect**, **select** **Claude Platform**, **Claude.ai**, or both:
   1. **Claude Platform** — API-based usage, models accessed via the Anthropic API.
   2. **Claude.ai** — chat, Claude Code, Cowork, and other claude.ai products.
5. **Enter** the API key for each surface you selected — your Admin API key for Claude Platform, and your Analytics API key for Claude.ai — and **click** **Next**.&#x20;

<figure><img src="/files/QwpT6Ig8CfW2WxTlueHM" alt=""><figcaption></figcaption></figure>

#### Claude.ai limitations <a href="#claude-ai-limitations" id="claude-ai-limitations"></a>

* **Enterprise plans only.** The Claude.ai surface is available exclusively for Anthropic Enterprise accounts. Pro and Team plans are not supported.
* **Historical data starts January 1, 2026.** Anthropic does not expose Claude.ai usage data from earlier dates through this API.
* **Seat-based Enterprise plans:** the API only reflects spend that exceeds your included usage allotment. Usage-based Enterprise plans are covered in full.

### Understanding the Anthropic Origin dimension

When you connect both surfaces, every Anthropic data row in MegaBill carries an **Anthropic Origin** dimension, which identifies which Anthropic surface the row came from. Use this dimension to filter, group, or allocate Anthropic spend by surface.

Two values are possible:

* **Claude Platform** — applied to all rows ingested from the Admin API (`api.anthropic.com`).
* **claude.ai** — applied to all rows ingested from the Enterprise Analytics API (chat, Claude Code, Cowork, Office Agents, and Claude in Chrome).

Some Finout fields apply only to one Origin. For example, **Workspace** and **API Key** are Claude Platform concepts and appear empty on claude.ai rows; **User** and **Product** are claude.ai concepts and appear empty on Claude Platform rows. Filtering by Anthropic Origin keeps these dimensions meaningful when you build reports that focus on one surface.

## FAQs

**Does Finout keep track of historical changes to the Anthropic Workspace name?** Finout does not automatically track historical changes to Anthropic Workspace names; rather, it identifies Workspaces by their Workspace ID, which is unique and immutable. Workspace names are displayed based on the **current value available when data is ingested or when a historical run is executed**. As a result, when a Workspace name changes, Finout shows the new name from that point forward. Existing historical data is **not automatically updated**.

**Is usage data available for Anthropic?**

Yes, usage data for Anthropic is available in Finout. To view it, go to Usage, apply Filters as needed, and use Group By to break down Anthropic usage data . This allows you to analyze usage alongside cost for deeper visibility into consumption patterns.<br>

<figure><img src="/files/62RxeilodeWtGaNQDPAR" alt=""><figcaption></figcaption></figure>


# Tracking Claude.ai Spend (Teams plan)

{% hint style="warning" %}
**This page is for Team plans only.** If you are on an Anthropic Enterprise plan, connect Claude.ai natively from the [Connect to Anthropic](https://docs.finout.io/billing-integrations/ai-providers/connect-to-anthropic) wizard instead — no manual workaround needed. Use this page only if you are on a Team plan.
{% endhint %}

#### Overview

This page describes a manual workaround for bringing Claude.ai spend into Finout on a **Team plan**. The native [Anthropic integration](https://docs.finout.io/billing-integrations/ai-providers/connect-to-anthropic) connects both Anthropic surfaces directly — the API platform (Claude Platform) and Claude.ai — but the Claude.ai surface requires an Anthropic Enterprise plan.&#x20;

On Team plans, Anthropic does not expose Claude.ai data through the Analytics API, so the workaround on this page applies instead.

The workaround loads a CSV export from the Claude.ai admin console as a [Custom Cost Center](https://claude.ai/custom-cost-sources/custom-cost-centers) in Finout, so Claude.ai spend appears alongside your API platform spend in MegaBill.

#### Before you start

The Claude.ai spend export only captures spend that exceeds your included usage allotment. If extra usage isn't enabled on your Team plan, no spend report is generated. Flat per-seat fees are billed by Anthropic outside of the spend export and appear only on your Anthropic invoice; they are not covered by the workaround on this page.

**Who can run the export**

On Team plans, only Owner and Primary Owner roles can view usage analytics and run the spend export. Admins on Team plans cannot. The automation described below needs to authenticate as a role with access.

#### Set up a Custom Cost Center for Claude.ai spend

The pipeline has three parts:

1. Pull the spend report from Claude.ai on a daily schedule.
2. Transform it to the Custom Cost Center schema.
3. Drop the transformed file into an S3 bucket Finout has access to.

The [Custom Cost Center](https://docs.finout.io/billing-integrations/custom-cost-sources/custom-cost-centers) doc covers schema requirements, S3 setup, and ingestion behavior. The sections below cover what is specific to the Claude.ai source.

**1. Pull the spend report from Claude.ai**

Anthropic does not expose this data through a public API for Team plans, so the daily pull is implemented as a browser-driven automation against the Claude.ai admin console. The manual UI flow looks like this:

1. **Navigate** to **Admin settings > All activity** in Claude.ai.
2. **Scroll** to the **Spend** section.
3. **Click** **Export Spend Report**.
4. **Choose** **Custom** as the time period and set the start and end date to the previous day.
5. **Download** the CSV.

It is recommended to replicate this flow in a headless authenticated session running on a daily schedule, using a browser automation framework such as Playwright, Selenium, or an RPA platform. Configuring the export with a one-day window keeps the data daily-granular in Finout.

{% hint style="info" %}
**The export has a one-day lag.** Today's spend is available tomorrow. Plan dashboards and anomaly detection accordingly.
{% endhint %}

**2. Transform to the Custom Cost Center schema**

The Claude.ai export is structured around per-user, per-model rows summed across the selected date range. To load it into a Custom Cost Center, transform each row to include the two mandatory columns plus any dimensions you want to slice on in Finout.

| Custom Cost Center column | Source from Claude.ai export | Notes                                                                   |
| ------------------------- | ---------------------------- | ----------------------------------------------------------------------- |
| `UsageDate`               | Date of usage                | Format `YYYY-MM-DD`. Run a daily export window to get one date per row. |
| `Cost`                    | Net cost in USD              | Use the post-discount cost column to match what is actually invoiced.   |
| `User`                    | User email                   | Optional dimension. Enables per-user views and Virtual Tag mapping.     |
| `Model`                   | Model                        | Optional dimension. Sonnet, Opus, Haiku, etc.                           |

**3. Drop the file into an S3 bucket Finout has access to**

Provision an S3 bucket on your side and grant Finout access to it, then write the transformed CSV there. Once files are available in the bucket, contact <support@finout.io> to complete the integration. The full setup steps — bucket configuration, access permissions, and ingestion behavior — are covered in the [Custom Cost Center](https://claude.ai/custom-cost-sources/custom-cost-centers) doc.

#### FAQs

**Why isn't my Claude.ai spend included in the main Anthropic integration?** On Team plans, Anthropic publishes Claude.ai data separately and does not expose it through the Analytics API. Enterprise customers can connect Claude.ai natively from the [Connect to Anthropic](https://docs.finout.io/billing-integrations/ai-providers/connect-to-anthropic) wizard. Team customers, and those needing pre-2026 historical data, can use the workaround on this page.

**The export only shows partial spend on my Team plan. How do I track the rest?** The spend export only contains usage that exceeds your included allotment. Flat per-seat fees are billed separately by Anthropic and aren't part of the export.

For help designing the daily extraction, the transformation, or the S3 drop pattern, contact <support@finout.io>.


# Connect to Cursor

## Overview

The Cursor integration ingests cost and usage data from your Cursor account and makes it available in **MegaBill** alongside other cost centers (such as AWS and GCP). This allows you to analyze Cursor spend alongside the rest of your infrastructure costs.

* Finout connects to Cursor using the Admin API and retrieves read-only data. The integration does not perform any actions in your Cursor account.
* Once connected, you can break down Cursor costs by key dimensions, including User, Model, Kind (e.g. included in business for pre-paid tokens or usage-based for on-demand tokens), and Day.
* This helps you understand who is driving usage, which models are being used, and how costs evolve over time.

## Connect to Cursor

{% hint style="info" %}
**Prerequisite:** You must be a **Cursor team admin** to generate an Admin API key.
{% endhint %}

### 1. Create an API Key in Cursor

1. In Cursor, navigate and click on **Team Settings**.\
   You are brought to the **Team Settings** page.<br>

   <figure><img src="/files/cWzHTQXlPeF9ntwtQ3j8" alt=""><figcaption></figcaption></figure>
2. Scroll down to the **Advanced section**.<br>

   <figure><img src="/files/VvuIJ5kwvmczFanPJ6sv" alt=""><figcaption></figcaption></figure>
3. Click **Add**.\
   A new **API Key** row appears. Set its scope to **Read-Only** and its expiration to **Never Expires**<br>

   <figure><img src="/files/WZJIDzU13ms49GLJgnbK" alt=""><figcaption></figcaption></figure>
4. Enter an **API Key Name** and click **Save**.\
   The '**API Key Created**' pop-up appears.<br>

   <figure><img src="/files/niSUS4awmFFaIIPr5tb4" alt=""><figcaption></figcaption></figure>
5. **Copy** the API Key, save it for later, and click **Done**.

### 2. Integrate Cursor with Finout

1. In Finout, navigate to **Settings > Cost Centers**.<br>

   <figure><img src="/files/7Li7qGoP7Jz6fvpAB7TD" alt=""><figcaption></figcaption></figure>
2. Under Cursor, click **Connect Now**.\
   You are taken to the **Connect Cursor** step.<br>

   <div align="left"><figure><img src="/files/ae4s5IYCnn8b0FoqkVZ4" alt=""><figcaption></figcaption></figure></div>
3. Fill in the following fields:
   1. Cost Center Name
   2. Admin API Key (the key saved in the previous step)
   3. Enter a Monthly Seat Price in USD; enter $0 if your Cursor plan does not charge per seat
4. Click **Complete Setup**.\
   Your Cost Center is created - data should be available on Finout within 24 hours.

## Understanding Cursor Cost Data in Finout

Cursor pricing and usage differ from those of typical cloud providers. Understanding these differences will help you interpret your data correctly in Finout.

#### Cost is not broken down by token type

Cursor's API reports token usage split by type (*input*, *output*, *cache read* and *cache write*), but returns a **single aggregated cost** across all types combined.

As a result, Finout reports token counts broken down by type under usage, but cannot attribute cost to a specific token type.

#### Usage-based vs. seat-based costs

Cursor charges in two parts:

* **Included in business** - costs already pre-paid in your plan, such as tokens from a shared organization pool or usage included in a paid seat

{% hint style="info" %}
**To exclude 'included in business' costs from your data, contact your CSM**

These costs are pre-paid and already factored into your seat price. On seat-based plans, including them alongside seat costs counts the same spend twice. To report only on-demand usage, contact your CSM.
{% endhint %}

* **Usage-based cost** - on-demand API costs driven by model usage. These are sourced directly from Cursor's Admin API.
* **Seat cost** - a fixed monthly price per active user. In Finout, this is an estimate based on the number of billable seats in your team and the monthly seat price you provide during setup. This price is set manually and does not sync with your actual Cursor contract - if your contract changes, update it yourself in the cost center settings.

{% hint style="info" %}
**Seat-based costs are available from your integration date onward**

Cursor's API does not expose historical seat membership data, so seat costs prior to the day you connected Finout cannot be retrieved.

On-demand (usage-based) costs are unaffected and are backfilled historically.
{% endhint %}

#### Why Finout's usage-based numbers won't match your Cursor invoice exactly

Finout reports costs by full calendar day, which matches what you see in Cursor's Admin Console under the usage page.

Cursor invoices work differently: rather than closing at midnight, Cursor charges for usage whenever your organization's cumulative spend hits an internal threshold, then resets the counter. Since that threshold can be crossed at any point during the day, invoice lines won't align with calendar dates. The totals will be close but won't match to the cent.

{% hint style="info" %}
**When verifying Finout's numbers, use the Admin Console usage page - not the invoice.**
{% endhint %}

#### Per-user quota reset behavior

Each user's monthly quota resets based on their individual join date, not on the first of the month. This means users will have different quota cycles within the same calendar month, and usage patterns may appear uneven or staggered across users. This is expected behavior and does not indicate a data issue.

## FAQs

**Why do users show different usage patterns within the same month?** Each user's quota resets on their individual join date. Usage is therefore distributed across different time windows per user - this is expected and does not indicate a data issue.

**Why is Finout reporting more spend than my Cursor invoice on a seat-based plan?** Cursor's API reports usage already included in your seat price as a separate "included in business" cost line. By default, Finout reports all cost lines returned by the API, including these prepaid costs - which can make your total appear higher than your invoice.

To exclude "included in business" costs and report only on-demand usage billed on top of your plan, contact your CSM.

**Why is Finout reporting lower cost than Cursor's dashboard, when looking at only charged kinds?** When filtering out free, errored and aborted events, Cursor's dashboard may report a marginally higher cost than Finout.

This is because some of these events are actually partially charged for helpful model work, which is reflected in Cursor's dashboard but not in their API.

**Why doesn't my total match my Cursor invoice exactly?** Finout reports by full calendar day, while Cursor invoices are cut whenever cumulative spend hits an internal billing threshold - not at midnight. The numbers will be close but won't align to the cent. For verification, use the Admin Console usage page instead of the invoice.

**Why does a team member who left still appear in Finout?** Finout displays users based on data returned from Cursor's Admin API. If a user still appears, they are included in the usage or membership data for the selected time range. Historical usage for that user will continue to appear in Finout.

**How do I update my seat price after a contract change?** Edit your Cursor cost center and enter the new seat price. If your new contract has no per-seat charge, enter $0.

This takes effect going forward only - seat costs already calculated for past dates are not recalculated. This setting is independent of "included in business" cost reporting (see below); changing one does not affect the other.

**If I change how 'included in business' costs are reported, does that affect past data?** The "included in business" cost-reporting setting (changed via your CSM) is not time-bound: if it's toggled and a historical backfill is run, past dates are affected too, not just dates going forward.

**Can I have Finout apply different pricing logic to different date ranges (e.g. seat-based through June, usage-based from July)?** No. Both the seat price and "included in business" settings apply account-wide from the point they're changed - there's no way to define time-bound rules per contract period.


# Connect to fal.ai

### Overview

Finout's fal.ai integration lets you ingest cost data, to track fal.ai spend alongside your existing cloud and SaaS services in Finout. This gives you full visibility into key dimensions such as models, requests, and usage types.

Costs from fal.ai are reported as direct usage charges based on compute consumption (e.g., image generation runs, video processing requests). Unlike cloud providers, fal.ai does not offer blended, amortized, or committed-use pricing models. Finout maps fal.ai's raw usage cost into the Unblended Cost field for consistent FinOps reporting.

With this integration, you can:

* Connect one or more fal.ai accounts using an Admin-scoped API key.
* Include fal.ai cost data in custom dashboards, set up alerts to track anomalies, and incorporate it into your financial plans to ensure spend stays within budget.

{% hint style="info" %}
**Note:** Finout uses read-only access to fal.ai's Platform APIs. It does not perform any actions that can create or modify resources or incur costs.
{% endhint %}

### Prerequisites

Before setting up the integration, make sure you have:

* A fal.ai account with access to the **fal.ai Dashboard**.
* Sufficient permissions to create **API keys** in your fal.ai account.
* An **Admin-scoped API key** (required for access to usage and cost data via the Platform APIs).

### Step 1: Create a fal.ai API Key

1. Navigate to the [fal.ai API Keys page](https://fal.ai/dashboard/keys).\
   ![](/files/MhuHg9tkrpGUq5w0lWJa)
2. Click **Add key**.<br>

   <figure><img src="/files/jo0DFNjMn4WI2jhtO4LV" alt=""><figcaption></figcaption></figure>
3. Set the scope to **Admin** and enter a descriptive name for the key (e.g., "Finout Integration").\
   ![](/files/DJ53uCtANPq3VNdAFo0a)
4. Click **Create Key**.\
   The admin key is created. Copy it immediately and save it securely, as it will not be shown again.

### Step 2: Connect fal.ai to Finout

1. In Finout, navigate to **Settings**.
2. Under **fal.ai**, click **Connect Now**.\
   ![](/files/gr1XPEcSexfUNfE1cq1g)
3. Enter a **Cost Center Name**.
4. Paste the API key created in Step 1 into the **API Key** field and click **Complete Setup**.\
   **Result:** Finout validates the API key, and assuming it is valid, the Cost Center is created. You will receive an email notification once Finout has retrieved your data and set up the current cost center.<br>

   <figure><img src="/files/ClnCM0cvkPDzx0q8LYKb" alt=""><figcaption></figcaption></figure>

### FAQs

**Does Finout keep track of historical changes to fal.ai model names?**

Finout displays data as returned by fal.ai's APIs. Model identifiers are used as the primary dimension and are immutable. Display names or labels that change on the fal.ai side will be reflected in Finout from the point of change forward; historical data is not automatically updated.

***

{% hint style="info" %}
*Still need help? Please feel free to reach out to our team at <support@finout.io>.*
{% endhint %}


# Custom Cost Sources

Custom cost services represent internal or external costs that are not automatically ingested from native integrations.

In Finout, custom cost services allow you to import and allocate these costs alongside your cloud and SaaS spend. This helps you achieve full cost visibility by incorporating business-specific expenses such as internal tooling, shared services, or external vendors.

The following Custom Cost Sources can be integrated with Finout:

* [Custom Cost Centers](/billing-integrations/custom-cost-sources/custom-cost-centers)
* [Credentials Vault](/billing-integrations/custom-cost-sources/credentials-vault)


# Custom Cost Centers

Connect custom cost centers alongside the native cost centers supported by Finout. This integration allows you to consolidate costs from any source or system into a unified view, combining custom expenditures with your cloud expenses using Virtual Tags for further cost consolidation.

Custom cost centers are integrated via CSV files hosted on S3.

**To connect a custom cost center:**

1. Upload data in CSV format to an S3 bucket that Finout has access to:
   * **CSV Format**:

     ```
     "UsageDate","Cost","Dimension1","Dimension2"
     "2022-06-07","12.12","X","US"
     "2022-06-07","6.22","Y","US"
     "2022-06-08","0.05","X,"US"
     ```
   * **Mandatory fields**:

     * **UsageDate** - Date the cost was incurred (YYYY-MM-DD format)
     * **Cost** - Amount in USD (double precision)

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>:</p><ul><li>Additional dimensions can be added, as a dedicated column per dimension.</li><li>Data should be uploaded as a single CSV file per day.</li></ul></div>
2. Contact Finout support or open a support ticket and send them the CSV file stored in the S3 bucket.

   Once approved and ingested, your custom cost center will appear in Finout alongside native cost centers. This may take up to 48 hours from onboarding.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Finout will automatically ingest every file created or updated since the previous ingestion; when past files are edited, their up-to-date versions will overwrite existing data.</p></div>

#### Next Steps

Once your custom cost center is running, you can:

* View and analyze custom costs in your cost dashboards
* Create custom cost categories and dimensions
* Set up alerts and anomaly detection on custom cost data
* Use Virtual Tags to consolidate and allocate costs across your organization

<br>


# Credentials Vault

## **Overview**

The Credentials Vault is a secure tool for sharing sensitive credentials with Finout. It ensures your secrets are transmitted and stored safely. To use it, simply upload your credentials and contact Finout support with clear instructions on what actions you'd like them to take with the provided information.

{% hint style="info" %}
**Note**: Credentials Vault is available only upon request and not by default. To activate it, users should contact Finout support at <support@finout.io>.
{% endhint %}

{% hint style="success" %}
**Prerequisite**: Obtain your JSON key and Secret.
{% endhint %}

## Credentials Vault Creation

1. In Finout, navigate to **Settings.**<br>

   <figure><img src="/files/bPmatr6fhA5VELt61vLb" alt=""><figcaption></figcaption></figure>
2. Select **Cost Centers** and then click **Add cost center**.\
   You are brought to the **Connect Accounts** step.<br>

   <figure><img src="/files/LK8U5JBNvT3DgRknbZgd" alt=""><figcaption></figcaption></figure>
3. Select **Credential Vault**.\
   The **Credential Vault** creation appears.<br>

   <figure><img src="/files/bTIVuGgsxSARcxNOKHjy" alt=""><figcaption></figcaption></figure>

   \
   The Credential Vault is created.
4. Contact Finout support at <support@finout.io> with clear instructions on what actions you'd like them to take with the provided information.


# Kubernetes

#### Kubernetes Cost Management

Finout provides full visibility into Kubernetes costs by connecting cluster resource usage with the underlying cloud infrastructure costs. This allows organizations to allocate shared cluster spend accurately, identify inefficiencies, and understand the true cost of running applications in Kubernetes.

By combining infrastructure billing data with Kubernetes usage metrics, Finout calculates cost at a granular level and makes it accessible across the Finout platform. Teams can analyze Kubernetes spend by cluster, namespace, workload, labels, and other dimensions, enabling both engineering and finance stakeholders to understand where costs originate and how they can be optimized.

Finout’s Kubernetes cost management helps organizations:

* Allocate shared cluster costs across teams, services, and environments
* Understand cost drivers from cluster level down to individual workloads
* Identify waste and optimization opportunities, including idle resources and inefficient resource requests
* Align engineering and finance with a consistent, shared view of Kubernetes spend

#### Supported Kubernetes Platforms

Finout supports [cost allocation and analysis](/kubernetes-integrations/kubernetes/how-finout-calculates-kubernetes-costs) for the following managed Kubernetes platforms:

* Amazon EKS
* Google Kubernetes Engine (GKE)
* Azure Kubernetes Service (AKS)

#### Supported Metrics Sources

Finout relies on usage metrics to determine how cluster resources are consumed. These metrics can be provided through multiple supported monitoring systems.

Prometheus-based sources

* [Prometheus (per-cluster integration)](/kubernetes-integrations/kubernetes/prometheus/prometheus-per-cluster-integration-1)
* [Amazon Managed Prometheus](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/amazon-managed-prometheus-integration)
* [Chronosphere](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/chronosphere-integration)
* [Coralogix](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/coralogix-integration)
* [Mimir](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/mimir-integration)
* [Thanos](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/thanos-integration)
* [VictoriaMetrics](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/victoriametrics-integration)

Additional monitoring platforms

* [Datadog](/kubernetes-integrations/kubernetes/datadog/connect-to-datadog-kubernetes)

These integrations allow Finout to retrieve CPU,memory and network usage and request metrics required to accurately distribute cluster infrastructure costs across Kubernetes workloads.

#### Explore the Kubernetes Documentation

The following pages explain how Kubernetes cost allocation works in Finout and how to connect your monitoring systems to start analyzing Kubernetes costs.

<br>


# How Finout Calculates Kubernetes Costs

## Overview

Kubernetes is an abstraction layer over your infrastructure that orchestrates resources and manages their lifecycles. At the base of Kubernetes, there are **containers**, which package your application’s code and dependencies. Containers are grouped into **pods**, the smallest deployable units in Kubernetes. Pods are grouped into **workloads** (deployments, statefulsets, or cronjobs), which define how your application runs and scales, adding business context by connecting each pod’s purpose to its broader goal.

Each workload operates within a **namespace**, which serves as a logical scope that groups related workloads and resources, providing isolation, naming, and policy for environments, teams, or applications. Underneath these logical layers are the physical resources that Kubernetes manages: **nodes** (individual servers) and **clusters** (collections of nodes). Kubernetes orchestrates this entire stack and maintains the desired application state, ensuring availability.

### **The Challenges of Kubernetes Costs**

Kubernetes cost allocation presents a unique challenge in cloud financial management. Unlike traditional cloud vendor billing, where costs are directly tied to specific resources, Kubernetes abstracts away the underlying infrastructure, making it difficult to attribute costs to individual pods, namespaces, deployments, and applications.

### **Finout’s Solution**

Finout solves this challenge by combining Kubernetes request, usage, network metrics, with actual cloud billing data, transforming Kubernetes into a fully integrated cost center within your financial management framework. This integration ensures that Kubernetes cost data is available [across Finout](/kubernetes-integrations/kubernetes/kubernetes-across-finout), just like any other cloud provider.&#x20;

By treating Kubernetes as a standard cost center, users can leverage Finout's powerful cost management tools to address shared cost allocation and idle resource challenges effectively.

#### High-Level Calculation Process

Finout combines cloud billing data with Kubernetes metrics to accurately distribute node costs across Kubernetes abstractions based on resource consumption.

1. **Collect Metrics**: Finout gathers CPU and memory request and usage metrics, as well as network metrics from Kubernetes through its native integration with [Prometheus](/kubernetes-integrations/kubernetes/prometheus/prometheus-per-cluster-integration) or [Datadog](/billing-integrations/observability-platforms/connect-to-datadog), providing the foundation for accurate cost allocation and optimization.
2. **Parse Unit Metrics**: Finout identifies allocatable usage metrics per pod from raw Kubernetes data.
3. **Collect Node Costs**: Finout retrieves node costs from the cloud provider's billing.
4. **Apply Finout's Kubernetes Cost Algorithm**: Finout determines the resource’s CPU, Memory, and Network allocation and distributes the node costs accordingly.
5. **Idle Calculation**: Calculates and allocates costs for unused capacity.

## Step 1: Query the Metrics <a href="#h_e3918ed0e4" id="h_e3918ed0e4"></a>

Finout reads Kubernetes metrics from your connected source ([Prometheus](/kubernetes-integrations/kubernetes/prometheus/prometheus-per-cluster-integration) or [Datadog](/billing-integrations/observability-platforms/connect-to-datadog)) and uses them as the foundation of the Kubernetes cost calculation.&#x20;

Finout gathers per pod CPU, Memory, and Network metrics. These metrics provide the basis for parsing the usage metrics per pod in [step 2](#h_699f450f42).

{% hint style="info" %}
**Note**: The data is sampled at a one-minute resolution every 30 minutes, with the 30-minute interval being configurable per account.
{% endhint %}

## Step 2: Allocate the Metrics <a href="#h_699f450f42" id="h_699f450f42"></a>

Finout processes the collected Kubernetes metrics and assigns them to their respective pods, generating hourly usage and request hourly metrics allocations per pod. This allocation is then used to calculate pod costs in [step 3](#h_535ee08152).

### CPU & Memory

* Finout uses hourly Kubernetes metrics to calculate resource allocations for each pod, separately for CPU (cores) and memory (GiB). These allocations are later used to determine pod costs.
* It reflects engineering intent (requests) and actual consumption (usage) to avoid under- or over-allocation.
* For each hour, the CPU/Memory metrics allocation is **based on the larger value between the pod’s usage and the pod’s request**.
* It’s **capped** **at the node’s capacity**, thereby excluding any pending pods or nodes.

### Network

* Finout uses Kubernetes metrics to measure bytes received and bytes sent per pod (per hour), providing network usage context alongside CPU and memory.

> **For Example**:&#x20;
>
> * **Hour A:** CPU request peaks at **3 cores** in a certain hour, CPU usage peaks at **1 core** in the same hour → hourly CPU allocation = **3 cores**.
> * **Hour B**: CPU usage peaks at **4 cores** (above request) → hourly CPU allocation = **4 cores**.
> * The same “larger value of usage or request” rule applies to **Memory (GiB)** each hour.

## Step 3: Get the Hourly Price per Cloud Resource (Node) <a href="#h_535ee08152" id="h_535ee08152"></a>

Finout takes the node’s resource cost directly from your cloud billing and uses it as the price to be allocated later across the Kubernetes abstractions (namespaces/workloads).

* **Billing-sourced price**: Finout reads vendor’s billing exports (e.g., AWS CUR) to get the exact node $/hour.
* **Discount-aware**: Finout considers Savings Plans, RIs, Spot, and EDP (when applicable), so the price reflects your real effective rate.
* **Purpose**: This node's hourly price is used in the rest of the calculations.

## Step 4: Calculate the Pod Costs <a href="#h_da96737e2f" id="h_da96737e2f"></a>

To calculate the cost of a pod, Finout uses the **hourly CPU, memory, and network** metrics allocations ([step 2](#h_e3918ed0e4)), along with the **hourly node cost** ([step 3](#h_535ee08152)), to determine the pod's CPU and memory cost, respectively.

The hourly pod cost is reported as the total cost of the allocated CPU and memory within an hour. The problem is that the cloud provider does not provide billing data in this granularity, nor a CPU/memory cost breakdown. To apportion the node costs to CPU and memory costs in the pod level correctly, Finout specifies a configurable CPU/memory ratio applied in cost calculation algorithm for each resource, workload, cluster, or namespace.

{% hint style="info" %}
**Note**: Finout calculates Kubernetes costs at the pod level, based on each pod’s CPU and memory allocations. These calculations are then aggregated at the workload level (such as Deployments, CronJobs, and StatefulSets) and reflected in the MegaBill. This approach presents cost data in a meaningful business context rather than at the overly granular pod level.
{% endhint %}

### Compute Costs

#### **Calculation Process Overview:**

1. **Inputs**: Hourly Node Price ($/hour) from the cloud vendor billing + per-pod hourly CPU/Memory allocations.
2. **CPU:Memory ratio and algorithm**: This defines how node costs are split between CPU and Memory, and how the pod cost is calculated accordingly. \
   There are two types of algorithms: Recommended and Legacy.\
   \
   [**Recommended algorithm**](#compute-cost-recommended-algorithm): Based on a 88:12 CPU:Memory default ratio.

   * Starting November 2024, the Recommended algorithm is the default for all new accounts.
   * The default CPU:Memory ratio is configurable per account. To change it, contact <support@finout.io>.

   [**Legacy algorithm**](#compute-cost-legacy-algorithm): Based on a 50:50 CPU:Memory default ratio.

   * Accounts created before November 2024 use the Legacy algorithm by default. To migrate to the Recommended algorithm, contact <support@finout.io>.
   * The default CPU:Memory ratio is configurable per account. To change it, contact <support@finout.io>.
3. **Derive CPU/Memory unit prices at the node level**: Compute the price of one CPU core and one GiB for that hour (for the entire node).
4. **Price for each pod**: Multiply unit prices by the pod’s hourly CPU and Memory allocations, then sum them to get the hourly pod price.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Pods that define CPU or memory requests but do not emit usage metrics are excluded from workload cost allocation and classified as Idle.</p></div>

#### **Compute Cost - Recommended Algorithm**

The recommended Kubernetes cost algorithm uses an 88:12 CPU:Memory ratio by default for a more precise cost allocation, reflecting real-world usage where CPU is usually more expensive than memory.

**Hourly Pod Cost**: Hourly Pod Cost is calculated by multiplying the number of allocated CPUs by the hourly CPU cost, as well as the amount of allocated memory by the hourly memory cost, and then adding these two results.

<figure><img src="/files/mNctz8kp0ILiqu4lHgn9" alt=""><figcaption></figcaption></figure>

The pod's hourly pricing using the recommended algorithm is calculated using the following formulas:<br>

1. **Hourly Pod CPU Allocation**: Hourly pod CPU allocation is used to determine how much of the node’s CPU was allocated. This is based on the greater value of the average hourly CPU usage or the average hourly CPU request. See the full explanation about parsing the metrics per pod in [step 2](#h_699f450f42).<br>

   <figure><img src="/files/XNfC3YhtGJOoHOoSvhaB" alt=""><figcaption></figcaption></figure>
2. **Hourly Pod CPU Cost**: Calculates the cost of a single CPU unit per hour per pod.<br>

   <figure><img src="/files/qPU7wkYZC5l14iIq8msQ" alt=""><figcaption></figcaption></figure>

   * **Instance Price Per Hour** = The hourly price of the node. This data is taken from [step 3](#h_535ee08152).
   * **CPU Count** = Number of cores within the node
   * **CPU Ratio** = 88% by default
   * **RAM (GiB)** = Number of GiBs within the node
   * **Memory Ratio** = 12% by default
3. **Hourly Pod Memory Allocation**: Hourly Pod Memory Allocation is used to determine how much of the node’s CPU was allocated. It is based on the greater value of the average hourly CPU usage or the average hourly CPU request. See the full explanation about parsing the metrics per pod in [step 2](#h_699f450f42).

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: For AKS cost calculation (Azure), the calculations are performed on a daily granularity, not an hourly granularity.</p></div>

   <figure><img src="/files/hCBhToPW7xXIpD0Ux8QF" alt=""><figcaption></figcaption></figure>
4. **Hourly Pod Memory Cost**: Calculates the cost of a single Memory unit per hour per pod.

   <figure><img src="/files/HnmU5QqThLtDsPahLAXA" alt=""><figcaption></figcaption></figure>

   * **Instance Price Per Hour** = Hourly price of the node. This data is taken from [step 3](#h_535ee08152).
   * **CPU Count** = Number of cores within the node
   * **CPU Ratio** = 88% by default
   * **RAM (GiB)** = Number of GiBs within the node
   * **Memory Ratio** = 12% by default

**Example**:&#x20;

You have **one node** with **4 vCPUs** and **12 GiB RAM.**&#x20;

* The cloud bill shows **$10.00 for this hour**.
* Two pods are running, and in both cases **usage < request**, so we use **requests** (from [Step 2](#h_699f450f42)):
  * podA: 2 cores, 3 GiB
  * podB: 1 core, 5 GiB

{% hint style="info" %}
**Note**: The “CPU count” and “RAM count” values are identical for both pods because they are derived from the node that hosts them (the node has 4 cores and 12 GiB). Since both pods run on the same node, each pod’s entry reflects the node’s total CPU and memory capacity rather than pod-specific usage.
{% endhint %}

Based on this setup, let’s break down the pod cost calculation into the variables below.

| Variable                                               | podA                                      | podB                                      |
| ------------------------------------------------------ | ----------------------------------------- | ----------------------------------------- |
| Hourly pod CPU allocation                              | 2 cores                                   | 1 cores                                   |
| Hourly pod Memory allocation                           | 3 GiB                                     | 5 GiB                                     |
| Ratio CPU:Memory                                       | 88:12                                     | 88:12                                     |
| Calculating Hourly Pod CPU Cost (shared; same node)    | (10/(4×0.88 + 12×0.12))×0.88 = **1.774$** | (10/(4×0.88 + 12×0.12))×0.88 = **1.774$** |
| Calculating Hourly Pod Memory Cost (shared; same node) | (10/(4×0.88 + 12×0.12))×0.12 = **0.242$** | (10/(4×0.88 + 12×0.12))×0.12 = **0.242$** |
| Calculating Hourly pod cost                            | (1.774×2 + 0.242×3) = **4.274$**          | (1.774×1 + 0.242×5) = **2.984$**          |

Based on this breakdown, the **node cost according to Finout (Recommended algorithm)** is: **4.274$ + 2.984$ = 7.258$**.

Proportionally, the [Node idle cost](#h_6d91610b58) is: **10$ − 7.258$ = 2.742$**.

#### **Compute Cost - Legacy Algorithm**

The legacy algorithm uses a 50:50 CPU:Memory ratio for accounts created before November 2024, and haven’t been migrated to the refined algorithm yet. This balanced split was ideal for average workloads, but could result in inaccurate financial reporting when actual resource configurations differ.\
\
**Hourly Pod Cost** - This refers to the cost of the pod per hour, which is the total price without distinguishing between memory and CPU usage.

<figure><img src="/files/2kvAHsO8RYvwt04wbmCD" alt=""><figcaption></figcaption></figure>

The CPU/Memory pricing of the legacy algorithm is calculated using the following formulas:

1\. **Hourly Pod CPU Allocation** - Hourly pod CPU allocation is used to determine how much of the\
node’s CPU was allocated. It's based on the greater value of the average hourly CPU usage\
or the average hourly CPU request. See the full explanation about parsing the metrics per pod\
in [step 2](#h_699f450f42).

<figure><img src="/files/hplAu3pC5jzGrYcheoib" alt=""><figcaption></figcaption></figure>

2\. **Hourly Pod CPU Cost** - Calculate the CPU cost by applying the CPU allocation ratio to the [node’s total cost](#h_535ee08152), adjusted for the node’s active time. This calculation is based on the hourly pod CPU\
allocation derived in the previous formula.

{% hint style="info" %}
**Note**: Uptime is calculated on an hourly basis. In vendor billing, node uptime is reported as a fraction\
of the hour (0–1), while some metric sources report seconds. Since billing values are limited to a range of 0–1 per hour, total costs aren’t derived by multiplying by total hours. Uptime is calculated separately for each hour, and the hourly pod costs are then summed to produce the daily total.
{% endhint %}

<figure><img src="/files/LkE9r364IRtlM511BJvE" alt=""><figcaption></figcaption></figure>

3\. **Hourly Pod Memory Allocation** - Hourly pod memory allocation shows how much of the node’s memory was allocated. It is calculated as the greater value of the average hourly memory usage or the average hourly memory requests. See the full explanation about parsing the metrics per\
pod in [step 2](#h_699f450f42).<br>

<figure><img src="/files/S3LZ0GA2ZL5lngJsAo3p" alt=""><figcaption></figcaption></figure>

4\. **Hourly Pod Memory Cost** - Calculates the Memory cost out of the [node’s total cost](#h_535ee08152), using the allocation ratio, considering the actual time the node was active and in use.  This calculation is based on the hourly pod memory calculation derived in the previous formula.

{% hint style="info" %}
**Note**: Uptime is calculated on an hourly basis. In vendor billing, node uptime is reported as a fraction\
of the hour (0–1), while some metric sources report seconds. Since billing values are limited to a range of 0–1 per hour, total costs aren’t derived by multiplying by total hours. Uptime is calculated separately for each hour, and the hourly pod costs are then summed to produce the daily total.
{% endhint %}

<figure><img src="/files/XWfliJRgX8uulEsRTnlf" alt=""><figcaption></figcaption></figure>

**Example**:&#x20;

* You have **one node** with **4 vCPUs** and **12 GiB RAM**. &#x20;
* The cloud bill shows **$10.00 for this hour**.
* Two pods are running, and in both cases **usage < request**, so we use **requests** (from [Step 2](#h_699f450f42)):
  * **podA**: requesting **2 CPUs** and **3 GiB RAM**, **node uptime = 1 hour**
  * **podB**: requesting **1 CPU** and **5 GiB RAM**, **node uptime = 0.5 hour**
  * Totals (this hour):
    * Cores count = 3
    * GiB count = 8

\
Based on this setup, let’s break down the pod cost calculation into the variables below:

| Variable                            | podA                                                                                                                          | podB                                                                                                                            |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Hourly pod CPU allocation           | 2 cores                                                                                                                       | 1 cores                                                                                                                         |
| Hourly pod Memory allocation        | 3 GiB                                                                                                                         | 5 GiB                                                                                                                           |
| Ratio CPU:Memory                    | 50:50                                                                                                                         | 50:50                                                                                                                           |
| Node Uptime (hourly fraction)       | 1                                                                                                                             | 0.5                                                                                                                             |
| Calculating Hourly Pod CPU Cost     | <p></p><p>(Node Price / # Cores) x \[Hourly] Pod CPU Allocation x Node Uptime : (10 / 3) x 2 x 1 = <strong>6.66$</strong></p> | <p></p><p>(Node Price / # Cores) x \[Hourly] Pod CPU Allocation x Node Uptime : (10 / 3) x 1 x 0.5 = <strong>1.66$</strong></p> |
| Calculating Hourly Pod GiB Cost     | <p></p><p>(Node Price / # GiB) x \[Hourly] Pod GiB Allocation x Node Uptime : (10 / 8) x 3 x 1 = <strong>3.75$</strong></p>   | <p></p><p>(Node Price / # GiB) x \[Hourly] Pod GiB Allocation x Node Uptime : (10 / 8) x 5 x 0.5 = <strong>3.125$</strong></p>  |
| Calculating Hourly Pod Cost (50:50) | 6.66*0.5 + 3.75*0.5 = **5.205$**                                                                                              | 1.66*0.5 + 3.125*0.5 = **2.392$**                                                                                               |

Based on this breakdown, the node cost according to Finout (Legacy algorithm) is: 5.205$ + 2.392$ = **7.6$**.\
Proportionally, the [Node idle cost](#h_6d91610b58) is: 10$ − 7.6$ = **2.4$**.

#### Unutilized Pod Costs - Limited Release

{% hint style="warning" %}
This feature is under a **limited release** and isn't enabled by default. To enable it, contact Finout support at <support@finout.io>.\
**Note**: This feature is automatically available for all accounts created starting mid-February 2026.
{% endhint %}

Unutilized Pod costs represent the **idle portion of Kubernetes compute costs of a certain workload,** meaning it shows the cost requested but unused resources at the workload level.&#x20;

This cost is available when using the [**Kubernetes Utilization Type**](/kubernetes-integrations/kubernetes/kubernetes-across-finout#filtering-and-grouping-kubernetes-enrichment) dimension. Using this dimension helps you to identify Kubernetes compute waste caused by over-provisioned workloads, even when overall cluster spend remains unchanged.

**How does Finout Identify Unutilized Pods?**

Finout categorizes Kubernetes compute costs using the [**Kubernetes Utilization Type**](/kubernetes-integrations/kubernetes/kubernetes-across-finout#filtering-and-grouping-kubernetes-enrichment) dimension:

* **Utilized Pods** – Cost of CPU and memory that were actually used by workloads.
* **Unutilized Pods** – Cost of CPU and memory that were requested but not used, causing Idle costs at the workload level.
* **Idle Nodes** – Cost of node-level capacity that was not allocated to any pod.

**Unutilized Pod Costs are calculated in two steps:**

1\. Unutilized Pod Allocation

To calculate Unutilized Pod Costs, Finout adjusts the perspective on CPU and memory allocation. For each Kubernetes compute row, Finout identifies the unutilized CPU and memory portions at the pod level by subtracting actual usage from the requested resources.<br>

* Hourly Unutilized Pod CPU Allocation = `cpu_alloc − cpu_hourly_usage`
* Hourly Unutilized Pod Memory Allocation (GB) = `mem_alloc_gb − mem_hourly_usage`

{% hint style="info" %}
**Note**:&#x20;

* If the allocation equals actual usage, the difference is 0, and no unutilized (waste) cost is generated.
* If the calculated value is less than or equal to zero, that component does not contribute to Unutilized Pods.
  {% endhint %}

2\. Unutilized Cost Calculation

The unutilized CPU and memory allocations are then used as the hourly allocation input at the standard Kubernetes [compute cost formulas](#compute-costs) described above.&#x20;

{% hint style="info" %}
**Note**:&#x20;

* Unutilized Pod cost calculations apply to **Kubernetes compute rows only**.
* For network rows, Finout emits **only Utilized Pods cost**.
  {% endhint %}

### Network cost <a href="#h_68d7ce706f" id="h_68d7ce706f"></a>

Finout determines each node’s hourly data transfer cost using cloud provider data. It then allocates this cost to individual pods by analyzing their incoming and outgoing network traffic. Each pod’s share of the total node network cost is calculated according to its usage of the network metrics.

{% hint style="info" %}
**Note**: Pod idle costs are not calculated in the network cost.
{% endhint %}

## Step 5: Calculate Node-Level Idle <a href="#h_6d91610b58" id="h_6d91610b58"></a>

For each node and hour, **Node Idle** is the unallocated portion of the node’s price after pod costs are attributed according to Finout’s calculation in [Step 4](#h_da96737e2f):

**Node Idle (per hour) = Node Price (billing, Step 3) − Σ (pod costs on that node for the same hour,** [**Step 4**](#h_da96737e2f)**)**

#### Why does this happen?

Idle capacity on a node is often associated with oversized instances or uneven packing. Kubernetes schedules pods onto available space; in busy, mixed workloads it’s tempting to use larger nodes that can host many pods. When demand drops, those large nodes can sit partially empty. Using smaller instance types (or tuning autoscaling) can reduce this idle. Conversely, nodes that are too small may also end up underused if they can’t efficiently host multiple workloads.

#### Where to see and how to allocate this?

Node-level idle appears in Finout under the **Idle Namespace** dimension. Teams often allocate it differently from **overhead** (platform essentials) to encourage efficiency. Use **Virtual** **Tags** to distribute Node Idle across the teams/applications of your choice.

<figure><img src="/files/xW8hrv3pA5Wna5KSO5KV" alt=""><figcaption></figcaption></figure>

#### What to do next?

Use [CostGuard](/user-guide/optimize/costguard) to identify and optimize **Workload Idle** (also known as waste), which occurs when resource **requests exceed actual usage**. CostGuard’s Idle/Rightsizing scans help you right-size CPU/Memory requests and reduce waste.

## FAQs

#### **How does Finout calculate cross-AZ network costs for Kubernetes workloads?**

* Kubernetes metrics do not include a cross-AZ signal.
* Finout detects cross-AZ spend from billing: **EC2 → Transfer → DataTransfer-Regional-Bytes** line items in the CUR.
* For each node and hour, that cross-AZ cost is allocated to pods **proportionally to each pod’s share of the node’s total network bytes** (in + out).
* This is a **best-effort weighting**. Prometheus and common K8s metrics do not include source or destination subnet or AZ, so we cannot prove which pod-to-pod traffic actually crossed AZs.

#### **Why does a Kubernetes namespace show a lower cost than expected, with the remaining cost appearing as “Idle”?**

Finout allocates Kubernetes compute costs to namespaces based on **CPU and memory usage metrics**.\
If a namespace emits **only request metrics** (CPU or memory requests) but **does not emit usage metrics**, Finout cannot attribute the compute cost to that namespace. In this case, the unused capacity is classified as **Idle**.

As a result, the namespace may show a **lower cost than expected**, while a higher portion of the cost appears under **Idle**. The **total Kubernetes cost remains unchanged**—only the attribution between namespaces and Idle shifts.

#### **How does Finout determine which cost center to enrich with Kubernetes metrics?**

Each scraped metric includes labels such as cluster and node. Finout uses these labels to join Kubernetes metrics to billing objects, factoring in dates. The mapping is driven by the cost centers you select during integration setup - Finout attempts to match incoming metrics against the nodes belonging to those cost centers. The first matching join wins.

For best results, ensure nodes are unique across cost centers.

#### **Can an enrichment be reversed if something goes wrong?**

Yes. Enrichments can be stopped, and the valid date range for any enrichment is configurable, allowing a problematic enrichment to be scoped out retroactively. Contact Finout Support to make this adjustment.


# Kubernetes Across Finout

## Overview  &#x20;

Finout’s Kubernetes enrichment enables deep, consistent visibility into Kubernetes costs across your platform. By incorporating native Kubernetes dimensions like namespaces, labels, and resource types throughout Finout, you can analyze, track, and optimize cloud spend for Kubernetes workloads across all platform features.

Whether tagging resources, building dashboards, exploring data, or setting alerts, the Kubernetes enrichment allows you to group, filter, and report Kubernetes costs in ways that align with your engineering structure. This makes it easier for FinOps, DevOps, and engineering teams to collaborate, optimize usage, and drive accountability across clusters.

## Using Kubernetes in Finout

Here is a list of where you can use the Kubernetes data in Finout:

* [**MegaBill**](/user-guide/inform/megabill): The Kubernetes enrichment in Finout's MegaBill provides cost and usage visibility across your Kubernetes environment. By grouping and filtering by native attributes like namespaces, labels, and resource types, users can track spend trends, spot inefficiencies, and connect usage changes to cost impacts, supporting better optimization and budgeting over time.team's\
  \
  *Example*: \
  Filter on Kubernetes cost center and group by namespace to break down costs per application. This not only helps you see which namespaces are driving the highest costs and allocate expenses accurately across projects or departments, but also makes it easy to spot idle namespaces that can be rightsized for greater efficiency, using the dedicated ‘idle’ namespace created by [Finout’s Kubernetes cost calculation algorithm](/kubernetes-integrations/kubernetes/how-finout-calculates-kubernetes-costs).<br>

  <figure><img src="/files/hvLuWNY51QtU8Xlqcm6w" alt=""><figcaption></figcaption></figure>

  See [below ](#filtering-and-grouping-kubernetes-enrichment)for a different example.
* [**Dimension Sets** ](/settings/dimension-sets)- Select the relevant Kubernetes dimensions for streamlined filtering and grouping within the set’s context.<br>

  <figure><img src="/files/m5NmruTmFEWLfZgtDBtL" alt=""><figcaption></figcaption></figure>
* [**Create Virtual Tags**](/user-guide/inform/virtual-tags) -Use Kubernetes Dimensions like namespaces or labels to auto-tag workloads by team, project, or environment, which can also be used for shared cost reallocation.<br>

  <figure><img src="/files/KZFuxb2YtRK7YRtzghdJ" alt=""><figcaption></figcaption></figure>
* [**Creating Custom Dashboards (Widgets)**](/user-guide/inform/finops-dashboards/custom-dashboards) -Build dashboards filtered and grouped using Kubernetes dimensions to monitor workload costs and usage in real time.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This is relevant for all widgets except for CostGuard.</p></div>

  <figure><img src="/files/95oXoQNaicnTQ0HdCd7N" alt=""><figcaption></figcaption></figure>
* [**Predefined Dashboards**](/user-guide/inform/finops-dashboards/predefined-dashboards) - The Kubernetes predefined dashboard in Finout offers Kubernetes costs visualizations based on key dimensions, such as cluster, node, namespace, and workload. This dashboard helps you to quickly identify top spending workloads, idle node costs at different levels, and understand your Kubernetes spend across Cloud vendors based on the enabled enrichment integrations in your account through clear, actionable charts with no setup required.

<figure><img src="/files/cOtPCyUhV5sAJ5UsD4pB" alt=""><figcaption></figcaption></figure>

* [**Reports** ](/user-guide/operate/reports)- Generate reports for related  Kubernetes dashboards to share your dashboards' cost and usage summaries.<br>

  <figure><img src="/files/dMUNsHDwH0gcvPyshiaY" alt=""><figcaption></figcaption></figure>
* [**Financial Plans**](/user-guide/inform/financial-plans) -Plan budgets based on Kubernetes cost usage trends across clusters, namespaces, or workloads related to the CSP infrastructure that Kubernetes is using.<br>

  <figure><img src="/files/DHPfnHu6ygUlzYrzCGX2" alt=""><figcaption></figcaption></figure>
* [**CostGuard Scans**](/user-guide/optimize/costguard/finout-scans) - Identify inefficiencies and optimize costs of Kubernetes environments using Kubernetes right-sizing scans.<br>

  <figure><img src="/files/Z2uc02hGKjUFW1vnZefo" alt=""><figcaption></figcaption></figure>

  \
  As part of [Kubernetes rightsizing](/user-guide/optimize/costguard/finout-scans#h_72d396e03d), when a user clicks on a resource that can be optimized, they can use Finout's dynamic calculator to simulate CPU and Memory values per node. The calculator proposes recommended requests based on the percentile usage of your samples, and shows minimum, maximum, and average usage, allowing you to understand how the potentially applied changes will affect the optimized cost.<br>

  <figure><img src="/files/uAGH00YAPlUfQcumHVFe" alt=""><figcaption></figcaption></figure>
* [**Anomaly Alert**](/user-guide/optimize/anomalies) -Set alerts for unusual Kubernetes usage or cost spikes based on historical behavior.<br>

  <figure><img src="/files/9x5hRgfTuabfVjPGLnZz" alt=""><figcaption></figcaption></figure>
* **Cost per Entity** -Break down cost per Kubernetes entity (e.g., namespace or workload) for showback or chargeback.
* [**Governance** ](/user-guide/operate/tag-governance)- Track tagging coverage and compliance for Kubernetes resources across your organization.<br>

  <figure><img src="/files/6ZrpfWTUkFESp3WfABUo" alt=""><figcaption></figcaption></figure>
* [**Data Explorer**](/user-guide/inform/data-explorer) - Explore Kubernetes data by workload, namespace, or label to uncover trends and outliers.<br>

  <figure><img src="/files/o3GPcW1vNV0qniBtsO7h" alt=""><figcaption></figcaption></figure>
* **Resources View** - Drill down into individual Kubernetes resources to analyze cost and usage.<br>

  <figure><img src="/files/SDHpLjacPBE4ivbNMxgG" alt=""><figcaption></figcaption></figure>

## Filtering and Grouping Kubernetes Enrichment

Utilize Finout’s filtering and Group By features to break down and analyze Kubernetes costs by dimensions such as namespaces, pods, workloads, and node and pod labels. In MegaBill, you can combine these Kubernetes dimensions with every cost center and virtual tags, giving you a clear, flexible view of your costs across the entire environment. This enables cost optimization, team-based spending tracking, and strategic decision-making for your Kubernetes environment.

**Example Scenario: Identifying Teams with High Kubernetes Idle Costs**

To identify which teams are driving high Kubernetes idle costs and determine which environments may require rightsizing optimization, follow this targeted analysis workflow. By systematically filtering and grouping your data, you can quickly pinpoint optimization opportunities:

1. **Filter** Kubernetes data for AWS or any other cost center whose infrastructure Kubernetes uses in your account.<br>

   <figure><img src="/files/Lgp7z3zEmIzmUxTZRnDp" alt=""><figcaption></figcaption></figure>
2. **Group by** the K8s dimension " k8s\_namespace".<br>

   <figure><img src="/files/L2hhOcRpupjcOpOFvz8L" alt=""><figcaption></figcaption></figure>
3. [**Filter** ](/kubernetes-integrations/kubernetes/how-finout-calculates-kubernetes-costs)for idle namespace, which represents idle node costs.<br>

   <figure><img src="/files/aqRz6dpMuxiACUT3RttG" alt=""><figcaption></figcaption></figure>
4. Change **Group by** to "teams" virtual tag.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be done only if the teams virtual tag isn't using reallocation, and it can also be applied to any other virtual tag in your account.</p></div>

   <figure><img src="/files/ITWkbgSauP68rDa8qvFM" alt=""><figcaption></figcaption></figure>

This workflow helps identify teams with idle resources that could benefit from environment optimization and pinpoint teams that aren't fulfilling the full potential of their Kubernetes-related resource requests versus actual usage—enabling these teams to rightsize resources for cost optimization.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWqjB2puKXPDR7L86FX2e%2Fuploads%2F53dEYiXqhO2Ov5S32o59%2Fk8s_example%20(1)%20(online-video-cutter.com)%20(2).mp4?alt=media&token=d1ae695d-ad0d-4155-8393-f134d94c0599>" %}

**Example Scenario: Identifying Engineering Teams that can Optimize their Kubernetes Infrastructure**

Finout enables you to analyze Kubernetes costs by resource utilization, helping you identify resources that can be optimized.

Kubernetes costs in Finout are broken down into three utilization types, using the **Kubernetes Utilization Type** dimension:

* **Idle Nodes** – Node-level capacity that is not allocated to any pod, representing infrastructure-level idle capacity.
* **Utilized Pods** – Pod resources that are both requested and actively used, based on CPU or memory usage metrics.
* **Unutilized Pods** (limited release) – Pod resources that are requested but not used, reflecting over-provisioned workloads.

Group by **Kubernetes Utilization Type** (limited release) and team to find workloads that regularly request more CPU or memory than they use. High unutilized workload cost flags over-provisioned requests and guides engineering teams for rightsizing.

{% hint style="warning" %}
This feature is under a **limited release** and isn't enabled by default. To enable it, contact Finout support at <support@finout.io>.\
**Note**: This feature is automatically available for all accounts created starting mid-February 2026.
{% endhint %}

1. **Group By**: Group by the Kubernetes dimension "k8s\_utilization\_type".<br>

   <figure><img src="/files/fratl0Mmvkqe0GW1g9KT" alt=""><figcaption></figcaption></figure>
2. **Add Filter**: Filter by Unutilized Pods.<br>

   <figure><img src="/files/N5DWKFE1iHmvlfPsSpJk" alt=""><figcaption></figcaption></figure>
3. Change the **Group by** to "teams" Virtual Tag.<br>

   <figure><img src="/files/YZoVbGuuO5DEaYCXmsep" alt=""><figcaption></figcaption></figure>

**Result:** You identified engineering teams that can optimize their Kubernetes infrastructure by rightsizing their workloads. See [CostGuard](/user-guide/optimize/costguard/finout-scans#h_72d396e03d) for more details.

<figure><img src="/files/giML7E90mcL1m8FnldyR" alt=""><figcaption></figcaption></figure>

**Example Scenario: Filtering Kubernetes Costs Running On A Specific Cloud Provider**

{% hint style="info" %}
**Note**: This scenario applies to any cloud provider that supports Kubernetes enrichment in Finout (AWS, GCP, or Azure).&#x20;

This example uses AWS, but you can use the same steps for other supported cloud providers.
{% endhint %}

To view the costs of Kubernetes running on a specific cloud provider infrastructure:

1. Open the MegaBill.<br>

   <figure><img src="/files/kPzqNqkkhwkySHzbYUkW" alt=""><figcaption></figcaption></figure>
2. Open **Filters** and select the **K8s Origin** dimension.<br>

   <div align="left"><figure><img src="/files/eoayPLzjzOjFzyVvShhb" alt=""><figcaption></figcaption></figure></div>
3. Choose the relevant cloud provider (amazon-cur, for example) and click **Apply Filters**.\
   This filters Kubernetes costs that run specifically on the selected cloud provider’s infrastructure.<br>

   <div align="left"><figure><img src="/files/3cDTiDVCCW3P7ppaf68L" alt=""><figcaption></figcaption></figure></div>

This workflow helps identify the costs of running Kubernetes on a specific cloud provider’s infrastructure, enabling you to analyze Kubernetes spend in the selected cloud's context while maintaining the total cloud costs.


# Kubernetes FAQs

FAQs cover the most common questions about Finout’s Kubernetes integrations. If you need additional assistance, contact Finout at <support@finout.io>.

#### Is Finout double-counting Kubernetes costs running on a specific cloud infrastructure?

No. Finout does not double-count Kubernetes costs.

Kubernetes costs in Finout are not additional charges. Finout classifies the relevant cloud billing rows that are associated with Kubernetes resources as "Kubernetes" cost center. The total cloud cost remains unchanged.

When you filter by a cloud provider (for example, AWS), Kubernetes-related costs automatically appear under that provider because they are billed under the same cloud provider.&#x20;

Finout does not increase the total cost; it only classifies the relevant billing rows as Kubernetes spend.

<div align="left"><figure><img src="/files/G99lNEycqOkZgA85Eslj" alt=""><figcaption></figcaption></figure></div>

To view the costs of Kubernetes running on a specific cloud provider infrastructure:

{% hint style="info" %}
**Note**: This scenario applies to any cloud provider that supports Kubernetes enrichment in Finout (AWS, GCP, or Azure).&#x20;

This example uses AWS, but you can use the same steps for other supported cloud providers.
{% endhint %}

1. Open the MegaBill.
2. Open **Filters** and select the **K8s Origin** dimension.<br>

   <div align="left"><figure><img src="/files/eoayPLzjzOjFzyVvShhb" alt=""><figcaption></figcaption></figure></div>
3. Choose the relevant cloud provider (amazon-cur, for example) and click **Apply Filters**.\
   This filters Kubernetes costs that run specifically on the selected cloud provider’s infrastructure.<br>

   <div align="left"><figure><img src="/files/3cDTiDVCCW3P7ppaf68L" alt=""><figcaption></figcaption></figure></div>

#### Can different Kubernetes clusters in the same cloud environment use different monitoring tools when integrated with Finout?

Yes. When integrating with Finout, you can utilize various monitoring tools—such as Datadog, Prometheus, or other supported solutions—across multiple Kubernetes clusters within the same cloud environment (e.g., AWS, Azure, GCP, or Oracle Cloud).\
This approach enables you to tailor your monitoring strategy to the specific operational and financial needs of each cluster. For instance, a customer-facing production cluster might utilize Datadog for advanced observability, while an internal development cluster could employ Prometheus as a cost-effective alternative.

**To ensure a successful integration with Finout in this setup:**

1\)Verify that each cluster operates independently and does not share node resources.

2\)Configure each monitoring tool correctly to enable accurate data collection and ingestion into Finout.

#### Which GKE labels from GCP billing data does Finout support, and why?

Finout supports exactly two native GKE labels from GCP billing data:

* `goog-k8s-cluster-name`
* `goog-k8s-node-pool-name`

These are the only GKE-specific billing labels that are preserved. All other labels that start with `k8s-` or `goog-k8s-` are dropped during ingestion for GCP Compute Engine cost rows related to Kubernetes usage.

This is because these labels are already available from Kubernetes metrics. Ingesting them from billing data would duplicate information, significantly increase label cardinality, and cause performance issues. Kubernetes metrics are the authoritative source.

#### Where can I find the supported GKE labels in Finout?

The supported labels (`goog-k8s-cluster-name`, `goog-k8s-node-pool-name`) appear under Kubernetes Labels dimension, not under GCP dimensions.

<br>


# Prometheus

## Overview

#### Agentless Kubernetes Cost Management

Finout’s solution for managing container costs is entirely agentless, reducing security risks and eliminating performance overhead. It automatically detects Kubernetes usage and waste across any Kubernetes resource, whether running on Amazon EKS, Google GKE, or Azure AKS - and enriches your cost data for precise visibility and optimization. Finout integrates with Prometheus, supporting both Per-Cluster and Centralized Prometheus monitoring tools.&#x20;

#### How the Agentless Architecture Works

Unlike traditional agent-based tools that run continuously and consume cluster resources, Finout uses a scheduled, read-only cronjob that runs periodically to collect Kubernetes metrics from your clusters, using Prometheus querying.

**Key benefits of this design:**

* *Non-intrusive:* No Finout components are installed in your cluster, and no Kubernetes resources are modified by Finout.
* *Periodic collection:* metrics are gathered based on a user-configured schedule, minimizing resource impact.
* *External storage:* collected metrics are stored in your configured S3 bucket; nothing is written directly to your cluster.
* *Minimal setup:* works seamlessly with your existing Prometheus infrastructure without requiring elevated permissions or persistent components.\
  \
  This lightweight approach maintains both system security and operational efficiency, while providing a reliable cost visibility across all your Kubernetes environments.

#### **This integration supports both metric collection methods**:

* [**Per-Cluster Prometheus Monitoring**](/kubernetes-integrations/kubernetes/prometheus/prometheus-per-cluster-integration):\
  Integrate Finout with the Prometheus instance in each of your monitored clusters.

  Each Cost Center’s configuration determines how the Finout Metrics Exporter CronJob collects metrics. The CronJob will be set up to gather data from every monitored cluster according to its associated Cost Center configuration.<br>

  *How do I integrate multiple clusters*?

  * Apply the [cronjob YAML](/kubernetes-integrations/kubernetes/prometheus/prometheus-per-cluster-integration#example-yaml) to every cluster that shares the same configuration. All of them will write to the same S3 bucket and prefix.
  * If you want different S3 locations (buckets/prefixes), create additional Prometheus integrations.<br>
* **Centralized Prometheus Compatible Monitoring Tools:** \
  Centralized Prometheus Monitoring tools aggregate metrics from multiple Kubernetes clusters into a single, unified monitoring system with a central Prometheus-compatible API.

  To integrate Centralized Prometheus Monitoring tools into Finout, create a single Prometheus integration that connects to that tool’s  centralized API, by selecting the specific tool you’re using:

  * [Amazon Managed Prometheus](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/amazon-managed-prometheus-integration)
  * [Chronosphere](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/chronosphere-integration)&#x20;
  * [Coralogix](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations/coralogix-integration)
  * [Mimir](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations/mimir-integration)
  * [Thanos](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations/thanos-integration)
  * [VictoriaMetrics](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations/victoriametrics-integration) <br>

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Finout integrates seamlessly with all clusters you have connected to the selected centralized tool.</p></div>

## How the Integration Works

Finout's Kubernetes Prometheus cost integration follows a simple, three-step process:

1. **Metrics Export**: Finout’s cronjob exports container metrics from your Kubernetes clusters using per-cluster or centralized metrics monitoring on scheduled periods.
2. **Metrics Storage**: All the exported metrics and the cronjob’s logs are written to your configured S3 bucket (i.e., `s3://<S3_BUCKET>/<S3_PREFIX>/<CLUSTER_NAME>/…`)
3. **Cost Enrichment**: Finout processes your stored metrics, validating and normalizing them, then enriches your cloud billing data with these metrics to provide cost analysis that supports Kubernetes-level abstraction and granularity i.e., (namespaces, workloads, and labels).

## Prerequisites

Before integrating your Kubernetes clusters with Finout, ensure the following requirements are met:

* **Working Prometheus Deployment**: A functioning Prometheus instance, server, or Prometheus-compatible monitoring system.
* **Cluster Labeling**: Ensure your metrics include a cluster label to distinguish between different clusters in multi-cluster environments
* **Kubernetes Metrics Scraping**: Prometheus must be configured to scrape Kubernetes metrics using `kube-state-metrics`&#x20;
  * The version must be 2.0.0 or higher.
* **Finout fetches these metrics** from your Prometheus endpoint:

{% hint style="info" %}
Finout assumes a 1-minute scrape interval in your Prometheus configuration.
{% endhint %}

<table><thead><tr><th width="241.7890625">Prometheus Metric</th><th width="162.8125">Required Labels</th><th width="121.34765625">Required</th><th>Purpose</th></tr></thead><tbody><tr><td><code>kube_node_info</code></td><td><code>node</code>, <code>provider_id</code>, <code>cluster_label</code></td><td>Yes</td><td>Required to calculate Cost Allocation. This metric enables the connection of nodes and pods to billing.</td></tr><tr><td><code>container_cpu_usage_seconds_total</code></td><td><code>node</code>, <code>namespace</code>, <code>pod</code>, <code>container</code>, <code>cluster_label</code></td><td>Yes</td><td>Actual container CPU usage.</td></tr><tr><td><code>container_memory_working_set_bytes</code></td><td><code>node</code>, <code>namespace</code>, <code>pod</code>, <code>container</code>, <code>cluster_label</code></td><td>Yes</td><td>Actual container memory usage.</td></tr><tr><td><code>kube_node_status_capacity{resource="cpu"}</code></td><td><code>node</code>, <code>cluster_label</code></td><td>Yes</td><td>Node CPU cores capacity.</td></tr><tr><td><code>kube_node_status_capacity{resource="memory"}</code></td><td><code>node</code>, <code>cluster_label</code></td><td>Yes</td><td>Node memory capacity.</td></tr><tr><td><code>kube_pod_container_resource_requests{resource="cpu"}</code></td><td><code>node</code>, <code>namespace</code>, <code>pod</code>, <code>container</code>, <code>cluster_label</code></td><td>Yes</td><td>Pod/container CPU requests improve accuracy and enable rightsizing recommendations in CostGuard.</td></tr><tr><td><code>kube_pod_init_container_resource_requests{resource="cpu"}</code></td><td><code>node</code>, <code>namespace</code>, <code>pod</code>, <code>container</code>, <code>cluster_label</code></td><td>Yes</td><td>Improves accuracy by collecting CPU requests from initContainers. Relevant especially when the <a href="https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/#pod-sidecar-containers">initContainers running as sidecars</a>. </td></tr><tr><td><code>kube_pod_container_resource_requests{resource="memory"}</code></td><td><code>node</code>, <code>namespace</code>, <code>pod</code>, <code>container</code>, <code>cluster_label</code></td><td>Yes</td><td>Pod/container memory improves accuracy and enables rightsizing recommendations in CostGuard.</td></tr><tr><td><code>kube_pod_init_container_resource_requests{resource="memory"}</code></td><td><code>node</code>, <code>namespace</code>, <code>pod</code>, <code>container</code>, <code>cluster_label</code></td><td>Yes</td><td>Improves accuracy by collecting memory requests from initContainers. Relevant especially when the <a href="https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/#pod-sidecar-containers">initContainers running as sidecars</a>. </td></tr><tr><td><code>container_network_receive_bytes_total</code></td><td><code>node</code>, <code>namespace</code>, <code>pod</code>, <code>container</code>, <code>cluster_label</code></td><td>Yes</td><td>Container incoming network usage.</td></tr><tr><td><code>container_network_transmit_bytes_total</code></td><td><code>node</code>, <code>namespace</code>, <code>pod</code>, <code>container</code>, <code>cluster_label</code></td><td>Yes</td><td>Container outgoing network usage.</td></tr><tr><td><code>kube_pod_labels</code></td><td>—</td><td>Recommended</td><td>Enables filtering/grouping by pod labels.</td></tr><tr><td><code>kube_node_labels</code></td><td>—</td><td>Recommended</td><td>Enables filtering/grouping by node labels.</td></tr><tr><td><code>kube_namespace_labels</code></td><td>—</td><td>Recommended</td><td>Enables filtering/grouping by namespace labels.</td></tr><tr><td><code>kube_pod_info</code></td><td>—</td><td>Recommended</td><td>Needed to allocate costs to higher-level K8s objects (deployment, statefulset, daemonset, cronjob) instead of just pods.</td></tr><tr><td><code>kube_replicaset_owner</code></td><td>—</td><td>Recommended</td><td>Allows rolling pod costs up to deployments accurately.</td></tr><tr><td><code>kube_job_owner</code></td><td>—</td><td>Recommended</td><td>Allows rolling pod costs up to cronjob definitions rather than individual jobs.</td></tr></tbody></table>

## Next Steps

Once you've verified your prerequisites and ensured the required metrics are exposed, proceed to the integration guide for your specific monitoring tool:

* [Per-Cluster Prometheus Integration](/kubernetes-integrations/kubernetes/prometheus/prometheus-per-cluster-integration)
* [Centralized Prometheus](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations) Monitoring Tool Integration (Coralogix, Thanos, Mimir, VictoriaMetrics)

For additional support, consult our [FAQ](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section or contact Finout support at <support@finout.io>.

For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the Metrics Exporter [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).

<br>


# Prometheus Per-Cluster Integration-

## Overview

Integrate Finout with the Prometheus instance in each monitored cluster to track that cluster’s Kubernetes costs and waste directly in Finout. This Per-Cluster Prometheus cost enrichment is supported across all major clouds, including AWS, GCP, and Azure.&#x20;

* To connect multiple clusters that share the same configuration, apply the YAML from Step 3 (Create and Configure the CronJob) to each cluster. This will send all metrics to the same S3 bucket and prefix.&#x20;
* If you need different S3 locations (buckets or prefixes), create additional Prometheus integration for those clusters by contacting support at <support@finout.io>.

**Prometheus Per-cluster Setup at a Glance**:

1. **Grant Finout access to your S3 bucket** (destination for Kubernetes metrics)
2. **Add the required Kubernetes worker node** role policy (allows the cronjob to write the metrics into your S3 bucket)
3. **Configure the cronjob YAML** using the template, and deploy it in the cluster.
4. **Validate your Kubernetes Integration**

**What happens next**: A Prometheus (per-cluster) Cost Center is created and automatically enriched to your AWS Cost Center.  Data appears in Finout within \~2 days (due to cloud billing delay).

{% hint style="info" %}
**Note**: To enrich a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure), contact Finout Support at <support@finout.io>.
{% endhint %}

## 1. Connect an S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/wxghoU8E3g2op2xHD1BG" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Kubernetes.**\
   The Connect S3 Bucket step appears.<br>

   <figure><img src="/files/6ilbnyQUZq1mxkcuo8Fo" alt=""><figcaption></figcaption></figure>
2. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **Cost Center** -  Select an AWS cost center account
   3. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   4. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
3. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**: If you want to integrate Finout with more than one cluster, repeat Step 2 (Add the Kubernetes Worker Node Role Policy) and Step 3 (Create and Configure the CronJob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same S3\_PREFIX.
{% endhint %}

## 2. Add the Kubernetes Worker Node Role Policy <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.

<figure><img src="https://finout.intercom-attachments.eu/i/o/6277473/25d1800673933657e626b36d/UGxiXnhB1cFhMhM5WnKf3ttgmtGK2i2deNG4BW7u0BHjEmWi1TtAfopTn3vCyH6TQL20ID6At0nOSNZG-26muX4e455oNyrzy1UUDC95oFg3Pp3_wKOaP7wiZMyQqPQNWLfH5OcoJQvc9o67-ATiJrA?expires=1726401600&#x26;signature=33871d28df3905ef4d6cfc964771a2cc74cf7a7791a6bf127c0f3292972a12fb&#x26;req=1tdowlz9r3sp0xr0v9tnpFNyAjSx7F%2FpWZNeZMtJGfZBCxtblWo9ZctGNedc%0AzFp5jodE0EltoqI%3D%0A" alt=""><figcaption></figcaption></figure>

1. Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * Write to store exported metrics in your bucket.
   * Read to check its saved state in the bucket and know from which timestamp to continue.
   * Delete to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```json
   '{
      "Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "FinoutBucketPermissions",
              "Effect": "Allow",
              "Action": "s3:ListBucket",
              "Resource": "arn:aws:s3:::<BUCKET_NAME>",
              "Condition": {
                  "StringEquals": {
                      "s3:delimiter": "/"
                  },
                  "StringLike": {
                      "s3:prefix": "k8s/prometheus*"
                  }
              }
          },
          {
              "Sid": "FinoutMetricFilesPermissions",
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": "arn:aws:s3:::<BUCKET_NAME>/k8s/prometheus/*"
          }
      ]
   }'
   ```

2. Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*]`*`,nodes=`*`[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*]
   ```

3. Click **Next**.

## 3. Create and Configure the CronJob

<figure><img src="https://finout.intercom-attachments.eu/i/o/6277474/32d3507b9c316add36161f00/AH2ETG3YJ8IAiFpOcFsBsA67pLvw17xEIfZ01J8-mHSQEWqqvfbNGyEGdL6mCZXhsWraDau4p8ZvtlTvaDRNaLHF9Y4dGaSAnpn3--fxYwonJHtyqGPfWCxLTHdHQDqNoTBQddE3q59iVQR-mbIe8-g?expires=1726401600&#x26;signature=62598b2ae1b38e57a07fd819601942b2d63d6fd69c8c3813e3c432e2be169281&#x26;req=1tdowlz9qHsp0xr0v9tnpIEgEueOirwSaS4SfW4bLTWq%2BQztCr9TCQEJgjih%0AIulzyoe0YPqijWg%3D%0A" alt=""><figcaption></figcaption></figure>

1. Copy the CronJob configuration below to a file and modify the values of the relevant environment variables (for example, cronjob.yaml):

Example YAML:

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.6
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "<BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "k8s/prometheus"
               - name: CLUSTER_NAME
                 value: "<CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "<PROMETHEUS_SERVICE>.<NAMESPACE>.svc.cluster.local"
               - name: PORT
                 value: 9090
         restartPolicy: OnFailure
```

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries to prevent overloading your Prometheus stack.

2. Modify the suggested YAML file above, if needed.

#### YAML Environment Variables:

<table><thead><tr><th width="134.19140625">Category</th><th width="132.20703125">Variable</th><th width="135.1875">Description</th><th width="116.16015625">Required / Optional</th><th width="89.65234375">Default</th><th>Notes</th></tr></thead><tbody><tr><td>Scope &#x26; Multi-Cluster Behavior</td><td><strong>CLUSTER_NAME</strong></td><td>The cluster name defines the folder where metrics are stored in S3 and also appears as the cluster name within the Finout app.</td><td><strong>Required</strong></td><td>None</td><td>Identifies the metrics source cluster.</td></tr></tbody></table>

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td><code>None</code></td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong> </td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 4. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.

For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# Prometheus Per-Cluster Integration

## Overview

Integrate Finout with the Prometheus instance in each monitored cluster to track that cluster’s Kubernetes costs and waste directly in Finout. This Per-Cluster Prometheus cost enrichment is supported across all major clouds, including AWS, GCP, and Azure.&#x20;

* To connect multiple clusters that share the same configuration, apply the YAML from Step 3 (“Create and Configure the CronJob”) to every cluster - this will send all metrics to the same S3 bucket and prefix.&#x20;
* If you need different S3 locations (buckets or prefixes), create additional Prometheus integration for those clusters by contacting support at <support@finout.io>.

**Prometheus Per-cluster Setup at a Glance**:

1. **Set Collection Method:** Name your integration and select your metrics collection method.
2. **Connect S3 Bucket**: The destination for Kubernetes metrics.
3. **Set cronjob permissions:** This allows the cronjob to write the metrics into your S3 bucket.
4. **Configure the create cronjob YAML** using the template, and deploy it in the cluster.
   1. Select the authentication method.
   2. Set the required environment variables in the YAML and make additional adjustments, then deploy it in your cluster.
5. **Select cost centers:** This enriches with the integrated Kubernetes metrics.
6. **Validate your Kubernetes Integration:** Ensure that the Prometheus metrics are exported correctly to S3.

**What happens next**: A Prometheus (per-cluster) Cost Center is created and automatically enriched to your AWS Cost Center.  Data appears in Finout within \~2 days (due to cloud billing delay).

## 1. Set Collection Method

<figure><img src="/files/grl4isAGV1Mla5rx6J1k" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Prometheus (Kubernetes).**\
   The **Set Collection Method** step appears.<br>

   <figure><img src="/files/Np7pX6IUF2glYRgYgc5G" alt=""><figcaption></figcaption></figure>
2. Name your Prometheus integration.&#x20;
3. Ensure that the Per-cluster collection method is selected.
4. Click **Next**.\
   You are brought to the **Connect S3 Bucket** step.

## 2. Connect S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/AQ9FB9CDsGRcyoBOoO6b" alt=""><figcaption></figcaption></figure>

1. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   3. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   4. **S3 prefix** - S3 prefix (folder path) in the bucket used to store Prometheus metrics (default is `k8s/prometheus`).
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
2. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**:&#x20;

* If you want to integrate Finout with more than one cluster, repeat Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same `S3_PREFIX`.
* The values  `BUCKET_NAME` and `S3_PREFIX` across steps 3 and 4 need to be identical to the values added in this step.&#x20;
  {% endhint %}

## 3. Set CronJob Permissions <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.<br>

<figure><img src="/files/f5RcNeg9AB7vd3aVdjVs" alt=""><figcaption></figcaption></figure>

1. **Configure Policy:**\
   Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * **Write** to store exported metrics in your bucket.
   * **Read** to check its saved state in the bucket and know from which timestamp to continue.
   * **Delete** to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```yaml
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "FinoutBucketPermissions",
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::<BUCKET_NAME>",
         "Condition": {
           "StringEquals": {
             "s3:delimiter": "/"
           },
           "StringLike": {
             "s3:prefix": "<S3_PREFIX>*"
           }
         }
       },
       {
         "Sid": "FinoutMetricFilesPermissions",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::<BUCKET_NAME>/<S3_PREFIX>/*"
       }
     ]
   }

   ```

2. **Prepare kube-state-metrics (Prerequisite):**\
   Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]
   ```

3. Click **Next**.

## 4. Configure and Create the CronJob <a href="#h_135c6f678f" id="h_135c6f678f"></a>

<figure><img src="/files/nxzHLUyggBb9hB28uJJU" alt=""><figcaption></figcaption></figure>

1. Copy the CronJob configuration below to a file and modify the values of the relevant environment variables (for example, cronjob.yaml):|

Example YAML:

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: finout-prometheus-exporter-job
spec:
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 1
  concurrencyPolicy: Forbid
  schedule: "*/30 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: finout-prometheus-exporter
              image: finout/finout-metrics-exporter:2.0.6
              imagePullPolicy: Always
              env:
                - name: S3_BUCKET
                  value: "<BUCKET_NAME>"
                - name: S3_PREFIX
                  value: "<S3_PREFIX>"
                - name: CLUSTER_NAME
                  value: "<CLUSTER_NAME>"
                - name: HOSTNAME
                  value: "<PROMETHEUS_SERVICE>.<NAMESPACE>.svc.cluster.local"
                - name: PORT
                  value: 9090
          restartPolicy: OnFailure
```

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries to prevent overloading your Prometheus stack.

2. Modify the suggested YAML file above, if needed.

#### YAML Environment Variables:

<table><thead><tr><th width="134.19140625">Category</th><th width="132.20703125">Variable</th><th width="135.1875">Description</th><th width="116.16015625">Required / Optional</th><th width="89.65234375">Default</th><th>Notes</th></tr></thead><tbody><tr><td>Scope &#x26; Multi-Cluster Behavior</td><td><strong>CLUSTER_NAME</strong></td><td>The cluster name defines the folder where metrics are stored in S3 and also appears as the cluster name within the Finout app.</td><td><strong>Required</strong></td><td>None</td><td>Identifies the metrics source cluster.</td></tr></tbody></table>

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td>None</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong></td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 5. Select Cost Centers

<figure><img src="/files/DqQs9WH0wG2qWvlTiILy" alt=""><figcaption></figcaption></figure>

1. Select the cost centers that this integration will enrich with Kubernetes metrics. These cost centers can then attribute Kubernetes costs for supported services (EKS, GKE, and AKS) by namespace, workload, and label.
2. Click **Complete Integration**.\
   The cost center will be created in about 48 hours.<br>

   <figure><img src="/files/uIgusA9V42u5ZgbM4Vud" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**:&#x20;

* If this cost center is already enriched by a Kubernetes integration, ensure there are no overlapping nodes between the integrations to avoid duplicated costs and resources.
* You can hover over every created cloud cost center and see all the Kubernetes cost centers that enrich it.<br>

  <figure><img src="/files/6izhY1fHFBa5RIo5QWah" alt=""><figcaption></figcaption></figure>

{% endhint %}

## 6. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.\
For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# Centralized Prometheus Monitoring Tool Integrations-

Centralized Prometheus Monitoring tools aggregate metrics from multiple Kubernetes clusters into a single, unified monitoring system with a central Prometheus-compatible API.

To integrate Centralized Prometheus Monitoring tools into Finout, create a single Prometheus integration that connects to that tool’s  centralized API, by selecting the specific tool you’re using:

* [Amazon Managed Prometheus](https://docs.finout.io/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/amazon-managed-prometheus-integration)
* [Chronosphere](https://docs.finout.io/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/chronosphere-integration)
* [Coralogix](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations/coralogix-integration)
* [Mimir](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations/mimir-integration)
* [Thanos](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations/thanos-integration)
* [VictoriaMetrics](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations/victoriametrics-integration)&#x20;

{% hint style="info" %}
**Note**: Finout integrates seamlessly with all clusters you have connected to the selected centralized tool.
{% endhint %}


# Coralogix Integration

## Overview

[Coralogix](https://coralogix.com/docs/user-guides/latest-updates/deprecations/prom-api/) provides a single, PromQL-compatible [Metrics API](https://coralogix.com/docs/user-guides/data-query/metrics-api/) endpoint that aggregates metrics from multiple Prometheus servers across clusters. All Kubernetes metrics are exposed through a single, managed, secure, and reliable endpoint, allowing Finout to retrieve them without needing to connect to each Prometheus instance individually. This streamlined approach is especially efficient in large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview.](/kubernetes-integrations/kubernetes)

Finout supports Kubernetes enrichment across AWS, GCP, and Azure using the same pattern: Coralogix-sourced metrics are exported into your connected S3 bucket, and Finout reads them to enrich Kubernetes costs.

#### Coralogix Setup at a Glance

1. **Ensure a connected S3 bucket** for exporting Coralogix Prometheus metrics.
2. **Add the required Kubernetes worker node role policy**.
3. **Configure and create the CronJob** (Finout Metrics Exporter) targeting your Coralogix Metrics API. During configuration, choose an authentication method from the supported options and set the corresponding environment variables in the YAML file; then apply/deploy.
4. **Make any required YAML updates** and confirm the CronJob can write to S3.

**What happens next:**&#x20;

Finout creates a Prometheus (centralized) Cost Center, automatically links it to your AWS Cost Center, and begins enrichment. Data appears in Finout within \~2 days (cloud billing delay).

{% hint style="success" %}
**Note**:&#x20;

* This flow is **very similar to the Per-Cluster integration**, with a few YAML adjustments (notably the Coralogix endpoint and authentication variables). We’ll link to the Per-Cluster guide and list the specific Coralogix auth options and examples later in this doc.
* Linking a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure) currently requires Support to complete on Finout’s side and cannot be done in-app.
  {% endhint %}

## 1. Connect an S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/wxghoU8E3g2op2xHD1BG" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Kubernetes.**\
   The Connect S3 Bucket step appears.<br>

   <figure><img src="/files/6ilbnyQUZq1mxkcuo8Fo" alt=""><figcaption></figcaption></figure>
2. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **Cost Center** -  Select an AWS cost center account
   3. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   4. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
3. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**: If you want to integrate Finout with more than one cluster, repeat Step 2 (Add the Kubernetes Worker Node Role Policy) and Step 3 (Create and Configure the CronJob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same S3\_PREFIX.
{% endhint %}

## 2. Add the Kubernetes Worker Node Role Policy <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.

<figure><img src="https://finout.intercom-attachments.eu/i/o/6277473/25d1800673933657e626b36d/UGxiXnhB1cFhMhM5WnKf3ttgmtGK2i2deNG4BW7u0BHjEmWi1TtAfopTn3vCyH6TQL20ID6At0nOSNZG-26muX4e455oNyrzy1UUDC95oFg3Pp3_wKOaP7wiZMyQqPQNWLfH5OcoJQvc9o67-ATiJrA?expires=1726401600&#x26;signature=33871d28df3905ef4d6cfc964771a2cc74cf7a7791a6bf127c0f3292972a12fb&#x26;req=1tdowlz9r3sp0xr0v9tnpFNyAjSx7F%2FpWZNeZMtJGfZBCxtblWo9ZctGNedc%0AzFp5jodE0EltoqI%3D%0A" alt=""><figcaption></figcaption></figure>

1. Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * Write to store exported metrics in your bucket.
   * Read to check its saved state in the bucket and know from which timestamp to continue.
   * Delete to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```json
   '{
      "Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "FinoutBucketPermissions",
              "Effect": "Allow",
              "Action": "s3:ListBucket",
              "Resource": "arn:aws:s3:::<BUCKET_NAME>",
              "Condition": {
                  "StringEquals": {
                      "s3:delimiter": "/"
                  },
                  "StringLike": {
                      "s3:prefix": "k8s/prometheus*"
                  }
              }
          },
          {
              "Sid": "FinoutMetricFilesPermissions",
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": "arn:aws:s3:::<BUCKET_NAME>/k8s/prometheus/*"
          }
      ]
   }'
   ```

2. Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*]`*`,nodes=`*`[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*]
   ```

3. Click **Next**.

4. **Identify your authentication method**: Select the authentication method you use to access the API from the options listed below. After selecting your method, you’ll add the corresponding environment variables and their values to the CronJob YAML in the next step.
   * *Bearer Token authentication* -Bearer token placed in the Authorization: Bearer header for Prometheus calls.  `PROMETHEUS_BEARER_AUTH_TOKEN`.&#x20;

5. Copy the CronJob configuration below to a file (for example, cronjob.yaml), make sure to include the relevant authentication environment variable you selected at the previous step:

#### Example YAML:

<pre class="language-yaml"><code class="lang-yaml">apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.2
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "&#x3C;BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "k8s/prometheus"
               - name: CLUSTER_NAME
                 value: "&#x3C;CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "The metrics endpoint, i.e,  HOSTNAME=ng-api-http.eu2.coralogix.com"
               - name: PORT
                 value: 443
               - name: SCHEME
                 value: "https"
               - name: PATH_PREFIX
                 value: "<a data-footnote-ref href="#user-content-fn-1">metrics</a>"
               - name: CLUSTER_LABEL_NAME
                 value: "&#x3C;the label name in your metrics indicates the origin cluster>"
               - name: PROMETHEUS_BEARER_AUTH_TOKEN
                 value: "&#x3C;Bearer Token>”
         restartPolicy: OnFailure
</code></pre>

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### Coralogix YAML Environment Variables:

| Category                       | Variable                     | Description                                                                                                                                                                                     | Required / Optional | Default Value | Notes                                                                                                                                                                                                                                                                                                |
| ------------------------------ | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME**     | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint.      | **Required**        | cluster       | The value is "cluster" by default.                                                                                                                                                                                                                                                                   |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**            | The cluster name defines the folder where metrics are stored in S3 and also appears as the cluster name within the Finout app.                                                                  | **Required**        | None          | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommended to set it to the name of the cluster where the cronjob is deployed. |
| Endpoint & Connectivity        | **METRICS\_READINESS\_PATH** | Allows Finout’s exporter to perform readiness validation, ensuring the Coralogix API is fully available before scraping begins, using a custom readiness endpoint to change the default config. | **Optional**        | `/-/ready`    | This is unique for Coralogix.                                                                                                                                                                                                                                                                        |

<table data-header-hidden><thead><tr><th width="125.7265625">Category</th><th width="131.49609375">Variable</th><th width="129.7890625">Description</th><th width="128.26953125">Required / Optional</th><th width="126.61328125">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code></td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>PROMETHEUS_BEARER_AUTH_TOKEN</strong></td><td>Bearer token placed in the Authorization: Bearer header for Prometheus calls.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible Coralogix API endpoint.</td><td><strong>Required</strong><br></td><td>None</td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>Coralogix API port</td><td>Optional</td><td><code>9090</code></td><td>Metrics endpoint port</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td><code>None</code></td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong></td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> (lowest memory footprint).</li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed:

   ```yaml
   kubectl create -f <filename>
   ```
5. Trigger the job (instead of waiting for it to start):

   ```yaml
   kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>
   ```
6. Click **Save**.\
   **Result**: The Prometheus cost center is created. The job automatically fetches Prometheus data from 3 days ago up to the current time.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your BACKFILL_DAYS variable.</p></div>

## 4. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.

For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).

[^1]:


# Cortex Integration

## Overview

This page covers Centralized Prometheus Monitoring via Cortex: Cortex exposes a single, PromQL-compatible API endpoint that aggregates metrics from multiple Prometheus servers across clusters. Because all metrics are reachable through one endpoint, Finout can read them without querying each cluster separately—a more efficient approach for large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview](/kubernetes-integrations/kubernetes).

Finout supports Kubernetes enrichment across AWS, GCP, and Azure using the same pattern: Cortex-sourced metrics are exported into your connected S3 bucket, and Finout reads them to enrich Kubernetes costs.

#### Cortex Setup at a Glance

1. **Set Collection Method:** Name your integration and select your metrics collection method.
2. **Connect S3 Bucket**: The destination for Kubernetes metrics.
3. **Set cronjob permissions:** This allows the cronjob to write the metrics into your S3 bucket.
4. **Configure the create cronjob YAML** using the template, and deploy it in the cluster.
   1. Select the authentication method.
   2. Set the required environment variables in the YAML and make additional adjustments, then deploy it in your cluster.
5. **Select cost centers:** This enriches with the integrated Kubernetes metrics.
6. **Validate your Kubernetes Integration:** Ensure that the Prometheus metrics are exported correctly to S3.

**What happens next:**&#x20;

Finout creates a Prometheus (centralized) Cost Center, automatically links it to your AWS Cost Center, and begins enrichment. Data appears in Finout within \~2 days (cloud billing delay).

{% hint style="info" %}
**Note**: Linking a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure) currently requires Support to complete on Finout’s side and cannot be done in-app.
{% endhint %}

## 1. Set Collection Method

<figure><img src="/files/WUU7NwmA5bfr53ELNgA4" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Prometheus (Kubernetes).**\
   The **Set Collection Method** step appears.<br>

   <figure><img src="/files/Np7pX6IUF2glYRgYgc5G" alt=""><figcaption></figcaption></figure>

2. Name your Prometheus integration.&#x20;

3. Set your metrics collection method: Select **Centralized Prometheus Monitoring Tool**.<br>

   <figure><img src="/files/VCR1UlwQMUbFdLS2pEzB" alt=""><figcaption></figcaption></figure>

4. Select **Cortex**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This configuration will affect the following steps; adjust them accordingly.</p></div>

5. Click **Next**.\
   The **Connect S3 Bucket** step appears.

## 2. Connect S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/AQ9FB9CDsGRcyoBOoO6b" alt=""><figcaption></figcaption></figure>

1. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   3. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   4. **S3 prefix** - S3 prefix (folder path) in the bucket used to store Prometheus metrics (default is `k8s/prometheus`).
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
2. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**:&#x20;

* If you want to integrate Finout with more than one cluster, repeat Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same `S3_PREFIX`.
* The values  `BUCKET_NAME` and `S3_PREFIX` across steps 3 and 4 need to be identical to the values added in this step.&#x20;
  {% endhint %}

## 3. Set CronJob Permissions <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.<br>

<figure><img src="/files/f5RcNeg9AB7vd3aVdjVs" alt=""><figcaption></figcaption></figure>

1. **Configure Policy:**\
   Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * **Write** to store exported metrics in your bucket.
   * **Read** to check its saved state in the bucket and know from which timestamp to continue.
   * **Delete** to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```yaml
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "FinoutBucketPermissions",
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::<BUCKET_NAME>",
         "Condition": {
           "StringEquals": {
             "s3:delimiter": "/"
           },
           "StringLike": {
             "s3:prefix": "<S3_PREFIX>*"
           }
         }
       },
       {
         "Sid": "FinoutMetricFilesPermissions",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::<BUCKET_NAME>/<S3_PREFIX>/*"
       }
     ]
   }

   ```

2. **Prepare kube-state-metrics (Prerequisite):**\
   Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]
   ```

3. Click **Next**.

## 4. Configure and Create the CronJob <a href="#h_135c6f678f" id="h_135c6f678f"></a>

<figure><img src="/files/a9v9Tbx1LSQtRePTOR37" alt=""><figcaption></figcaption></figure>

#### Example YAML:

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.2
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "<BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "k8s/prometheus"
               - name: CLUSTER_NAME
                 value: "<CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "<PROMETHEUS_SERVICE>.<NAMESPACE>.svc.cluster.local"
               - name: PORT
                 value: 9090
               - name: SCHEME
                 value: "https"
               - name: PATH_PREFIX
                 value: "< Optional path prefix appended to the Prometheus base URL when the API is served under a subpath or reverse proxy (e.g., data/metrics).>"
               - name: CLUSTER_LABEL_NAME
                 value: “<the label name in your metrics indicates the origin cluster>"
         restartPolicy: OnFailure

```

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### Cortex YAML Environment Variables:

| Category                       | Variable                 | Description                                                                                                                                                                                | Required/Optional | Default Value | Notes                                                                                                                                                                                                                                                                                               |
| ------------------------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME** | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint. | **Required**      | cluster       | The value is "cluster" by default                                                                                                                                                                                                                                                                   |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**        | The cluster name defines the folder where metrics are stored in S3 and also appears as the cluster name within the Finout app.                                                             | **Required**      | None          | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommendedto set it to the name of the cluster where the cronjob is deployed. |

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td>None</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong></td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 5. Select Cost Centers

<figure><img src="/files/DqQs9WH0wG2qWvlTiILy" alt=""><figcaption></figcaption></figure>

1. Select the cost centers that this integration will enrich with Kubernetes metrics. These cost centers can then attribute Kubernetes costs for supported services (EKS, GKE, and AKS) by namespace, workload, and label.
2. Click **Complete Integration**.\
   The cost center will be created in about 48 hours.<br>

   <figure><img src="/files/uIgusA9V42u5ZgbM4Vud" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**:&#x20;

* If this cost center is already enriched by a Kubernetes integration, ensure there are no overlapping nodes between the integrations to avoid duplicated costs and resources.
* You can hover over every created cloud cost center and see all the Kubernetes cost centers that enrich it.<br>

  <figure><img src="/files/6izhY1fHFBa5RIo5QWah" alt=""><figcaption></figcaption></figure>

{% endhint %}

## 6. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.\
For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# Mimir Integration

## Overview

This page covers Centralized Prometheus Monitoring via Mimir: Mimir exposes a single, PromQL-compatible API endpoint that aggregates metrics from multiple Prometheus servers across clusters. Because all metrics are reachable through one endpoint, Finout can read them without querying each cluster separately—a more efficient approach for large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview](/kubernetes-integrations/kubernetes).

Finout supports Kubernetes enrichment across AWS, GCP, and Azure using the same pattern: Mimir-sourced metrics are exported into your connected S3 bucket, and Finout reads them to enrich Kubernetes costs.

#### Mimir Setup at a Glance

1. **Ensure a connected S3 bucket** for exporting Mimir’s Prometheus metrics.
2. **Add the required Kubernetes worker node role policy**.
3. **Configure and create the CronJob** (Finout Metrics Exporter) targeting your Mimir API. During configuration, choose an authentication method from the supported options and set the corresponding environment variables in the YAML file; then apply/deploy.
4. **Make any required YAML updates** and confirm the CronJob can write to S3.

**What happens next**:&#x20;

Finout creates a Prometheus (centralized) Cost Center, automatically links it to your AWS Cost Center, and begins enrichment. Data appears in Finout within \~2 days (cloud billing delay).

{% hint style="success" %}
**Note**:&#x20;

* This flow is **very similar to the Per-Cluster integration**, with a few YAML adjustments (notably the Mimir endpoint and authentication variables). We’ll link to the Per-Cluster guide and list the specific Mimir auth options and examples later in this doc.
* Linking a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure) currently requires Support to complete on Finout’s side and cannot be done in-app.
  {% endhint %}

## 1. Connect an S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/wxghoU8E3g2op2xHD1BG" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Kubernetes.**\
   The Connect S3 Bucket step appears.<br>

   <figure><img src="/files/6ilbnyQUZq1mxkcuo8Fo" alt=""><figcaption></figcaption></figure>
2. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **Cost Center** -  Select an AWS cost center account
   3. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   4. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
3. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**: If you want to integrate Finout with more than one cluster, repeat Step 2 (Add the Kubernetes Worker Node Role Policy) and Step 3 (Create and Configure the CronJob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same S3\_PREFIX.
{% endhint %}

## 2. Add the Kubernetes Worker Node Role Policy <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.

<figure><img src="https://finout.intercom-attachments.eu/i/o/6277473/25d1800673933657e626b36d/UGxiXnhB1cFhMhM5WnKf3ttgmtGK2i2deNG4BW7u0BHjEmWi1TtAfopTn3vCyH6TQL20ID6At0nOSNZG-26muX4e455oNyrzy1UUDC95oFg3Pp3_wKOaP7wiZMyQqPQNWLfH5OcoJQvc9o67-ATiJrA?expires=1726401600&#x26;signature=33871d28df3905ef4d6cfc964771a2cc74cf7a7791a6bf127c0f3292972a12fb&#x26;req=1tdowlz9r3sp0xr0v9tnpFNyAjSx7F%2FpWZNeZMtJGfZBCxtblWo9ZctGNedc%0AzFp5jodE0EltoqI%3D%0A" alt=""><figcaption></figcaption></figure>

1. Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * Write to store exported metrics in your bucket.
   * Read to check its saved state in the bucket and know from which timestamp to continue.
   * Delete to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```json
   '{
      "Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "FinoutBucketPermissions",
              "Effect": "Allow",
              "Action": "s3:ListBucket",
              "Resource": "arn:aws:s3:::<BUCKET_NAME>",
              "Condition": {
                  "StringEquals": {
                      "s3:delimiter": "/"
                  },
                  "StringLike": {
                      "s3:prefix": "k8s/prometheus*"
                  }
              }
          },
          {
              "Sid": "FinoutMetricFilesPermissions",
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": "arn:aws:s3:::<BUCKET_NAME>/k8s/prometheus/*"
          }
      ]
   }'
   ```

2. Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*]`*`,nodes=`*`[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*]
   ```

3. Click **Next**.

## 3. Create and Configure the CronJob

<figure><img src="https://finout.intercom-attachments.eu/i/o/6277474/32d3507b9c316add36161f00/AH2ETG3YJ8IAiFpOcFsBsA67pLvw17xEIfZ01J8-mHSQEWqqvfbNGyEGdL6mCZXhsWraDau4p8ZvtlTvaDRNaLHF9Y4dGaSAnpn3--fxYwonJHtyqGPfWCxLTHdHQDqNoTBQddE3q59iVQR-mbIe8-g?expires=1726401600&#x26;signature=62598b2ae1b38e57a07fd819601942b2d63d6fd69c8c3813e3c432e2be169281&#x26;req=1tdowlz9qHsp0xr0v9tnpIEgEueOirwSaS4SfW4bLTWq%2BQztCr9TCQEJgjih%0AIulzyoe0YPqijWg%3D%0A" alt=""><figcaption></figcaption></figure>

1. **Identify your authentication method**: Select the authentication method you use to access the API from the options listed below. After selecting your method, you’ll add the corresponding environment variables and their values to the CronJob YAML in the next step.
   1. *No authentication* - For self-managed methods. No required environment variable.
   2. *API Token authentication* - Static token sent as a token header (with Content-Type: application/json) on Prometheus requests.  `PROMETHEUS_AUTH_TOKEN`
   3. *Bearer Token authentication* -Bearer token placed in the Authorization: Bearer header for Prometheus calls.  `PROMETHEUS_BEARER_AUTH_TOKEN`.&#x20;
   4. *Username and Password authentication*
      1. `PROMETHEUS_USERNAME` &#x20;
      2. `PROMETHEUS_PASSWORD`
         * Basic Auth credentials sent on Prometheus requests.
   5. *Tenant ID* - `PROMETHEUS_X_SCOPE_ORGID`
      * Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.
2. Copy the CronJob configuration below to a file (for example, cronjob.yaml), make sure to include the relevant authentication environment variable you selected at the previous step:

**Example YAML**:

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.2
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "<BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "<S3_PREFIX>"
               - name: CLUSTER_NAME
                 value: "<CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "<PROMETHEUS_SERVICE>.<NAMESPACE>.svc.cluster.local"
               - name: PORT
                 value: 9090
               - name: SCHEME
                 value: https
               - name: PATH_PREFIX
                 value: "< Optional path prefix appended to the Prometheus base URL when the API is served under a subpath or reverse proxy (e.g., data/metrics).>"
               - name: CLUSTER_LABEL_NAME
                 value: "<the label name in your metrics indicates the origin cluster>"
         restartPolicy: OnFailure
```

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### Mimir YAML Environment Variables:

| Category                       | Variable                     | Description                                                                                                                                                                                 | Required / Optional | Default Value                                                                                                                                                                                                                                                                                        | Notes                              |
| ------------------------------ | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME**     | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint.  | **Required**        | cluster                                                                                                                                                                                                                                                                                              | The value is "cluster" by default. |
| Endpoint & Connectivity        | **METRICS\_READINESS\_PATH** | Allows Finout’s exporter to perform readiness validation, ensuring the Mimir API is fully available before scraping begins, using a custom readiness endpoint to change the default config. | **Optional**        | `/-/ready`                                                                                                                                                                                                                                                                                           | This is unique for Mimir.          |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**            | The cluster name defines the folder where metrics are stored in S3.                                                                                                                         | **Required**        | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommended to set it to the name of the cluster where the cronjob is deployed. |                                    |

| Auth & Identity | **PROMETHEUS\_AUTH\_TOKEN**         | Static token sent as a token header (with Content-Type: application/json) on Prometheus requests. | Optional | None | -----                                                                                      |
| --------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------- | -------- | ---- | ------------------------------------------------------------------------------------------ |
| Auth & Identity | **PROMETHEUS\_BEARER\_AUTH\_TOKEN** | Bearer token placed in the Authorization: Bearer header for Prometheus calls.                     | Optional | None | -----                                                                                      |
| Auth & Identity | **PROMETHEUS\_USERNAME**            | The Prometheus username.                                                                          | Optional | None | <p>It is recommended to use with the </p><p>PROMETHEUS\_PASSWORD environment variable.</p> |
| Auth & Identity | **PROMETHEUS\_PASSWORD**            | Basic Auth credentials sent on Prometheus requests.                                               | Optional | None | <p>It is recommended to use with the </p><p>PROMETHEUS\_USERNAME environment variable.</p> |
| Auth & Identity | **PROMETHEUS\_X\_SCOPE\_ORGID**     | Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.                                  | Optional | None | -----                                                                                      |

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td><code>None</code></td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong> </td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 4. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.

For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# Thanos Integration

## Overview

Centralized Prometheus Monitoring via Thanos exposes a single, PromQL-compatible API endpoint that aggregates metrics from multiple Prometheus servers across clusters. All metrics are accessible through a single endpoint, allowing Finout to retrieve them without querying each cluster separately for a more efficient approach in large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview](/kubernetes-integrations/kubernetes).

Finout provides a consistent Kubernetes enrichment process across AWS, GCP, and Azure. Metrics are exported to your connected S3 bucket, where Finout automatically reads and uses them to enrich cloud providers data with Kubernetes abstractions.

#### Thanos Setup at a Glance

1\. **Grant Finout access to your S3 bucket** (the destination to which Thanos API will export its centralized Prometheus metrics for Finout).

2\. **Add the required Kubernetes worker node role policy** so the Finout Metrics Exporter CronJob can write metrics into your S3 bucket.

3\. **Configure the CronJob YAML** using the provided Finout Metrics Exporter template.

* Select the authentication method you are using to authenticate to the Thanos API.
* Set the required environment variables in the YAML and make additional adjustments, then deploy it in your cluster.

4. &#x20;**Validate your Kubernetes Integration** and ensure Prometheus metrics from Thanos are being exported correctly to S3.

**What happens next:**

Finout creates a centralized Prometheus Cost Center that connects all clusters monitored by Thanos, links it to your existing AWS Cost Center, and starts enrichment. Kubernetes cost data usually appears in Finout within about two days, reflecting normal cloud billing delays.

{% hint style="success" %}
**Note**:&#x20;

* This flow is **very similar to the Per-Cluster integration**, with a few YAML adjustments (notably the Mimir endpoint and authentication variables). We’ll link to the Per-Cluster guide and list the specific Mimir auth options and examples later in this doc.
* Linking a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure) currently requires Support to complete on Finout’s side and cannot be done in-app.
  {% endhint %}

## 1. Set Collection Method

<figure><img src="/files/cgd0wteauV9l9PCPxohI" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Prometheus (Kubernetes).**\
   The **Set Collection Method** step appears.<br>

   <figure><img src="/files/Np7pX6IUF2glYRgYgc5G" alt=""><figcaption></figcaption></figure>

2. Name your Prometheus integration.&#x20;

3. Set your metrics collection method: Select **Centralized Prometheus Monitoring Tool**.<br>

   <figure><img src="/files/cRNET6qKhtqKdX4rEh8K" alt=""><figcaption></figcaption></figure>

4. Select **Thanos**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This configuration will affect the following steps; adjust them accordingly.</p></div>

5. Click **Next**.\
   The **Connect S3 Bucket** step appears.

## 2. Connect S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/AQ9FB9CDsGRcyoBOoO6b" alt=""><figcaption></figcaption></figure>

1. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   3. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   4. **S3 prefix** - S3 prefix (folder path) in the bucket used to store Prometheus metrics (default is `k8s/prometheus`).
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
2. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**:&#x20;

* If you want to integrate Finout with more than one cluster, repeat Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same `S3_PREFIX`.
* The values  `BUCKET_NAME` and `S3_PREFIX` across steps 3 and 4 need to be identical to the values added in this step.&#x20;
  {% endhint %}

## 3. Set CronJob Permissions <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.<br>

<figure><img src="/files/f5RcNeg9AB7vd3aVdjVs" alt=""><figcaption></figcaption></figure>

1. **Configure Policy:**\
   Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * **Write** to store exported metrics in your bucket.
   * **Read** to check its saved state in the bucket and know from which timestamp to continue.
   * **Delete** to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```yaml
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "FinoutBucketPermissions",
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::<BUCKET_NAME>",
         "Condition": {
           "StringEquals": {
             "s3:delimiter": "/"
           },
           "StringLike": {
             "s3:prefix": "<S3_PREFIX>*"
           }
         }
       },
       {
         "Sid": "FinoutMetricFilesPermissions",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::<BUCKET_NAME>/<S3_PREFIX>/*"
       }
     ]
   }

   ```

2. **Prepare kube-state-metrics (Prerequisite):**\
   Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]
   ```

3. Click **Next**.

## 4. Configure and Create the CronJob <a href="#h_135c6f678f" id="h_135c6f678f"></a>

<div align="left"><figure><img src="/files/88HHKV8npPD994Gnn7hT" alt=""><figcaption></figcaption></figure></div>

1. **Identify your authentication method**: Select the authentication method you use to access the API from the options listed below. After selecting your method, you’ll add the corresponding environment variables and their values to the CronJob YAML in the next step.
   1. *No authentication* - For self-managed methods. No required environment variable.
   2. *API Token authentication* - Static token sent as a token header (with Content-Type: application/json) on Prometheus requests.  `PROMETHEUS_AUTH_TOKEN`
   3. *Bearer Token authentication* -Bearer token placed in the Authorization: Bearer header for Prometheus calls.  `PROMETHEUS_BEARER_AUTH_TOKEN`.&#x20;
   4. *Username and Password authentication*
      1. `PROMETHEUS_USERNAME` &#x20;
      2. `PROMETHEUS_PASSWORD`
         * Basic Auth credentials sent on Prometheus requests.
   5. *Tenant ID* - `PROMETHEUS_X_SCOPE_ORGID`
      * Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.
2. Copy the CronJob configuration below to a file (for example, cronjob.yaml), make sure to include the relevant authentication environment variable you selected at the previous step:

**Example YAML**:

{% hint style="success" %}
**Note**: Add your relevant authentication method environment variables and values from the previous step.
{% endhint %}

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.2
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "<BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "<S3_PREFIX>"
               - name: CLUSTER_NAME
                 value: "<CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "<PROMETHEUS_SERVICE>.<NAMESPACE>.svc.cluster.local"
               - name: PORT
                 value: 9090
               - name: SCHEME
                 value: "https"
               - name: PATH_PREFIX
                 value: "< Optional path prefix appended to the Prometheus base URL when the API is served under a subpath or reverse proxy (e.g., data/metrics).>"
               - name: CLUSTER_LABEL_NAME
                 value: “<the label name in your metrics indicates the origin cluster>"
         restartPolicy: OnFailure
```

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### Thanos YAML Environment Variables:

| Category                       | Variable                     | Description                                                                                                                                                                                  | Required / Optional | Default Value | Notes                                                                                                                                                                                                                                                                                               |
| ------------------------------ | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME**     | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint.   | **Required**        | cluster       | The value is "cluster" by default.                                                                                                                                                                                                                                                                  |
| Endpoint & Connectivity        | **METRICS\_READINESS\_PATH** | Allows Finout’s exporter to perform readiness validation, ensuring the Thanos API is fully available before scraping begins, using a custom readiness endpoint to change the default config. | **Optional**        | `/-/ready`    | This is unique for Thanos.                                                                                                                                                                                                                                                                          |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**            | The cluster name defines the folder where metrics are stored in S3 and also appears as the cluster name within the Finout app.                                                               | **Required**        | None          | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommendedto set it to the name of the cluster where the cronjob is deployed. |

| Auth & Identity | **PROMETHEUS\_AUTH\_TOKEN**         | Static token sent as a token header (with Content-Type: application/json) on Prometheus requests. | Optional | None | -----                                                                                      |
| --------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------- | -------- | ---- | ------------------------------------------------------------------------------------------ |
| Auth & Identity | **PROMETHEUS\_BEARER\_AUTH\_TOKEN** | Bearer token placed in the Authorization: Bearer header for Prometheus calls.                     | Optional | None | -----                                                                                      |
| Auth & Identity | **PROMETHEUS\_USERNAME**            | The Prometheus username.                                                                          | Optional | None | <p>It is recommended to use with the </p><p>PROMETHEUS\_PASSWORD environment variable.</p> |
| Auth & Identity | **PROMETHEUS\_PASSWORD**            | Basic Auth credentials sent on Prometheus requests.                                               | Optional | None | <p>It is recommended to use with the </p><p>PROMETHEUS\_USERNAME environment variable.</p> |
| Auth & Identity | **PROMETHEUS\_X\_SCOPE\_ORGID**     | Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.                                  | Optional | None | -----                                                                                      |

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td><code>None</code></td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong> </td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 4. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.

For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# VictoriaMetrics Integration

## Overview

This page covers Centralized Prometheus Monitoring via VictoriaMetrics: VictoriaMetrics exposes a single, PromQL-compatible API endpoint that aggregates metrics from multiple Prometheus servers across clusters. Because all metrics are reachable through one endpoint, Finout can read them without querying each cluster separately—a more efficient approach for large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview](/kubernetes-integrations/kubernetes).

Finout supports Kubernetes enrichment across AWS, GCP, and Azure using the same pattern: VictoriaMetrics-sourced metrics are exported into your connected S3 bucket, and Finout reads them to enrich Kubernetes costs.

#### VictoriaMetrics Setup at a Glance

1. **Ensure a connected S3 bucket** for exporting VictoriaMetrics Prometheus metrics.
2. **Add the required Kubernetes worker node role policy**.
3. **Configure and create the CronJob** (Finout Metrics Exporter) targeting your VictoriaMetrics API. During configuration, choose an authentication method from the supported options and set the corresponding environment variables in the YAML file; then apply/deploy.
4. **Make any required YAML updates** and confirm the CronJob can write to S3.

**What happens next:**&#x20;

Finout creates a Prometheus (centralized) Cost Center, automatically links it to your AWS Cost Center, and begins enrichment. Data appears in Finout within \~2 days (cloud billing delay).

{% hint style="success" %}
**Note**:&#x20;

* This flow is **very similar to the Per-Cluster integration**, with a few YAML adjustments (notably the VictoriaMetrics endpoint and authentication variables). We’ll link to the Per-Cluster guide and list the specific VictoriaMetrics auth options and examples later in this doc.
* Linking a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure) currently requires Support to complete on Finout’s side and cannot be done in-app.
  {% endhint %}

## 1. Connect an S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/wxghoU8E3g2op2xHD1BG" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Kubernetes.**\
   The Connect S3 Bucket step appears.<br>

   <figure><img src="/files/6ilbnyQUZq1mxkcuo8Fo" alt=""><figcaption></figcaption></figure>
2. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **Cost Center** -  Select an AWS cost center account
   3. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   4. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
3. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**: If you want to integrate Finout with more than one cluster, repeat Step 2 (Add the Kubernetes Worker Node Role Policy) and Step 3 (Create and Configure the CronJob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same S3\_PREFIX.
{% endhint %}

## 2. Add the Kubernetes Worker Node Role Policy <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.

<figure><img src="https://finout.intercom-attachments.eu/i/o/6277473/25d1800673933657e626b36d/UGxiXnhB1cFhMhM5WnKf3ttgmtGK2i2deNG4BW7u0BHjEmWi1TtAfopTn3vCyH6TQL20ID6At0nOSNZG-26muX4e455oNyrzy1UUDC95oFg3Pp3_wKOaP7wiZMyQqPQNWLfH5OcoJQvc9o67-ATiJrA?expires=1726401600&#x26;signature=33871d28df3905ef4d6cfc964771a2cc74cf7a7791a6bf127c0f3292972a12fb&#x26;req=1tdowlz9r3sp0xr0v9tnpFNyAjSx7F%2FpWZNeZMtJGfZBCxtblWo9ZctGNedc%0AzFp5jodE0EltoqI%3D%0A" alt=""><figcaption></figcaption></figure>

1. Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * Write to store exported metrics in your bucket.
   * Read to check its saved state in the bucket and know from which timestamp to continue.
   * Delete to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```json
   '{
      "Version": "2012-10-17",
      "Statement": [
          {
              "Sid": "FinoutBucketPermissions",
              "Effect": "Allow",
              "Action": "s3:ListBucket",
              "Resource": "arn:aws:s3:::<BUCKET_NAME>",
              "Condition": {
                  "StringEquals": {
                      "s3:delimiter": "/"
                  },
                  "StringLike": {
                      "s3:prefix": "k8s/prometheus*"
                  }
              }
          },
          {
              "Sid": "FinoutMetricFilesPermissions",
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": "arn:aws:s3:::<BUCKET_NAME>/k8s/prometheus/*"
          }
      ]
   }'
   ```

2. Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*]`*`,nodes=`*`[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*]
   ```

3. Click **Next**.

## 3. Create and Configure the CronJob

<figure><img src="https://finout.intercom-attachments.eu/i/o/6277474/32d3507b9c316add36161f00/AH2ETG3YJ8IAiFpOcFsBsA67pLvw17xEIfZ01J8-mHSQEWqqvfbNGyEGdL6mCZXhsWraDau4p8ZvtlTvaDRNaLHF9Y4dGaSAnpn3--fxYwonJHtyqGPfWCxLTHdHQDqNoTBQddE3q59iVQR-mbIe8-g?expires=1726401600&#x26;signature=62598b2ae1b38e57a07fd819601942b2d63d6fd69c8c3813e3c432e2be169281&#x26;req=1tdowlz9qHsp0xr0v9tnpIEgEueOirwSaS4SfW4bLTWq%2BQztCr9TCQEJgjih%0AIulzyoe0YPqijWg%3D%0A" alt=""><figcaption></figcaption></figure>

1. **Identify your authentication method**: Select the authentication method you use to access the API from the options listed below. After selecting your method, you’ll add the corresponding environment variables and their values to the CronJob YAML in the next step.
   1. *No authentication* - For self-managed methods. No required environment variable.
   2. *API Token authentication* - Static token sent as a token header (with Content-Type: application/json) on Prometheus requests.  `PROMETHEUS_AUTH_TOKEN`
   3. *Bearer Token authentication* -Bearer token placed in the Authorization: Bearer header for Prometheus calls.  `PROMETHEUS_BEARER_AUTH_TOKEN`.&#x20;
   4. *Username and Password authentication*
      1. `PROMETHEUS_USERNAME` &#x20;
      2. `PROMETHEUS_PASSWORD`
         * Basic Auth credentials sent on Prometheus requests.
   5. *Tenant ID* - `PROMETHEUS_X_SCOPE_ORGID`
      * Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.
2. Copy the CronJob configuration below to a file (for example, cronjob.yaml), make sure to include the relevant authentication environment variable you selected at the previous step:

**Example YAML**:

<pre class="language-yaml"><code class="lang-yaml">apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.2
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "&#x3C;BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "&#x3C;S3_PREFIX>"
               - name: CLUSTER_NAME
                 value: "&#x3C;CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "&#x3C;PROMETHEUS_SERVICE>.&#x3C;NAMESPACE>.svc.cluster.local"
               - name: PORT
                 value: 9090
               - name: SCHEME
                 value: "https"
<strong>               - name: PATH_PREFIX
</strong>                 value: "&#x3C; Optional path prefix appended to the Prometheus base URL when the API is served under a subpath or reverse proxy (e.g., data/metrics).>"
               - name: CLUSTER_LABEL_NAME
                 value: "&#x3C;the label name in your metrics indicates the origin cluster>"
         restartPolicy: OnFailure
</code></pre>

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### VictoriaMetrics YAML Environment Variables:

| Category                       | Variable                     | Description                                                                                                                                                                                           | Required / Optional | Default Value | Notes                                                                                                                                                                                                                                                                                               |
| ------------------------------ | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME**     | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint.            | **Required**        | cluster       | The value is "cluster" by default.                                                                                                                                                                                                                                                                  |
| Endpoint & Connectivity        | **METRICS\_READINESS\_PATH** | Allows Finout’s exporter to perform readiness validation, ensuring the VictoriaMetrics API is fully available before scraping begins, using a custom readiness endpoint to change the default config. | **Optional**        | `/-/ready`    | This is unique for VictoriaMetrics.                                                                                                                                                                                                                                                                 |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**            | The cluster name defines the folder where metrics are stored in S3 and also appears as the cluster name within the Finout app.                                                                        | **Required**        | None          | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommendedto set it to the name of the cluster where the cronjob is deployed. |

| Auth & Identity | **PROMETHEUS\_AUTH\_TOKEN**         | Static token sent as a token header (with Content-Type: application/json) on Prometheus requests. | Optional | None | -----                                                                                      |
| --------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------- | -------- | ---- | ------------------------------------------------------------------------------------------ |
| Auth & Identity | **PROMETHEUS\_BEARER\_AUTH\_TOKEN** | Bearer token placed in the Authorization: Bearer header for Prometheus calls.                     | Optional | None | -----                                                                                      |
| Auth & Identity | **PROMETHEUS\_USERNAME**            | The Prometheus username.                                                                          | Optional | None | <p>It is recommended to use with the </p><p>PROMETHEUS\_PASSWORD environment variable.</p> |
| Auth & Identity | **PROMETHEUS\_PASSWORD**            | Basic Auth credentials sent on Prometheus requests.                                               | Optional | None | <p>It is recommended to use with the </p><p>PROMETHEUS\_USERNAME environment variable.</p> |
| Auth & Identity | **PROMETHEUS\_X\_SCOPE\_ORGID**     | Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.                                  | Optional | None | -----                                                                                      |

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td><code>None</code></td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong> </td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 4. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.

For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# Centralized Prometheus Monitoring Tool Integrations

Centralized Prometheus Monitoring tools aggregate metrics from multiple Kubernetes clusters into a single, unified monitoring system with a central Prometheus-compatible API.

To integrate Centralized Prometheus Monitoring tools into Finout, create a single Prometheus integration that connects to that tool’s  centralized API, by selecting the specific tool you’re using:

* [Amazon Managed Prometheus ](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/amazon-managed-prometheus-integration)
* [Chronosphere ](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/chronosphere-integration)
* [Coralogix](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/coralogix-integration)
* [Mimir](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/mimir-integration)
* [Thanos](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/thanos-integration)
* [VictoriaMetrics](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations-1/victoriametrics-integration)&#x20;

{% hint style="info" %}
**Note**: Finout integrates seamlessly with all clusters you have connected to the selected centralized tool.
{% endhint %}


# Amazon Managed Prometheus Integration

## Overview

AMP is an AWS-managed, PromQL-compatible metrics service that aggregates metrics from multiple Kubernetes clusters into one or more AMP workspaces. Each workspace exposes a single API endpoint that returns Prometheus-format metrics, making all cluster metrics accessible from a single location. Because AMP centralizes all cluster data behind a unified endpoint, Finout can retrieve everything through a single connection, eliminating the need to query each cluster individually. This makes AMP an efficient monitoring option for large or multi-cluster environments.

#### AMP Setup at a Glance

{% hint style="success" %}
**Prerequisite**: Ensure your AMP workspace is already ingesting the [required Prometheus metrics](/kubernetes-integrations/kubernetes#prerequisites) from all relevant Kubernetes clusters.
{% endhint %}

1. **Set Collection Method:** Name your integration and select your metrics collection method.
2. **Connect S3 Bucket**: The destination for Kubernetes metrics.
3. **Set cronjob permissions:** This allows the cronjob to write the metrics into your S3 bucket.
4. **Configure the create cronjob YAML** using the template, and deploy it in the cluster.
   1. Select the authentication method.
   2. Set the required environment variables in the YAML and make additional adjustments, then deploy it in your cluster.
5. **Select cost centers:** This enriches with the integrated Kubernetes metrics.
6. **Validate your Kubernetes Integration:** Ensure that the Prometheus metrics are exported correctly to S3.

**What happens next:**\
Finout creates a centralized Prometheus Cost Center based on your AMP workspace and begins enrichment. Kubernetes cost data typically appears in Finout within about 2 days, reflecting standard cloud billing delays.

{% hint style="info" %}
**Note**: If you have multiple AMP workspaces, repeat the following process for each one (Prerequisite Validation Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob). This means that you will deploy one CronJob per workspace.\
For Prometheus metrics collected from your Kubernetes clusters, refer to the [Prometheus Overview](/kubernetes-integrations/kubernetes).
{% endhint %}

{% hint style="warning" %}
**Important**:  To reduce AMP costs, the best practice is to have AMP scrape **only the metrics required for Finout’s Kubernetes cost calculation**, assuming this is your only monitoring use case. These metrics must be scraped at a **one-minute sampling interval**, as increasing the interval will reduce cost-allocation accuracy. The required metrics are:

```
Kube_node_info
Container_cpu_usage_seconds_total
Container_memory_working_set_bytes
kube_node_status_capacity{resource="cpu"}
kube_node_status_capacity{resource="memory"}
kube_pod_container_resource_requests (resource=cpu)
kube_pod_init_container_resource_requests (resource=cpu)
kube_pod_container_resource_requests (resource=memory)
kube_pod_init_container_resource_requests (resource=memory)
Container_network_receive_bytes_total
Container_network_transmit_bytes_total
Kube_pod_labels
Kube_node_labels
Kube_namespace_labels
Kube_pod_info
Kube_replicaset_owner
Kube_job_owner
```

{% endhint %}

## 1. Set Collection Method

<figure><img src="/files/rEbX6SMr6Vduyqx6Nzu9" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Prometheus (Kubernetes).**\
   The **Set Collection Method** step appears.<br>

   <figure><img src="/files/Np7pX6IUF2glYRgYgc5G" alt=""><figcaption></figcaption></figure>

2. Name your Prometheus integration.&#x20;

3. Set your metrics collection method: Select **Centralized Prometheus Monitoring Tool**.<br>

   <figure><img src="/files/RBcISXuA3n3nMysOkfLU" alt=""><figcaption></figcaption></figure>

4. Select **AMP**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This configuration will affect the following steps; adjust them accordingly.</p></div>

5. Click **Next**.\
   The **Connect S3 Bucket** step appears.

## 2. Connect S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

1. In Finout, navigate to **Settings** > **Cost Centers > Kubernetes.**\
   The Connect S3 Bucket step appears.<br>

   <figure><img src="/files/dPGyvZrlQFGwyysNLoyT" alt=""><figcaption></figcaption></figure>
2. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - This is taken from your existing AWS Cost Center and is populated by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   3. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   4. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
3. Click **Next**.

{% hint style="warning" %}
**Important**: **Important**:&#x20;

* If you want to integrate Finout with more than one cluster, repeat Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same `S3_PREFIX`.
* The values  `BUCKET_NAME` and `S3_PREFIX` across steps 3 and 4 need to be identical to the values added in this step.&#x20;
  {% endhint %}

## 3. Set CronJob Permissions <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.<br>

<div align="left"><figure><img src="/files/SlFTydcvyq01P4Q7YRGp" alt=""><figcaption></figcaption></figure></div>

1. Use the following updated policy (includes AMP API access permissions):<br>

   ```yaml
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "FinoutBucketPermissions",
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::<BUCKET_NAME>",
         "Condition": {
           "StringEquals": {
             "s3:delimiter": "/"
           },
           "StringLike": {
             "s3:prefix": "<S3_PREFIX>*"
           }
         }
       },
       {
         "Sid": "FinoutMetricFilesPermissions",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::<BUCKET_NAME>/<S3_PREFIX>/*"
       },
       {
         "Sid": "AllowAMPQuery",
         "Effect": "Allow",
         "Action": [
           "aps:QueryMetrics",
           "aps:GetLabels",
           "aps:GetSeries",
           "aps:GetMetricMetadata"
         ],
         "Resource": "<arn:aws:aps:<region>:<account-id>:workspace/<workspace-id> / *>"
       }
     ]
   }
   ```

2. Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]
   ```

3. Click **Next**.

## 4. Configure and Create the CronJob <a href="#h_135c6f678f" id="h_135c6f678f"></a>

<div align="left"><figure><img src="/files/YNNFQ18b3TbeANDGBTyx" alt=""><figcaption></figcaption></figure></div>

1. **Identify your authentication method**: Select the authentication method you use to access the API from the options listed below. After selecting your method, you’ll add the corresponding environment variables and their values to the CronJob YAML in the next step.
   * AWS SigV4 authentication - This AMP's predefined authentication method.
2. **Copy the CronJob configuration** below to a file (for example, cronjob.yaml), make sure to include the relevant authentication environment variable you selected at the previous step:

**Example YAML:**

```yaml
{
apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.6
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "<BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "k8s/prometheus"
               - name: CLUSTER_NAME
                 value: "<CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "aps-workspaces.{AMP_REGION}.amazonaws.com/workspaces/{AMP_WORKSPACE_ID}"
               - name: PROMETHEUS_BACKEND
                 value: "amp"
                - name: AMP_REGION
                 value: "<aws_amp_region, i.e, us-east-1>"
               - name: CLUSTER_LABEL_NAME
                 value: "<the label name in your metrics that indicates the origin cluster>"
         restartPolicy: OnFailure
}
```

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries to prevent overloading your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### AMP YAML Environment Variables:

| Category                       | Variable                 | Description                                                                                                                                                                                | Required/Optional | Default Value | Notes                                                                                                                                                                                                                                                                                               |
| ------------------------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME** | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint. | **Required**      | cluster       | The value is "cluster" by default.                                                                                                                                                                                                                                                                  |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**        | The cluster name defines the folder where metrics are stored in S3.                                                                                                                        | **Required**      | None          | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommendedto set it to the name of the cluster where the cronjob is deployed. |
| Scope & Multi-Cluster Behavior | **AMP\_REGION**          | The region of theAMP workspace.                                                                                                                                                            | **Required**      | None          | .....                                                                                                                                                                                                                                                                                               |
| Scope & Multi-Cluster Behavior | **PROMETHUES\_BACKEND**  | Set "amp" to work with Amazon Managded Promethues.                                                                                                                                         | **Required**      | None          | .....                                                                                                                                                                                                                                                                                               |

<table data-header-hidden><thead><tr><th>Category</th><th>Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="90.41015625">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The external AMP API endpoint.</td><td><strong>Required</strong><br></td><td>None</td><td>Must be reachable from the pod running the Finout exporter cronjob.<br>Example: “<code>https://aps-workspaces.{AMP_REGION}.amazonaws.com/workspaces/{AMP_WORKSPACE_ID}</code>"<br></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td><code>None</code></td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong></td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed:

   ```yaml
   kubectl create -f <filename>
   ```
5. Trigger the job (instead of waiting for it to start):

   ```yaml
   kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>
   ```
6. Click **Save**.\
   **Result**: The Prometheus cost center is created. The job automatically fetches Prometheus data from 3 days ago up to the current time.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your BACKFILL_DAYS variable.</p></div>

## 5. Select Cost Centers

<figure><img src="/files/gNd2c5LbVEMPzZvtvoku" alt=""><figcaption></figcaption></figure>

1. Select the cost centers that this integration will enrich with Kubernetes metrics. These cost centers can then attribute Kubernetes costs for supported services (EKS, GKE, and AKS) by namespace, workload, and label.
2. Click **Complete Integration**.\
   The cost center will be created in about 48 hours.<br>

   <div align="left"><figure><img src="/files/NLLUCvJTFSsy4fEQZ8TI" alt=""><figcaption></figcaption></figure></div>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: </p><ul><li>If this cost center is already enriched by a Kubernetes integration, ensure there are no overlapping nodes between the integrations to avoid duplicated costs and resources.</li><li><p>You can hover over every created cloud cost center and see all the Kubernetes cost centers that enrich it.<br></p><div><figure><img src="/files/L5zTzIzMWSYlmcEMztSE" alt=""><figcaption></figcaption></figure></div></li></ul></div>

## 6. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.

For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# Chronosphere Integration

## Overview

Centralized Prometheus Monitoring via Chronosphere exposes a single, PromQL-compatible API endpoint that aggregates metrics. All metrics are accessible through a single endpoint, allowing Finout to retrieve them without querying each cluster separately for a more efficient approach in large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview](/kubernetes-integrations/kubernetes).

Finout provides a consistent Kubernetes enrichment process across AWS, GCP, and Azure. Metrics are exported to your connected S3 bucket, where Finout automatically reads and uses them to enrich cloud providers' data with Kubernetes abstractions.

#### Chronosphere Setup at a Glance

1. **Set Collection Method:** Name your integration and select your metrics collection method.
2. **Connect S3 Bucket**: The destination for Kubernetes metrics.
3. **Set cronjob permissions:** This allows the cronjob to write the metrics into your S3 bucket.
4. **Configure the create cronjob YAML** using the template, and deploy it in the cluster.
   1. Select the authentication method.
   2. Set the required environment variables in the YAML and make additional adjustments, then deploy it in your cluster.
5. **Select cost centers:** This enriches with the integrated Kubernetes metrics.
6. **Validate your Kubernetes Integration:** Ensure that the Prometheus metrics are exported correctly to S3.

**What happens next:**

Finout creates a centralized Prometheus Cost Center that connects all clusters monitored by Chronosphere, links it to your existing AWS Cost Center, and starts enrichment. Kubernetes cost data usually appears in Finout within about two days, reflecting normal cloud billing delays.

## 1. Set Collection Method <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/GhF1eHCXBzPzTLLOQ7mH" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Prometheus (Kubernetes).**\
   The **Set Collection Method** step appears.<br>

   <figure><img src="/files/Np7pX6IUF2glYRgYgc5G" alt=""><figcaption></figcaption></figure>

2. Name your Prometheus integration.&#x20;

3. Set your metrics collection method: Select **Centralized Prometheus Monitoring Tool**.<br>

   <figure><img src="/files/RBcISXuA3n3nMysOkfLU" alt=""><figcaption></figcaption></figure>

4. Select **Chronosphere**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This configuration will affect the following steps; adjust them accordingly.</p></div>

5. Click **Next**.\
   The **Connect S3 Bucket** step appears.

## 2. Connect S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/AQ9FB9CDsGRcyoBOoO6b" alt=""><figcaption></figcaption></figure>

1. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   3. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   4. **S3 prefix** - S3 prefix (folder path) in the bucket used to store Prometheus metrics (default is `k8s/prometheus`).
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
2. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**:&#x20;

* If you want to integrate Finout with more than one cluster, repeat Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same `S3_PREFIX`.
* The values  `BUCKET_NAME` and `S3_PREFIX` across steps 3 and 4 need to be identical to the values added in this step.&#x20;
  {% endhint %}

## 3. Set CronJob Permissions <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.<br>

<figure><img src="/files/f5RcNeg9AB7vd3aVdjVs" alt=""><figcaption></figcaption></figure>

1. **Configure Policy:**\
   Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * **Write** to store exported metrics in your bucket.
   * **Read** to check its saved state in the bucket and know from which timestamp to continue.
   * **Delete** to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```yaml
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "FinoutBucketPermissions",
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::<BUCKET_NAME>",
         "Condition": {
           "StringEquals": {
             "s3:delimiter": "/"
           },
           "StringLike": {
             "s3:prefix": "<S3_PREFIX>*"
           }
         }
       },
       {
         "Sid": "FinoutMetricFilesPermissions",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::<BUCKET_NAME>/<S3_PREFIX>/*"
       }
     ]
   }

   ```

2. **Prepare kube-state-metrics (Prerequisite):**\
   Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]
   ```

3. Click **Next**.

## 4. Configure and Create the CronJob <a href="#h_135c6f678f" id="h_135c6f678f"></a>

<figure><img src="/files/T8EtKS5EWH75m9b5u8i3" alt=""><figcaption></figcaption></figure>

1. **Identify your authentication method**: Select the authentication method you use to access the API from the options listed below. After selecting your method, you’ll add the corresponding environment variables and their values to the CronJob YAML in the next step.
   1. *No authentication* - For self-managed methods. No required environment variable.
   2. *API Token authentication* - Static token sent as a token header (with Content-Type: application/json) on Prometheus requests.  `PROMETHEUS_AUTH_TOKEN`
   3. *Bearer Token authentication* -Bearer token placed in the Authorization: Bearer header for Prometheus calls.  `PROMETHEUS_BEARER_AUTH_TOKEN`.&#x20;
   4. *Username and Password authentication*
      1. `PROMETHEUS_USERNAME` &#x20;
      2. `PROMETHEUS_PASSWORD`
         * Basic Auth credentials sent on Prometheus requests.
   5. *Tenant ID* - `PROMETHEUS_X_SCOPE_ORGID`
      * Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.
2. Copy the CronJob configuration below to a file (for example, cronjob.yaml), make sure to include the relevant authentication environment variable you selected at the previous step:

**Example YAML:**

{% hint style="info" %}
**Note**: Add your relevant authentication method environment variable(s) and values from the previous step.
{% endhint %}

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.6
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "<BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "k8s/prometheus"
               - name: CLUSTER_NAME
                 value: "<CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "<CHRONOSPHERE_DOMAIN>.chronosphere.io"
               - name: PORT
                 value: 443
               - name: SCHEME
                 value: "https"
               - name: PATH_PREFIX
                 value: "data/metrics"
               - name: CLUSTER_LABEL_NAME
                 value: "<the label name in your metrics indicates the origin cluster>"
         restartPolicy: OnFailure
```

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### Chronosphere YAML Environment Variables:

<table><thead><tr><th>Category</th><th>Variable</th><th>Description</th><th>Required / Optional</th><th>Default Value</th><th width="127.09765625">Notes</th></tr></thead><tbody><tr><td>Scope &#x26; Multi-Cluster Behavior</td><td><strong>CLUSTER_LABEL_NAME</strong></td><td>The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint.</td><td><strong>Required</strong></td><td>cluster</td><td>The value is "cluster" by default.</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>METRICS_READINESS_PATH</strong></td><td>Allows Finout’s exporter to perform readiness validation, ensuring the Mimir API is fully available before scraping begins, using a custom readiness endpoint to change the default config.</td><td><strong>Optional</strong></td><td><code>/-/ready</code></td><td>This is unique for Chronoshpere.<br><br>Note: Starting from <a href="/pages/Wr6BXzR9tbOBGLzHuga4">version 2.0.3</a>, this environment variable is not supported and will be ignored.</td></tr><tr><td>Scope &#x26; Multi-Cluster Behavior</td><td><strong>CLUSTER_NAME</strong></td><td>The cluster name defines the folder where metrics are stored in S3.</td><td><strong>Required</strong></td><td>Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommended to set it to the name of the cluster where the cronjob is deployed.</td><td></td></tr></tbody></table>

| Auth & Identity | **PROMETHEUS\_AUTH\_TOKEN**         | Static token sent as a token header (with Content-Type: application/json) on Prometheus requests. | Optional | None | ----- |
| --------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------- | -------- | ---- | ----- |
| Auth & Identity | **PROMETHEUS\_BEARER\_AUTH\_TOKEN** | Bearer token placed in the Authorization: Bearer header for Prometheus calls.                     | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_USERNAME**            | The Prometheus username. It is recommended to use with the password.                              | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_PASSWORD**            | Basic Auth credentials sent on Prometheus requests.                                               | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_X\_SCOPE\_ORGID**     | Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.                                  | Optional | None | ----- |

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td>None</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong></td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 5. Select Cost Centers

<figure><img src="/files/DqQs9WH0wG2qWvlTiILy" alt=""><figcaption></figcaption></figure>

1. Select the cost centers that this integration will enrich with Kubernetes metrics. These cost centers can then attribute Kubernetes costs for supported services (EKS, GKE, and AKS) by namespace, workload, and label.
2. Click **Complete Integration**.\
   The cost center will be created in about 48 hours.<br>

   <figure><img src="/files/uIgusA9V42u5ZgbM4Vud" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**:&#x20;

* If this cost center is already enriched by a Kubernetes integration, ensure there are no overlapping nodes between the integrations to avoid duplicated costs and resources.
* You can hover over every created cloud cost center and see all the Kubernetes cost centers that enrich it.<br>

  <figure><img src="/files/6izhY1fHFBa5RIo5QWah" alt=""><figcaption></figcaption></figure>

{% endhint %}

## 6. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.\
For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# Coralogix Integration

## Overview

[Coralogix](https://coralogix.com/docs/user-guides/latest-updates/deprecations/prom-api/) provides a single, PromQL-compatible [Metrics API](https://coralogix.com/docs/user-guides/data-query/metrics-api/) endpoint that aggregates metrics from multiple Prometheus servers across clusters. All Kubernetes metrics are exposed through a single, managed, secure, and reliable endpoint, allowing Finout to retrieve them without needing to connect to each Prometheus instance individually. This streamlined approach is especially efficient in large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview.](/kubernetes-integrations/kubernetes)

Finout supports Kubernetes enrichment across AWS, GCP, and Azure using the same pattern: Coralogix-sourced metrics are exported into your connected S3 bucket, and Finout reads them to enrich Kubernetes costs.

#### Coralogix Setup at a Glance

1. **Set Collection Method:** Name your integration and select your metrics collection method.
2. **Connect S3 Bucket**: The destination for Kubernetes metrics.
3. **Set cronjob permissions:** This allows the cronjob to write the metrics into your S3 bucket.
4. **Configure the create cronjob YAML** using the template, and deploy it in the cluster.
   1. Select the authentication method.
   2. Set the required environment variables in the YAML and make additional adjustments, then deploy it in your cluster.
5. **Select cost centers:** This enriches with the integrated Kubernetes metrics.
6. **Validate your Kubernetes Integration:** Ensure that the Prometheus metrics are exported correctly to S3.

**What happens next:**&#x20;

Finout creates a Prometheus (centralized) Cost Center, automatically links it to your AWS Cost Center, and begins enrichment. Data appears in Finout within \~2 days (cloud billing delay).

{% hint style="success" %}
**Note**:&#x20;

* This flow is **very similar to the Per-Cluster integration**, with a few YAML adjustments (notably the Coralogix endpoint and authentication variables). We’ll link to the Per-Cluster guide and list the specific Coralogix auth options and examples later in this doc.
* Linking a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure) currently requires Support to complete on Finout’s side and cannot be done in-app.
  {% endhint %}

## 1. Set Collection Method

<figure><img src="/files/uWWZeO2slsyF8fYJzGWv" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Prometheus (Kubernetes).**\
   The **Set Collection Method** step appears.<br>

   <figure><img src="/files/Np7pX6IUF2glYRgYgc5G" alt=""><figcaption></figcaption></figure>

2. Name your Prometheus integration.&#x20;

3. Set your metrics collection method: Select **Centralized Prometheus Monitoring Tool**.<br>

   <figure><img src="/files/SorzDJxWEQPp04MHrUwg" alt=""><figcaption></figcaption></figure>

4. Select **Coralogix**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This configuration will affect the following steps; adjust them accordingly.</p></div>

5. Click **Next**.\
   The **Connect S3 Bucket** step appears.

## 2. Connect S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/AQ9FB9CDsGRcyoBOoO6b" alt=""><figcaption></figcaption></figure>

1. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   3. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   4. **S3 prefix** - S3 prefix (folder path) in the bucket used to store Prometheus metrics (default is `k8s/prometheus`).
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
2. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**:&#x20;

* If you want to integrate Finout with more than one cluster, repeat Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same `S3_PREFIX`.
* The values  `BUCKET_NAME` and `S3_PREFIX` across steps 3 and 4 need to be identical to the values added in this step.&#x20;
  {% endhint %}

## 3. Set CronJob Permissions <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.<br>

<figure><img src="/files/f5RcNeg9AB7vd3aVdjVs" alt=""><figcaption></figcaption></figure>

1. **Configure Policy:**\
   Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * **Write** to store exported metrics in your bucket.
   * **Read** to check its saved state in the bucket and know from which timestamp to continue.
   * **Delete** to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```yaml
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "FinoutBucketPermissions",
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::<BUCKET_NAME>",
         "Condition": {
           "StringEquals": {
             "s3:delimiter": "/"
           },
           "StringLike": {
             "s3:prefix": "<S3_PREFIX>*"
           }
         }
       },
       {
         "Sid": "FinoutMetricFilesPermissions",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::<BUCKET_NAME>/<S3_PREFIX>/*"
       }
     ]
   }

   ```

2. **Prepare kube-state-metrics (Prerequisite):**\
   Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]
   ```

3. Click **Next**.

## 4. Configure and Create the CronJob <a href="#h_135c6f678f" id="h_135c6f678f"></a>

<figure><img src="/files/Iy6nOUMc9XjLK3REne9q" alt=""><figcaption></figcaption></figure>

1. **Identify your authentication method**: Select the authentication method you use to access the API from the options listed below. After selecting your method, you’ll add the corresponding environment variables and their values to the CronJob YAML in the next step.
   * *Bearer Token authentication* -Bearer token placed in the Authorization: Bearer header for Prometheus calls.  `PROMETHEUS_BEARER_AUTH_TOKEN`.&#x20;
2. Copy the CronJob configuration below to a file (for example, cronjob.yaml), make sure to include the relevant authentication environment variable you selected at the previous step:

#### Example YAML:

<pre class="language-yaml"><code class="lang-yaml">apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.6
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "&#x3C;BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "k8s/prometheus"
               - name: CLUSTER_NAME
                 value: "&#x3C;CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "The metrics endpoint, i.e,  HOSTNAME=ng-api-http.eu2.coralogix.com"
               - name: PORT
                 value: 443
               - name: SCHEME
                 value: "https"
               - name: PATH_PREFIX
                 value: "<a data-footnote-ref href="#user-content-fn-1">metrics</a>"
               - name: CLUSTER_LABEL_NAME
                 value: "&#x3C;the label name in your metrics indicates the origin cluster>"
               - name: PROMETHEUS_BEARER_AUTH_TOKEN
                 value: "&#x3C;Bearer Token>”
         restartPolicy: OnFailure
</code></pre>

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### Coralogix YAML Environment Variables:

| Category                       | Variable                     | Description                                                                                                                                                                                     | Required / Optional | Default Value | Notes                                                                                                                                                                                                                                                                                                |
| ------------------------------ | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME**     | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint.      | **Required**        | cluster       | The value is "cluster" by default.                                                                                                                                                                                                                                                                   |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**            | The cluster name defines the folder where metrics are stored in S3 and also appears as the cluster name within the Finout app.                                                                  | **Required**        | None          | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommended to set it to the name of the cluster where the cronjob is deployed. |
| Endpoint & Connectivity        | **METRICS\_READINESS\_PATH** | Allows Finout’s exporter to perform readiness validation, ensuring the Coralogix API is fully available before scraping begins, using a custom readiness endpoint to change the default config. | **Optional**        | `/-/ready`    | <p>This is unique for Coralogix.<br><br>Note: Starting from <a href="/pages/Wr6BXzR9tbOBGLzHuga4">version 2.0.3</a>, this environment variable is not supported and will be ignored.</p>                                                                                                             |
|                                |                              |                                                                                                                                                                                                 |                     |               |                                                                                                                                                                                                                                                                                                      |

<table data-header-hidden><thead><tr><th width="125.7265625">Category</th><th width="131.49609375">Variable</th><th width="129.7890625">Description</th><th width="128.26953125">Required / Optional</th><th width="126.61328125">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code></td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>PROMETHEUS_BEARER_AUTH_TOKEN</strong></td><td>Bearer token placed in the Authorization: Bearer header for Prometheus calls.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible Coralogix API endpoint.</td><td><strong>Required</strong><br></td><td>None</td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>Coralogix API port</td><td>Optional</td><td><code>9090</code></td><td>Metrics endpoint port</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td><code>None</code></td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong></td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed:

   ```yaml
   kubectl create -f <filename>
   ```
5. Trigger the job (instead of waiting for it to start):

   ```yaml
   kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>
   ```
6. Click **Save**.\
   **Result**: The Prometheus cost center is created. The job automatically fetches Prometheus data from 3 days ago up to the current time.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your BACKFILL_DAYS variable.</p></div>

## 5. Select Cost Centers

<figure><img src="/files/DqQs9WH0wG2qWvlTiILy" alt=""><figcaption></figcaption></figure>

1. Select the cost centers that will be enriched by the Kubernetes metrics from this integration. The selected cost centers will allow Kubernetes cost attribution in their Kubernetes-supported services (EKS/GKE/AKS) by namespaces, workloads, and labels.
2. Click **Complete Integration**.\
   The cost center will be created in about 48 hours.<br>

   <figure><img src="/files/W1sZ1jTXlPgmDwVlktKs" alt=""><figcaption></figcaption></figure>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: </p><ul><li>If this cost center already enriched by a Kubernetes integration, ensure there are no overlapping nodes between the integrations to avoid duplicated costs and resources.</li><li>You can hover over every created cloud cost center and see all the Kubernetes cost centers that enrich it.<br><img src="/files/1sFQsw9OU4df05yiVtiZ" alt=""></li></ul></div>

## 6. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.

For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).

[^1]:


# Cortex Integration

## Overview

This page covers Centralized Prometheus Monitoring via Cortex: Cortex exposes a single, PromQL-compatible API endpoint that aggregates metrics from multiple Prometheus servers across clusters. Because all metrics are reachable through one endpoint, Finout can read them without querying each cluster separately—a more efficient approach for large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview](/kubernetes-integrations/kubernetes).

Finout supports Kubernetes enrichment across AWS, GCP, and Azure using the same pattern: Cortex-sourced metrics are exported into your connected S3 bucket, and Finout reads them to enrich Kubernetes costs.

#### Cortex Setup at a Glance

1. **Set Collection Method:** Name your integration and select your metrics collection method.
2. **Connect S3 Bucket**: The destination for Kubernetes metrics.
3. **Set cronjob permissions:** This allows the cronjob to write the metrics into your S3 bucket.
4. **Configure the create cronjob YAML** using the template, and deploy it in the cluster.
   1. Select the authentication method.
   2. Set the required environment variables in the YAML and make additional adjustments, then deploy it in your cluster.
5. **Select cost centers:** This enriches with the integrated Kubernetes metrics.
6. **Validate your Kubernetes Integration:** Ensure that the Prometheus metrics are exported correctly to S3.

**What happens next:**&#x20;

Finout creates a Prometheus (centralized) Cost Center, automatically links it to your AWS Cost Center, and begins enrichment. Data appears in Finout within \~2 days (cloud billing delay).

{% hint style="info" %}
**Note**: Linking a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure) currently requires Support to complete on Finout’s side and cannot be done in-app.
{% endhint %}

## 1. Set Collection Method

<figure><img src="/files/WUU7NwmA5bfr53ELNgA4" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Prometheus (Kubernetes).**\
   The **Set Collection Method** step appears.<br>

   <figure><img src="/files/Np7pX6IUF2glYRgYgc5G" alt=""><figcaption></figcaption></figure>

2. Name your Prometheus integration.&#x20;

3. Set your metrics collection method: Select **Centralized Prometheus Monitoring Tool**.<br>

   <figure><img src="/files/VCR1UlwQMUbFdLS2pEzB" alt=""><figcaption></figcaption></figure>

4. Select **Cortex**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This configuration will affect the following steps; adjust them accordingly.</p></div>

5. Click **Next**.\
   The **Connect S3 Bucket** step appears.

## 2. Connect S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/AQ9FB9CDsGRcyoBOoO6b" alt=""><figcaption></figcaption></figure>

1. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   3. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   4. **S3 prefix** - S3 prefix (folder path) in the bucket used to store Prometheus metrics (default is `k8s/prometheus`).
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
2. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**:&#x20;

* If you want to integrate Finout with more than one cluster, repeat Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same `S3_PREFIX`.
* The values  `BUCKET_NAME` and `S3_PREFIX` across steps 3 and 4 need to be identical to the values added in this step.&#x20;
  {% endhint %}

## 3. Set CronJob Permissions <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.<br>

<figure><img src="/files/f5RcNeg9AB7vd3aVdjVs" alt=""><figcaption></figcaption></figure>

1. **Configure Policy:**\
   Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * **Write** to store exported metrics in your bucket.
   * **Read** to check its saved state in the bucket and know from which timestamp to continue.
   * **Delete** to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```yaml
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "FinoutBucketPermissions",
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::<BUCKET_NAME>",
         "Condition": {
           "StringEquals": {
             "s3:delimiter": "/"
           },
           "StringLike": {
             "s3:prefix": "<S3_PREFIX>*"
           }
         }
       },
       {
         "Sid": "FinoutMetricFilesPermissions",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::<BUCKET_NAME>/<S3_PREFIX>/*"
       }
     ]
   }

   ```

2. **Prepare kube-state-metrics (Prerequisite):**\
   Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]
   ```

3. Click **Next**.

## 4. Configure and Create the CronJob <a href="#h_135c6f678f" id="h_135c6f678f"></a>

<figure><img src="/files/a9v9Tbx1LSQtRePTOR37" alt=""><figcaption></figcaption></figure>

#### Example YAML:

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.2
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "<BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "k8s/prometheus"
               - name: CLUSTER_NAME
                 value: "<CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "<PROMETHEUS_SERVICE>.<NAMESPACE>.svc.cluster.local"
               - name: PORT
                 value: 9090
               - name: SCHEME
                 value: "https"
               - name: PATH_PREFIX
                 value: "< Optional path prefix appended to the Prometheus base URL when the API is served under a subpath or reverse proxy (e.g., data/metrics).>"
               - name: CLUSTER_LABEL_NAME
                 value: “<the label name in your metrics indicates the origin cluster>"
         restartPolicy: OnFailure

```

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### Cortex YAML Environment Variables:

| Category                       | Variable                 | Description                                                                                                                                                                                | Required/Optional | Default Value | Notes                                                                                                                                                                                                                                                                                               |
| ------------------------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME** | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint. | **Required**      | cluster       | The value is "cluster" by default                                                                                                                                                                                                                                                                   |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**        | The cluster name defines the folder where metrics are stored in S3 and also appears as the cluster name within the Finout app.                                                             | **Required**      | None          | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommendedto set it to the name of the cluster where the cronjob is deployed. |

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td>None</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong></td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 5. Select Cost Centers

<figure><img src="/files/DqQs9WH0wG2qWvlTiILy" alt=""><figcaption></figcaption></figure>

1. Select the cost centers that this integration will enrich with Kubernetes metrics. These cost centers can then attribute Kubernetes costs for supported services (EKS, GKE, and AKS) by namespace, workload, and label.
2. Click **Complete Integration**.\
   The cost center will be created in about 48 hours.<br>

   <figure><img src="/files/uIgusA9V42u5ZgbM4Vud" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**:&#x20;

* If this cost center is already enriched by a Kubernetes integration, ensure there are no overlapping nodes between the integrations to avoid duplicated costs and resources.
* You can hover over every created cloud cost center and see all the Kubernetes cost centers that enrich it.<br>

  <figure><img src="/files/6izhY1fHFBa5RIo5QWah" alt=""><figcaption></figcaption></figure>

{% endhint %}

## 6. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.\
For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# Mimir Integration

## Overview

This page covers Centralized Prometheus Monitoring via Mimir: Mimir exposes a single, PromQL-compatible API endpoint that aggregates metrics from multiple Prometheus servers across clusters. Because all metrics are reachable through one endpoint, Finout can read them without querying each cluster separately—a more efficient approach for large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview](/kubernetes-integrations/kubernetes).

Finout supports Kubernetes enrichment across AWS, GCP, and Azure using the same pattern: Mimir-sourced metrics are exported into your connected S3 bucket, and Finout reads them to enrich Kubernetes costs.

#### Mimir Setup at a Glance

1. **Set Collection Method:** Name your integration and select your metrics collection method.
2. **Connect S3 Bucket**: The destination for Kubernetes metrics.
3. **Set cronjob permissions:** This allows the cronjob to write the metrics into your S3 bucket.
4. **Configure the create cronjob YAML** using the template, and deploy it in the cluster.
   1. Select the authentication method.
   2. Set the required environment variables in the YAML and make additional adjustments, then deploy it in your cluster.
5. **Select cost centers:** This enriches with the integrated Kubernetes metrics.
6. **Validate your Kubernetes Integration:** Ensure that the Prometheus metrics are exported correctly to S3.

**What happens next**:&#x20;

Finout creates a Prometheus (centralized) Cost Center, automatically links it to your AWS Cost Center, and begins enrichment. Data appears in Finout within \~2 days (cloud billing delay).

{% hint style="success" %}
**Note**:&#x20;

* This flow is **very similar to the Per-Cluster integration**, with a few YAML adjustments (notably the Mimir endpoint and authentication variables). We’ll link to the Per-Cluster guide and list the specific Mimir auth options and examples later in this doc.
* Linking a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure) currently requires Support to complete on Finout’s side and cannot be done in-app.
  {% endhint %}

## 1. Set Collection Method

<figure><img src="/files/uc9mV2WZ8A0SY660nvAF" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Prometheus (Kubernetes).**\
   The **Set Collection Method** step appears.<br>

   <figure><img src="/files/Np7pX6IUF2glYRgYgc5G" alt=""><figcaption></figcaption></figure>

2. Name your Prometheus integration.&#x20;

3. Set your metrics collection method: Select **Centralized Prometheus Monitoring Tool**.<br>

   <figure><img src="/files/BGfHsp1pEYs6hrIMCBbK" alt=""><figcaption></figcaption></figure>

4. Select **Mimir**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This configuration will affect the following steps; adjust them accordingly.</p></div>

5. Click **Next**.\
   The **Connect S3 Bucket** step appears.

## 2. Connect S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/AQ9FB9CDsGRcyoBOoO6b" alt=""><figcaption></figcaption></figure>

1. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   3. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   4. **S3 prefix** - S3 prefix (folder path) in the bucket used to store Prometheus metrics (default is `k8s/prometheus`).
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
2. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**:&#x20;

* If you want to integrate Finout with more than one cluster, repeat Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same `S3_PREFIX`.
* The values  `BUCKET_NAME` and `S3_PREFIX` across steps 3 and 4 need to be identical to the values added in this step.&#x20;
  {% endhint %}

## 3. Set CronJob Permissions <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.<br>

<figure><img src="/files/f5RcNeg9AB7vd3aVdjVs" alt=""><figcaption></figcaption></figure>

1. **Configure Policy:**\
   Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * **Write** to store exported metrics in your bucket.
   * **Read** to check its saved state in the bucket and know from which timestamp to continue.
   * **Delete** to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```yaml
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "FinoutBucketPermissions",
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::<BUCKET_NAME>",
         "Condition": {
           "StringEquals": {
             "s3:delimiter": "/"
           },
           "StringLike": {
             "s3:prefix": "<S3_PREFIX>*"
           }
         }
       },
       {
         "Sid": "FinoutMetricFilesPermissions",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::<BUCKET_NAME>/<S3_PREFIX>/*"
       }
     ]
   }

   ```

2. **Prepare kube-state-metrics (Prerequisite):**\
   Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]
   ```

3. Click **Next**.

## 4. Configure and Create the CronJob <a href="#h_135c6f678f" id="h_135c6f678f"></a>

<figure><img src="/files/dvdQe2tu5LKjQzJafnfZ" alt=""><figcaption></figcaption></figure>

1. **Identify your authentication method**: Select the authentication method you use to access the API from the options listed below. After selecting your method, you’ll add the corresponding environment variables and their values to the CronJob YAML in the next step.
   1. *No authentication* - For self-managed methods. No required environment variable.
   2. *API Token authentication* - Static token sent as a token header (with Content-Type: application/json) on Prometheus requests.  `PROMETHEUS_AUTH_TOKEN`
   3. *Bearer Token authentication* -Bearer token placed in the Authorization: Bearer header for Prometheus calls.  `PROMETHEUS_BEARER_AUTH_TOKEN`.&#x20;
   4. *Username and Password authentication*
      1. `PROMETHEUS_USERNAME` &#x20;
      2. `PROMETHEUS_PASSWORD`
         * Basic Auth credentials sent on Prometheus requests.
   5. *Tenant ID* - `PROMETHEUS_X_SCOPE_ORGID`
      * Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.
2. Copy the CronJob configuration below to a file (for example, cronjob.yaml), make sure to include the relevant authentication environment variable you selected at the previous step:

**Example YAML**:

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.6
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "<BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "<S3_PREFIX>"
               - name: CLUSTER_NAME
                 value: "<CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "<PROMETHEUS_SERVICE>.<NAMESPACE>.svc.cluster.local"
               - name: PORT
                 value: 9090
               - name: SCHEME
                 value: https
               - name: PATH_PREFIX
                 value: "< Optional path prefix appended to the Prometheus base URL when the API is served under a subpath or reverse proxy (e.g., data/metrics).>"
               - name: CLUSTER_LABEL_NAME
                 value: "<the label name in your metrics indicates the origin cluster>"
         restartPolicy: OnFailure
```

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### Mimir YAML Environment Variables:

| Category                       | Variable                     | Description                                                                                                                                                                                 | Required / Optional | Default Value                                                                                                                                                                                                                                                                                        | Notes                                                                                                                                                                                |
| ------------------------------ | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME**     | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint.  | **Required**        | cluster                                                                                                                                                                                                                                                                                              | The value is "cluster" by default.                                                                                                                                                   |
| Endpoint & Connectivity        | **METRICS\_READINESS\_PATH** | Allows Finout’s exporter to perform readiness validation, ensuring the Mimir API is fully available before scraping begins, using a custom readiness endpoint to change the default config. | **Optional**        | `/-/ready`                                                                                                                                                                                                                                                                                           | <p>This is unique for Mimir.<br><br>Note: Starting from <a href="/pages/Wr6BXzR9tbOBGLzHuga4">version 2.0.3</a>, this environment variable is not supported and will be ignored.</p> |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**            | The cluster name defines the folder where metrics are stored in S3.                                                                                                                         | **Required**        | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommended to set it to the name of the cluster where the cronjob is deployed. |                                                                                                                                                                                      |

| Auth & Identity | **PROMETHEUS\_AUTH\_TOKEN**         | Static token sent as a token header (with Content-Type: application/json) on Prometheus requests. | Optional | None | ----- |
| --------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------- | -------- | ---- | ----- |
| Auth & Identity | **PROMETHEUS\_BEARER\_AUTH\_TOKEN** | Bearer token placed in the Authorization: Bearer header for Prometheus calls.                     | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_USERNAME**            | The Prometheus username. It is recommended to use with the password.                              | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_PASSWORD**            | Basic Auth credentials sent on Prometheus requests.                                               | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_X\_SCOPE\_ORGID**     | Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.                                  | Optional | None | ----- |

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td>None</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong></td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 5. Select Cost Centers

<figure><img src="/files/DqQs9WH0wG2qWvlTiILy" alt=""><figcaption></figcaption></figure>

1. Select the cost centers that this integration will enrich with Kubernetes metrics. These cost centers can then attribute Kubernetes costs for supported services (EKS, GKE, and AKS) by namespace, workload, and label.
2. Click **Complete Integration**.\
   The cost center will be created in about 48 hours.<br>

   <figure><img src="/files/uIgusA9V42u5ZgbM4Vud" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**:&#x20;

* If this cost center is already enriched by a Kubernetes integration, ensure there are no overlapping nodes between the integrations to avoid duplicated costs and resources.
* You can hover over every created cloud cost center and see all the Kubernetes cost centers that enrich it.<br>

  <figure><img src="/files/6izhY1fHFBa5RIo5QWah" alt=""><figcaption></figcaption></figure>

{% endhint %}

## 6. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.\
For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# Thanos Integration

## Overview

Centralized Prometheus Monitoring via Thanos exposes a single, PromQL-compatible API endpoint that aggregates metrics from multiple Prometheus servers across clusters. All metrics are accessible through a single endpoint, allowing Finout to retrieve them without querying each cluster separately for a more efficient approach in large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview](/kubernetes-integrations/kubernetes).

Finout provides a consistent Kubernetes enrichment process across AWS, GCP, and Azure. Metrics are exported to your connected S3 bucket, where Finout automatically reads and uses them to enrich cloud providers data with Kubernetes abstractions.

#### Thanos Setup at a Glance

1. **Set Collection Method:** Name your integration and select your metrics collection method.
2. **Connect S3 Bucket**: The destination for Kubernetes metrics.
3. **Set cronjob permissions:** This allows the cronjob to write the metrics into your S3 bucket.
4. **Configure the create cronjob YAML** using the template, and deploy it in the cluster.
   1. Select the authentication method.
   2. Set the required environment variables in the YAML and make additional adjustments, then deploy it in your cluster.
5. **Select cost centers:** This enriches with the integrated Kubernetes metrics.
6. **Validate your Kubernetes Integration:** Ensure that the Prometheus metrics are exported correctly to S3.

**What happens next:**

Finout creates a centralized Prometheus Cost Center that connects all clusters monitored by Thanos, links it to your existing AWS Cost Center, and starts enrichment. Kubernetes cost data usually appears in Finout within about two days, reflecting normal cloud billing delays.

{% hint style="success" %}
**Note**:&#x20;

* This flow is **very similar to the Per-Cluster integration**, with a few YAML adjustments (notably the Mimir endpoint and authentication variables). We’ll link to the Per-Cluster guide and list the specific Mimir auth options and examples later in this doc.
* Linking a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure) currently requires Support to complete on Finout’s side and cannot be done in-app.
  {% endhint %}

## 1. Set Collection Method

<figure><img src="/files/cgd0wteauV9l9PCPxohI" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Prometheus (Kubernetes).**\
   The **Set Collection Method** step appears.<br>

   <figure><img src="/files/Np7pX6IUF2glYRgYgc5G" alt=""><figcaption></figcaption></figure>

2. Name your Prometheus integration.&#x20;

3. Set your metrics collection method: Select **Centralized Prometheus Monitoring Tool**.<br>

   <figure><img src="/files/cRNET6qKhtqKdX4rEh8K" alt=""><figcaption></figcaption></figure>

4. Select **Thanos**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This configuration will affect the following steps; adjust them accordingly.</p></div>

5. Click **Next**.\
   The **Connect S3 Bucket** step appears.

## 2. Connect S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/AQ9FB9CDsGRcyoBOoO6b" alt=""><figcaption></figcaption></figure>

1. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   3. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   4. **S3 prefix** - S3 prefix (folder path) in the bucket used to store Prometheus metrics (default is `k8s/prometheus`).
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
2. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**:&#x20;

* If you want to integrate Finout with more than one cluster, repeat Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same `S3_PREFIX`.
* The values  `BUCKET_NAME` and `S3_PREFIX` across steps 3 and 4 need to be identical to the values added in this step.&#x20;
  {% endhint %}

## 3. Set CronJob Permissions <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.<br>

<figure><img src="/files/f5RcNeg9AB7vd3aVdjVs" alt=""><figcaption></figcaption></figure>

1. **Configure Policy:**\
   Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * **Write** to store exported metrics in your bucket.
   * **Read** to check its saved state in the bucket and know from which timestamp to continue.
   * **Delete** to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```yaml
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "FinoutBucketPermissions",
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::<BUCKET_NAME>",
         "Condition": {
           "StringEquals": {
             "s3:delimiter": "/"
           },
           "StringLike": {
             "s3:prefix": "<S3_PREFIX>*"
           }
         }
       },
       {
         "Sid": "FinoutMetricFilesPermissions",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::<BUCKET_NAME>/<S3_PREFIX>/*"
       }
     ]
   }

   ```

2. **Prepare kube-state-metrics (Prerequisite):**\
   Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]
   ```

3. Click **Next**.

## 4. Configure and Create the CronJob <a href="#h_135c6f678f" id="h_135c6f678f"></a>

<div align="left"><figure><img src="/files/88HHKV8npPD994Gnn7hT" alt=""><figcaption></figcaption></figure></div>

1. **Identify your authentication method**: Select the authentication method you use to access the API from the options listed below. After selecting your method, you’ll add the corresponding environment variables and their values to the CronJob YAML in the next step.
   1. *No authentication* - For self-managed methods. No required environment variable.
   2. *API Token authentication* - Static token sent as a token header (with Content-Type: application/json) on Prometheus requests.  `PROMETHEUS_AUTH_TOKEN`
   3. *Bearer Token authentication* -Bearer token placed in the Authorization: Bearer header for Prometheus calls.  `PROMETHEUS_BEARER_AUTH_TOKEN`.&#x20;
   4. *Username and Password authentication*
      1. `PROMETHEUS_USERNAME` &#x20;
      2. `PROMETHEUS_PASSWORD`
         * Basic Auth credentials sent on Prometheus requests.
   5. *Tenant ID* - `PROMETHEUS_X_SCOPE_ORGID`
      * Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.
2. Copy the CronJob configuration below to a file (for example, cronjob.yaml), make sure to include the relevant authentication environment variable you selected at the previous step:

**Example YAML**:

{% hint style="success" %}
**Note**: Add your relevant authentication method environment variables and values from the previous step.
{% endhint %}

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.6
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "<BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "<S3_PREFIX>"
               - name: CLUSTER_NAME
                 value: "<CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "<PROMETHEUS_SERVICE>.<NAMESPACE>.svc.cluster.local"
               - name: PORT
                 value: 9090
               - name: SCHEME
                 value: "https"
               - name: PATH_PREFIX
                 value: "< Optional path prefix appended to the Prometheus base URL when the API is served under a subpath or reverse proxy (e.g., data/metrics).>"
               - name: CLUSTER_LABEL_NAME
                 value: “<the label name in your metrics indicates the origin cluster>"
         restartPolicy: OnFailure
```

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### Thanos YAML Environment Variables:

| Category                       | Variable                     | Description                                                                                                                                                                                  | Required / Optional | Default Value | Notes                                                                                                                                                                                                                                                                                               |
| ------------------------------ | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME**     | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint.   | **Required**        | cluster       | The value is "cluster" by default.                                                                                                                                                                                                                                                                  |
| Endpoint & Connectivity        | **METRICS\_READINESS\_PATH** | Allows Finout’s exporter to perform readiness validation, ensuring the Thanos API is fully available before scraping begins, using a custom readiness endpoint to change the default config. | **Optional**        | `/-/ready`    | <p>This is unique for Thanos.<br><br>Note: Starting from <a href="/pages/Wr6BXzR9tbOBGLzHuga4">version 2.0.3</a>, this environment variable is not supported and will be ignored.</p>                                                                                                               |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**            | The cluster name defines the folder where metrics are stored in S3 and also appears as the cluster name within the Finout app.                                                               | **Required**        | None          | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommendedto set it to the name of the cluster where the cronjob is deployed. |

| Auth & Identity | **PROMETHEUS\_AUTH\_TOKEN**         | Static token sent as a token header (with Content-Type: application/json) on Prometheus requests. | Optional | None | ----- |
| --------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------- | -------- | ---- | ----- |
| Auth & Identity | **PROMETHEUS\_BEARER\_AUTH\_TOKEN** | Bearer token placed in the Authorization: Bearer header for Prometheus calls.                     | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_USERNAME**            | The Prometheus username. It is recommended to use with the password.                              | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_PASSWORD**            | Basic Auth credentials sent on Prometheus requests.                                               | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_X\_SCOPE\_ORGID**     | Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.                                  | Optional | None | ----- |

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td>None</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong></td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 5. Select Cost Centers

<figure><img src="/files/DqQs9WH0wG2qWvlTiILy" alt=""><figcaption></figcaption></figure>

1. Select the cost centers that this integration will enrich with Kubernetes metrics. These cost centers can then attribute Kubernetes costs for supported services (EKS, GKE, and AKS) by namespace, workload, and label.
2. Click **Complete Integration**.\
   The cost center will be created in about 48 hours.<br>

   <figure><img src="/files/uIgusA9V42u5ZgbM4Vud" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**:&#x20;

* If this cost center is already enriched by a Kubernetes integration, ensure there are no overlapping nodes between the integrations to avoid duplicated costs and resources.
* You can hover over every created cloud cost center and see all the Kubernetes cost centers that enrich it.<br>

  <figure><img src="/files/6izhY1fHFBa5RIo5QWah" alt=""><figcaption></figcaption></figure>

{% endhint %}

## 6. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.\
For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).

<br>


# VictoriaMetrics Integration

## Overview

This page covers Centralized Prometheus Monitoring via VictoriaMetrics: VictoriaMetrics exposes a single, PromQL-compatible API endpoint that aggregates metrics from multiple Prometheus servers across clusters. Because all metrics are reachable through one endpoint, Finout can read them without querying each cluster separately—a more efficient approach for large, multi-cluster environments. For a holistic introduction to Prometheus in Finout and alternative topologies, see the [Prometheus Integration Overview](/kubernetes-integrations/kubernetes).

Finout supports Kubernetes enrichment across AWS, GCP, and Azure using the same pattern: VictoriaMetrics-sourced metrics are exported into your connected S3 bucket, and Finout reads them to enrich Kubernetes costs.

#### VictoriaMetrics Setup at a Glance

1. **Set Collection Method:** Name your integration and select your metrics collection method.
2. **Connect S3 Bucket**: The destination for Kubernetes metrics.
3. **Set cronjob permissions:** This allows the cronjob to write the metrics into your S3 bucket.
4. **Configure the create cronjob YAML** using the template, and deploy it in the cluster.
   1. Select the authentication method.
   2. Set the required environment variables in the YAML and make additional adjustments, then deploy it in your cluster.
5. **Select cost centers:** This enriches with the integrated Kubernetes metrics.
6. **Validate your Kubernetes Integration:** Ensure that the Prometheus metrics are exported correctly to S3.

**What happens next:**&#x20;

Finout creates a Prometheus (centralized) Cost Center, automatically links it to your AWS Cost Center, and begins enrichment. Data appears in Finout within \~2 days (cloud billing delay).

{% hint style="success" %}
**Note**:&#x20;

* This flow is **very similar to the Per-Cluster integration**, with a few YAML adjustments (notably the VictoriaMetrics endpoint and authentication variables). We’ll link to the Per-Cluster guide and list the specific VictoriaMetrics auth options and examples later in this doc.
* Linking a Prometheus Cost Center to a non-AWS Cost Center (GCP or Azure) currently requires Support to complete on Finout’s side and cannot be done in-app.
  {% endhint %}

## 1. Set Collection Method

<figure><img src="/files/6iSYH44Two8DxFQgHLVz" alt=""><figcaption></figcaption></figure>

1. In Finout, navigate to **Settings** > **Cost Centers > Prometheus (Kubernetes).**\
   The **Set Collection Method** step appears.<br>

   <figure><img src="/files/Np7pX6IUF2glYRgYgc5G" alt=""><figcaption></figcaption></figure>

2. Name your Prometheus integration.&#x20;

3. Set your metrics collection method: Select **Centralized Prometheus Monitoring Tool**.<br>

   <figure><img src="/files/FrRalS5KLiIEnUQDxuzZ" alt=""><figcaption></figcaption></figure>

4. Select **VictoriaMetrics**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This configuration will affect the following steps; adjust them accordingly.</p></div>

5. Click **Next**.\
   The **Connect S3 Bucket** step appears.

## 2. Connect S3 Bucket <a href="#h_8048bc22bc" id="h_8048bc22bc"></a>

<figure><img src="/files/AQ9FB9CDsGRcyoBOoO6b" alt=""><figcaption></figcaption></figure>

1. Connect a S3 bucket that contains the Kubernetes metrics collected from Prometheus using this integration. Finout is granted read-only permissions to access the data.\
   Ensure that you have already connected an S3 bucket to Finout for the AWS Cost and Usage Report (CUR).\
   You can reuse the **same S3 bucket and IAM role**, and Finout will automatically populate the **Role ARN, Bucket name**, and **External ID** fields in the console.\
   \
   If you want to use a different S3 bucket or haven’t configured one yet, follow the steps in **Grant Finout Access to an S3 Bucket**.\
   \
   Fill in the following fields:
   1. **External ID** - this is taken from your existing AWS Cost Center and is filled in by default. Use this same External ID in the IAM role’s trust policy to grant Finout permissions to read from the S3 bucket that stores your Prometheus metrics.
   2. **ARN Role** - Provide the ARN of the IAM role that grants Finout read-only access to this S3 bucket. When creating or updating this role, make sure you use the External ID from the Finout console in the role’s trust policy.
   3. **Bucket Name** - Enter the name of the S3 bucket that stores your Prometheus metrics. Use the bucket name only (no `s3://` and no path). It must be in the Region you selected and readable by the Role ARN.
   4. **S3 prefix** - S3 prefix (folder path) in the bucket used to store Prometheus metrics (default is `k8s/prometheus`).
   5. **Region** - AWS region of the bucket (e.g., us-east-1). Must match the bucket’s actual region.
2. Click **Next**.

{% hint style="info" %}
**Note**: Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics. However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**. To connect other cost centers, contact Finout Support at <support@finout.io>.
{% endhint %}

{% hint style="warning" %}
**Important**:&#x20;

* If you want to integrate Finout with more than one cluster, repeat Step 3 (Set CronJob Permissions) and Step 4 (Configure and Create the Cronjob) for each cluster. If the clusters belong to the same Cost Center, make sure they all use the same `S3_PREFIX`.
* The values  `BUCKET_NAME` and `S3_PREFIX` across steps 3 and 4 need to be identical to the values added in this step.&#x20;
  {% endhint %}

## 3. Set CronJob Permissions <a href="#h_5ef0375593" id="h_5ef0375593"></a>

In this step, you will grant the cronjob permissions to write the Kubernetes metrics into the bucket you configured in the previous step.<br>

<figure><img src="/files/f5RcNeg9AB7vd3aVdjVs" alt=""><figcaption></figcaption></figure>

1. **Configure Policy:**\
   Attach this policy to the Kubernetes node role, or to the IAM role used by your CronJob, so the CronJob has the S3 access it needs:

   * **Write** to store exported metrics in your bucket.
   * **Read** to check its saved state in the bucket and know from which timestamp to continue.
   * **Delete** to remove files from the bucket older than the retention period (30 days by default, configurable).

   ```yaml
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Sid": "FinoutBucketPermissions",
         "Effect": "Allow",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::<BUCKET_NAME>",
         "Condition": {
           "StringEquals": {
             "s3:delimiter": "/"
           },
           "StringLike": {
             "s3:prefix": "<S3_PREFIX>*"
           }
         }
       },
       {
         "Sid": "FinoutMetricFilesPermissions",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::<BUCKET_NAME>/<S3_PREFIX>/*"
       }
     ]
   }

   ```

2. **Prepare kube-state-metrics (Prerequisite):**\
   Use kube-state-metrics version 2.0.2 or later.\
   If your cluster uses the prometheus-kube-state-metrics DaemonSet, add the flag below so kube-state-metrics exports all required labels to your Prometheus endpoint (you can adjust the pattern to match your setup):

   `--metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]`\
   \
   ​Do this by adding an arg to the kube-state-metrics container, for example:

   ```yaml
   spec:
   containers:
     args:
      --port=8080
      --metric-labels-allowlist=pods=[*],nodes=[*],namespaces=[*]
   ```

3. Click **Next**.

## 4. Configure and Create the CronJob <a href="#h_135c6f678f" id="h_135c6f678f"></a>

<div align="left"><figure><img src="/files/cYss9FGT3dlZIbjxr2xw" alt=""><figcaption></figcaption></figure></div>

1. **Identify your authentication method**: Select the authentication method you use to access the API from the options listed below. After selecting your method, you’ll add the corresponding environment variables and their values to the CronJob YAML in the next step.
   1. *No authentication* - For self-managed methods. No required environment variable.
   2. *API Token authentication* - Static token sent as a token header (with Content-Type: application/json) on Prometheus requests.  `PROMETHEUS_AUTH_TOKEN`
   3. *Bearer Token authentication* -Bearer token placed in the Authorization: Bearer header for Prometheus calls.  `PROMETHEUS_BEARER_AUTH_TOKEN`.&#x20;
   4. *Username and Password authentication*
      1. `PROMETHEUS_USERNAME` &#x20;
      2. `PROMETHEUS_PASSWORD`
         * Basic Auth credentials sent on Prometheus requests.
   5. *Tenant ID* - `PROMETHEUS_X_SCOPE_ORGID`
      * Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.
2. Copy the CronJob configuration below to a file (for example, cronjob.yaml), make sure to include the relevant authentication environment variable you selected at the previous step:

**Example YAML**:

<pre class="language-yaml"><code class="lang-yaml">apiVersion: batch/v1
kind: CronJob
metadata:
 name: finout-prometheus-exporter-job
spec:
 successfulJobsHistoryLimit: 1
 failedJobsHistoryLimit: 1
 concurrencyPolicy: Forbid
 schedule: "*/30 * * * *"
 jobTemplate:
   spec:
     template:
       spec:
         containers:
           - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.6
             imagePullPolicy: Always
             env:
               - name: S3_BUCKET
                 value: "&#x3C;BUCKET_NAME>"
               - name: S3_PREFIX
                 value: "&#x3C;S3_PREFIX>"
               - name: CLUSTER_NAME
                 value: "&#x3C;CLUSTER_NAME>"
               - name: HOSTNAME
                 value: "&#x3C;PROMETHEUS_SERVICE>.&#x3C;NAMESPACE>.svc.cluster.local"
               - name: PORT
                 value: 9090
               - name: SCHEME
                 value: "https"
<strong>               - name: PATH_PREFIX
</strong>                 value: "&#x3C; Optional path prefix appended to the Prometheus base URL when the API is served under a subpath or reverse proxy (e.g., data/metrics).>"
               - name: CLUSTER_LABEL_NAME
                 value: "&#x3C;the label name in your metrics indicates the origin cluster>"
         restartPolicy: OnFailure
</code></pre>

* This is an example of a CronJob that schedules a Job every 30 minutes.&#x20;
* The job queries Prometheus with a 5-second delay between queries so as not to overload your Prometheus stack.

3. Modify the suggested YAML file above, if needed.

#### VictoriaMetrics YAML Environment Variables:

| Category                       | Variable                     | Description                                                                                                                                                                                           | Required / Optional | Default Value | Notes                                                                                                                                                                                                                                                                                               |
| ------------------------------ | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Scope & Multi-Cluster Behavior | **CLUSTER\_LABEL\_NAME**     | The cluster label name defines the label whose values represent cluster names in your metrics , allowing Finout to identify and group metrics by cluster from the single metrics endpoint.            | **Required**        | cluster       | The value is "cluster" by default.                                                                                                                                                                                                                                                                  |
| Endpoint & Connectivity        | **METRICS\_READINESS\_PATH** | Allows Finout’s exporter to perform readiness validation, ensuring the VictoriaMetrics API is fully available before scraping begins, using a custom readiness endpoint to change the default config. | **Optional**        | `/-/ready`    | <p>This is unique for VictoriaMetrics.<br><br>Note: Starting from <a href="/pages/Wr6BXzR9tbOBGLzHuga4">version 2.0.3</a>, this environment variable is not supported and will be ignored.</p>                                                                                                      |
| Scope & Multi-Cluster Behavior | **CLUSTER\_NAME**            | The cluster name defines the folder where metrics are stored in S3 and also appears as the cluster name within the Finout app.                                                                        | **Required**        | None          | Cluster names are extracted directly from the metric data. However, this environment variable is still required and determines the folder name under which all centralized metrics will be temporarily stored. It is recommendedto set it to the name of the cluster where the cronjob is deployed. |

| Auth & Identity | **PROMETHEUS\_AUTH\_TOKEN**         | Static token sent as a token header (with Content-Type: application/json) on Prometheus requests. | Optional | None | ----- |
| --------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------- | -------- | ---- | ----- |
| Auth & Identity | **PROMETHEUS\_BEARER\_AUTH\_TOKEN** | Bearer token placed in the Authorization: Bearer header for Prometheus calls.                     | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_USERNAME**            | The Prometheus username. It is recommended to use with the password.                              | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_PASSWORD**            | Basic Auth credentials sent on Prometheus requests.                                               | Optional | None | ----- |
| Auth & Identity | **PROMETHEUS\_X\_SCOPE\_ORGID**     | Tenant ID sent in X-Scope-OrgID header, for multi-tenant setups.                                  | Optional | None | ----- |

<table data-header-hidden><thead><tr><th width="132.58984375">Category</th><th width="134.17578125">Variable</th><th>Description</th><th width="115.0390625">Required / Optional</th><th width="89.4375">Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_ARN</strong></td><td>ARN for IAM role to assume for authorization.</td><td>Optional</td><td>None</td><td>Used if assuming a role instead of direct access.</td></tr><tr><td>Auth &#x26; Identity</td><td><strong>ROLE_EXTERNAL_ID</strong></td><td>External ID for assumed role.</td><td>Optional</td><td>None</td><td>Only needed if the IAM role requires an external ID.</td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_BUCKET</strong></td><td>Customer’s S3 bucket to store the exported metrics.</td><td><strong>Required</strong></td><td>None</td><td><p>Must exist in customer’s environment.</p><p></p></td></tr><tr><td>Storage &#x26; Paths</td><td><strong>S3_PREFIX</strong></td><td>S3 prefix where metrics will be stored.</td><td><strong>Required</strong></td><td>None</td><td><p>For example, k8s/prometheus</p><p>has to be the same s3_prefix if multiple per cluster integrations within the same cost center config.</p></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>SCHEME</strong></td><td>The protocol used when calling the Prometheus metrics endpoint: either <code>https</code> or <code>http</code></td><td>Optional</td><td><code>http</code> </td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PATH_PREFIX</strong></td><td>Optional sub-path between host/port and the Prometheus metrics API.</td><td>Optional</td><td>None</td><td>-----</td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>HOSTNAME</strong></td><td>The Prometheus compatible API endpoint.</td><td>Optional<br></td><td><code>localhost</code></td><td>Must be reachable from the pod running the Finout exporter cronjob.<br></td></tr><tr><td>Endpoint &#x26; Connectivity</td><td><strong>PORT</strong></td><td>API port</td><td>Optional</td><td><code>9090</code></td><td>Standard Prometheus port.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>TIME_FRAME</strong></td><td>Time range per query in seconds.</td><td>Optional</td><td><code>3600</code></td><td>Lower values reduce query load and risk of OOM.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>BACKFILL_DAYS</strong></td><td>Days of historical data to fetch on first run.</td><td>Optional</td><td><code>3d</code></td><td>Large values increase load and risk of slow queries.</td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>INITIAL_BACKFILL_DATE</strong> </td><td>Defines the initial backfill start date</td><td>Optional</td><td>None</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li>value should be in YYYY-MM-DD format.</li><li>limited to maximum 3 days.</li></ul></td></tr><tr><td>Query Window &#x26; Data Volume</td><td><strong>QUERIES_BATCH_SIZE</strong></td><td>Controls how many queries are processed per batch to manage memory usage.</td><td>Optional</td><td>5</td><td><p></p><ul><li>Available starting from the <a href="/pages/9D7HWEh1Epfj9Eo5A053">Exporter’s v2.0.0 </a></li><li><strong>Default is 5</strong>. Lowering it reduces memory usage but may increase overall runtime.</li><li><strong>Minimum is 1</strong> </li><li>If a customer sees <strong>OOM kills / memory pressure</strong>, recommend reducing QUERIES_BATCH_SIZE before changing anything else.</li></ul></td></tr></tbody></table>

To configure these fields, add them to the configuration file under the env section and use the name/value format for each desired field.

For example:

```yaml
env:
  - name: TIME_FRAME
    value: "3600"
  - name: BACKFILL_DAYS
    value: "3d"
```

Ensure that the field names and the corresponding values are correctly specified to apply the desired configuration.

4. Run the command in a namespace of your choice, preferably the one where the Prometheus stack is deployed: ​`kubectl create -f <filename>`
5. Trigger the job (instead of waiting for it to start):\
   `kubectl create job --from=cronjob/finout-prometheus-exporter-job finout-prometheus-exporter-job -n <namespace>`

   The job automatically fetches Prometheus data from 3 days ago up to the current time.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be changed by modifying your <code>BACKFILL_DAYS</code> variable.</p></div>
6. Click **Save**.\
   The Prometheus cost center is created.

## 5. Select Cost Centers

<figure><img src="/files/DqQs9WH0wG2qWvlTiILy" alt=""><figcaption></figcaption></figure>

1. Select the cost centers that this integration will enrich with Kubernetes metrics. These cost centers can then attribute Kubernetes costs for supported services (EKS, GKE, and AKS) by namespace, workload, and label.
2. Click **Complete Integration**.\
   The cost center will be created in about 48 hours.<br>

   <figure><img src="/files/uIgusA9V42u5ZgbM4Vud" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**:&#x20;

* If this cost center is already enriched by a Kubernetes integration, ensure there are no overlapping nodes between the integrations to avoid duplicated costs and resources.
* You can hover over every created cloud cost center and see all the Kubernetes cost centers that enrich it.<br>

  <figure><img src="/files/6izhY1fHFBa5RIo5QWah" alt=""><figcaption></figcaption></figure>

{% endhint %}

## 6. Validate Your Kubernetes Integration

**Confirm that your Prometheus Integration is working correctly:**

#### S3 Validation

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`\
   You should see a list of metric folders, such as: `metric=cpu_requests/`
2. **Open a metric folder** and verify that `.json.gz` files are uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`\
   If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

#### Data Availability

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.\
For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).


# Sidecar InitContainers Support

Finout includes Prometheus metrics from both main containers and persistent initContainers, ensuring more accurate Kubernetes cost attribution by capturing resource usage beyond the primary workload.

**Definitions**:

* **Main container** – The primary application container within a pod, responsible for executing the workload’s core functionality.
* **Sidecar InitContainer** – A special type of Kubernetes initContainer introduced in Kubernetes v1.29, which can remain active for the entire pod lifecycle. This enables side processes such as logging or proxying to run continuously, unlike traditional initContainers that are always short-lived.<br>

With this change, Finout’s exporter v2.0.0 added support for collecting initContainer resource request metrics for cost attribution. Prior to the exporter’s v2.0.0, these metrics were not included. While short-lived initContainers still have negligible cost impact, persistent initContainers (used as sidecars) are now accurately reflected in the cost calculation.

The updated cost data will appear in the Finout after 2 days.

**Configuration Result:**

After configuring the final step, the CronJob starts exporting data from Prometheus into your S3 bucket. After the integration, the Kubernetes cost data may take up to 24 hours to become available in your Finout account.

If this process fails, guidance is provided in the Finout console to help resolve the problem, or review the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting), as this will assist you to fix any errors easily.

For new updates to the Prometheus Exporter introduced between versions and their impact on cost calculation, refer to the [release notes](/kubernetes-integrations/kubernetes/prometheus/prometheus-metrics-exporter-release-notes).

<br>


# Prometheus FAQs

FAQs cover the most common questions about Finout’s Prometheus integrations across both [per-cluster](/kubernetes-integrations/kubernetes/prometheus/prometheus-per-cluster-integration) and [centralized ](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations)Prometheus Monitoring tools setups. It provides clarity on how Prometheus metrics are collected and processed to support accurate Kubernetes cost attribution across your environments. If you need additional assistance, contact Finout at <support@finout.io>.

#### **How do I grant Finout access to a dedicated S3 bucket for Kubernetes data?**

If you’d like to export Kubernetes data to a dedicated S3 bucket, different from the one used for your AWS Cost and Usage Report (CUR), you can grant Finout access by creating an inline IAM policy:

1. Go to your newly created **IAM role**.

2. Click **Add permissions → Create inline policy**.

3. Select the **JSON** tab, and paste the following policy.\
   Replace `<BUCKET_NAME>` with the name of your dedicated S3 bucket (or use your existing CUR bucket):

   ​

   ```json
   {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Effect": "Allow",
               "Action": ["tag:GetTagKeys"],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": ["s3:Get*", "s3:List*"],
               "Resource": "arn:aws:s3:::<BUCKET_NAME>/*"
           },
           {
               "Effect": "Allow",
               "Action": ["s3:Get*", "s3:List*"],
               "Resource": "arn:aws:s3:::<BUCKET_NAME>"
           }
       ]
   }
   ```

4. Click **Next** until the **Review** screen appears.

5. Name the policy `finout-access-policy_K8S`.

6. Click **Create policy** to attach it to your IAM role.

7. In the Finout console, complete **Step 1 – Connect S3 bucket** using your dedicated bucket details.

#### Do I need a separate Cost Center for every Kubernetes cluster?

No. If all your Kubernetes clusters (or CronJobs) use the same configuration and write their Prometheus metrics to the same S3 bucket and prefix, you can use a single Cost Center in Finout.

You only need a new Cost Center when clusters write to different S3 buckets or prefixes, or when your organization requires separate ownership boundaries—for example, if different departments or business units must export their Prometheus data to different buckets for security, compliance, or budgeting reasons.

#### How do I integrate Prometheus with Finout using Google GKE or Azure AKS?

Finout supports enriching **AWS (EKS), GCP (GKE), and Azure (AKS)** Kubernetes costs using Kubernetes metrics.\
However, this integration currently requires the Kubernetes metrics to be **uploaded to an AWS S3 bucket**.

**You have two options for uploading your metrics:**

1. U**se your own AWS S3 bucket**\
   Push your Kubernetes monitoring metrics (from GKE, AKS, or EKS) into an S3 bucket within your own infrastructure, then follow the standard integration steps.
2. **Use Finout’s AWS S3 bucket**\
   Push your Prometheus metrics to an S3 bucket hosted by Finout.\
   Once your metrics are in the bucket, contact Finout Support at <support@finout.io> to complete the onboarding and enrichment setup for your cluster.

#### Where is the finout/finout-metrics-exporter image hosted?

The finout/finout-metrics-exporter image is hosted on [Docker Hub](https://hub.docker.com/r/finout/finout-metrics-exporter).

#### What should I do if I'm using both Prometheus per-cluster and Centralized Prometheus Monitoring tools (e.g., Thanos, Mimir, VictoriaMetrics) in my account?

Finout supports both per-cluster Prometheus and Centralized Prometheus Monitoring tools or aggregated setups.

To support both configurations:

1. Create two Kubernetes Prometheus cost centers and deploy two cronjobs, one for each type, per the instructions above. Contact support at <support@finout.io> for help.
2. Configure exporters to write separate S3 paths using:
   1. S3\_BUCKET
   2. S3\_PREFIX
3. Update security policies to allow access to all relevant prefixes or buckets (if using a single bucket).

#### Do I need to add the Worker Node Role policy for every Kubernetes cluster?

Yes. You must add the **Kubernetes Worker Node Role Policy** to each cluster you integrate with Finout. If you have multiple clusters, repeat **Steps 2 and 3** for each one to ensure all clusters are correctly connected and sending data to Finout.

#### How does Finout handle Sidecar InitContainers in cost allocation?

Finout Metrics Exporter collects the CPU and memory usage and request metrics from  Sidecar InitContainers for calculating Kubernetes costs, ensuring accurate workload costs, and reflecting their full resource utilization.

#### Do short-lived initContainers affect cost calculations?

Short-lived initContainers still have a negligible impact on cost. Their brief runtime and small resource usage mean they continue to have little or no effect on overall cost attribution.

#### When will I see Sidecar InitContainer costs in Finout after enabling the integration?

After the Prometheus CronJob begins exporting metrics to your S3 bucket, Kubernetes cost data generally appears in Finout within 24 hours, as part of the same end-to-end process used for calculating Kubernetes costs. Updated cost attribution for Sidecar InitContainers may take up to 2 days to fully populate. This enhanced behavior is available starting from Finout Metrics Exporter version 1.30.

#### How can I reduce AMP costs when using Finout for Kubernetes cost allocation?

To reduce AMP costs, the best practice is to have AMP scrape **only the metrics required for Finout’s Kubernetes cost calculation**, assuming this is your only monitoring use case. These metrics must be scraped at a **one-minute sampling interval**, as increasing the interval will reduce cost-allocation accuracy. The required metrics are:

```
Kube_node_info
Container_cpu_usage_seconds_total
Container_memory_working_set_bytes
kube_node_status_capacity{resource="cpu"}
kube_node_status_capacity{resource="memory"}
kube_pod_container_resource_requests (resource=cpu)
kube_pod_init_container_resource_requests (resource=cpu)
kube_pod_container_resource_requests (resource=memory)
kube_pod_init_container_resource_requests (resource=memory)
Container_network_receive_bytes_total
Container_network_transmit_bytes_total
Kube_pod_labels
Kube_node_labels
Kube_namespace_labels
Kube_pod_info
Kube_replicaset_owner
Kube_job_owner
```

**My Kubernetes costs are missing for past periods - how do I recover them?**

Kubernetes data gaps occur if the Finout cronjob was inactive during past timeframes. You can resolve this by performing a backfill, which retrieves your historical cluster's Prometheus metrics to ensure your past spending and reports are complete.

To get started, reach out to Finout Support at <support@finout.io> with the following details:

* The time period you'd like to backfill (start date – end date)
* Your current CronJob YAML configuration
* The cluster(s) you need to be backfilled

Once our team prepares the configuration, you'll be asked to run a one-time Job in your relevant Kubernetes clusters. Finout will provide the exact YAML configuration.

After the Job completes, data will be available in Finout within approximately 2 days.

Before you request a backfill, note the following limitations:

* Multiple clusters must be backfilled separately — each cluster requires its own Job.
* Your CronJob image must be version **2.0.2 or above**.

For more information, please see the [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.


# Prometheus Troubleshooting

Troubleshooting helps you identify and resolve common issues that may occur when setting up or maintaining Finout’s Prometheus integrations across both per-cluster and Centralized Prometheus Monitoring tools setups. It provides guidance on diagnosing data gaps, configuration errors, and connectivity problems to ensure your Kubernetes cost data is exported and processed correctly. If you need additional assistance, please contact Finout at <support@finout.io>.

#### What should I do if Finout cannot assume the AWS role?

Review the IAM role created for Finout to verify both the trust policy and that the external ID matches the one provided by Finout.

#### What should I do if Finout cannot access the provided S3 bucket?

Review the relevant policy on the bucket according to the documentation and verify the Cost Center Configured region.

#### What should I do if Finout cannot read from my S3 bucket?

Ensure that the necessary read permissions for Finout are in place.

If the account that writes the Prometheus files to the S3 bucket differs from the account that created the Finout IAM role, generate a new ARN role from the account that owns the S3 bucket and shares the Prometheus files. Then, send the new ARN role to Finout following the instructions below.

If you already created a trust policy for Finout when setting up your AWS connection, you should use the same trust policy (Read more about how to grant Finout access to your S3 bucket).

Use the following policy for your ARN role:

```yaml
"Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "tag:GetTagKeys"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": "arn:aws:s3:::<BUCKET_NAME>/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": "arn:aws:s3:::<BUCKET_NAME>"
        }
    ]
}
```

#### What should I do if the CronJob cannot find the Prometheus host?

Ensure that the host and port are correct (using kubectl get services) and configure these as the `HOSTNAME / PORT ENV VARS` in the CronJob.

#### What steps should I take if my CronJob can't write to the S3 bucket?

Apply the correct policy on the node worker or the pod.&#x20;

#### What should I do if memory metrics no longer appear in Finout dashboards?

After updating or adjusting Prometheus configurations, memory metrics may no longer appear in Finout dashboards.

Immediately following the identification of this issue, ensure you’re familiar with the best practices for configuring and reloading Prometheus by consulting the official Prometheus documentation.

1. Verify the recording rule: Check that the "`node_namespace_pod_container:container_memory_working_set_bytes`" recording rule is correctly set up in your Prometheus environment.
2. Add or update the rule: If the rule is absent or improperly configured, add or amend it within your Prometheus configuration settings.
3. Reload the configuration: Implement the new or modified rule by reloading Prometheus’s configuration.
   1. **Access the configuration**: Open the Prometheus configuration, either directly through the file or via the UI.
   2. **Edit the rules**: In the recording rules section, verify the presence of "`node_namespace_pod_container:container_memory_working_set_bytes`". If it’s not there, insert or correct it.
   3. **Apply the changes**: Reload or restart Prometheus to apply and activate the rule.

#### What causes the Finout exporter to time out on large Kubernetes clusters, and how can I resolve it?

When all clusters share the same Prometheus disk space settings, larger clusters can quickly consume disk space due to their higher metric output, limiting data retention to a few hours. This can lead to the Finout exporter timing out, particularly when fetching the previous day's metrics. To address this, adjust the metric retention settings according to each cluster's size and output, ensuring sufficient disk space for longer data retention.

#### What should I do if the metrics exporter runs out of memory?

The metrics exporter may encounter out-of-memory (OOM) errors due to insufficient resources, particularly when handling large amounts of data. This can prevent the exporter from functioning properly. Allocating additional resources based on its workload helps resolve the issue. By fine-tuning memory allocation to match the data volume, the exporter can run smoothly without interruptions.

#### What should I do if the exporter is slow or failing due to high load?&#x20;

To address performance issues with the exporter, reduce the values for `TIME_FRAME` and/or `BACKFILL_DAYS`. Lowering these values decreases the data volume processed, improving speed and reliability.&#x20;

#### How can I collect additional metrics that Finout doesn’t include by default?

Use `QUERY_<QUERY_NAME>` to add a custom query. Enter the desired metric name as the value to start collecting it.&#x20;

\
For more information, please see the [FAQ](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) section.

<br>

<br>


# Prometheus Metrics Exporter Release Notes

This page consolidates all Finout Prometheus Metrics Exporter release notes from **version 2.0** onward. Use this page to understand the changes made between exporter versions, how upgrades affect cost calculation, and what actions (if any) are required during onboarding or upgrading.

### Release Notes

<details>

<summary>Version 2.0.3 – Release date: April 5, 2026</summary>

#### **Overview**

Prometheus Metrics Exporter v2.0.3 improves the reliability of the startup health check across all supported Prometheus-compatible backends.

Previously, probing a dedicated readiness endpoint caused false negative failures during onboarding in environments where the endpoint was unavailable - even when metrics could be queried successfully. The health check now runs a lightweight query directly against the metrics endpoint instead.\
\
**Upgrade impact**&#x20;

* Reduces false negative connectivity failures during onboarding.
* `METRICS_READINESS_PATH` is deprecated and no longer has any effect - safe to remove from your configuration.

**Required action:** Update the exporter image in your CronJob YAML to **version 2.0.3**:

```
finout/finout-metrics-exporter:2.0.3
```

</details>

<details>

<summary>Version 2.0.2 – Release date: February 9, 2026</summary>

#### **Overview**

Prometheus Metrics Exporter **v2.0.2** fixes [**CVE-2025-15467**](https://nvd.nist.gov/vuln/detail/CVE-2025-15467)**.**

In addition, this release fixes an issue with the **INITIAL\_BACKFILL\_DATE** environment variable. Previously, configuring this variable could cause the CronJob to fail if more than three days had passed since the initial deployment.

**Required action:** Update the exporter image in your CronJob YAML to version **2.0.2** to mitigate this risk and resolve the bug. Use the following image:&#x20;

```
finout/finout-metrics-exporter:2.0.2
```

</details>

<details>

<summary>Version 2.0.1 – Release date: January 18, 2026</summary>

#### **Overview**

Prometheus Metrics Exporter **v2.0.1** includes a bug fix for the connectivity check logic when using a customized `PATH_PREFIX`.

Previously, when the `PATH_PREFIX` environment variable was set, the exporter incorrectly appended it to the readiness check URL. This caused **false negative readiness failures**, even when the backend endpoint was valid and reachable.\
\
**Upgrade impact:** Resolves false negative host readiness errors when a custom `PATH_PREFIX` is configured.

**Required action:** Update the exporter image in your CronJob YAML to **version 2.0.1**.

```
finout/finout-metrics-exporter:2.0.1
```

</details>

<details>

<summary>Version 2.0.0 - Release date: January 14, 2026</summary>

#### **Overview**

Prometheus Metrics Exporter v2.0.0 introduces major improvements to Kubernetes cost accuracy, backfill control, performance, and platform compatibility.

If you are upgrading to version 2.0.0, you must update your existing Kubernetes **CronJob** deployment to use the new exporter image.\
\
**Upgrade impact:** Cost calculation changes due to consideration of initContainers metrics.

**Required action:** Update the exporter image in your CronJob YAML to the new version:

```
finout/finout-metrics-exporter:2.0.0
```

No other configuration changes are required unless explicitly noted below.

{% hint style="info" %}
**Note**: Starting **June 30, 2026**, all versions 1.x and earlier will reach **End of Life**. These versions do not include the major improvements introduced in v2.0.0 and will no longer receive updates, maintenance, or support. You are encouraged to upgrade to v2.0.0 or later versions to ensure continued stability and compatibility.
{% endhint %}

#### What’s New

1. [InitContainer Resource Metrics](https://docs.finout.io/integrations/kubernetes-prometheus/sidecar-initcontainers-support) - Finout now supports collecting and attributing resource usage from **initContainers**, including both short-lived setup containers and persistent sidecar initContainers.
   * **What changed** – Exporter v2.0.0 now includes CPU and memory requests from all initContainers, ensuring full visibility into their cost impact.
   * **Why it matters** – Provides more accurate Kubernetes cost allocation by capturing all container resource usage and reducing unattributed (idle) costs.
   * **Required Configuration** – No configuration required. These improvements are included by default in the exporter image. Updated cost data appears in Finout within 48 hours after integration.<br>

2. **Configurable Initial Backfill Start Date** – The exporter now provides a clear and explicit way to control the **initial backfill start date** during CronJob onboarding.
   * **What changed** – In addition to the existing `BACKFILL_DAYS` configuration, customers can now set an explicit initial backfill start date using `INITIAL_BACKFILL_DATE`. This is the **preferred configuration** for new deployments, as it is more explicit and predictable than relative backfill days.
   * **Why it matters** – Setting a fixed start date makes it easier to understand exactly which data will be fetched during the initial backfill and avoids ambiguity around relative timeframes.
   * **Required Configuration** – Optional. Use `INITIAL_BACKFILL_DATE` in `YYYY-MM-DD` format to define the initial backfill start date.
     * Initial backfills using `INITIAL_BACKFILL_DATE` are limited to a **maximum of 3 days**.
     * If no configuration is provided, the exporter defaults to backfilling the **last 3 days** from deployment time.
     * If **both** `INITIAL_BACKFILL_DATE` and `BACKFILL_DAYS` are set, the cronjob run will fail. <br>

3. **Memory Handling Improvements** – The exporter was refactored to manage in-process memory more efficiently, improving performance and stability for large-scale environments.

   * **What changed** – Instead of loading all query data into memory before writing, the exporter now **processes and writes data in smaller batches**. This prevents excessive memory usage during large Prometheus queries.
   * **Why it matters** – Reduces the risk of exporter crashes in large Kubernetes environments, ensuring smoother operation and higher reliability when handling extensive datasets.
   * **Required Configuration** - Optional. The exporter uses a default query batch size of **5**. This can be reduced to lower memory consumption by setting the `QUERIES_BATCH_SIZE` environment variable (minimum value: **1**, which results in the lowest memory usage).

4. **Improved Readiness Validation for Centralized Prometheus Monitoring Tools Integrations** - The exporter readiness check now supports more readiness endpoint variants, including `/ready`, and can be customized via a new environment variable.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: These validations are <strong>informative only</strong> - they help surface issues early but do not block the job from continuing or prevent scraping.</p></div>

   * **What changed** - Previously, readiness validation supported only `/-/ready`, with no fallback to `/ready` and no way to customize the readiness path, therefore:&#x20;
     * Added support for the `/ready` readiness suffix.
     * Added a new optional environment variable: \
       `METRICS_READINESS_PATH`, allowing custom readiness endpoint suffixes.
   * **Why it matters** - Improves compatibility with different centralized tools and surfaces readiness issues more clearly - without impacting metric collection.
   * **Required Configuration** - Optional. Set `METRICS_READINESS_PATH` in the CronJob YAML only if your backend readiness endpoint differs from the supported defaults.<br>

5. **ARM Architecture Support** – Finout's Exporter image is now released as a **multi-architecture build**, supporting both `linux/amd64` and `linux/arm64` platforms (previously only `amd64`).
   * **What changed** – The exporter image now automatically detects and runs on the correct architecture; there’s no need to specify the `--platform` flag manually. This works seamlessly on both **x86\_64** and **ARM64** systems.
   * **Why it matters** – Expands compatibility to **ARM-based environments**, ensuring seamless deployment across diverse infrastructure.
   * **Required Configuration** – No configuration required if you’re using the default image tags. If your deployment scripts explicitly define `--platform=linux/amd64`, you can safely remove or update that line for broader compatibility.<br>

6. **Logging Enhancements** – Finout’s exporter now provides clearer, more structured logs to improve visibility and streamline troubleshooting for the R\&D and Support teams.
   * **What changed** – The exporter now provides clearer logs with human-readable timeframes, making it easier to follow CronJob execution and metric processing progress.
   * **Why it matters** – Enhances internal monitoring and debugging efficiency, enabling faster issue resolution and more proactive detection of data pipeline or integration problems.
   * **Required Configuration** - No configuration required. These improvements are included by default in the exporter image.

#### Benefits for Customers

* **More accurate Kubernetes costs when using SideCar initContainers**\
  [InitContainers](/kubernetes-integrations/kubernetes/prometheus/sidecar-initcontainers-support) are now included in cost allocation and work seamlessly with both old and new Kubernetes ratio algorithms.
* **Greater control over historical data**\
  Improved backfill capabilities enable customers to more effectively control the historical backfill start date used during initial setup.
* **Fewer failures in large environments**\
  Memory handling improvements make the exporter more stable and reliable at scale.
* **Wider platform support**\
  The exporter now runs seamlessly on ARM-based systems.

#### FAQs

**Do I need to create a new cost center in order to use v2.0.0?**

* No, you need to **update the image of your existing CronJobs**, using their YAML.

**When does the upgrade take effect, immediately or in the next run?**

* The **next scheduled CronJob run** picks up the new version.
* By default, scheduled runs occur **every 30 minutes**, depending on the CronJob's configuration in its YAML file.
* No reprocessing cycle is required.

</details>

### Security Patches

<details>

<summary>Version 2.0.6 – Release date: August 4, 2026</summary>

#### **Overview**

Prometheus Metrics Exporter **v2.0.6** fixes the following vulnerabilities:

**High:** [CVE-2026-40200](https://nvd.nist.gov/vuln/detail/CVE-2026-40200), [CVE-2026-22184](https://nvd.nist.gov/vuln/detail/CVE-2026-22184)

**Medium:** [CVE-2026-6042](https://nvd.nist.gov/vuln/detail/CVE-2026-6042), [CVE-2026-34743](https://nvd.nist.gov/vuln/detail/CVE-2026-34743), [CVE-2026-27171](https://nvd.nist.gov/vuln/detail/CVE-2026-27171), [CVE-2024-58251](https://nvd.nist.gov/vuln/detail/CVE-2024-58251), [CVE-2025-8869](https://nvd.nist.gov/vuln/detail/CVE-2025-8869), [CVE-2026-3219](https://nvd.nist.gov/vuln/detail/CVE-2026-3219), [CVE-2026-6357](https://nvd.nist.gov/vuln/detail/CVE-2026-6357), [CVE-2026-8643](https://nvd.nist.gov/vuln/detail/CVE-2026-8643)

**Low:** [CVE-2025-46394](https://nvd.nist.gov/vuln/detail/CVE-2025-46394), [CVE-2026-1703](https://nvd.nist.gov/vuln/detail/CVE-2026-1703)

**Required action:** Update the exporter image in your CronJob YAML to version **2.0.6** to mitigate this risk and resolve the bug. Use the following image:&#x20;

```
finout/finout-metrics-exporter:2.0.6
```

</details>

<details>

<summary>Version 2.0.5 – Release date: July 12, 2026</summary>

#### **Overview**

Prometheus Metrics Exporter **v2.0.5** fixes [**CVE-2026-21226**](https://nvd.nist.gov/vuln/detail/CVE-2026-21226)**.**

**Required action:** Update the exporter image in your CronJob YAML to version **2.0.5** to mitigate this risk and resolve the bug. Use the following image:&#x20;

```
finout/finout-metrics-exporter:2.0.5
```

</details>

<details>

<summary>Version 2.0.4 – Release date: May 7, 2026</summary>

#### **Overview**

Prometheus Metrics Exporter **v2.0.4** fixes [**CVE-2026-31789**](https://nvd.nist.gov/vuln/detail/CVE-2026-31789)**.**

**Required action:** Update the exporter image in your CronJob YAML to version **2.0.4** to mitigate this risk and resolve the bug. Use the following image:&#x20;

```
finout/finout-metrics-exporter:2.0.4
```

</details>

<details>

<summary>Version 1.34.4 – Release date: May 7, 2026</summary>

#### **Overview**

Prometheus Metrics Exporter **v1.34.4** fixes [**CVE-2026-31789**](https://nvd.nist.gov/vuln/detail/CVE-2026-31789)**.**

**Required action:** Update the exporter image in your CronJob YAML to version **1.34.4** to mitigate this risk and resolve the bug. Use the following image:&#x20;

```
finout/finout-metrics-exporter:1.34.4
```

</details>

<details>

<summary>Version 2.0.2 – Release date: February 9, 2026</summary>

#### **Overview**

Prometheus Metrics Exporter **v2.0.2** fixes [**CVE-2025-15467**](https://nvd.nist.gov/vuln/detail/CVE-2025-15467)**.**

In addition, this release fixes an issue with the **INITIAL\_BACKFILL\_DATE** environment variable. Previously, configuring this variable could cause the CronJob to fail if more than three days had passed since the initial deployment.

**Required action:** Update the exporter image in your CronJob YAML to version **2.0.2** to mitigate this risk and resolve the bug. Use the following image:&#x20;

```
finout/finout-metrics-exporter:2.0.2
```

</details>

<details>

<summary>Version 1.34.3 – Release date: February 9, 2026</summary>

#### **Overview**

Prometheus Metrics Exporter **v1.34.3** fixes [**CVE-2025-15467**](https://nvd.nist.gov/vuln/detail/CVE-2025-15467)**.**

**Required action:** Update the exporter image in your CronJob YAML to version **1.34.3** to mitigate this risk. Use the following image:&#x20;

```
finout/finout-metrics-exporter:1.34.3
```

</details>


# Ensure Compatibility of Your Kubernetes Monitoring with Finout

For DevOps teams looking to confirm their Kubernetes monitoring setup works seamlessly with Finout, this concise guide provides the essentials. Learn how to leverage Finout's cronjob support across Prometheus-compatible systems, ensuring your monitoring solution is fully compatible and optimized for use with Finout. This straightforward approach aims to equip DevOps professionals with the knowledge needed to validate their exporter's functionality swiftly.

Before you begin, ensure you have the following prerequisites in place:

* **Prometheus-compatible system**: Your metrics collection system must be compatible with Prometheus. This includes systems such as VictoriaMetrics, Thanos, Cortex, and M3, among others. These systems must support PromQL queries for integration.
* **Kubernetes cluster**: You need an operational Kubernetes cluster where you can deploy the Finout Cronjob.
* **Connect to Kubernetes Prometheus**: Refer to the [main documentation](/kubernetes-integrations/kubernetes/prometheus/prometheus-per-cluster-integration) for detailed instructions on setting up the Kubernetes Prometheus integration.
* **Environment variables**: Ensure you have the necessary environment variables configured for connectivity. These include SCHEME, HOSTNAME, PORT, PROMETHEUS\_USERNAME, PROMETHEUS\_PASSWORD, and optionally, PROMETHEUS\_AUTH\_TOKEN, PROMETHEUS\_BEARER\_AUTH\_TOKEN, and PROMETHEUS\_X\_SCOPE\_ORGID.

## Integration Steps <a href="#h_f197ac7063" id="h_f197ac7063"></a>

1. **Validate metrics export**: Ensure that your system exports the correct metrics to Finout. Validate the following queries in your system:

   * Memory Usage (V2 or Standard):
     * For Memory Usage V2:

       ```yaml
       - name: memory_usage_v2
        query: sum without (instance) (label_replace(sum(container_memory_working_set_bytes{pod!="", container!="",container!="POD", instance!=""}) by (instance, namespace, pod, container, %%%cluster_label), "node", "$1", "instance", "(.+)"))
       ```
     * For Standard Memory Usage:

       ```yaml
       - name: memory_usage
       query: sum(node_namespace_pod_container:container_memory_working_set_bytes{pod!="", containeč!="",container!="POD", instance!=""}) by (node, namespace, pod, container, %%%cluster_label)
       ```
   * CPU Usage (V2 or Standard):
     * For CPU Usage V2:

       ```yaml
       - name: cpu_usage_v2
       query: sum without (instance) (label_replace( sum(rate(container_cpu_usage_seconds_total{pod!="", container!="", container!="POD", instance!=""}[1m])) by (instance, namespace, pod, container, %%%cluster_label), "node", "$1", "instance", "(.+)"))
       ```
     * For Standard CPU Usage:

       ```yaml
       - name: cpu_usage
       query: sum(rate(container_cpu_usage_seconds_total{pod!="", container!="", container!="POD", instance!=""}[1m])) by (node, namespace, pod, container,%%%cluster_label)
       ```
   * Network Usage (V2 or Standard):
     * Bytes Received and Transmitted:
       * For V2:

         ```yaml
         - name: bytes_received_v2
         query: sum without (instance) (label_replace(sum(rate(container_network_receive_bytes_total{pod!="", instance!=""}[5m])) by (instance, namespace, pod, container, %%%cluster_label), "node", "$1", "instance", "(.+)"))
         - name: bytes_transmitted_v2
         query: sum without (instance) (label_replace(sum(rate(container_network_transmit_bytes_total{pod!="", instance!=""}[5m])) by (instance, namespace, pod, container, %%%cluster_label), "node", "$1", "instance", "(.+)"))
         ```
       * For standard Bytes Received and Transmitted:

         ```yaml
         - name: bytes_received
         query: sum(rate(container_network_receive_bytes_total{pod!="", instance!=""}[1m])) by (node, namespace, pod, container, %%%cluster_label)
         - name: bytes_transmitted
         query: sum(rate(container_network_transmit_bytes_total{pod!="", instance!=""}[1m])) by (node, namespace, pod, container, %%%cluster_label)
         ```
   * Node Info:

     ```yaml
     - name: node_info
     query: max(kube_node_info) by (node, provider_id,%%%cluster_label)
     ```

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You may omit the cluster_label grouping when testing these queries.</p></div>

2. **Deploy the Finout Cronjob**: Deploy the Finout Cronjob in your Kubernetes cluster. This is essential for scheduling and running the integration tasks.

3. **Configure connectivity**: Utilize the environment variables to configure the connectivity between Finout and your Prometheus-compatible metrics system. This setup allows Finout to execute PromQL queries against your metrics database.

4. **Grant Finout permissions**: Ensure Finout has the necessary permissions to read your metrics export from your S3 bucket, as detailed in the [documentation](/telemetry-integrations/telemetry/s3-csv-telemetry).

By following these steps and ensuring your Prometheus-compatible system meets the requirements, you can successfully integrate Kubernetes metrics with Finout for enhanced monitoring and management capabilities.


# Datadog

## Overview

The Datadog Kubernetes Integration in Finout leverages Datadog metrics to provide detailed cloud cost breakdowns to Kubernetes clusters, namespaces, and workloads. This integration supports enriching costs for EKS (AWS), GKE (GCP), and AKS (Azure) infrastructures using CPU, memory, and network metrics.

With this integration, Finout is capable to [calculate and break down Kubernetes costs](/kubernetes-integrations/kubernetes/how-finout-calculates-kubernetes-costs) from the billing data - enabling full visibility into cost and waste within your Kubernetes workloads across your cloud infrastructure.&#x20;

This integration ensures that Kubernetes cost data is available [across Finout](/kubernetes-integrations/kubernetes/kubernetes-across-finout), just as it is with any other cloud provider.

## How the Integration Works

Finout's Kubernetes Datadog cost integration follows a simple, three-step process:<br>

1. **Metrics Export:** Finout exports the following container metrics from your Datadog API:
   1. kubernetes.cpu.usage.total
   2. kubernetes.cpu.requests
   3. kubernetes\_state.node.cpu\_capacity
   4. kubernetes.memory.usage
   5. kubernetes.memory.requests
   6. kubernetes\_state.node.memory\_capacity
   7. kubernetes.network.rx\_bytes
   8. kubernetes.network.tx\_bytes
   9. kubernetes\_state.pod.uptime
   10. container.uptime
   11. kubernetes\_state.node.status
   12. kubernetes\_state.node.count
2. **Metrics Storage:** All the exported metrics are written into Finout storage.
3. **Cost Enrichment:** Finout processes your stored metrics, validating and normalizing them, then enriches your cloud billing data with these metrics to provide cost attribution that supports Kubernetes-level abstraction and granularity i.e., (namespaces, workloads, and labels).

## Prerequisites:&#x20;

Finout also creates a[ Datadog cost center ](/billing-integrations/observability-platforms/connect-to-datadog)when you set up the Kubernetes integration.&#x20;

This means that Datadog’s billing data will be automatically monitored in Finout, either via UAT or the Custom Tags integration, depending on your Datadog account type.

Ensure your data is tagged using UAT at the parent organization level in Datadog.

{% hint style="info" %}
**Note**: If you are unsure how to verify these, contact Finout support at <support@finout.io> for further assistance.
{% endhint %}

## Next Steps

Once you've verified your prerequisites and ensured the required metrics are exposed, connect your [Datadog Kubernetes cost center](/kubernetes-integrations/kubernetes/datadog/connect-to-datadog-kubernetes).

For additional support, consult our [FAQ](/kubernetes-integrations/kubernetes/datadog/datadog-kubernetes-faqs) section or contact Finout support at <support@finout.io>.


# Connect to Datadog Kubernetes

## Overview

To set up the Datadog Kubernetes integration, create an API key and an application key in your Datadog account to allow Finout secure access. Then enter these keys in Finout to connect your Datadog account.

Finout uses [Datadog-collected Kubernetes usage metrics](/kubernetes-integrations/kubernetes/datadog) to allocate cluster costs across Kubernetes workloads.

Once connected, Datadog is configured in Finout both as a cost center via Datadog’s billing API and as a Kubernetes metrics source for [K8s cost allocation](/kubernetes-integrations/kubernetes/how-finout-calculates-kubernetes-costs).

## Prerequisites:&#x20;

Finout also creates a Datadog cost center when you set up the Kubernetes integration.&#x20;

This means that Datadog’s billing data will be automatically monitored in Finout, either via UAT or the Custom Tags integration, depending on your Datadog account type.

Ensure your data is tagged using UAT at the parent organization level in Datadog.

{% hint style="info" %}
**Note**: If you are unsure how to verify these, contact Finout support at <support@finout.io> for further assistance.
{% endhint %}

## Setting up Datadog Kubernetes Integration

### **1. Create an API Key** <a href="#h_4e104f0fbc" id="h_4e104f0fbc"></a>

1. Log into your Datadog account.<br>

   <figure><img src="/files/8AOoatczq2baQjAkA9It" alt=""><figcaption></figcaption></figure>
2. Hover over your Datadog user and select **Organization Settings.**\
   The **Organization Settings** view appears.<br>

   <figure><img src="/files/vEw9rbogQy4Qnjm61H0w" alt=""><figcaption></figcaption></figure>
3. Click **API Keys**.\
   The **New API Key** pop-up appears.<br>

   <figure><img src="/files/ESXKk9hEms4WjgMIZgAx" alt=""><figcaption></figcaption></figure>
4. Enter an API key name and click **Create Key**.<br>

   <figure><img src="/files/tBEeM4F05fBjw7MW5ZaW" alt=""><figcaption></figcaption></figure>
5. Copy the new API key, save it for later (step 3), and click **Finish**.

### **2. Create an Application Key** <a href="#h_1589c03d0d" id="h_1589c03d0d"></a>

<figure><img src="/files/RpRAs1FLE4hCnAqXiTTY" alt=""><figcaption></figcaption></figure>

1. In your Datadog account, hover over your Datadog user and select **Organization Settings.**<br>

   <figure><img src="/files/glcfTaREQUsOhbjQaNyh" alt=""><figcaption></figcaption></figure>
2. Choose **Application Keys.**<br>

   <figure><img src="/files/wNT4HwcYEyLLx6F5Rtct" alt=""><figcaption></figcaption></figure>
3. Enter an API key name and click **Create Key**.<br>

   <figure><img src="/files/24NC0MFE6xTErFAQGNOi" alt=""><figcaption></figcaption></figure>
4. The default configuration is a non-scoped app key. \
   To scope the API key, click **Edit** under the scope section.\
   The **Edit Key Scope** appears.<br>

   <figure><img src="/files/xsIlJYePLEjrfQrmRxW1" alt=""><figcaption></figcaption></figure>
5. Choose the relevant scopes according to [this table](/billing-integrations/observability-platforms/connect-to-datadog/datadog-integration-levels) and click **Save**.<br>

   <figure><img src="/files/WKn255beo81QJmFxdtnk" alt=""><figcaption></figcaption></figure>
6. Copy the new App key and save it for later (step 3).

### 3. Create the Datadog Kubernetes Cost Center in Finout

1. In Finout, navigate to **Settings**.<br>

   <figure><img src="/files/JzKv6QVTvr2Sr4Jvu16t" alt=""><figcaption></figcaption></figure>

2. Click **Cost Centers.**\
   You are brought to the cost centers page.<br>

   <figure><img src="/files/zQ3lnb9b7TCMmmrZTv1Z" alt=""><figcaption></figcaption></figure>

3. Click **Add cost center**.\
   The **Connect Accounts** popup appears.<br>

   <figure><img src="/files/VObbRxZJdG6lDEpxt7PB" alt=""><figcaption></figcaption></figure>

4. Find Datadog and click **Connect Now**.\
   The **Connect Datadog** step appears.<br>

   <div align="left"><figure><img src="/files/msHPBIPyibHD1DLH7PId" alt=""><figcaption></figcaption></figure></div>

5. Add a **Cost Center Name.**

6. **Select the integration type:** Kubernetes metrics + Cost Center

7. **Select the Datadog account type: Enterprise or Non-Enterprise (Free/Pro).**\
   &#x20;This selection determines the integration method:
   * **Enterprise/Pro accounts** use [**UAT** integration](/billing-integrations/observability-platforms/connect-to-datadog/datadog-usage-attribution-tags-uat) (default method).
   * **Free accounts** use **Custom Tags** integration.

     <figure><img src="/files/nIaLZFaExmq0eAtoLc2c" alt=""><figcaption></figcaption></figure>

8. Add the API key and APP key (created in steps 1 and 2) and click **Next**.\
   You are brought to the **Select Cost Centers (Beta)**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: <em>This step is currently beta</em>. If this step is unavailable to you, contact support at support@finout.io to complete the setup.</p></div>

   <br>

   <div align="left"><figure><img src="/files/mSSp7tXNIsl7ilz4a2iZ" alt=""><figcaption></figcaption></figure></div>

9. Select the cost centers that this integration will enrich with Kubernetes metrics. These cost centers can then attribute Kubernetes costs for supported services (EKS, GKE, and AKS) by namespace, workload, and label.

10. Click **Complete Integration**. \
    The cost center is created, and your Datadog billing and Kubernetes data will be available in the next 48 hours.

{% hint style="info" %}
**Note**:

* If this cost center is already enriched by a Kubernetes integration, ensure there are no overlapping nodes between the integrations to avoid duplicated costs and resources.
* You can hover over every created cloud cost center and see all the Kubernetes cost centers that enrich it.

  <figure><img src="https://docs.finout.io/~gitbook/image?url=https%3A%2F%2F3858159242-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FWqjB2puKXPDR7L86FX2e%252Fuploads%252FCeKySfVSrCoxamJ1Nv8P%252Fimage.png%3Falt%3Dmedia%26token%3D8dface99-81fe-4b43-a9bc-f17c4acc97e3&#x26;width=768&#x26;dpr=3&#x26;quality=100&#x26;sign=c972410d&#x26;sv=2" alt=""><figcaption></figcaption></figure>

{% endhint %}


# Datadog Kubernetes FAQs

#### Does integrating Datadog Kubernetes also create Datadog as a cost center?

Yes. Datadog Kubernetes integration will also create a Datadog cost center in Finout, enabling visibility into your Datadog spend.

#### Are there differences in how Kubernetes cost enrichment works across AWS, GCP, and Azure?

All three cloud providers support Finout’s new CPU, memory and network metrics for calculating and breaking down Kubernetes costs across Finout.

Kubernetes costs using AWS infrastructure can be calculated by the [old and the refined algorithm](/user-guide/optimize/costguard/finout-scans#h_72d396e03d), based on your account configuration.

Kubernetes costs using GCP or Azure infrastructure can be calculated by the refined algorithm only.

#### Why are some resources not identified as Kubernetes in Finout?

Finout identifies Kubernetes resources using metrics collected from your configured monitoring source. If the required metrics for a specific node or machine are not available, Finout cannot associate that infrastructure with Kubernetes.

In such cases, the cost will still appear in Finout, but it will be attributed to the underlying cloud provider (for example, AWS, GCP, or Azure) rather than being enriched with Kubernetes dimensions such as namespace, workload, or labels.

#### Why don't my Kubernetes labels from Datadog not show up in Finout?&#x20;

Datadog collects Kubernetes labels, but Finout can only read them if they are used as tags in Datadog. By default, labels aren’t exposed via the Datadog API. To fix this, configure your Datadog Agent/Cluster Agent to map pod, namespace, or node labels as tags. Once mapped, they’ll appear in Datadog as tags and then surface automatically in Finout under Kubernetes pod labels.

See Datadog’s guide for using Kubernetes labels as tags for setup instructions.

#### Why don’t some AKS nodes match Azure billing resources in Finout?

Datadog host/provider identifiers for AKS can appear in multiple formats (for example, aks-... hostnames and VMSS-style suffixes). Finout normalizes these variants, including Azure VMSS instance suffixes encoded in Base36, to improve matching between Kubernetes metrics and Azure cost data. If matches are still missing, share sample host tags/provider IDs with Finout support so we can verify the mapping strategy for your account.

#### How is a machine identified as Kubernetes in Finout?

For a machine to be identified as Kubernetes, specific Kubernetes-related metrics must be present. If these metrics are missing, Finout cannot classify the resource as Kubernetes and will instead attribute it to its original cloud provider.

**Why don’t my Kubernetes labels from Datadog show up in Finout?**\
Datadog collects Kubernetes labels, but Finout can only read them if they’re promoted to **tags** in Datadog. By default, labels aren’t exposed via the Datadog API. To fix this, configure your Datadog Agent/Cluster Agent to map pod, namespace, or node labels as tags. Once mapped, they’ll appear in Datadog as tags and then surface automatically in Finout under Kubernetes pod labels.

See [Datadog’s guide on mapping Kubernetes labels as tags](https://docs.datadoghq.com/containers/kubernetes/tag/?tab=helm#pod-labels-as-tags) for setup instructions.


# Telemetry

## Overview

Finout allows users to import telemetry data to the platform daily. This functionality enables the creation of precise unit economics, detailed [breakdowns of shared costs](#h_67368f9787), and the development of telemetry-based widgets that enhance the monitoring of various data sources together with the [MegaBill](/user-guide/inform/megabill).

Telemetry refers to any data measurements that users intend to incorporate into Finout. This includes any metrics or data points that can be leveraged to enhance insights, enable monitoring, or assist in managing costs within the platform.

When preparing your telemetry data for Finout, ensure your input can support the following format, which includes three main attribute types: Date, Metadata, and Metric.

| **Type of attribute**   | **How many columns can be used?** | **Mandatory/Optional** | **What is this used for?**                                                                                                                                      | **Format / Notes**                    |
| ----------------------- | --------------------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
| **Date**                | Single                            | Mandatory              | Each data row input represents the telemetry for a specific date, accompanied by their metadata values, indicating the day on which the telemetry was recorded. | <p>YYYY-MM-DD</p><p>“date” column</p> |
| **Metadata (multiple)** | 0-10                              | Optional               | Any tagging attributes can be utilized to group and filter telemetry data based on metadata such as team, group, or feature.                                    | Optional                              |
| **Telemetry**           | 1                                 | Mandatory              | Represents the total of the telemetry for the given date and metadata.                                                                                          | Positive number                       |

If the data can be integrated into Finout using this format, it can be used as a telemetry source in Finout’s abilities.

### Unit Type Support

To provide better context for your telemetry data, Finout now supports an optional **unit\_type** field in telemetry payloads. This enhancement transforms raw numeric values into meaningful, interpretable data by specifying what each quantity represents—whether it's hours, gigabytes, API calls, or any other unit of measurement.

By including unit type information, your telemetry data becomes more transparent and actionable across cost allocations, anomaly detection, and internal reporting workflows. The unit type appears throughout the Finout interface, giving stakeholders immediate context about the metrics they're analyzing.\
\
Once you include unit type in your telemetry data, Finout displays this information in the following areas:

**Widgets and Dashboards**: Custom widgets that incorporate telemetry data display unit types, ensuring that dashboard viewers understand the metrics being presented.

### Utilizing Telemetry Data for Shared Cost Breakdown <a href="#h_67368f9787" id="h_67368f9787"></a>

One of the major advantages of Finout’s telemetry data integration is its ability to provide detailed allocation and breakdown of shared costs, beyond the resource level. This capability is especially important for breaking down multi-tenant use cases (such as cost per development team or cost per customer) that are not easily attributed to their right destinations. It addresses the challenge of expenses that lack granularity from cloud service providers, such as EC2 data transfers or database instances utilized by several tenants (teams/customers).

With Finout's advanced capabilities, users achieve a more granular reallocation of costs beyond basic resource levels, enabling deeper cloud cost analysis and management.

For instance, users can utilize Finout’s reallocation abilities to select a [Virtual Tag](/user-guide/inform/virtual-tags) value and determine a reallocation strategy. This means you can reallocate the cost of an S3 bucket according to an external metric using the Virtual Tags advanced allocation (reallocation) section.

### Methods for Integrating Telemetry Data into Finout <a href="#h_7897484634" id="h_7897484634"></a>

To integrate your telemetry data with Finout effectively, please utilize one of the supported methods listed below. This can be done through external telemetry sources or internally through Finout.

{% hint style="info" %}
**Note**: The data for each method is updated once a day as part of our data retrieval process.
{% endhint %}

**External Telemetry Sources**

* [S3 Bucket Telemetry Export ](/telemetry-integrations/telemetry/s3-csv-telemetry)- Export your telemetry data to an S3 bucket accessible by Finout. Finout automatically samples the bucket daily, identifying new CSV files and data by checking the uploaded file names and their last modification date.
* [Datadog](/telemetry-integrations/telemetry/setting-up-a-datadog-finout-metrics-integration-export)- If your telemetry data is collected and managed via Datadog, integrate directly with Finout to import metrics.
* [GCP BigQuery](/telemetry-integrations/telemetry/bigquery-telemetry-integration)- Integrate your GCP BigQuery data directly with Finout to automatically fetch and update telemetry data daily. Grant Finout secure access to your relevant datasets and tables to enable enhanced cost visibility, showback capabilities, and advanced cost allocation strategies. This allows Finout to retrieve your business metrics and convert them into structured telemetry for custom cost centers or shared cost allocation.
* [Prometheus](/telemetry-integrations/telemetry/creating-telemetry-in-finout-using-prometheus-metrics) - For systems monitored by Prometheus, leverage this integration to forward metrics directly to Finout. This is supported only for accounts with K8s environments that are monitored using Prometheus. After integrating successfully, Finout collects the relevant metrics.&#x20;
* [Snowflake Telemetry Integration](/telemetry-integrations/telemetry/snowflake-telemetry-integration) - Integrating your Snowflake data into Finout lets you turn internal business metrics into daily Telemetry that power cost models, shared‑cost allocation, and richer reporting.

**Internal Telemetry Sources**

* [MegaBill ](broken://pages/GmlXPsf0QHqDBiXdJwBw)- You can create a MegaBill based telemetry using historical cost and usage data. This telemetry functions like externally sourced telemetry and supports virtual tag reallocations, enabling more precise cost attribution.


# S3 CSV Telemetry

Telemetries allow you to take business or usage data - like API calls, active users, bytes transferred, or queries run - and use them to power cost allocation, unit economics, and shared cost breakdowns.

S3 CSV telemetry lets you feed that data into Finout through CSV files uploaded to a bucket on S3.

Once connected, Finout reads your CSV files daily, maps the date and metric columns you define, and makes the data available across [Virtual Tags](https://docs.finout.io/user-guide/inform/virtual-tags), [Cost Centers](https://docs.finout.io/settings/cost-centers), and [dashboards](https://docs.finout.io/user-guide/visualize/dashboards).

***

### Prerequisites

Before you start, make sure you have:

* An S3 bucket with CSV files already exported to it (see CSV format requirements below)
* An S3 endpoint configured in Finout, or the ability to create one during this flow (see Set up an S3 Endpoint below)
* Telemetry management permission in Finout

***

### CSV format requirements

Your CSV files must include exactly three types of columns:

<table><thead><tr><th width="131.18359375">Column type</th><th width="88.7109375">Count</th><th width="102.8203125">Required</th><th width="216.578125">Purpose</th><th>Format</th></tr></thead><tbody><tr><td><strong>Date</strong></td><td>1</td><td><mark style="color:$success;"><strong>Yes</strong></mark></td><td>One row per date per dimension combination</td><td>See supported formats below</td></tr><tr><td><strong>Metric</strong></td><td>1</td><td><mark style="color:$success;"><strong>Yes</strong></mark></td><td>The numeric value for that date and dimension</td><td>Positive number</td></tr><tr><td><strong>Metadata (dimensions)</strong></td><td>0–10</td><td><mark style="color:red;"><strong>No</strong></mark></td><td>Attributes to filter and group telemetry (e.g., team, environment, feature)</td><td>Any string</td></tr></tbody></table>

**Supported date formats:**

* `yyyy-MM-dd`
* `yyyy/MM/dd`
* `yyyy/M/d`
* `MM/d/yyyy`
* `yyyy-M-d`
* `yyyy-MM-dd'T'00:00:00'Z`

{% hint style="info" %}
Column headers must not contain spaces. The metric column name becomes the telemetry identifier in Finout — choose it carefully, as it cannot be changed after creation.
{% endhint %}

**Example CSV:**

```csv
"date","teamname","bytes"
"2022-06-07","Servers","12.12"
"2022-06-07","Storage","6.22"
"2022-06-08","Network","0.05"
```

In this example: `date` is the date column, `teamname` is a metadata dimension, and `bytes` is the metric.

***

### Set up an S3 endpoint

Finout reads your CSV files through an S3 endpoint — a configured connection to an S3 bucket that grants Finout read-only access.&#x20;

{% hint style="warning" %}
If you already have an S3 endpoint configured in Finout, skip to Create an S3 CSV telemetry.
{% endhint %}

To set up a new S3 endpoint:

1. **Navigate** to **Settings > Endpoints**.
2. **Click** **Add Endpoint**, then select **Amazon S3**.
3. Under **Bucket Access**, select **Read Only**.
4. **Copy** the External ID shown on screen.
5. In AWS IAM, [create a new cross-account role](https://console.aws.amazon.com/iam/home?region=us-east-1#/roles$new?step=type\&roleType=crossAccount):&#x20;
   1. Enter the **AWS Account ID** associated with your S3 bucket.
   2. Enable **Require external ID** and paste the External ID from Finout.
   3. Click **Next** through to the review screen.
   4. Name the role `FinoutMetricsReadOnlyRole` and create it.
   5. Open the newly created role, copy the **Role ARN**, and paste it back into Finout.
   6. In the role, **click Add permissions > Create inline policy**.
   7. Select **JSON** and insert the following policy. Replace `<BUCKET_NAME>` with your bucket name:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["tag:GetTagKeys"],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:Get*", "s3:List*"],
      "Resource": "arn:aws:s3:::<BUCKET_NAME>/*"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:Get*", "s3:List*"],
      "Resource": "arn:aws:s3:::<BUCKET_NAME>"
    }
  ]
}
```

9. Name the policy `finout-access-policy_telemetry_export` (or a name of your choosing) and save it.
10. Back in Finout, fill in the endpoint details:
    * **Endpoint Name** and optional description
    * **Role ARN**
    * **Bucket Name**
    * **S3 Path Prefix** (optional — the folder path within the bucket)
    * **Region**
11. **Click** **Test Endpoint** to verify the connection.
12. **Click** **Add Endpoint**.

***

### Create an S3 CSV telemetry

1. **Navigate** to **Settings > Telemetry**.
2. **Click** **Add Telemetry** and select **S3 CSV**.
3. **Select an S3 endpoint** from the list of configured endpoints.
4. **Enter a prefix** to identify which CSV files in the bucket belong to this telemetry (required).<br>

   <figure><img src="/files/YHynNdUyn9qxlgxCLdN0" alt=""><figcaption></figcaption></figure>
5. **Enter a telemetry name** (the display name shown in Finout).
6. Finout fetches a sample of your CSV and displays 10 rows from recent dates. Review the data to confirm you're pointing at the right files.<br>

   <figure><img src="/files/lrg13MMquTjZPnSWAc3b" alt=""><figcaption></figcaption></figure>
7. **Select the date column** — one column only.
8. **Select the date format** that matches your file from the list of supported formats. Finout validates that the column parses correctly and blocks progress if it does not.
9. **Select the metadata columns (dimensions)** you want to include. You can include up to 10. Deselect any columns you don't need.

{% hint style="info" %}
By default, no metadata columns are selected. Select the ones you want to use as dimensions in cost allocation and filtering.
{% endhint %}

10. **Select the metric column** — one column only. This becomes the telemetry identifier in Finout.
11. Review the full configuration summary: endpoint, prefix, telemetry name, date column and format, selected dimensions, and metric.<br>

    <figure><img src="/files/MOkrQzG7NogfShC1kE5U" alt=""><figcaption></figcaption></figure>
12. **Click** **Create Telemetry**.

**Result:** The telemetry is created with **Active** status and appears immediately in the Telemetries table under **Settings > Telemetries**. Finout begins ingesting data from the next daily sync.

***

### What's next

* Use your new telemetry in [shared cost reallocation](https://docs.finout.io/user-guide/inform/shared-cost-reallocation/how-to-use-shared-cost-reallocation)
* Build unit economics [dashboards](https://docs.finout.io/user-guide/visualize/dashboards) that bring cloud cost and business metrics together
* Manage or deactivate telemetries from **Settings > Telemetries**


# Setting Up a Datadog - Finout Metrics Integration (Export)

## Overview

To seamlessly integrate Datadog metrics with Finout, start by linking your [Datadog API ](/billing-integrations/observability-platforms/connect-to-datadog)with Finout. This connection is crucial for Finout to fetch daily telemetry data, enhancing your insights into unit economics and enabling more accurate shared cost reallocation.

Why should I connect a Datadog external metric to Finout?

1. To [reallocate shared costs](/user-guide/inform/shared-cost-reallocation) more effectively.
2. Creating unit economics using our [unit economics widget.](/user-guide/inform/finops-dashboards)

## 1. Create a Datadog API integration <a href="#h_17fa85e73a" id="h_17fa85e73a"></a>

Ensure your Datadog API is integrated within Finout, a step necessary for both tracking Datadog-related expenses and importing metrics. For a metrics-focused integration without the cost monitoring component, ensure your Datadog API key is enabled for timeseries\_query permissions. While integrating Datadog's cost center is recommended for a holistic view, it is optional for metrics-only scenarios.

Please refer to Finout's [Datadog integration guide](/billing-integrations/observability-platforms/connect-to-datadog) for complete setup instructions.

{% hint style="info" %}
**Note**: While the guide discusses cost integration, the same principles apply for metric data integration.
{% endhint %}

## 2. Format your Datadog metric query for Finout <a href="#h_4bbb7079a5" id="h_4bbb7079a5"></a>

Choose and format the Datadog metric you wish to export to Finout by determining the appropriate aggregation function, metric name, filters, and grouping parameters. This process involves selecting the specific Datadog metric, applying the correct aggregation function, and setting relevant filters and group parameters to refine your query.

Example queries:

* For counting instances: "query": "sum:my\_metric{status:200} by {host}.as\_count()",
* To summarize over time: "query": "avg:my\_metric{\*} by {region}.rollup(sum, 3600)",

{% hint style="warning" %}
**Important**: Additional Information: The data retrieved will be documented with daily granularity, capturing all associated tags with the metrics. This ensures a detailed and flexible use of metrics within Finout.
{% endhint %}

## 3. Adding Data <a href="#h_4ef0da4c61" id="h_4ef0da4c61"></a>

Please provide Finout with the following information:

* Formulated query string
* Custom metric name

The data will be captured daily and include all metric tags, enriching your Finout analyses and decision-making capabilities.


# BigQuery Telemetry Integration

## Overview

Integrate your Google Cloud Platform (GCP) BigQuery data directly with Finout to automatically fetch and update telemetry data daily. By granting Finout secure, controlled access to your relevant BigQuery datasets and tables, you enable enhanced cost visibility, showback capabilities, and advanced cost allocation strategies. This integration allows Finout to retrieve your business metrics and convert them into structured telemetry for custom cost centers or shared cost allocation within Finout.

## Connect Big**Query Telemetry**

### 1. Create or Use a Service Account

Set up a dedicated GCP service account for Finout. This provides a secure and manageable identity for Finout within your GCP project.

1. Navigate to the **IAM & Admin** section in your GCP console.<br>

   <div align="left"><figure><img src="/files/BsBKtL2k8Sn6tCnJZD9X" alt=""><figcaption></figcaption></figure></div>
2. Select **Service Accounts**. \
   \
   From here, you can either create a new service account specifically for Finout or identify an existing one that you wish to use where new or existing service accounts can be managed.

### 2. Generate and Share Credentials JSON File

For Finout to securely authenticate with your GCP project, you need to generate a JSON credentials file from the service account.

1. Locate the dedicated service account created or chosen in Step 1.<br>

   <figure><img src="/files/gxiSZ37Zmas1hoB9E0Sg" alt="" width="563"><figcaption></figcaption></figure>

2. Click ![](/files/TjIQ5K57aSPBpCWlUd01) on the rightmost side of that service account, and select **Manage keys**.\
   You are brought to create a new key.

   <figure><img src="/files/KDI66F5RTDMXfmYcQjUo" alt=""><figcaption></figcaption></figure>

3. Click **Add key** and then choose **Create new key**. \
   The **Create private key** popup appears.

   <figure><img src="/files/Wny3er1DYZECEd5uofKC" alt=""><figcaption></figcaption></figure>

4. Select **JSON** as the key type. \
   A JSON file containing the necessary authentication keys will be downloaded to your device.&#x20;

5. Share this file with Finout support in a secure way.

### 3. Assign IAM Roles to the Service Account

To enable Finout to view and extract data from BigQuery, specific Identity and Access Management (IAM) roles must be granted to the service account.

1. Navigate back to the Service Account chosen in Step 1.&#x20;

   <figure><img src="/files/aOjlqP4VVnm2jhTCYQgq" alt=""><figcaption></figcaption></figure>
2. Click ![](/files/TjIQ5K57aSPBpCWlUd01) on  to the rightmost side of the service account and select **Manage permissions**.\
   The Manage service account permissions option appears.<br>

   <div align="left"><figure><img src="/files/HmKjRrskbl05OUekg0gG" alt=""><figcaption></figcaption></figure></div>
3. Click **Manage access**.\
   You are brought to Assign roles.<br>

   <div align="left"><figure><img src="/files/t8e0zngAJpUu8EM2fvAc" alt=""><figcaption></figcaption></figure></div>
4. Grant two essential permissions by clicking **Add role**.\
   The BigQuery roles appear.<br>

   <div align="left"><figure><img src="/files/VfHidgaBRUvQMWHqQm6L" alt=""><figcaption></figcaption></figure></div>
5. Choose the BigQuery role.
   * BigQuery Data Viewer: This role provides read-only access to view BigQuery datasets, schemas, and table content.
   * BigQuery Job User: This role grants the permission to execute the queries required for data extraction from your BigQuery tables.&#x20;
6. Click **Save**.

### 4. Restrict Access to a Specific Table (Optional)

For enhanced security and granular control, you have the option to limit the service account's access to only one specific BigQuery table, rather than an entire dataset.<br>

<figure><img src="/files/rzrImTH9hE7mS2DNpPHR" alt=""><figcaption></figcaption></figure>

1. Navigate to **IAM & Admin** > **IAM** in your GCP console and click ![](/files/WyVdQpVQgcG3qZ2X97Ux).\
   The Assign roles appears.

   <figure><img src="/files/Ih78Q3fObSszxEsfkqoC" alt=""><figcaption></figcaption></figure>
2. &#x20;Click **Add IAM condition** to apply a resource-level condition to the IAM role.\
   The condition editor appears.<br>

   <figure><img src="/files/YLoHOG91CoJLTYtaL7HG" alt=""><figcaption></figcaption></figure>
3. Add a **Title** and **Description**.
4. In the **Condition editor**, define the target table using the following precise format in the Condition editor tab: \
   `resource.name.startsWith(“projects/<project-id>/datasets/<dataset-id>/tables/<table-id>”)`<br>

For more information on resource-level IAM conditions, see the[ GCP documentation](https://cloud.google.com/iam/docs/conditions-overview).

### 5. Share BigQuery Access Details with Finout

Once all roles and permissions are correctly configured, you need to provide Finout with the necessary details to initiate data syncing.

• Securely share the following credentials with your designated Finout contact:

&#x20;   ◦ **Project ID**

&#x20;   ◦ **Dataset ID**

&#x20;   ◦ **Table ID**

&#x20;   ◦ **Credentials JSON file** - generated in Step 2.

{% hint style="info" %}
&#x20;**Note**: This file contains all secrets in plain text.
{% endhint %}

These credentials ensure that Finout gains access only to the specified BigQuery table and can securely sync the data into Finout’s internal environment.

**Result**: Upon successful receipt of these details, your BigQuery data will typically be available in Finout within 24 hours, enabling you to , define cost center logic and implement advanced cost allocation strategies.


# Creating Telemetry in Finout Using Prometheus Metrics

## Overview

Leverage your existing Prometheus setup to create telemetry. By exporting your custom Prometheus metrics to an S3 bucket and integrating them into Finout, you can enhance your cost allocation and financial analysis capabilities.\
\
**There are two ways to create telemetry using Prometheus:**\
1\) [If you already have Finout’s Prometheus Metrics Exporter deployed](#option-1-create-telemetry-using-an-existing-finout-metrics-exporter), you can also extend it to collect and send custom telemetry data based on Prometheus metrics.

2\) [If you haven’t deployed Finout’s Prometheus Metrics Exporter](#option-2-create-telemetry-when-the-prometheus-metrics-exporter-isnt-installed), you’ll need to install it and set up the cron job to collect the required Prometheus usage metrics.

#### Prerequisites

* **Prometheus**: Having a Prometheus cost center configured in Finout—whether it’s a [per-cluster](/kubernetes-integrations/kubernetes/prometheus/prometheus-per-cluster-integration) or a [Centralized Prometheus Monitoring](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations) setup. S3 Bucket: A designated S3 bucket where Prometheus metrics will be exported.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: It is recommended to use the same bucket used for CUR ingestion in Finout.</p></div>
* **Finout Account**: An active Finout account with API access.

## **Option 1: Create Telemetry Using an Existing Finout Metrics Exporter**

If you already have Finout’s metrics exporter set up for collecting Prometheus usage metrics, you can easily extend its capabilities to handle custom telemetry data.

**1. Update Your Existing Exporter’s YAML Configuration**

Incorporate the Prometheus metrics into your existing cronjob’s YAML configuration file.

{% hint style="info" %}
**Important**:

* Adjust your existing cronjob  YAML configuration:  add an environment variable with “QUERY\_” prefix to identify the metric query as custom telemetry data for Finout.-  Make sure the metric values represent cumulative or incremental usage, as Finout aggregates the sum of all samples across the day.
* If the metric is a gauge and a different aggregation is needed (average, count, max), please contact support.
  {% endhint %}

**Example Metric Query:**

`sum(increase(logstash_ingestion_byte_size_total[5m]))`

This query example converts the byte counter into 5-minute increments and sums those increments.\
When Finout rolls the samples up by day, you get the total bytes ingested per tenant for that day.

**Example Cronjob YAML Update (for per-cluster setup):**

This example applies to per-cluster setups. If you're using a Centralized Prometheus Monitoring tool setup, refer to the documentation for your specific monitoring tool for [guidance](/kubernetes-integrations/kubernetes/prometheus/centralized-prometheus-monitoring-tool-integrations).

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: finout-prometheus-exporter-job
spec:
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 1
  concurrencyPolicy: Forbid
  schedule: "*/30 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.6
              imagePullPolicy: Always
              env:
  - name: S3_BUCKET
    value: "<BUCKET_NAME>"
  - name: S3_PREFIX
    value: "k8s/prometheus"
  - name: CLUSTER_NAME
    value: "<CLUSTER_NAME>"
  - name: HOSTNAME
    value: "<PROMETHEUS_SERVICE>.<NAMESPACE>.svc.cluster.local"
  - name: PORT
    value: "9090"
  - name: QUERY_logstash_ingestion
    value: "sum(increase(logstash_ingestion_byte_size_total[5m]))"


restartPolicy: OnFailure
```

**2.Validate your Kubernetes Integration**\
\
Confirm that your Prometheus Integration is working correctly:\
**S3 Validation**

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`

You should see a list of metric folders, such as: metric=cpu\_requests/

2. **Open a metric folder** and verify that .json.gz files were uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`

If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

**Data Availability**

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

**3.Notify Finout Support**\
Once the telemetry data is available in your S3 bucket, notify Finout Support at <support@finout.io> with your S3 bucket details and a sample file.\
\
For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.

## **Option 2: Create Telemetry when the Prometheus Metrics Exporter Isn’t Installed**

If you don’t already have the Finout Metrics Exporter installed, deploy the dedicated CronJob to collect and export your Prometheus telemetry. This setup is intended for cases where you want to export Prometheus telemetry without using the full Kubernetes cost enrichment integration—the CronJob’s sole purpose is to handle telemetry.

If you also plan to use this CronJob for Kubernetes cost enrichment, follow the Kubernetes cost enrichment guide (see [Overview](/kubernetes-integrations/kubernetes)) and use [Option 1](#option-1-create-telemetry-using-an-existing-finout-metrics-exporter) for deployment.

**1. Create a YAML Configuration**

Create a YAML configuration file to specify the Prometheus metrics you want to export.

Important: Prefix custom metrics with QUERY\_ in the YAML configuration to identify them as telemetry data for Finout.

* Make sure the metric values already represent cumulative or incremental usage, as Finout aggregates the sum of all samples across the day.
* If the metric is a gauge and a different aggregation is needed (average, count, max), please contact support.

**Example Metric Query:**

`sum(increase(logstash_ingestion_byte_size_total[5m]))`

This query converts the byte counter into 5-minute increments and sums those increments.\
When Finout rolls the samples up by day, you get the total bytes ingested per tenant for that day.

**Example YAML Configuration:**

```yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: finout-prometheus-exporter-job
spec:
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 1
  concurrencyPolicy: Forbid
  schedule: "*/30 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: finout-prometheus-exporter
             image: finout/finout-metrics-exporter:2.0.6
              imagePullPolicy: Always
              env:
  - name: S3_BUCKET
    value: "<BUCKET_NAME>"
  - name: S3_PREFIX
    value: "k8s/prometheus"
  - name: CLUSTER_NAME
    value: "<CLUSTER_NAME>"
  - name: HOSTNAME
    value: "<PROMETHEUS_SERVICE>.<NAMESPACE>.svc.cluster.local"
  - name: PORT
    value: "9090"
  - name: CUSTOM_QUERIES_MODE
    value: "override"
  - name: QUERY_logstash_ingestion
    value: "sum(increase(logstash_ingestion_byte_size_total[5m]))"

restartPolicy: OnFailure

```

**2. Schedule the Cronjob**

Set up the cronjob to run the Prometheus export at a regular interval (usually once an hour). The cronjob will execute the queries and export the resulting data to your S3 bucket.

**3.Validate your Kubernetes Integration**\
\
Confirm that your Prometheus Integration is working correctly:\
**S3 Validation**

To confirm that Prometheus metrics are being exported correctly to your S3 bucket:

1. **Navigate to the S3 path**, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/`

You should see a list of metric folders, such as: metric=cpu\_requests/

2. **Open a metric folder** and verify that .json.gz files were uploaded. Each file should have a timestamp prefix, for example:\
   `s3://cur-bucket/k8s/prometheus/prod-cluster/end=20251101/day=5/metric=cpu_requests/1759622400_cpu_requests.json.gz`

If these files appear, the CronJob ran successfully, and Prometheus metric files were generated and stored in the correct S3 structure.

**Data Availability**

Kubernetes cost and usage data will appear across Finout within 48 hours, matching the standard cloud billing data delivery window.

{% hint style="info" %}
**Note**: If any issues occur, share your exporter logs with Finout support at <support@finout.io> for further investigation.
{% endhint %}

For more information, please see the [FAQs](/kubernetes-integrations/kubernetes/prometheus/prometheus-faqs) and [Troubleshooting](/kubernetes-integrations/kubernetes/prometheus/prometheus-troubleshooting) section.

**4. Notify Finout Support**

Once the telemetry data is available in your S3 bucket, notify Finout Support at <support@finout.io> with your S3 bucket details and a sample file.

<br>


# Snowflake Telemetry Integration

Integrating your Snowflake data into Finout lets you turn internal business metrics into daily Telemetry that power cost models, shared‑cost allocation, and richer reporting.

{% hint style="success" %}
**Prerequisite**: Ensure Finout has access to the relevant tables in your Snowflake environment. These tables should contain business KPIs or metrics that Finout can convert into daily usage telemetry for accurate cost allocation and reporting.
{% endhint %}

## 1. Create Permissions in Snowflake

{% hint style="info" %}
**Note:** Skip this step if you already granted Finout access during Snowflake Cost‑Center onboarding, or if you plan to reuse the same Snowflake user & role.
{% endhint %}

Run the following commands as a user with the ACCOUNTADMIN role:<br>

* To set up a dedicated warehouse, role, and user for Finout, paste the following query, ensure secure access by restricting the connection to specific IP addresses used by Finout, and then run the following command:<br>

  ```sql
  CREATE WAREHOUSE IF NOT EXISTS finout_warehouse 
    WITH WAREHOUSE_SIZE = 'XSMALL' 
    AUTO_SUSPEND = 30 
    INITIALLY_SUSPENDED = TRUE;
  CREATE ROLE finout_role;
  CREATE USER finout_user
      DEFAULT_ROLE = finout_role;
  GRANT USAGE ON WAREHOUSE finout_warehouse TO ROLE finout_role;
  GRANT ROLE finout_role TO USER finout_user;
  GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE finout_role;
  CREATE OR REPLACE NETWORK POLICY FINOUT_NETWORK_POLICY
      ALLOWED_IP_LIST = (
          '34.196.241.137',
          '212.59.64.84',
          '54.163.113.82',
          '44.196.75.137'
      );
  ALTER USER finout_user SET NETWORK_POLICY = FINOUT_NETWORK_POLICY;
  ```

## 2. Set Up Key‑Pair Authentication

{% hint style="info" %}
**Note:** If you already configured key‑pair authentication during Cost‑Center onboarding, you can safely skip this entire section.
{% endhint %}

Finout authenticates to Snowflake using RSA key-pair authentication, eliminating the need to store a password:

* Key pair generation: Finout securely generates the RSA key pair.
* Private key protection: The private key remains within Finout’s secure storage infrastructure.
* Public key deployment: The public key is added to your Snowflake user account to complete the authentication setup.

1. #### Key‑Pair Generation (Handled by Finout)

   Finout Support will send you the public key. No action is required on your side for key creation.
2. **Update Your Snowflake User**
   1. Log in to the Snowflake console and open a worksheet.
   2. Run the following command, replacing placeholders:<br>

      ```sql
      ALTER USER <your_username> SET RSA_PUBLIC_KEY = '<public_key>';  -- Include the full key string
      ```

      * \<your\_username> – the Snowflake user you created for Finout (e.g., finout\_user).
      * \<public\_key> – the public key string provided by Finout (include the BEGIN/END lines if present).

Finout will verify the connection automatically.

## 3. Grant Access to the KPI / Metric Table

Limit permissions to exactly what Finout needs:

```sql
GRANT USAGE  ON DATABASE your_database TO ROLE finout_role;
GRANT USAGE  ON SCHEMA   your_database.your_schema TO ROLE finout_role;
GRANT SELECT ON TABLE    your_database.your_schema.your_table TO ROLE finout_role;

```

## 4. **Share Snowflake Access Details with Finout**

Send the following securely to Finout Support:

* Username (e.g., finout\_user)
* Account name (the part before the Snowflake URL)
* Role (e.g., FINOUT\_ROLE)
* Warehouse , Database , and Schema.

**Result**:&#x20;

Once the setup is finished, Finout starts ingesting your telemetry within 24 hours. You’ll then be able to:

* Use Telemetry as a dimension in reallocation virtual tags.
* Break down shared costs using internal usage metrics from telemetry data.
* Build dashboards and widgets that combine cost and business KPIs using telemetry data to create comprehensive unit economics views. Set up anomaly alerts on unit economic metrics to automatically detect when your cost per customer, company product, team, or other key ratios deviate from expected patterns.

See [Connect to Snowflake](/billing-integrations/data-and-engineering-platforms/connect-to-snowflake/connect-to-snowflake-account-level-integration) for more information.<br>


# MegaBill View Telemetry

## Overview

MegaBill View Telemetry allows you to dynamically reallocate shared costs based on ratios derived from historical cost and usage data within Finout’s MegaBill. These ratios can be calculated daily or based on a sliding window (e.g., previous month, last 30 days), leveraging the data that already exists in Finout along with user-defined groupings and filters.

Transforming internal cost and usage data into telemetry enables flexible and precise cost reallocation within Finout. Organizations can distribute shared expenses across dimensions such as teams, namespaces, or cost centers using proportional ratios derived from historical cost or usage trends. This can be generated from any existing MegaBill view, enabling you to customize cost reallocation to fit your specific needs.<br>

**Use Cases**

* **AWS Support Costs Reallocation**: AWS support charges are typically applied as a percentage of an organization’s cloud spend, but they often lack a clear breakdown per team or business unit. With MegaBill View Telemetry, these costs can be **redistributed based on proportional usage or spend**, ensuring accurate financial accountability.
* **Idle Resource Cost Allocation**: In cloud environments, idle or underutilized resources often contribute to unnecessary unallocated or shared costs. By leveraging historical telemetry, FinOps teams can allocate these idle costs proportionally to the teams or services associated with them, enabling better visibility and cost accountability.

## Create a MegaBill View Telemetry

### 1. Obtain a View ID

1. In MegaBill, **select a view** that you want to base the telemetry on.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: </p><ul><li>You can use a <strong>pre-defined saved view</strong> or <strong>create your own view</strong>. See <a href="/pages/HmUJlXC09tHYvI2xpYC4#h_826c6d6143">MegaBill documentation</a> for full instructions regarding creating new views and using saved views.</li><li>Part of the process of creating a new view is <strong>Enabling ACL Permissions.</strong> This allows you to define specific read and write permissions for individual users and groups. See <a href="/pages/HmUJlXC09tHYvI2xpYC4#h_826c6d6143">MegaBill documentation</a> and <a href="/pages/i7OqCE0PN5UuVmvMYLUJ">ACL Permissions</a> for more information.</li><li>You cannot create a Megabill ratio with multiple group bys.</li></ul></div>

   <br>

   <figure><img src="/files/6zQLO26NiVNnL12EQ4F1" alt=""><figcaption></figcaption></figure>
2. Copy the **View ID**.

### 2. Connect MegaBill View Telemetry

1. Navigate to **Settings** > **Telemetry**.<br>

   <figure><img src="/files/8j5c1iZsj9DTgpEOoyv0" alt=""><figcaption></figcaption></figure>
2. Click **Add telemetry**.\
   The Connect Telemetry page appears.<br>

   <figure><img src="/files/KxzOWpj2RZi2uamDaFcB" alt=""><figcaption></figcaption></figure>
3. Under MegaBill View, click **Connect Now**.\
   The **Configure MegaBill View** step appears.<br>

   <div align="left"><figure><img src="/files/cTwbUt7BOsMDMZYAOfYE" alt=""><figcaption></figcaption></figure></div>
4. **Telemetry Display Name**: Choose a clear, descriptive name that identifies and locates the telemetry easily.
5. **MegaBill View**: Choose a MegaBill view from the dropdown.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> If a view cannot be used for MB Telemetry (for example, when no <strong>Group By</strong> is selected or when multiple <strong>Group By</strong> dimensions are used), the view will still be displayed but cannot be used for telemetry.</p></div>

   <div align="left"><figure><img src="/files/36sOrbndCerUvSeizX40" alt=""><figcaption></figcaption></figure></div>
6. **Time Frame Type**: Specify either "Same-Day" or "Sliding Window":
   * **Same-Day Calculation**: (See [below](#same-day-calculation) for a more detailed explanation)
     * Ratios are calculated using data from the current day only.
     * Each day's calculation is independent and does not incorporate historical data.
     * Use case: Ideal when cost behavior or usage patterns vary significantly day to day (e.g., spot instances, ephemeral environments).
     * Data scope: Only today’s data is considered; no historical context is applied.
   * **Sliding Window Calculation**: (See [below](#sliding-window-calculation) for a more detailed explanation)
     * Ratios are calculated using historical data for the timeframe selected in the MegaBill view, up to 31 days. The current day is always excluded from the calculation window.
     * Use case: Ideal for stable environments where you want allocations to reflect historical averages.
     * Data scope: A rolling window of past days, excluding the current day.
7. Click **Next**.\
   You are brought to the **Review Configuration** step.\
   \
   **Same Day Calculation Review**:<br>

   <div align="center"><figure><img src="/files/T1rDBcNdb0by4OCtHLx4" alt=""><figcaption></figcaption></figure></div>

   \
   **Sliding Window Calculation Review**:

<figure><img src="/files/Rt3KDJ3hxCoQ1b2UK2Fg" alt=""><figcaption></figcaption></figure>

8. Review the configuration and click **Submit.**\
   \
   **Result:** The MegaBill View Telemetry is created and appears in the Telemetry list. \
   Data is automatically aggregated over the past 3 months.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: If a view is changed, the updated calculation will appear in the MegaBill View Telemetry by the next day and will also apply to the current month's configuration.</p></div>

## Same-Day Calculation

* **Definition**: Ratios are calculated independently for each day, using only that day’s data.
* **Use case**: This is ideal when cost behavior or usage patterns vary significantly day to day (e.g., spot instances, ephemeral environments).
* **Data scope**: Only today’s data is considered; no historical context is applied.

Example:

You want to distribute daily Datadog costs across teams based on their cloud spend on that same day:

* On March 5th:
  * Team A spent $200
  * Team B spent $800
  * Total daily spend: $1,000\
    \
    Datadog bill for March 5th: $100

Ratio-based allocation:

* Team A: $100 × (200 / 1,000) = $20
* Team B: $100 × (800 / 1,000) = $80\
  \
  This calculation resets daily, using only the respective day’s spend.

## Sliding Window Calculation

* **Definition**: Ratios are based on historical data over a defined window of days (up to 31 days max).
* **Use case**: This is ideal for stable environments where you want allocations to reflect historical averages.
* **Data scope**: A window of past days, excluding the current day.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> The sliding window is limited to a maximum of 31 days, and the current day is always excluded from the calculation. The window is dynamic and does not support a fixed static timeframe (for example, January 25); it continuously adjusts based on the current date.</p></div>

**Example**:

You want to allocate March 1st’s AWS support cost based on spend from the previous 30 days (Feb 1–Feb 29).

Historical team spend:

* Team A: $900
* Team B: $8,100
* Total: $9,000

&#x20;  AWS Support bill for March 1st: $270

Ratio-based allocation:

* Team A: $270 × (900 / 9,000) = $27
* Team B: $270 × (8,100 / 9,000) = $243

&#x20;  This sliding window recalculates daily, shifting one day forward and excluding today’s data.

### Sliding Window Variations

* **Last X Days**: For each day, sum of the cost and usage of the previous X days, not including the current day.<br>

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> The window slides forward daily.</p></div>

  \
  For Example: On April 9, with a 3-day window, the value includes April 6, 7, and 8.
* **Last Month (Previous Calendar Month)**: For each day, sum of the cost and usage of the entire previous calendar month.<br>

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> Value is constant across all days (e.g., April 1–30 shows the same March total).</p></div>

  \
  Example: On any day in April, the value will be the total of March 1–31.
* **Current Month (Same Calendar Month)**: For each day, sum of the cost and usage of the current calendar month.<br>

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> Value is updated retroactively for each day in the month as new data arrives,   so April 1 through April 30 will all eventually show the total for April.</p></div>

  \
  Example: On April 9, the value includes April 1–9. On April 30, it includes April 1–30.

## FAQs

**How do I use telemetry for shared cost reallocations?**

To use telemetry for shared cost reallocations, select the generated MegaBill View Telemetry from the existing dropdown within the Virtual Tag reallocation options. Reallocations are performed similarly to external telemetry sources. For detailed instructions, please refer to the [How to Use Shared Cost Reallocation](https://docs.finout.io/user-guide/inform/shared-cost-reallocation/how-to-use-shared-cost-reallocation) documentation.

**What is the recommended daily telemetry data limit?**

The recommended daily telemetry limit is up to 1,000 telemetry values per day to ensure optimal performance and reliability.

**How frequently does telemetry data update?**

MegaBill view telemetries are always kept up to date with MegaBill data - any change reflected in your MegaBill will be reflected in MegaBill telemetries as well.

**What is the maximum number of hierarchical levels or nested categories I can effectively implement when organizing telemetry data in the MegaBill Ratio system?**

It is recommend to use up to three nested levels of virtual tags for optimal performance when working with MegaBill View Telemetry

**How many active MegaBill View Telemetry sources can I maintain per account?**

Each account supports up to 50 active MegaBill Ratio telemetry.


# Finout MCP Integration

### Overview

With the Finout MCP ([Model Context Protocol](https://modelcontextprotocol.io/introduction)), you can ask questions about your cloud cost spend, anomalies, waste, budgets, tag coverage, unit economics, and more - directly inside the AI tools you already use. The Finout MCP acts as a bridge to your live Finout data, letting you query and visualize cloud spend through natural language without switching tools or exporting data.

The Finout MCP is hosted and managed by Finout. There is nothing to install and no credentials to manage locally - authentication is handled via a standard OAuth flow, the same experience you use to log in to Finout.

### MCP Clients

An MCP client is any AI assistant or agent that can communicate using the Model Context Protocol. The Finout MCP is compatible with any client that supports remote MCP with OAuth. Examples include:

* [Claude](https://claude.ai/) (web and desktop)
* [Cursor](https://www.cursor.com/) IDE
* Any other MCP-compatible AI tool

You can find a full list of clients in the[ MCP documentation](https://modelcontextprotocol.io/clients).

### What You Can Do

Once connected, ask questions like:

* "Show me the top 5 AWS services by cost last month"
* "Compare our cloud spend this quarter vs last quarter"
* "Which dimensions had the biggest cost increase this month?"
* "Are there any high-severity cost anomalies this week?"
* "What are our biggest waste and rightsizing opportunities?"
* "How are we tracking against our Q1 budget?"
* "What percentage of our spend is tagged with a team tag?"
* "What changed in my K8s allocation tag between last week's version and today's?"
* "Run my saved 'K8s cost' data explorer and show me the results"
* "Has CPU utilization on this idle instance actually been trending up, or was that a one-time spike?"<br>

### Getting Connected

#### Step 1 - Download and Install an MCP Client

* Claude - Download[ Claude for Desktop](https://claude.ai/download) or use[ Claude on the web](https://claude.ai/).
* Cursor - Download[ Cursor](https://www.cursor.com/) for your operating system.

Other tools - Any MCP-compatible AI tool that supports remote connections via OAuth will work. Point it to <https://mcp.finout.io/mcp>.

#### Step 2 — Configure the Finout MCP Server

{% tabs %}
{% tab title="Claude" %}

1. Open **Settings → Connectors**
2. Click **Add Custom Connector**
3. Enter the following details and click **Add**:

| Field        | Value                       |
| ------------ | --------------------------- |
| Name         | Finout                      |
| URL          | `https://mcp.finout.io/mcp` |
| {% endtab %} |                             |

{% tab title="Cursor" %}

1. Press **Cmd/Ctrl + Shift + P** to open the command palette
2. Type **MCP** and select **Open MCP Settings**
3. Add the following to your `mcp.json` file:

```json
{
  "mcpServers": {
    "finout": {
      "url": "https://mcp.finout.io/mcp"
    }
  }
}
```

4. Save the file
   {% endtab %}

{% tab title="Other clients" %}
Any MCP-compatible AI tool that supports remote connections via OAuth will work. Point it at `https://mcp.finout.io/mcp`.
{% endtab %}
{% endtabs %}

#### Step 3 - Authorize the Finout MCP Server

After configuring the server, your browser will open an authorization screen.

1. Review the authorization details and click Allow Access
2. Log in to Finout with your existing credentials or via SSO
3. Once authorized, close the browser tab and return to your AI client

Tip: By default, most clients ask for approval before each tool call. For a smoother experience, set the permission to Always Allow in your connector settings.

#### Step 4 - Start Prompting

Open a new chat and start asking questions about your cloud costs. For example:

"Show me the top 5 AWS services by cost last month"

Your AI client will use the appropriate Finout MCP tool and return results from your live Finout data.

### **Data Access & Permissions**

The Finout MCP respects your account's existing data access controls — no exceptions are granted simply because a request originates from an AI client.

When you connect the Finout MCP, authentication flows through a standard OAuth screen. The credentials you authorize with are the same credentials your Finout account uses. As a result, every query the MCP runs is scoped to exactly what your user is permitted to see — the same cost centers, filters, and data ranges available to you inside the Finout app.

This means:

* If your account is restricted to specific cost centers, the MCP cannot query outside them.
* If your organization has team-based access policies, those policies apply equally to MCP queries.
* There is no elevated or "read-all" mode available through the MCP.

The Finout MCP exposes 29 tools across five categories.

#### Discovery & Context

| Tool                        | Description                                                                                                                                                                                                               |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| get\_account\_context       | Returns connected cost centers, available data ranges, and account configuration. Good first call when orienting to a new account.                                                                                        |
| search\_filters             | Finds filter metadata by name - required before calling query\_costs or compare\_costs.                                                                                                                                   |
| get\_filter\_values         | Returns available values for a specific filter (e.g., "what services do we use?").                                                                                                                                        |
| list\_available\_filters    | Lists all available filters by cost center. Use only when you need a full overview - prefer search\_filters for targeted lookups.                                                                                         |
| debug\_filters              | Diagnostic tool for inspecting raw filter metadata. Use when a filter lookup returns unexpected results.                                                                                                                  |
| discover\_context           | Finds dashboards, saved views, and data explorers by name.                                                                                                                                                                |
| list\_data\_explorers       | Lists all saved data explorer configurations in the account.                                                                                                                                                              |
| list\_telemetry\_centers    | Lists custom metric sources available for unit economics calculations.                                                                                                                                                    |
| run\_data\_explorer\_report | Runs a saved data explorer by ID and returns its results (up to the top 500 rows) using the explorer's saved time range, columns, filters, and sort order. Call after `list_data_explorers` to resolve the explorer's ID. |

<br>

#### Cost Analysis

| Tool                    | Description                                                                                                                        |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| query\_costs            | Core cost query tool. Returns totals, breakdowns, and trends for any combination of time period, filters, and grouping dimensions. |
| compare\_costs          | Compares cloud costs between two time periods.                                                                                     |
| get\_top\_movers        | Identifies dimensions with the biggest cost changes between two periods.                                                           |
| get\_unit\_economics    | Computes cost-per-unit metrics (e.g., cost per active user, cost per API request).                                                 |
| get\_cost\_statistics   | Returns daily cost stats: mean, median, peak, trough, and volatility.                                                              |
| get\_cost\_patterns     | Analyzes temporal patterns - hourly peaks, weekday vs. weekend splits, recurring cycles.                                           |
| get\_savings\_coverage  | Analyzes savings plan and reservation coverage, including commitment gaps.                                                         |
| get\_usage\_unit\_types | Discovers available usage unit types for a cost center. Call before using usage\_configuration in query\_costs.                    |

#### Anomalies & Waste

| Tool                        | Description                                                                                                                                                              |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| get\_anomalies              | Retrieves cost anomalies and spikes detected by Finout. Filter by severity: high, medium, low.                                                                           |
| get\_waste\_recommendations | Returns CostGuard waste detection results - idle resources, over-provisioned instances, and commitment gaps.                                                             |
| get\_resource\_metrics      | Returns historical time-series metrics (CPU, memory, network, or usage volume) for a single resource, to confirm the trend behind a waste or rightsizing recommendation. |

#### Governance & Allocation

| Tool                           | Description                                                                                                                                                                                                                                 |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| get\_tag\_coverage             | Measures what percentage of spend is tagged by a given dimension.                                                                                                                                                                           |
| get\_financial\_plans          | Retrieves budgets and forecasts with actuals, run rate, and forecast per dimension.                                                                                                                                                         |
| analyze\_virtual\_tags         | Deep-dives into virtual tag configuration, relationships, and allocation logic.                                                                                                                                                             |
| list\_vtags (Beta)             | Lists all Virtual Tags in your account. Typically called automatically before `compare_vtag_versions` to resolve a tag name to its ID.                                                                                                      |
| list\_vtag\_versions (Beta)    | Returns the version history of a specific Virtual Tag — including who made each change, when, and any change description provided at save time.                                                                                             |
| compare\_vtag\_versions (Beta) | Compares two versions of a Virtual Tag and returns a structured diff. Surfaces added, removed, and modified rules — including filter value changes and rule reordering — as well as metadata changes such as the tag name or default value. |
| get\_object\_usages            | Finds all places a named Finout object is referenced - useful before modifying anything.                                                                                                                                                    |
| check\_delete\_safety          | Checks whether a Finout object is safe to delete without breaking downstream dependencies.                                                                                                                                                  |

#### Presentation

| Tool          | Description                                                                                                                                          |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| render\_chart | Renders a bar, column, line, or pie chart directly in the AI assistant UI. Use after query\_costs or compare\_costs to visualize results in-context. |

### **What the MCP Cannot Do**

The Finout MCP is currently read-only. It can retrieve, analyze, and surface your cost data, but it cannot create, edit, or delete anything inside your Finout account.

Specifically, the MCP cannot:

* Create or modify Virtual Tags, Cost Centers, or Dashboards
* Update financial plans or budgets
* Change account settings or user permissions
* Trigger any action that would alter your Finout configuration

If your AI client generates a configuration — for example, a Virtual Tag definition — it will produce that output as text or JSON for you to review and apply manually inside the Finout app or through Finout API.&#x20;

### Prompting Best Practices

* Pair with the Finout Docs MCP: For questions that combine how-to guidance with live account data, connect both the Finout MCP and the [Finout Docs MCP](https://docs.finout.io/ai-and-developer-tools/finout-docs-mcp-integration) at the same time. This lets your AI client retrieve documentation and query your actual cost data in a single conversation. Example: *"What does the documentation say about Reserved Instance coverage, and what does our actual RI coverage look like this month?"*
* Add context to your prompts. Mention the provider, time period, service, or tag dimension when relevant. For example: "Break down EC2 costs by environment tag for the last 30 days"
* Be specific about the time period. The default is the last 30 days - saying "last quarter" or "March 2026" ensures you get exactly the window you intend.
* Ask one thing at a time. Stacking unrelated questions can cause your AI client to conflate results. Ask them separately for cleaner answers.
* Specify the output format. If you want a chart, table, or summary, say so. For example: "Show me monthly EC2 spend by region for Q1 as a bar chart"
* A saved data explorer runs with its saved time range, columns, and filters. If that explorer was saved with a fixed date range, results may reflect that period rather than the current date - check the explorer's configured time range if the output looks out of date.&#x20;

#### Validating Responses

Because the MCP relies on an LLM, responses are not always deterministic. To validate outputs:

* Cross-reference results against your existing Finout dashboards or saved data explorers
* Expand the tool calls in your AI client to inspect the underlying filters and groupings applied
* If a response looks off, note what you asked, what you received, and what you expected - and share it with us via the submit\_feedback tool<br>

### Feedback

The Finout MCP includes a built-in submit\_feedback tool. After any interaction, ask your AI client to submit feedback directly: "Please submit feedback: the get\_top\_movers tool returned data for the wrong time period when I asked about last quarter."

You can also reach your Finout contact directly or email <support@finout.io>. The more specific your feedback, the faster we can act on it.

### FAQs

**Does the Finout MCP work with enterprise or internally-built AI tools?**

Yes, in most cases. Any AI client that implements the MCP standard with OAuth support can connect to the Finout MCP at `https://mcp.finout.io/mcp`.

In some cases, custom in-house AI tools that use the MCP protocol but implement OAuth callback registration themselves might face some issues with the initial connections. If your internal tool encounters an authorization error during setup, contact your Finout support for assistance. <br>

**Does `compare_vtag_versions` show changes to reallocation rules?**

No. The diff covers tagging rules, filter changes, and rule ordering. Changes to reallocation rules are not included.


# Finout Docs MCP Integration

### Overview

The Finout Docs MCP server gives AI assistants read-only access to the published Finout documentation. Once connected, you can ask how-to and conceptual questions about Finout in natural language and get answers grounded in the live docs — without leaving your AI tool.

Use it to:

* Ask how-to questions about Finout features (e.g., *"How do I connect OpenAI?"*)
* Look up prerequisites before starting an integration
* Get guidance on Virtual Tags, Dashboards, Cost Centers, and more
* Combine doc lookups with live Finout data when used alongside the [Finout MCP Integration (Beta)](https://docs.finout.io/ai-and-developer-tools/finout-mcp-integration-beta)

{% hint style="info" %}
Looking for live access to your Finout cost data instead of the documentation? See [Finout MCP Integration (Beta)](https://docs.finout.io/ai-and-developer-tools/finout-mcp-integration-beta). The two MCP servers are complementary — many users connect both.
{% endhint %}

### Prerequisites

Before connecting, make sure you have:

* An MCP-compatible AI assistant (e.g., [Claude](https://claude.ai/), [Cursor](https://www.cursor.com/), or VS Code with MCP support)
* The ability to configure MCP servers in your AI tool

No Finout account credentials are required. The Finout Docs MCP server provides access to publicly published documentation only.

### MCP Server URL

The Finout Docs MCP server is available at: <https://docs.finout.io/\\~gitbook/mcp>

{% hint style="warning" %}
Visiting this URL directly in a browser returns an error. The endpoint is intended for MCP-compatible AI tools, not browser access.
{% endhint %}

#### Getting Connected

{% stepper %}
{% step %}

### Configure the Finout Docs MCP Server

{% tabs %}
{% tab title="Claude" %}

1. Open **Settings → Connectors**
2. Click **Add Custom Connector**
3. Enter the following details and click **Add**:

| Field | Value                                 |
| ----- | ------------------------------------- |
| Name  | Finout Docs                           |
| URL   | `https://docs.finout.io/~gitbook/mcp` |

<figure><img src="/files/rj9wab5XBWHh2iVH0B8e" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Cursor" %}

1. Press **Cmd/Ctrl + Shift + P** to open the command palette
2. Type **MCP** and select **Open MCP Settings**
3. Add the following to your `mcp.json` file:

```json
{
  "mcpServers": {
    "finout-docs": {
      "url": "https://docs.finout.io/~gitbook/mcp"
    }
  }
}
```

4. Save the file
   {% endtab %}

{% tab title="Other clients" %}
Any MCP-compatible AI tool that supports remote connections over HTTP transport will work. Point it at `https://docs.finout.io/~gitbook/mcp`.
{% endtab %}
{% endtabs %}
{% endstep %}

{% step %}

### Start Asking Questions

Open a new chat and ask a question about Finout. Your AI assistant searches the Finout documentation, retrieves the relevant pages, and answers using the published content.

<figure><img src="/files/KzfQsJBpbS3n0ggITuik" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

### Example Questions

Once connected, ask questions like:

* "What are the prerequisites to connect Datadog to Finout?"
* "How do AI Virtual Tags work?"
* "Walk me through setting up an OpenAI Cost Center."
* "How does Finout handle unallocated Kubernetes costs?"
* "What's the difference between MegaBill and a Data Explorer?"

### Why use this instead of letting your AI assistant search the web?

The Finout documentation is publicly available, so AI tools with web access can already read it. The Docs MCP server is still useful in a few specific cases:

* **Tools without web access.** Many MCP clients — Cursor, VS Code, and internal agents — don't browse the web, or have it disabled by policy. The MCP server is often the only way for those tools to read Finout docs.
* **Direct, structured retrieval.** The MCP queries the documentation directly, rather than relying on a search engine's index. Results are current, scoped to the docs, and not mixed with third-party pages or stale caches.
* **Lower hallucination risk on Finout-specific questions.** Responses are grounded in retrieved pages your AI client can show you, rather than the model's training data or general web results.
* **Pairs with the** [**Finout MCP Integration (Beta)**](https://docs.finout.io/ai-and-developer-tools/finout-mcp-integration-beta)**.** Connect both, and your AI assistant can answer questions that combine how-to guidance with your live cost data in a single conversation — for example, *"What does the docs say about Reserved Instance coverage, and what does our actual coverage look like?"*

### FAQ

**My AI assistant can't connect**

Verify the URL is entered correctly (`https://docs.finout.io/~gitbook/mcp`) and that your tool supports MCP over HTTP transport. Check your AI tool's documentation for MCP-specific setup requirements.

**The assistant isn't finding relevant content**

Rephrase your question to be more specific. For example, instead of "how to set up an OpenAI connector," ask "how do I connect an OpenAI Cost Center in Finout."

Need more help? Contact Finout support at <support@finout.io>.


# Billy — Your AI FinOps Assistant

Billy is your AI FinOps assistant, bringing the entire Finout platform into one conversation. Instead of building views, setting filters, and reading charts, you ask Billy a question in plain English — and get a real, data-backed answer in seconds, complete with charts.

Ask it anything across your connected cloud infrastructure:

"How much did we spend on EC2 last month?" \
"What are our top cost anomalies this week?" \
"Show me savings plan coverage by service." \
"Explain how this virtual tag is built."

Billy is connected directly to your live Finout data and respects your user permission and data access controls. It understands the cloud providers you use, your virtual tags, anomalies, budgets, and cost history. You just ask.

### Who Billy is for

| Role                     | What Billy does for you                                                                                              |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------- |
| **FinOps teams**         | Stop building views and running queries to answer cost and usage questions. Ask Billy and get the answer in seconds. |
| **Engineering managers** | Understand cost and usage impact without leaving your workflow.                                                      |
| **Finance leaders**      | Get answers on budgets, trends, and forecasts — without waiting for FinOps to build a report.                        |

***

### How Billy works

When you ask Billy a question, it:

1. **Understands intent** — Interprets your question in plain language.
2. **Plans the query** — Selects the right internal tools automatically.
3. **Fetches data** — Queries your live Finout data.
4. **Responds** — Synthesizes the results into a plain-language answer, usually with a chart or table.

Billy is powered by Claude Sonnet and runs on AWS Bedrock. Your data stays within the AWS ecosystem and is never sent to any third party.

#### What Billy uses under the hood

Billy is powered by two MCP servers:\
1\. The [Finout MCP Server](https://docs.finout.io/ai-and-developer-tools/finout-mcp-integration) exposes a set of data tools spanning cost and usage analysis, anomaly detection, cost recommendations, budget tracking, tag governance, and more. \
2\. The [Finout Docs MCP](https://docs.finout.io/ai-and-developer-tools/finout-docs-mcp-integration) gives Billy read-only access to Finout's published documentation, so it can also answer how-to and conceptual questions about the product - not just questions about your live data.

You don't need to know which one applies to your question - ask it, and Billy figures out where the answer comes from.

To view the full list of data tools, go to [Finout MCP Server](https://docs.finout.io/ai-and-developer-tools/finout-mcp-integration). To learn more about the documentation source, go to [Finout Docs MCP Integration](https://docs.finout.io/ai-and-developer-tools/finout-docs-mcp-integration).

***

### What you can ask

Billy covers the full range of FinOps questions your team faces day to day.

#### Cost and usage analysis

* *"What were our top 5 AWS services by spend last month?"*
* *"Show me EC2 costs broken down by team tag for the last 30 days."*
* *"Compare our cloud costs this quarter vs. last quarter."*
* *"Which dimensions had the biggest cost increase this month?"*

#### Anomalies and waste

* *"Are there any high-severity anomalies this week?"*
* *"What are our biggest rightsizing opportunities right now?"*
* *"Which services have had unexpected cost spikes in the past 7 days?"*
* *"Show me idle or over-provisioned resources we could cut."*

#### Budgets and forecasts

* *"How are we tracking against our Q2 budget?"*
* *"Which teams are closest to their budget limits this month?"*

#### Governance and tagging

* *"What percentage of our AWS spend is tagged with a team tag?"*
* *"How does the environment Virtual Tag allocate costs?"*

#### Savings and commitments

* *"What is our current savings plan coverage?"*
* *"Where are we leaving reserved instance discounts on the table?"*

***

## Getting Started&#x20;

### Prerequisites

Billy requires [AI Services](https://docs.finout.io/cross-platform-features/list-of-cross-platform-features/ai-in-finout/ai-opt-in) to be enabled for your Finout account. This is a one-time action performed by an account Admin. Once enabled, all users in the account can access Billy immediately.

***

### Enable Billy

{% hint style="info" %}
Admin access is required to enable AI Services.&#x20;
{% endhint %}

1. **Navigate to Settings** — Click **Settings** in the Finout sidebar.
2. **Open Compliance & Privacy** — Select the **Compliance & Privacy** tab.
3. **Enable AI Services** — Turn on the **Enable AI Services** toggle. The change takes effect immediately for all users in the account.

<figure><img src="/files/k8pwRFRQQfKL63Gt7Jtd" alt=""><figcaption></figcaption></figure>

4. **Open Billy** — Click **Billy** in the left navigation to start your first conversation.

***

### Use Billy

#### Open Billy

1. Click **Billy** in the left navigation. The Billy panel opens.
2. Select one of the suggested prompts to jump straight in, or type your own question in the message box.

<figure><img src="/files/m00g9HRApsjGQnxqxeiY" alt=""><figcaption></figcaption></figure>

3. Type your question in plain English and press **Enter**. Billy queries your live Finout data and returns an answer — usually with a chart or summary table. There is no query language to learn and no filters to configure first.

*Example: "How much did we spend on EC2 last month, broken down by team tag?"*

#### Follow up

Billy maintains context throughout the conversation. You can drill in or ask for different data without repeating yourself.

*Examples:*

* *"Now filter that to just the production environment."*
* *"Can you show the same breakdown as a pie chart?"*

#### Stop a response

If Billy is mid-response and you want to stop it, click the **Stop** button that appears while Billy is generating its answer.

#### View chat history

All your Billy conversations are saved automatically. Access previous chats from the history panel in the left navigation. Your history persists across sessions.

<figure><img src="/files/fffJDV1Y7KZFmjD22qmX" alt=""><figcaption></figcaption></figure>

#### Share a chat

**Click** the **Share** button at the top of any Billy chat or from the Chat History to generate a shareable link. Anyone with access to the same Finout account can view it.

<figure><img src="/files/bbuECZ1nXAHq19QUyVJp" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Billy cannot decode a Finout share link pasted into chat. If you want Billy to analyze a specific saved view, describe the filters in plain text instead.
{% endhint %}

***

### **Rate a response**

After Billy responds, you can rate the answer using the thumbs-up or thumbs-down icons that appear below the response.

* **Thumbs up** — Marks the response as helpful.
* **Thumbs down** — Opens a feedback textbox. You can optionally describe what went wrong, then click **Send** to submit.

<figure><img src="/files/8XQGB6vS9THwZ1pkTM2S" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Your feedback is sent directly to the Finout team and helps improve Billy over time. Submitting feedback does not change the response or re-run the query.
{% endhint %}

***

### Permissions and data access

Billy uses your logged-in Finout user identity to determine what data it can access and which permissions your user has. Your existing Finout access controls apply — Billy cannot surface data outside the scope of your user permissions.

***

### Prompting tips

The clearer your question, the faster and more precise Billy's answer.

* **Be specific.** Include the cloud provider, metric, and time period in a single question.
* **Name the dimension.** If you want a breakdown by team, environment, or namespace, say so explicitly.
* **Follow up naturally.** Billy remembers context within a conversation. Drill in without repeating yourself.

***

## FAQs

#### Getting started

**Who can enable Billy?**\
An account Admin must enable AI Services via **Settings → Compliance & Privacy**. Once enabled, all users in the account can access Billy immediately.

**Is Billy included in my Finout plan?**\
Yes. Billy is available to all Finout accounts that have opted in to AI Services. There is no additional charge.

***

#### Data and security

**What model powers Billy?**\
Billy is powered by Claude Sonnet and runs on AWS Bedrock.

**Is my data sent to a third party?**\
No. Your data stays within the AWS ecosystem and is never shared with any third party.

**Will Billy show me data I'm not supposed to see?**\
No. Billy uses your logged-in Finout user identity and respects your existing permissions and data access. It only sees what your user can see in the platform.

**Does Billy learn from my conversations?**\
Conversations are recorded for quality improvement purposes. Billy does not personalize its behavior for individual users across sessions.

***

#### Using Billy

**Does Billy remember my previous chats?**\
Yes. Billy saves your full conversation history. Access previous chats from the history panel in the left navigation at any time.

**How do I share a conversation?**\
Use the **Share** button at the top of any Billy chat to generate a shareable link. The recipient must have access to the same Finout account to view it.

**Can Billy read a Finout share link I paste in?**\
Not yet. Billy cannot decode Finout share links. Describe the filters you want to apply in plain text instead.

**Can Billy create or modify things in Finout?**\
No. Billy is a read-only analyst — it explains your costs but does not act on them. It cannot create or modify views, dashboards, Virtual Tags, alerts, or reports, and it cannot delete any objects. All changes must be made directly in the Finout UI.

**Can Billy write code or export files?**\
No. Billy does not write scripts, generate CSV exports, or produce downloadable documents.

**Can Billy read files or screenshots I upload?**\
No. Billy cannot read uploaded files, screenshots, PDFs, or spreadsheets. Describe what you need in plain text instead.

**What time periods can Billy query?**\
Billy supports a full range of relative and absolute time periods: today, yesterday, last 7 days, this week, last week, this month, last month, last quarter, and custom date ranges (for example, January 1 to March 31, 2026).

**What if Billy gives me an unexpected or incorrect answer?**\
Billy is an AI assistant and may occasionally misinterpret ambiguous questions. If something looks wrong, try rephrasing with more specific filters or time periods. You can also click the thumbs-down icon on any Billy response to submit feedback to the Finout team.

**How is Billy different from the Finout MCP Server?**\
Both use the same underlying Finout data engine, but they work differently. Billy is built into Finout — no installation required. The [Finout MCP Server](https://docs.finout.io/ai-and-developer-tools/finout-mcp-integration) requires setup in your AI tool of choice (such as Claude Desktop or Cursor). Billy also adds an LLM reasoning layer on top of the MCP data tools, so it interprets your question, decides which tools to call, and combines the results into a clear answer. With the MCP Server, that reasoning is handled by the AI tool you connect to.<br>


# Account Instructions

Account Instructions let you give [Billy](https://docs.finout.io/ai-and-developer-tools/billy-your-ai-finops-assistant) a persistent set of instructions that shape how it answers — written once, applied to every question across your account.

By default, Billy interprets each question on its own. When two people ask the same thing in different ways, or when a term like "team" maps to more than one dimension in your data, Billy can resolve it differently from one answer to the next.&#x20;

Account Instructions remove that ambiguity: you tell Billy how your account works once, and every user gets answers built on the same assumptions.

Use Account Instructions to:

* **Set a default cost type** — for example, have Billy answer in net amortized cost unless a question says otherwise.
* **Map terms to specific dimensions** — tell Billy that "team" means a specific Virtual Tag, native tag key, or Cost Center label, so it stops guessing.
* **Standardize how answers look** — set preferences for the format or framing you want in Billy's responses.
* **Encode account context** — describe the conventions, naming, and structures specific to your account so Billy's answers reflect them.

***

### Prerequisites

* [AI Services](https://docs.finout.io/cross-platform-features/list-of-cross-platform-features/ai-in-finout/ai-opt-in) must be enabled for your account. This is a one-time action performed by an account Admin.
* You must have the permission to edit Account Instructions: `Edit Account Instructions`. Admins have this permission by default.&#x20;

{% hint style="info" %}
Only users with the `Edit Account Instructions` permission can view, edit, or toggle the instructions. Everyone else receives Billy's answers with the instructions already applied, without seeing or managing them.
{% endhint %}

### Open Account Instructions

1. **Navigate** to **Settings** in the Finout sidebar.
2. **Open** the **AI Governance** tab.

<figure><img src="/files/IDM6b1vP4hhz6FUsFWsl" alt=""><figcaption></figcaption></figure>

### Write your instructions

1. In the Account Instructions field, write your instructions in plain language. No need to follow any required structure — write the instructions the way you'd explain them to a colleague.
2. Keep your instructions within the **5,000-character limit**.

<figure><img src="/files/WNa3TGhsC5tX1JWiTOQd" alt=""><figcaption></figcaption></figure>

### Test your instructions

Before you save, you can test how Billy answers with your instructions applied — including unsaved edits — without affecting anyone else in your account. This lets you confirm your instructions produce the answers you expect before they go live for every user.

1. **Write or edit** your instructions in the Account Instructions field.
2. **Click** **Test instructions** in the top-right corner of the field.
3. Billy opens in a side panel. **Ask** any question to see how Billy answers with the instructions currently in the field applied.

Refine your wording in the field and re-test until Billy's answers match what you intend. Nothing is saved or applied account-wide until you click **Save** — the instructions you're testing stay in the field.

{% hint style="info" %}
Testing uses the instructions currently in the field, including changes you haven't saved yet. Other users keep getting Billy's answers based on the last saved version (or no instructions, if none are saved) until you save.
{% endhint %}

### Save your instructions

**Click** **Save**. Your instructions take effect for every account user the next time they ask Billy a question.

### Turn instructions on or off in Billy

You can control whether Billy applies your Account Instructions without deleting them.

1. Open Billy from the left navigation.
2. Toggle Account Instructions on or off. When on, Billy applies your instructions to every answer. When off, Billy answers without them.

{% hint style="info" %}
The toggle controls whether Billy applies your instructions — it doesn't edit them. It's on by default; if no instructions are set yet, Billy simply answers as it normally would until you add them.
{% endhint %}

### Writing effective instructions

Account Instructions work best when they remove a specific ambiguity or set a specific default. A few patterns:

**Set a default cost type**

> When a question doesn't specify a cost type, always answer in net amortized cost.

This keeps every user's numbers consistent, regardless of how they phrase the question.

**Map an ambiguous term to one dimension**

> When someone refers to a "team," resolve it to the *Engineering Teams* Virtual Tag — not the native `aws:team` tag.

This stops Billy from picking a different dimension across sessions when several could match.

**Encode an account convention**

> Our production environment is identified by the `env:prod` tag. Treat "production" and "prod" as the same thing.

This teaches Billy the naming your account actually uses.

{% hint style="success" %}
Be specific and name the exact dimension, tag key, Cost Center, or Virtual Tag you want Billy to use. Vague instructions ("be accurate," "use the right tag") give Billy nothing concrete to act on.
{% endhint %}

***

### How Billy uses your instructions

* **Account-wide.** Instructions apply to every user in the account who queries Billy, so everyone shares the same baseline interpretation.
* **Permissions still apply.** Account Instructions do not change what data a user can see. Billy continues to respect each user's existing Finout permissions and data access. An instruction cannot grant a user visibility into data outside their access scope.
* **Per-question override.** A specific question that names its own cost type, dimension, or time period takes precedence over a default set in your instructions.

### Limitations

* Account Instructions currently apply to **Billy only**. Support for the [Finout MCP Server](https://docs.finout.io/ai-and-developer-tools/finout-mcp-integration) is coming soon.&#x20;
* Instructions are limited to **5,000 characters**.

### FAQs

**Do Account Instructions change what data Billy can access?**\
No. Billy always respects your existing Finout permissions and data access. Instructions shape how Billy interprets and answers questions, not what it is allowed to see.


# Inform

Finout's Inform features provide powerful tools for gaining insights into cloud resource usage and cost optimization. By leveraging detailed metrics and customizable reports, Inform helps teams understand their cloud infrastructure more clearly. With advanced visualization and analysis capabilities, users can easily track spending, identify inefficiencies, and make data-driven decisions to optimize costs and resource allocation. Whether it’s forecasting future expenses or identifying waste in unused resources, Inform delivers actionable intelligence to improve financial planning and cloud operations.

Includes the following features:

* [Finout Overview](/user-guide/inform/finout-overview)
* [MegaBill](/user-guide/inform/megabill)
* [Custom Drilldown](/settings/custom-drilldown)
* [Custom Cost Input](/user-guide/inform/custom-cost-input)
* [Virtual Tags](/user-guide/inform/virtual-tags)
* [Shared Cost Reallocation](/user-guide/inform/shared-cost-reallocation)
* [FinOps Dashboards](/user-guide/inform/finops-dashboards)
* [Financial Plans](/user-guide/inform/financial-plans)
* [Data Explorer](/user-guide/inform/data-explorer)


# Finout Overview

## Overview

Finout gives you complete visibility into your cloud spend by consolidating data from all your connected sources into a single, unified view. From there, you can explore, analyze, and act on cost insights.

When you log in to Finout, the Overview immediately surfaces the most relevant insights, helping you understand your organization’s cloud usage and spending trends at a glance. You can track total and daily spend, compare performance against previous periods, and identify anomalies, all in one place.

Each widget in the Overview is designed to drive action. You can drill down into detailed data or jump directly to related dashboards or cost centers with a single click. This streamlined flow ensures you always know what’s happening, why it’s happening, and where to take action.

<figure><img src="/files/65nx1aJTfAUIyW4Ke7bw" alt=""><figcaption></figcaption></figure>

***

## Widget Types

<table><thead><tr><th width="387.5767822265625">Dashboard Name</th><th>Description</th></tr></thead><tbody><tr><td><mark style="color:green;"><strong>Cost Insights and Alerts</strong></mark></td><td></td></tr><tr><td>Monthly Cloud Spend</td><td>Shows your total cloud cost for the current month and the percentage change compared to the previous period. Click to open the MegaBill for a deeper breakdown.</td></tr><tr><td>Average Daily Spend</td><td>Displays the average daily cloud spend for the current month versus the previous month’s average daily spend. Click to explore the underlying data in MegaBill.</td></tr><tr><td>Projected Monthly Spend</td><td>Estimates your total spend for the current month based on trends from the past three months. Click to analyze projections in MegaBill.</td></tr><tr><td>Anomalies</td><td>Shows the number of anomalies detected in the last seven days. Click to review details and investigate causes.</td></tr><tr><td><mark style="color:green;"><strong>Key Features</strong></mark></td><td></td></tr><tr><td>Financial Plans</td><td>Displays the number of Financial Plans in your account. Click to view, edit, or create new plans.</td></tr><tr><td>Virtual Tags</td><td>Shows how many virtual tags you’ve configured to categorize costs. Click to manage or create new tags.</td></tr><tr><td>Dashboards</td><td>Indicates how many dashboards exist in your account. Click to view or create new ones.</td></tr><tr><td>Cost Centers</td><td>Shows the number of connected cost centers and lets you navigate directly to the Cost Centers page to onboard more sources.</td></tr><tr><td><mark style="color:green;"><strong>Cloud Cost Yearly Projection</strong></mark></td><td></td></tr><tr><td>AWS Year-End Cost Projection</td><td>Forecasts total year-end spend for AWS using the data of the past month. Click any projection to drill into details in MegaBill.</td></tr><tr><td>GCP Year-End Cost Projection</td><td>Forecasts total year-end spend for GCP using the data of the past month. Click any projection to drill into details in MegaBill.</td></tr><tr><td>Azure Year-End Cost Projection</td><td>Forecasts total year-end spend for Azure using the data of the past month. Click any projection to drill into details in MegaBill.</td></tr><tr><td>OpenAI Year-End Cost Projection</td><td>Forecasts total year-end spend Open AI using the data of the past month. Click any projection to drill into details in MegaBill.</td></tr><tr><td><mark style="color:green;"><strong>Monthly Cost Insights</strong></mark></td><td></td></tr><tr><td>Monthly Cost by Cost Center</td><td>Breaks down current-month costs by cost center and shows the percentage change compared to the previous month. Click to open each cost center’s predefined dashboard.</td></tr><tr><td>Monthly Cost Changes (Year to Date)</td><td>Visualizes how monthly costs have changed throughout the year by cost center, helping you track spending trends and deltas.</td></tr><tr><td>Top Monthly Spend by Service</td><td>Identifies the top five services contributing to your monthly cloud costs. Click to investigate service-level spend in MegaBill.</td></tr></tbody></table>

***

## FAQs

**What can I see on the Overview page?**\
On the Overview page, you can track total and daily cloud spend, and identify any anomalies. It consolidates these core signals in one place, allowing you to monitor high-level behavior without manually creating reports.

**How does the Overview help me drill down into detailed data and know where to take action?**\
The Overview is designed as a starting point for action. It brings together total spend, daily trends, comparisons to previous periods, and anomalies in one place so you can quickly spot where attention is needed. When something stands out, such as a sudden increase in spending, you can click the relevant widget to drill down into deeper views, including MegaBill, dashboards, or specific cost center dashboards, where you can investigate the root causes and take action.


# MegaBill

## Overview

A key aspect of FinOps is cost management, which involves tracking, identifying, and optimizing cloud spend and usage. With Finout's centralized dashboard, known as  MegaBill, you can easily visualize your entire cloud spend and usage data in one place, pinpointing areas for cost and usage reduction, and enabling informed decisions on budget allocation and future planning.

This approach aligns with the FinOps principle of financial governance, promoting collaboration between IT and finance teams to enhance visibility, accountability, and control of cloud costs. Furthermore, by gaining a clear understanding of your cloud usage and spending patterns over time, you can identify trends and continuously optimize your cloud usage, reducing costs and aligning with your business objectives. This reflects the principle of continuous optimization, an ongoing process of identifying, implementing, and measuring cost-saving opportunities and improvements.

**Tracking Cost and Usage in Finout’s MegaBill**

MegaBill includes the option to toggle between both cost monitoring and usage tracking data views. This dual tracking capability empowers you to not only manage expenses but also understand how resources are being utilized.

For example, consider tracking the running hours of an EC2 family. As part of a savings plan with your cloud provider for that specific EC2 family, you receive a discount, but your usage remains constant. The value of seeing usage data lies in your ability to track how resources are utilized. This helps you maximize the benefits of your savings plan while ensuring efficient resource management.

Cost data in MegaBill is available for all cloud providers and services supported by Finout. Usage data is available for AWS, GCP, and Azure. You can learn more about usage types in your data [here](/get-started-with-finout/cost-and-usage-types#h_d977f46b93).

## Using MegaBill <a href="#h_826c6d6143" id="h_826c6d6143"></a>

By default, MegaBill will display a graph and table of cost data for the cloud services and providers integrated with Finout.&#x20;

**You can use MegaBill by selecting filters, saving a desired filter (Create a View), or selecting an already saved set of filters (Saved View).**

<figure><img src="/files/3e9m1aICDLdkXBSI5w5M" alt=""><figcaption></figcaption></figure>

To drill down into your MegaBill, you can use the following options:

### Views

**1.Apply a** [**Saved View**](/cross-platform-features/list-of-cross-platform-features/saved-views)

If you have already saved a set of filters. (Creating a view and a detailed description of a MegaBill filters detailed below) <br>

1. Navigate to **MegaBill**.<br>

   <figure><img src="/files/VUW7hsZklxWxBOzmPqHa" alt=""><figcaption></figcaption></figure>
2. Once a view is created (see #2), click **Select view** in MegaBill.<br>

   <div align="left"><figure><img src="/files/LgHkdrS8chml4KyPAtRH" alt=""><figcaption></figcaption></figure></div>
3. Choose a **previously created view** or a **Finout Pre-defined view**.\
   The view is added to MegaBill and the graph and table are filtered accordingly.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can select one or more filters  to see a list of relevant views. For example, selecting AWS and GCP will show all saved views that include AWS and GCP resources or labels.<br><img src="/files/OeMXARuhsgpVp8k0WjeN" alt=""></p></div>

**2.Create a New View**

1. In Finout, navigate to **MegaBill**.<br>

   <figure><img src="/files/ivldQzJgIKfFYyXOi0PF" alt=""><figcaption></figcaption></figure>
2. Select the desired filters to best fit the MegaBill view to your needs (filters are detailed below) and then click **Save**.\
   The **Save new view** side-window appears.<br>

   <figure><img src="/files/7Hff8smX0UeTrDhseRLf" alt=""><figcaption></figcaption></figure>
3. Enter a **View Name**.
4. [**ACL Permissions**](/cross-platform-features/list-of-cross-platform-features/acl-permissions)**:**

   You can set **read** and **write** permissions as either **Public**, **Private**, and **Shared**. Permission for an object is granted if a user or group have a role with the proper permission and also ACL permission to access the object. By default, ACL permissions for read and write access are public, meaning users can view or modify an object if they have [Role-Based Access Control (RBAC)](/settings/role-based-access-control-rbac)  to read or write the object.&#x20;

   <div align="left"><figure><img src="/files/aac29YmDU06saxps5FJt" alt=""><figcaption></figcaption></figure></div>

   * **Types of ACL Permissions:**

     * **Public:** Grants access to anyone in the organization who has Role-Based Access Control (RBAC).
     * **Private:** Restricts access to admins and the user who created the object.
     * **Shared:** Limits access to specific users or groups that have Role-Based Access Control (RBAC).&#x20;

       <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Admins and creators always retain access.</p></div>

     <div align="left"><figure><img src="/files/7MS3nN8ppMXCneSMykzm" alt=""><figcaption></figcaption></figure></div>
5. Click **Save**.\
   Your view is saved a appears under **Select View**.

### **Filters**

**3.** **AI Filter in MegaBill (Alpha)**\
Finout's AI Filter in MegaBill enables you to describe what you want to view in your own words, and Finout AI automatically builds the right Megabill filter for you.\
For example, “Show me AWS compute cost according to vtag teams for the last two months”.\
\
1\. In **MegaBill**, click ![](/files/0POL9aRR98zcXkVAYrHJ).&#x20;

<figure><img src="/files/WwjUivthV9Jdv6UZjAtX" alt=""><figcaption></figcaption></figure>

2.Write what you want in your MegaBill view or choose one of the predefined prompts.\
For example, “Show me AWS compute cost according to vtag teams for the last two months”.

{% hint style="info" %}
**Note**: AI prompts must contain at least three words and be no longer than 100 characters.
{% endhint %}

3.Click ![](/files/sHPjjSlDYngK1d6vfWaa).\
The view appears in Megabill\
\
**4.Filters** \
\
Filters can be used in two components: **Basic** and **Advanced**\
Filters also have two layer types: **Dimension Sets** and **All Dimensions.** See [Dimension Sets](/settings/dimension-sets) for more information.

**Basic Filters:**\
Select the keys for a cost center or virtual tag to view their cost or usage trends over time. This fully customizable filter lets you combine keys in any way that fits your needs and also serves as the foundation for creating a saved view.\
\
For example:\
You what to see the cost over time for AWS services.

1. Navigate to **MegaBill**.<br>

   <figure><img src="/files/duJj4eVrsyRINnh63RXt" alt=""><figcaption></figcaption></figure>
2. Click **Filters**.<br>

   <figure><img src="/files/lNXPAipZMoT50Bn29ZWJ" alt=""><figcaption></figcaption></figure>
3. Select the **AWS** tab, mark **Services**, and click **Apply Filters**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: <em>Copy/ Paste -</em> You can copy and paste filter configurations from this view into any other filter capability in Finout, or paste configurations from other areas back into this view.<br><img src="/files/9d5Z8NfxjqxbM9kkGxgb" alt=""></p></div>

**Advanced Filters:**\
You can optionally refine your view with more granular control using advanced operators—ideal for deeper analysis or complex filtering needs.<br>

1. Navigate to **MegaBill**.<br>

   <figure><img src="/files/duJj4eVrsyRINnh63RXt" alt=""><figcaption></figcaption></figure>

2. Select **Filters**.<br>

   <figure><img src="/files/zRy0eYDN98QNNEE3u3H2" alt=""><figcaption></figcaption></figure>

3. Click **Advanced Filters**.<br>

   <figure><img src="/files/oGpr6TndXXdIuXLqZpnv" alt=""><figcaption></figcaption></figure>

4. Select a **Cost Center**, a **Key**, an **Operator**, and a **Value**, and then click **Apply Filters**.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: </p><ul><li><em>Enter values past the limit</em> - When using the 'one of' or 'is' operators in Advanced Filters, you can manually enter and select values even if they aren't visible in the filter list due to the 1,000-value display limit</li><li><em>Copy/ Paste -</em> You can copy and paste filter configurations from this view into any other filter capability in Finout, or paste configurations from other areas back into this view.<br><img src="/files/9d5Z8NfxjqxbM9kkGxgb" alt=""></li></ul></div>

**5.Time Aggregation**

Daily, weekly, or monthly.

<div align="left"><figure><img src="/files/4v5fcv8ghjSnOOJqqAsc" alt=""><figcaption></figcaption></figure></div>

**6.Time Frame**\
**-** The default is the last 30 days. You can either select one of the predefined options or switch to custom.\
![](/files/Uo59tlYeaxSTFWSIFEUu)\
**-** When switching to custom, you can define a custom start and end date. \
&#x20;  You can keep **Today** as the relative end date or unmark it to set a custom end date.\
![](/files/FhpFzY1DqNV5qmUn3PuU)

**7.Data Type**

Select either **cost** or **usage**.

* Cost:&#x20;
  * Choose the [cost type](/get-started-with-finout/cost-and-usage-types#h_0a6317d959).

    <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/14247760/2723d9f726a8198772e2d67d/AD_4nXeCdDQm6QImtswciIxaBdMGIy4HCLE2hrRm6sqFg6UlUgO3CdFceFzROPBH7ue1fK8ehtsCaDwcapynQy8d9ktSpBc4l7FZ6ETpKRnpvD7vhxuGKyfFJUdrybGn85kKrycKXSDwuyYRw5Y_fxRgw9KxJSnY?expires=1726489800&#x26;signature=8bfd6a26e2c45db87d44189001a91c0b119e714e9c254970568666dc4025cde7&#x26;req=0dFtwV%2F9qjdk2hL085ZhoV1P0sly6H6Xfwzf%2BSI0%2BGBmzCe6OiiCbXciyHbb%0Aqw%3D%3D%0A" alt=""><figcaption></figcaption></figure></div>

<figure><img src="/files/LnXdb7ZkRq8yY7QwPsIr" alt=""><figcaption></figcaption></figure>

* Usage:&#x20;

  * Choose the unit type and a [usage type](/get-started-with-finout/cost-and-usage-types#h_d977f46b93). <br>

    <figure><img src="/files/QnHvgHsGOrIeQ47JciY0" alt=""><figcaption></figcaption></figure>

  <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/14247762/0ed456675946c1063d22b47b/AD_4nXdR-G-HQTkivOboWbLQ4mzE2UV1gGQtdBn5pqGoQPbwar-Op-gkO9cpceY-i96QT47w3UQf7Xj6X1xJ-po2m3WVuCKJ5dFHxPrt651Dd2gqJssTyC7HUp1WcX3vEphNUvm1SDAtxlcXp3TgwjQggGL5Dko?expires=1726489800&#x26;signature=f9e2657475cb1c0e431617ab729c9480a8d417a6feecef05f1b2dfa705f140fc&#x26;req=0dFtwV%2F9qjVk2hL085ZhoW%2F5aUOgDzNh55q3phzx5HJy80l7MsYek1rnwLFb%0Aow%3D%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>

**8.Choose a Display**

* *Cost/Usage*

* *Cost/Usage Delta*\
  By using the delta graph, you can track cost or usage changes over time directly within MegaBill. This visualization highlights differences between two points in time, helping to identify trends. \
  \
  **How is it calculated?**\
  Each bar in the graph represents the change from the previous bar based on the selected interval. For example, if the costs are:

  * **January:** $20,000
  * **February:** $25,000
  * **March:** $35,000<br>

  The graph will display:

  * **February delta:** $25,000 - $20,000 = **$5,000**
  * **March delta:** $35,000 - $25,000 = **$10,000**\
    \
    For each selected interval, the bars represent the difference in cost compared to the previous period—daily compares to the previous day, weekly to the previous week, and so on.\
    \
    ![](/files/BKisdaa7BOwaH2mNykNG)

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: <br>- When using the Delta view, you won’t see the total cost, share of total cost, and average on top of the graph.<br>- The X-Axis (date) cannot be changed.</p></div>

* *Trend Projection* \
  This layer enables users to generate future-oriented estimations based on past and current data trends. It utilizes selected time frames to provide projected trends, helping in strategic planning and decision-making.<br>

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: AWS support, Marketplace, Credit, Refund, Tax, Fee, EdpDiscount, and RIFee are not included in the trend projection calculation.</p></div>

  \
  **How is it calculated?**\
  Trend projection uses a linear forecast based on cost and usage data from the lookback period. It calculates the difference between the total cost on the last day with available data and the cost on the first day, then divides this by the number of days in the period. This result is then either accumulated over the projected period or displayed as an incremental daily change.\
  ​\
  ![](/files/WD4MsGwtqHfXmmx0VDfU)

  1. Set **Lookback** period - Set the historical period for calculating projections.<br>

     <div align="left" data-full-width="true"><figure><img src="/files/M7sY0Al2P9tKDy5bPshI" alt="" width="512"><figcaption></figcaption></figure></div>
  2. Set **Projection Period** - Set the timeframe for displaying projections.\
     \
     ![](/files/vWnCXfRQfo6Vo8cCvLHr)<br>
  3. Set **Trend Display Settings**: *Incremental* or *Cumulative*\
     *Incremental -* Represents the cost or usage for each individual period only (e.g., that day, week, or month), adding values from previous periods.\
     *Cumulative* - Represents the total value accumulated up to that point.\
     ![](/files/3j6HHrNWZVXX3hbyIgym)\
     The Trend Projection layer is set.

**9.X-Axis value**

&#x20;   Select the value to be presented on the X-Axis.

**10.Cost Type**

&#x20;    Select a cost type. See [Cost and Usage Types](/get-started-with-finout/cost-and-usage-types) for a detailed explanation.

**10.Group By**\
\
Select up to three dimensions (*multiple dimensions are coming soon*) to group by data.\
When you select **multiple dimensions** in a widget (for example, *Charge Type → Service → Sub-service*), Finout organizes the data according to the **order in which the dimensions are selected.**

> **Example:** \
> If you group by *Region* and then *Service*, drilling down on “us-east-1” reveals the list of services in that region. \
> When you drilldown, the view expands only by the **first selected dimension**, displaying the next dimension’s values underneath it.

{% hint style="info" %}
**Note**:  When grouping by more than one dimension-

* The table’s transpose option is disabled.
* Total cost, % of total cost, and average daily cost always follow the *cost filter*, not the selected group-bys.
* You can enable or disable date display when selecting multiple dimensions.
* You cannot create a Megabill ratio with multiple group bys.
  {% endhint %}

<figure><img src="/files/otj80qI73eHpD2Q1kwWu" alt=""><figcaption></figcaption></figure>

### Event Annotation

**12. Event Annotation:**

**Event Annotations** let you mark important events directly on specific dates in MegaBill, with each annotation saved to the date it’s added. This helps teams stay aligned by explaining cost or usage changes, tracking activities over time, and linking financial data to real-world events. Annotations are saved to the date they’re added.

{% hint style="warning" %}
**Important**: By default, this feature is visible to basic and admin users in the account. Limiting visibility can only be managed through [custom roles](/settings/role-based-access-control-rbac/managing-roles/creating-a-custom-role).
{% endhint %}

{% hint style="info" %}
**Note**: Event annotation is enabled by default - ![](/files/nrG7hRpaQu2bRLhtCpyD). You can hide annotations by clicking it off - ![](/files/u5GvZoi3BWkMRyEUGF3p). This will prevent you from creating, editing, or deleting them.
{% endhint %}

\
**Create an event annotation:**\
\
1\. Hover over the date in the graph where you want to add an annotation and click ![](/files/iDMTz1HpnpAoPYpXzuUv).\
The **Add Event Annotation** pop-up appears.\
![](/files/RRbBscmXeyBymEVtkdXK)\
2\. Choose a **date**, add a **title** and **description.**

3.[**ACL Permissions**](/cross-platform-features/list-of-cross-platform-features/acl-permissions)**:**&#x20;

You can set **read** and **write** permissions as either **Public**, **Private**, and **Shared**. Permission for an event annotation is granted if a user or group have a role with the proper permission and also ACL permission to access the object. By default, ACL read and write permissions follow the account’s default configuration.

<div align="left"><figure><img src="/files/aac29YmDU06saxps5FJt" alt=""><figcaption></figcaption></figure></div>

* **Types of ACL Permissions:**

  * **Public:** Grants access to anyone in the organization who has Role-Based Access Control (RBAC).
  * **Private:** Restricts access to admins and the user who created the object.
  * **Shared:** Limits access to specific users or groups that have Role-Based Access Control (RBAC).&#x20;

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Admins and creators always retain access.</p></div>

  <div align="left"><figure><img src="/files/7MS3nN8ppMXCneSMykzm" alt=""><figcaption></figcaption></figure></div>

4. Click **Save**.\
   The event annotation is created.<br>

**View an event annotation:**\
\
1\. Click ![](/files/WTW8wqx723pAZdIrZsp3) over the column where you created the event annotation.\
The Event annotation information appears.\
![](/files/34Z7iFmVIDQs4aZ1RSoP)

{% hint style="info" %}
**Note**: You can add another event annotation to this date by clicking **Add Event Annotation,** filling in the information, and then clicking **Save**.
{% endhint %}

**Edit an event annotation**:\
\
1\. Click ![](/files/WTW8wqx723pAZdIrZsp3) over the date where you created the event annotation.\
The Event annotation information appears.\
![](/files/AwzZ5yOHO2UghRhkzjhh)\
2\. Click ![](/files/oyNv13qdvZrFZ2x0D0Lc).\
The **Add Event Annotation** pop up appears.\
![](/files/XM0tCDQ7sLbvzM2hHYme)\
3\. Choose a **date**, add a **title** and **description**, and then click **Save**.\
\
**Delete an event annotation:**\
\
1\. Click ![](/files/WTW8wqx723pAZdIrZsp3) over the date where you created the event annotation.\
The Event annotation information appears.\
![](/files/BzLEWJqwsG2CQq7bajT6)\
2\. Click ![](/files/WLzKNQ6rUtw12MOqk4w1).\
![](/files/2nNCFod4hk48u0IiSqX7)\
3\. Click **Delete**.\
The event annotation is deleted.

## Analyzing MegaBill's Data <a href="#h_c31a7ec4c3" id="h_c31a7ec4c3"></a>

Once your MegaBill view has been created, you are presented with a graph and table view of your chosen data.

### MegaBill Graph <a href="#h_82cf480716" id="h_82cf480716"></a>

The following costs/usage data appears above the graph:

* **Total cost or usage**: The total cost or usage for the selected resources and period.
* **Share of the total cost or usage**: The selected filtered costs/usage as a percentage of the total MegaBill cost/usage.
* **Average daily cost or usage**: The average cost/usage per time interval (day/week/month) for the resources selected in the filters for the specified period.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The MegaBill graph view displays the top 30 daily cost values. Any additional values are grouped under "Others."</p></div>

<figure><img src="https://finout.intercom-attachments.eu/i/o/14247763/cf85b3f8b842b6f397f6c7e1/AD_4nXczqco571Jrn2506e7VrxeNV7_SOq9WRtQCxUTS5wi5_h7tCOEzIDCdSCILpex_5sW6WcG7Xv1lzmsVlrKlG1vKZMEKgLHCZ6aTO40HP3KkpC8r-APjk12m71lL35YjzV1CZBY-euZ9bhqZLSvR7a9L09i-?expires=1726489800&#x26;signature=43d84c7019fd089de1f7c1ff57a452e7bf45d7c6045c08a0904c2753aa38115d&#x26;req=0dFtwV%2F9qjRk2hL085ZhoWwHYf2OJigMQyf578oW6%2Bo5vdLLF4kepso5QzC3%0AIXOnnvWFw6aytiQb%0A" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**: You can quickly drill down into the costs/usage by clicking an area on the graph.
{% endhint %}

### MegaBill Table <a href="#h_929b43f65b" id="h_929b43f65b"></a>

The following costs/usage data appears in the table:

* **Total**: The total cost/usage for all the selected resources and each resource for the current period (sorted from highest to lowest).
* **Previous period cost/usage**: The costs for the previous period. Values that have decreased appear in green, and values that have increased appear in red. An indication of the percentage increase or decrease in costs/usage appears.
* **Percentage of cost/usage**: The total cost/usage percentage.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The MegaBill table view displays the top 50 daily cost values. Any additional values are grouped under "Others."</p></div>

### EBS Status

When an EBS volume is attached to an AWS instance, its status is shown as “In use.” Upon termination of the instance, the associated EBS volume is automatically detached and its status changes to “Available,” indicating that it is no longer connected to any running instance. However, even while marked as “Available,” the volume continues to incur storage charges until it is either deleted or attached to another instance. Tracking EBS status in MegaBill allows you to monitor changes over time and distinguish between “In Use” and “Available” volumes for cost analysis. See [AWS documentation ](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-describing-volumes.html)for more information on EBS.

**Prerequisites**\
Your AWS accounts and sub-accounts must be connected to CostGuard in order to have EBS status data displayed.

**How to view the EBS Status:**

1. In MegaBill, click **Filters.**\
   \
   ![](/files/Ne0RCYX1jZieu09OWM3F)<br>
2. Under **AWS**, choose **Sub Service** > **EBS Storage** and then click **Apply Filters.**\
   \
   ![](/files/EPs22W3oVuK1VuativM5)<br>
3. In **Group by,** choose **AWS,** choose **EBS Status,** and then click **Apply Group By**.\
   \
   ![](/files/4f1ho6AhC525EULwb1qx)\
   \
   **Result**: The EBS status appears in MegaBill showing the following statuses:\
   \- In Use\
   \- Available\
   \- Deleted<br>

   <figure><img src="/files/0bThxVdp2BKfaGrAsndi" alt=""><figcaption></figcaption></figure>

**How to view only "Available" EBS status:**

1. In MegaBill, click **Filters.**\
   ![](/files/R7WYKysAC9XWP74lcZ5e)<br>
2. Under **AWS**, choose **EBS Status** > **Available** and then click **Apply Filters.**\
   ![](/files/xUq0LwSJGDunOCu7NBwG)<br>
3. In **Group by,** choose relevant dimensions, such as account, tag teams, et&#x63;**,** and then click **Apply Group By**.\
   ![](/files/bqgFSYrpeQUsif5c7oAB)\
   \
   **Result**: The "Available" status appears in the MegaBill view for the chosen dimensions.

   <figure><img src="/files/50NAYFCL0v1maLpI1IAD" alt=""><figcaption></figcaption></figure>

## Managing MegaBill <a href="#h_4882efef52" id="h_4882efef52"></a>

Manage your MegaBill by editing, viewing, deleting, downloading, or cloning data to maintain control and optimize costs on specific dates.<br>

<figure><img src="/files/Hay90rgiyuDVrt292hLA" alt=""><figcaption></figcaption></figure>

1. **Clear a View**:\
   Click the **Clear View icon** at the top of the MegaBill page. This will revert the MegaBill to the default setting.\
   ![](/files/Vvv4JAgsTOkRZVBM2lX3)
2. **Edit a View Name**:
   1. In MegaBill, select the views dropdown on the top left of the page.<br>

      <figure><img src="/files/Oqr285h2AiiOoWx4w8Wp" alt=""><figcaption></figcaption></figure>
   2. Click the three dots and then choose **Edit view**.\
      The setting side window appears.<br>

      <figure><img src="/files/9ULFszI0iNwvoQq4zyzg" alt=""><figcaption></figcaption></figure>
   3. Edit the **View Name**.
   4. [**ACL Permissions**](/cross-platform-features/list-of-cross-platform-features/acl-permissions)**:**

      You can set **read** and **write** permissions as either **Public**, **Private**, and **Shared**. Permission for an object is granted if a user or group have a role with the proper permission and also ACL permission to access the object. By default, ACL read and write permissions follow the account’s default configuration.

      <div align="left"><figure><img src="/files/aac29YmDU06saxps5FJt" alt=""><figcaption></figcaption></figure></div>

      * **Modes of ACL Permissions:**

        * **Public:** Grants access to anyone in the organization that has Role-Based Access Control (RBAC).
        * **Private:** Restricts access to admins and the user who created the object.
        * **Shared:** Limits access to specific users or groups that have Role-Based Access Control (RBAC).&#x20;

          <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Admins and creators always retain access.</p></div>

        <div align="left"><figure><img src="/files/7MS3nN8ppMXCneSMykzm" alt=""><figcaption></figcaption></figure></div>
   5. Click **Save**.\
      Your view is saved.
3. **Duplicate View**:

   1. In **MegaBill**, select the views dropdown on the top left of the page.

   <div align="left"><figure><img src="/files/Lfg5iMA5WcdVWSNCKtGp" alt=""><figcaption></figcaption></figure></div>

   b. Click the **three dots** and then click **Duplicate View**. \
   &#x20;   The view is duplicated.

   <br>

   Or alternatively...<br>

   **Create a view based on an existing one**:

   1. In **MegaBill**, select the required view from the dropdown on the top left of the page.
   2. Update the view filters as required.
   3. Click **Save**.

      <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/14247778/cc060fde24d4ddf7bc54a4d7/AD_4nXc3ssKcmL9DN6uwy8tiHAjjXyXoMmjXrOcyXHIVyp3zM-5_4Pc3QbwKZjNmH1WhJOqH1L-2TwVmL2BosbjzrWoMIgd72x5uE6mcvUJga9ZC4SHhqzEsxLv7IxKxVcBoJwMUjks5YmQg_c41JMj-F3Rk4zGe?expires=1726489800&#x26;signature=28c86aba9213795d33b46599ca8aa377723fda1ce469716a3bb75860b203d5d5&#x26;req=0dFtwV%2F9qz9k2hL085ZhoVrPgVLWXl8fYrS4Vzk%2Fbkmk%2BYtICAuJvReLgvy0%0Awg%3D%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>
   4. If you are creating a new view, enter a view name.

      <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/14247779/457387b7f639e8f2111bdbda/AD_4nXerMxd80TRW1EI6tWw3NiCeS299KN58eoQRT90ot9tnORrG9ZYjB000cHSZv1ZPA1oYaEsEDYiUZbP5coU7KN7fupXZvOgbch3g8JaCSO7ir6Oh9vvIsui1bM_8XSHo2rDX3HzpO4Mclo7bBJsY51XBUs4k?expires=1726489800&#x26;signature=8c45b542c335125160143b21b4f5f7a35372fa4c4c50d6cbc45003be1f73e34c&#x26;req=0dFtwV%2F9qz5k2hL085ZhoZtINlBlWhbpZ2X2fHtT%2BnJ4a%2B0hCdiv%2F%2BYc4rzj%0AMA%3D%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>
   5. Click **Save View**.
4. **Copy the view ID:**
   1. In **MegaBill**, select the views dropdown on the top left of the page.
   2. Click the **three dots** and then choose **Copy view ID**.\ <br>

      <div align="left"><figure><img src="/files/Bi3IGHdMPCK9VI4Y3jso" alt=""><figcaption></figcaption></figure></div>
5. **Delete a View**:
   1. In **MegaBill**, select the views dropdown on the top left of the page.
   2. Click the **three dots** and then choose **Delete view**.<br>

      <div align="left"><figure><img src="/files/PbHYev6DJgX3oeh0Y164" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Note**: Deleting a view will remove it for all users in the account.
{% endhint %}

6. **Remove Recent View**:
   1. In **MegaBill**, select the views dropdown on the top left of the page.
   2. Click the **three dots** and then choose **Remove Recent view.**

7. **Use a View as a Dashboard Widget**:\
   Add a view to a dashboard by selecting **Add to Dashboard**, providing a widget name, and choosing an existing dashboard or creating a new one.<br>

   <div align="left"><figure><img src="/files/8nRzIIQJ4AByfCFRnpQt" alt=""><figcaption><p><br></p></figcaption></figure></div>

   <div align="left"><figure><img src="/files/U3v4enzxspqnLx0OOLz6" alt=""><figcaption></figcaption></figure></div>

8. **Download MegaBill Data**: Download data from the graph or table in CSV format. ​ **​**\
   \
   **To download a CSV of the MegaBill graph:**

   1. Navigate to **MegaBill**.<br>

      <figure><img src="/files/8cz7eSQWa8B23PKn1Jzx" alt=""><figcaption></figcaption></figure>
   2. Click ![](https://docs.finout.io/~gitbook/image?url=https%3A%2F%2Flh7-rt.googleusercontent.com%2Fdocsz%2FAD_4nXfnlt1IuYlDRD8FzYvkzgvtH6b5hIMGMoDUtZj_0HRi7FkRmFTtZL0g_bCYiItqacHr3ZyD_H20ZHz7qfyoOzeRd_G-Yt457rA_BBA4RpRyYCizv15At0SBz0FDvkqyoYt7XCe4adcQBJ5KSwhAoCVNex_f%3Fkey%3D8yu4IHieNN3tNTUQDsNSnA\&width=300\&dpr=4\&quality=100\&sign=b5c340a7\&sv=2). \
      A CSV of the MegaBill graph is downloaded.

      <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The MegaBill graph view displays the top 30 daily cost values. Any additional values are grouped under "Others."</p></div>

9. **Three Dots**
   * *Remove Costs by Date*: \
     In the table view, click the three dots and turn toggle the dates off.

     <figure><img src="/files/LFTpHCiMSutk74B57F8I" alt=""><figcaption></figcaption></figure>
   * *Transpose Data*: \
     Toggle data transposition in the table view by clicking the three dots and turning Transpose on or off.<br>

     <figure><img src="/files/EEV8I4brrzQp3fY4c2Yv" alt=""><figcaption></figcaption></figure>

## FAQs <a href="#h_d212880f37" id="h_d212880f37"></a>

**When there are too many data points on a stacked bar chart, how does FinOut handle them?**

Finout automatically groups the top values of the various views and the less significant values into the "Others" category.

* In the graph view: The top 30 cost values per day are presented, all other values are grouped as “others.”
* &#x20;In the table view: The top 50 cost values per day are presented, all other values are grouped as “others.”
* Downloaded Data: The 1000 top cost values are presented, all other values are grouped as “others.”

**How does the "Others" category logic work?**

The "Others" category is used when there are too many data points to display individually on the chart. The logic prioritizes displaying the most significant values separately by cost, while less significant values are grouped under "Others."

**Can I ungroup the "Others" category when exporting to CSV?**

Yes, when exporting to CSV, you can ungroup the "Others" category so that data points are listed individually rather than being summarized under a single "Others" row. A downloaded CSV will have up to 10,000 values.

**What is the difference between N/A and Finout\_Null values in Finout?**

* **Vendor N/A** - The vendor explicitly reported "n/a" or "N/A" in their billing data. This is a real value from the provider, not missing data.
* **Finout\_Null** - This value represents missing or undefined data. When the billing data contains values such as null, empty fields, undefined values, or "unallocated", Finout displays them as "Finout\_Null" in the UI. This value is not provided by the vendor. It is Finout's way of representing missing data.

**Why don't I see "Finout\_Null" in my account?**

Finout\_Null is a new representation for empty values that previously appeared as "N/A", in order to make the distinction visible. Instead of showing "N/A" for missing data, accounts with this update show **Finout\_Null** - so you can clearly separate vendor-reported N/A from missing data.

Finout\_Null is currently in beta and will be available soon for all accounts.

{% hint style="info" %}
To enable Finout\_Null on your account, contact Finout Support and request the migration.
{% endhint %}


# FinOps Dashboards

Finout provides flexible dashboard customization options specifically designed for cloud cost management. Create personalized dashboards tailored to different stakeholders, such as finance teams, IT managers, or executives by using a variety of cost visualization widgets, charts, and forecasts to present data in the most meaningful and actionable way.

Whether you need to track cost trends, analyze breakdowns, monitor allocation across projects or departments, or focus on specific metrics like cost by service, region, or resource groups, our customizable dashboards help you gain visibility into cost drivers, identify savings opportunities, and make informed optimization decisions. There are also out-of-the-box predefined dashboards available for immediate use.

* [Custom Dashboards](/user-guide/inform/finops-dashboards/custom-dashboards)
* [Predefined Dashboards](/user-guide/inform/finops-dashboards/predefined-dashboards)


# Custom Dashboards

Finout dashboards are designed for flexible, cloud-native cost management enabling you to create personalized views for tracking spend trends, analyzing cost breakdowns, and monitoring key financial metrics. With a wide range of customizable widgets like Cost & Usage, Unit Economics, Governance, and Financial Plans, you can tailor dashboards to the needs of finance teams, engineering leads, or executives. These dashboards help transform cloud data into clear, actionable insights, making it easier to drive accountability, identify savings opportunities, and align spend with business goals.

{% hint style="info" %}
**Note**:&#x20;

* See [Predefined Dashboards](/user-guide/inform/finops-dashboards/predefined-dashboards) for a list of Finout's out-of-the-box predefined dashboards.
* You can create up to 25 widgets in a single dashboard. Text widgets are not counted toward this limit. For example, if you create 20 widgets and 5 text widgets, you can still add 5 more widgets before reaching the limit.
  {% endhint %}

## Create Custom Dashboards

1. In Finout, navigate to **Dashboards**.

   The **Dashboard** page appears.

   <figure><img src="/files/NU8WycEFWfxB34G9Ntmi" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/27213570/8059c159e6b31ec236f19296f09d/AD_4nXf02pJrDAB8hDcI1ZDofKGuTvGQ6nI7Dl2LSCKKeR_q0Dd_PXA9hvynus0vzgAybayjU9G5eNbOr7eBSYiB9qtGpJP0qb8QpIBjZGczFL3pohMN-L6_MWKkde7FBRpN-irMbi7ZMA?expires=1732752000&#x26;signature=d3feaa3d2f11a3d79f89f410515f0820033060f80530133596cba1374ff8546c&#x26;req=0tJtxFv%2Fqzdk2hj99dpg6qP%2F00CTmGQsfdyz2SiqFSnybKO9BQQelUoHZmBi%0AGDKlhGfcJOtK%2BPlfC4G20S%2Bv%0A" alt=""><figcaption></figcaption></figure>
2. Click on **Create Dashboard**.

   The **Create Dashboard** page appears.<br>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/27213617/b45dd917d133500785d8ab644d17/AD_4nXd2sOeJl2nc-iEdsBmttVom6pkVcERrXFn9w9wX9PRTvx-lVKq0WZZKBSP2vVyeasc2myyJe742L_q3ZQ0ceMAtnGusteQaRfTfWFSCxeY4cSah54J1CbMkIayjeIZ-WQPTEZm-?expires=1732752000&#x26;signature=b604f435daabace0abc34cf4a82efde15eff7dfc010f306a2c490ce4da8f05e3&#x26;req=0tJtxFv8rTBk2hj99dpg6lULZD5r9xg8LrON3HgFOq%2BNm430eKsxmTZjUTO6%0Am445IkyTOhLA1vy2HI96JaYC%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/PHvAcebNvnpdgkKEHLGR" alt=""><figcaption></figcaption></figure>
3. Click on **Add Widget**.

   The **Add Widget** sidebar appears.<br>

   <div align="left"><figure><img src="/files/klVtLCg6gAATEHEwQabq" alt=""><figcaption></figcaption></figure></div>
4. Choose a widget for your dashboard from a list of available templates or recently saved widgets.\
   Choose from the following widgets:

   * [Cost and Usage](#h_bacda317de)
   * [Unit Economics](#h_9ed1e827e4)
   * [Text ](#h_668422585b)
   * [CostGuard ](#h_bf4f217448)
   * [Governance](#governance-widget)
   * [Financial Plan](#financial-plan-widget)
   * [Data Explorer](#data-explorer-widget)\
     ​\
     Go to the specific widget procedure to complete the dashboard setup.<br>

   5\. The widget builder is divided into two sections:

   1. **Configuartion** — configure what data the widget displays (filters, group by, timeframe, etc.)&#x20;
   2. **Visual Settings** — configure how the widget's data appears (layout, table columns and widget-specific options).

### Cost and Usage Widgets <a href="#h_bacda317de" id="h_bacda317de"></a>

Finout's cost and usage widgets are designed to assist in effectively monitoring cloud spending and service utilization. The cost widget offers insights into the financial aspects of your cloud services, enabling systematic tracking and analysis of expenditure over time. The usage widget facilitates the visualization of service consumption, aiding in the easy monitoring and analysis of usage patterns and trends.

**To create a new cost and usage widget:**

1. Choose **Cost** or **Usage**. The **Cost** or **Usage** widget builder appears.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: When editing an existing widget, you can reset any changes to revert to the last saved version by clicking Reset changes.</p></div>

   <figure><img src="/files/ep46KI9pCB7ZaQcNbmIq" alt=""><figcaption></figcaption></figure>
2. Name your widget: Click and add a name. ​

   <div align="left"><figure><img src="https://docs.finout.io/~gitbook/image?url=https%3A%2F%2Ffinout.intercom-attachments.eu%2Fi%2Fo%2F19164890%2F025d14671dbdc50481642290%2FAD_4nXeYDujEiVzoel8xOwFrN-VEsoALBa95X9El_8ooRx6iz3yk6iA1B5fakMXw-Rk3aaB8Uhg6rsBtbTvkPx6sp_9vhZV-a3U3c_5hhq5uEcgp8gffXh1lx2f6Ne-wyXcsJtss1em2-UV9x2FOoRLP1xXvE-ZN%3Fexpires%3D1728804600%26signature%3D863b2d990df901071c14e3999b3094c6b6be64dd5f3da4f4b26b16d0f93ade84%26req%3D0dxuw1zypTdk2hL085ZhodfqtcV0pCvKJxLX%252BMybyBB1Xz2NH1A2MoK6huXa%250AyQ%253D%253D%250A&#x26;width=300&#x26;dpr=4&#x26;quality=100&#x26;sign=b735802a&#x26;sv=2" alt=""><figcaption></figcaption></figure></div>
3. Data type selection: Choose which metric to display: **Cost** or **Usage**. ​

   <div align="left"><figure><img src="https://docs.finout.io/~gitbook/image?url=https%3A%2F%2Ffinout.intercom-attachments.eu%2Fi%2Fo%2F19164892%2Fb3a14bec5bf0a0be41f69436%2FAD_4nXcuxi8mj79F5qRXZO53WdXz8TeIMFcEuzHgGwEKqyWogQuKQxvPrDTSKxo3vCSpEAHDWebkPxy6fyW-T0DKWs59HEFUvXGneHH5lUD5AZhaPZQlRLSBZSoNEWftfJkGmdWSoIfEuozyxIi5uxwhc0DYZdrx%3Fexpires%3D1728804600%26signature%3D357b53d3e26e924c5f6ef0a7d143f61b69ba3e7b3cfe68e0cb640188142b70ee%26req%3D0dxuw1zypTVk2hL085ZhoedSBH0DAGorUvcx8jQNHn3eIINlSQ9qO88dKASW%250AFQ%253D%253D%250A&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=18e4f123&#x26;sv=2" alt=""><figcaption></figcaption></figure></div>
4. You can enable one of the following layers: **Trend Projection** or **Computational**.

**Trend Projection Layer**

Enables users to generate future-oriented estimations based on past and current data trends. This layer utilizes selected time frames to provide projected trends, helping in strategic planning and decision-making.

{% hint style="info" %}
**Note**: AWS support, Marketplace, Credit, Refund, Tax, Fee, EdpDiscount, and RIFee are not included in the trend projection calculation.
{% endhint %}

How is it calculated? \
The trend projection uses a linear forecast based on cost and usage data from the lookback period. It calculates the difference between the total cost on the last day with available data and the cost on the first day, then divides this by the number of days in the period. This result is then either accumulated over the projected period or displayed as an incremental daily change. ​ ​Functionality:

* *Trend Identification*: Based on the analysis of historical data, the trend line identifies the general direction of the data trend, using linear forecast method.
* *Forecasting*: Using linear forecast algorithm, the trend line extrapolates future data points beyond the available dataset. It generates forecast of future values based on the observed trend, enabling users to anticipate future trends and plan accordingly.
* *Visualization*: See the trend line alongside the actual data points in a visual form, making it easier to identify deviations from the trend and data-driven decisions. ​

​Use cases:

* *Budget Projections*: Users can leverage the trend projection layer to understand future cloud costs based on historical spending trends. By selecting relevant time frames, such as the past month, users can generate estimates of future cost trends and plan resource allocation more effectively.
* *Capacity Planning*: Users can predict future resource utilization and capacity requirements. By analyzing past usage patterns and projecting trends forward, users can anticipate changes in demand, optimize resource allocation, avoid over-provisioning or under-provisioning, and ensure smooth operation of cloud environments.
* *Cost Optimization Strategies*: Users can identify potential cost-saving opportunities by forecasting future cost trends. By analyzing historical cost data and projecting future spending patterns, users can proactively identify areas where cost optimization measures can be implemented. This includes optimizing resource utilization, rightsizing instances, leveraging reserved instances or savings plans, and adopting cost-effective pricing models. ​ **​​**

**To enable a trend projection layer:**<br>

<figure><img src="/files/Istz2VZfhgw4VEz0pfZP" alt=""><figcaption></figcaption></figure>

a)Click **Trend Projection**. The **Trend Projection Settings** appears.&#x20;

<figure><img src="/files/b0rE1dY1qodAeIpq3nCq" alt=""><figcaption></figcaption></figure>

b)Choose **Projection Technique** - Choose the method for the projected trend. Currently, only linear forecast is supported.\
&#x20;![](https://docs.finout.io/~gitbook/image?url=https%3A%2F%2F3858159242-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FWqjB2puKXPDR7L86FX2e%252Fuploads%252FhSu0RnuTD04Ot021uDi6%252Fimage.png%3Falt%3Dmedia%26token%3D7d82a860-e3c6-4b14-9468-ef42bf2b3cbb\&width=300\&dpr=4\&quality=100\&sign=911b69dc\&sv=2) <br>

c)Set **Lookback** period - Set the historical period for calculating projections. ![](https://docs.finout.io/~gitbook/image?url=https%3A%2F%2F3858159242-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FWqjB2puKXPDR7L86FX2e%252Fuploads%252FcUC3aCDclgRVmnjoibmZ%252Fimage.png%3Falt%3Dmedia%26token%3Db80dc41b-448b-443f-9adb-1ff38b20dee6\&width=300\&dpr=4\&quality=100\&sign=499d7ac6\&sv=2)

d)Set **Projection Period** - Set the timeframe for displaying projections. ![](https://docs.finout.io/~gitbook/image?url=https%3A%2F%2F3858159242-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FWqjB2puKXPDR7L86FX2e%252Fuploads%252FncR91ErkANynH3vxgjL3%252Fimage.png%3Falt%3Dmedia%26token%3D6b17270a-ed3c-495c-87f2-270d94b7c461\&width=300\&dpr=4\&quality=100\&sign=43ede383\&sv=2) <br>

&#x20;e)Set **Trend Display Settings**: *Incremental* or *Cumulative.*\
\
*Incremental -* Represents the cost or usage for each individual period only (e.g., that day, week, or \
month), adding values from previous periods. \
*Cumulative* - Represents the total value accumulated up to that point.

{% hint style="info" %}
**Note**:  The trend display is shown in addition to the selected timeframe in the widget. The trend displays are shown in all visuals except for pie and donut charts.
{% endhint %}

![](https://docs.finout.io/~gitbook/image?url=https%3A%2F%2F3858159242-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FWqjB2puKXPDR7L86FX2e%252Fuploads%252FgQDQoFrF6aCXpRmKcraC%252Fimage.png%3Falt%3Dmedia%26token%3D5b68afe5-3c79-42ef-b3b8-86412401470c\&width=300\&dpr=4\&quality=100\&sign=ec902d58\&sv=2) The Trend Projection layer is set.

**Computational Layer**

The Computational layer allows you to add computation capabilities to define and track business KPIs by setting operators between metrics, enabling comparisons and calculations between costs and usages, or a combination of both. The results of these operations can be visualized directly within your widgets, providing a powerful means for custom analysis and deeper insights. ​ ​Computations layer combinations: ​ \
*​*\
*Cost and Cost:*

* *Cost / Cost:* Cost Ratio
* *Cost - Cost:* Cost Difference
* *Cost + Cost:* Cost Aggregation
* *Cost % Cost:* Cost Percentage Difference

*​*       \
*Usage and Usage:*

* *Usage / Usage:* Usage Ratio
* *Usage - Usage:* Usage Difference
* *Usage + Usage:* Usage Aggregation
* *Usage % Usage:* Usage Percentage Difference

\
*Cost and Usage:*

* *Cost / Usage:* Price per unit (e.g., dollars per CPU hour).

\
*​Usage and Cost:*

* *Usage / Cost:* Efficiency measure (e.g., CPU hours per dollar).

\
**​*****​*****​To enable a computational layer**:

<figure><img src="/files/oa2npMtm2pWbP10LajVJ" alt=""><figcaption></figcaption></figure>

a)Click **Computational**.\
The **computational layer** popup appears.<br>

<figure><img src="/files/RvbF29hZZFxGkCVXRfJj" alt=""><figcaption></figcaption></figure>

b) Enter a name for the computational layer.

c) Choose the Cost /Usage computational data points:\
​*For Cost*:

* Choose the filters that you want to use.
* Choose cost type. See [Cost and Usage Types](/get-started-with-finout/cost-and-usage-types) for an explanation of all the cost types.

*For Usage*:

* Choose the filters that you want to use.
* Choose usage and unit type. See [Cost and Usage Types](/get-started-with-finout/cost-and-usage-types) for an explanation of all the usage and unit types.

{% hint style="info" %}
**Note**: Click ![](/files/E1WTAZu8eiwqzKvaKHHT) to switch between the denominator and the numerator.
{% endhint %}

d)Click **Save**.\
You are brought back to the configuration page.

8\. Select a visualization type (bar, line, pie, donut, table, or numeric) that best suits your cost/usage data.<br>

<figure><img src="/files/FpF9XPwIks49IOg2cP3W" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**: You can view the daily average over time in the bar and table visualizations.
{% endhint %}

9. Select an icon for your visualization.\ <br>

   <div align="left"><figure><img src="/files/o9DOFpztoNuoxh0GxRG8" alt=""><figcaption></figcaption></figure></div>
10. **Widget Main Settings**&#x20;

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The main settings are dynamically adapted based on the chosen widget type (cost/usage) and specialized layer (trend projection/computation layer configurations).</p></div>

    * *Timeframe*: \
      **-** The default is the last 30 days. You can either select one of the predefined options or switch to custom.\
      ![](/files/Uo59tlYeaxSTFWSIFEUu)\
      **-** When switching to custom, you can define a custom start and end date. \
      &#x20;  You can keep **Today** as the relative end date or unmark it to set a custom end date.\
      ![](/files/FhpFzY1DqNV5qmUn3PuU)
    * *Load from view* : Select a created and [saved view](/user-guide/inform/megabill) from the MegaBill to use its configuration.
    * *Choose Filters* : Select which cost data to view. When loading from view, the filters will be populated automatically.
    * *Group By*: \
      Select up to three dimensions to group your data.\
      When you select **multiple dimensions** in a widget (for example, *Charge Type → Service → Sub-service*), Finout organizes the data according to the **order in which the dimensions are selected.**<br>

      <figure><img src="/files/g6Z5tpgDOaCnBEBYnAuD" alt=""><figcaption></figcaption></figure>

      <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>:  When grouping by multiple dimensions, drilldowns expand only by the first selected dimension.</p></div>
    * *X-Axis grouping*: For bar, or table visualization, decide whether the X-axis will show dates or values.
    * *Daily Average*: Toggle-on to view the daily average over time for Cost or Usage widgets in the bar and table visualizations.\
      When looking at monthly and weekly reports, understanding the daily average cost over time is crucial as it uncovers spending trends that total cost can hide.

      <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>:<br>- The default mode for visualizations shows the total cost or usage.<br>- Showing the daily average is currently not supported when applying trend or computational layers.</p></div>
    * *Define X-Axis grouping:* Define the X-Axis of the visual by selecting a key.
    * *Display:* Choose Cost/Usage or Cost Delta/Usage Delta.\
      The Delta visualization layer highlights differences between two points in time, helping to identify trends.
    * Number of top values: Set how many top valuesto desplay in the widget. All remaining valueswill be grouped under "Others".
    * Trend Comparison: Compares the selected timeframe to an equal-length period immediately preceding it (numerical visualizations).
    * Show "Others" group - Hide the "others group" when changing the top X values displayed in widgets.
11. **Widget Advanced Settings**&#x20;

{% hint style="info" %}
**Note**: The advanced settings are dynamically adapted based on the chosen widget type (cost/usage), specialized layer (trend projection/computation layer configurations), and visualization type (Bar,Line, Pie,  Donut, Table, Numeric).
{% endhint %}

* Choose a cost type for the widget. See [Cost Types and Usage](/get-started-with-finout/cost-and-usage-types) for all of the cost types.
* Add a **Central value** (donut only) — The value shown in the donut's hollow center. On by default, showing the **Total**. You can turn it off, or change what it displays:
  * **Total** (default) — Sums all filtered values shown in the donut, including the "Others" group.
  * **Average** — Averages all filtered values shown in the donut. Disabled when no Group By is selected.
  * **Count** — Counts the items in the selected Group By dimension. Respects the Number of top values limit, and is disabled when no Group By is selected.
  * **Custom text** — Free text of your choice.

<figure><img src="/files/F6aTlJA47JHfQGlGMjYS" alt=""><figcaption></figcaption></figure>

* Scale Factor - Computational metrics can produce values that are too small or too large to display. Applying a scale factor helps adjust these computational metric results, making them interpretable in graphs and reports.
* Enable event annotations to display them on specific dates, making it easier for teams to collaborate and highlight key insights directly in Finout. <br>

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Event Annotations can only be added through MegaBill. See <a href="/pages/HmUJlXC09tHYvI2xpYC4#event-annotation-coming-soon">Event Annotations</a> for more information.</p></div>

12. **Visual Settings**

{% hint style="info" %}
**Note**: Visualization settings options shown depend on the selected visualization type.
{% endhint %}

**Table visualization options:**

* **Transpose Table** - Change the order of the columns and rows. The rows will become the column keys.
* **Select which columns to display in the table**:
  1. **Total** — Show or hide the total column.&#x20;
  2. **Dates** — Show or hide date columns.
  3. **Percentage of total** — Show each value as a percentage of the total cost.&#x20;
  4. **Previous period total cost** - Show the previous period cost of each value.

<figure><img src="/files/mF6Irubcvz5tEgvAQRW9" alt=""><figcaption></figcaption></figure>

**Numeric visualization options:**

* **Text alignment** — Select horizontal and vertical alignment for the displayed value.
* **Text size** — Choose Large, Medium, or Small.
* **Number format** — Choose Standard or Compact display.
* **Custom CTA** — Toggle this option to define a customized link to direct from the widget. By default, go to Megabill CTA appears. When toggle is on, define:
  * **CTA Display Text** — Toggle the widget title on or off.
  * **URL** - the direction link. When left empty, CTA redirects to the Megabill.

<figure><img src="/files/NVWmES8kaAokePuivUEn" alt=""><figcaption></figcaption></figure>

**Bar, Line, Donut and Pie visualization options:**

* **Show Data Labels** **(Beta)** — Toggle on to display labels directly on the chart. Choose whether the labels show the **percentage of total** or the **absolute value**. These labels will also appear when sending a report to Slack channels/Teams/email.&#x20;

{% hint style="info" %}
**Note**: When Group By is applied, data labels are display only for the group with the highest value and for the totals. Labels for the remaining groups are hidden.
{% endhint %}

<figure><img src="/files/HUTFrElLOsyI0N3WW2hb" alt=""><figcaption></figcaption></figure>

**All visualization types:**

* Add a Description.
* Show title toggle: Enable or disable the title.

12. Click **Save**.

Your widget is configured.

{% hint style="info" %}
**Note**: After saving the widget, you can [drill down directly from a Cost or Usage widget ](#dashboard-filters)on the dashboard. Click a specific value, which will be applied to the dashboard’s filters and group-by settings, giving you an instant view of the exact slice of cloud cost or usage data you want to analyze. The filter is applied across the entire dashboard, while the group-by applies only to Cost and Usage widgets.
{% endhint %}

### Unit Economics Widget <a href="#h_9ed1e827e4" id="h_9ed1e827e4"></a>

The Unit Economics widget in Finout is designed to help modern enterprises generate accurate unit economics by linking cloud costs directly to business outcomes. By performing computations between cost and telemetry data, users gain a comprehensive view of both financial and operational metrics. This powerful tool enables businesses to define and track key performance indicators (KPIs) within the platform, providing the insights needed to optimize cloud investments, forecast costs, and make informed decisions at scale.&#x20;

In the era of advanced FinOps, where precise cost allocation is essential, the Unit Economics widget empowers users to align their cloud spending with business value. Whether tracking metrics like cost per transaction, cost per detection, or cost per document indexed, this widget enables businesses to evaluate profitability, optimize resource allocation, and ensure that cloud investments drive measurable outcomes.

By simplifying the complex task of breaking down costs by usage and aligning shared costs across departments, the Unit Economics widget offers enterprises a streamlined, automated approach to managing cloud spend effectively. \
​\
​**To create a new unit economics widget:**

1. In Finout, navigate to **Dashboards**.\
   A list of your dashboards appears.\
   ​

   <figure><img src="/files/FOCtlxbnMyZ2BIoONGxG" alt=""><figcaption></figcaption></figure>

2. Select the relevant dashboard.\
   The **Dashboard** overview appears.​

   <figure><img src="/files/2VLHYQpnVcidpIfYWTOZ" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/23006244/bf3c7e3131d2f55ee6c212b0f574/AD_4nXfvN0_megCzfLicyzmK9vL170B74x7zPz9XN-C8ltyiklWoTamI0EPIhTyI62VjVmQvNsV4D0H89fPy3aqI__7zNDpwjau1QvVzUu3awM4xJlKLn4tJ72abxmLfDu6Pd60EE7M1lBxWZtUHqNNxyzjMI_zx?expires=1730160000&#x26;signature=794a594063b22539f2bd75c014c906ef71113662cdd231a2a893a8f9b5f4d794&#x26;req=0tZvxV74qDNk2hj99dpg6rW7zCFP3%2FTLDr%2FCOCxoogLZvNh54uxJ9uSKEpKk%0ANUzq4UR%2FpS82FRKnxVS%2Fh52M%0A" alt=""><figcaption></figcaption></figure>

3. Select **Add widget**.\
   The **Add Widget** popup appears.

   <div align="left"><figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/23006268/cd373f6506faf742b14ccde9bd4d/AD_4nXc1hoBxUDZ0DhApcVr_tRfA6xVVr-hp_Vd7IMtJ4R-4-JERnwQnocF4i0i6Xt0uYXQh6F0Db5FadUZ6EBQbBUK1utZGkm4oUU9oUgg1BEBjGJ-Z73sQesJokSOMVDYTJX7gSjhn_WwO0CIeJ87LfhrbsWCV?expires=1730160000&#x26;signature=15e5963de9c8936dcac40efe9bbc308ebe3cbea35ced47c12c246b20a93acbcc&#x26;req=0tZvxV74qj9k2hj99dpg6iChBSK2%2BL3yv8mixf4wGc1a0ASXvnwxDdxPMnKt%0A8pEj16BYT7ilVIosSw5wlezN%0A" alt=""><figcaption></figcaption></figure></div>

   <div align="left"><figure><img src="/files/d1VMa5zzjLzyYvyWKk6m" alt=""><figcaption></figcaption></figure></div>

4. Choose **Unit Economics**.\
   The **Unit Economic** widget builder appears.<br>

   <figure><img src="/files/SHtKUjdus7PX0T8KDCSZ" alt=""><figcaption></figcaption></figure>

5. Name your widget<br>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/23006319/5a56c8db0e341e6e89287a90048b/AD_4nXe_5jAD7v1OGf7gXPaQLWp8eNSj5IU3o8brd6UoctYcMUDF-g8b3-6Xebwr5tZiqE1S3UnHF42ltbjBKMShinKTjgRx15y7GYZcjRVjXE4MgJZrKKSvnFzsjEdzv0JKHmlaBVG94fAX7NZaqE234mBxQJqe?expires=1730160000&#x26;signature=11ef325bdef44355ff448fa5b4c40b3ccb174b6c10c1255261f759f0e55ab0d4&#x26;req=0tZvxV75rT5k2hj99dpg6gTU%2FT3bqICpKWL3diASstP5vKk1xGtUby24BhR0%0AVN3lCTBXJOonI1TMv205jlTV%0A" alt=""><figcaption></figcaption></figure>

6. You can choose between a stand-alone Telemetry widget, or you can enable a specialized layer by clicking **Unit Economics**.\
   The **Unit Economics** pop-up appears.<br>

   <figure><img src="/files/olzBR6SgDoLfRAk0264H" alt=""><figcaption></figcaption></figure>

   **Unit Economics configuration**:

   **a.** Enter the widget name.<br>

   **Cost**:

   **b.** Load View - Select a created and saved view from the [MegaBill ](/user-guide/inform/megabill)to use its configuration.

   **c.** Filters

   **d.** Group by

   **e.** Choose a cost type: See [Cost and Usage Types ](/get-started-with-finout/cost-and-usage-types)for an explanation of all cost types.\
   \
   **Switch between the denominator and numerator**\
   **f.** Click ![](/files/E1WTAZu8eiwqzKvaKHHT) to switch between the denominator and the numerator.

   \
   **Telemetry**:\
   Telemetry refers to any data measurements that users intend to incorporate into Finout. This includes any metrics or data points that can be leveraged to enhance insights, enable monitoring, or assist in managing costs within the platform. See the [Telemetry documentation](/telemetry-integrations/telemetry) for more information.

   g. Select Telemetery

   **h.** Filters

   **i.** Telemetry Group by: The Group By selection must match the Cost Group By. If the selections do not align, no data will be displayed.

   \
   Click **Save**.\
   You are brought back to the configurations page.

7. Widget Main Settings -<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The main settings are dynamically adapted based on whether you have chosen the Telemetry or the Unit Economic specialized layer.</p></div>

   * *Timeframe*: \
     **-** The default is the last 30 days. You can either select one of the predefined options or switch to custom.\
     ![](/files/Uo59tlYeaxSTFWSIFEUu)\
     **-** When switching to custom, you can define a custom start and end date. You can keep **Today** as the relative end date or unmark it to set a custom end date.\
     ![](/files/FhpFzY1DqNV5qmUn3PuU)
   * Telemetry selection: Telemetry refers to any data measurements that users intend to incorporate into Finout. This includes any metrics or data points that can be leveraged to enhance insights, enable monitoring, or assist in managing costs within the platform. See the [Telemetry documentation](/telemetry-integrations/telemetry) for more information.
   * Load from view: Select a created and saved view from the [MegaBill ](/user-guide/inform/megabill)to use its configuration.
   * Choose Filters: Select which cost data to view. When loading from view, the filters will be populated automatically.
   * Group By: Select a value to group the cost/usage data by.
   * X-Axis grouping: For bar or table visualization, decide whether the X-axis will show dates or values.
   * Table options:
     * Transpose table - Switch the rows and columns of the table visualization.
     * Show dates - Choose to show or remove dates in the table visualization.

8. Widget Advanced Settings -<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The advanced settings are dynamically adapted based on whether you have chosen the Telemetry or the Unit Economic specialized layer.</p></div>

   * Choose a cost type for the widget. See[ Cost Types and Usage](/get-started-with-finout/cost-and-usage-types) for all of the cost types.
   * Add a **Central value** (donut chart only) — The value shown in the donut's hollow center. On by default, showing the **Total**. You can turn it off, or change what it displays:
     * **Total** (default) — Sums all filtered values shown in the donut, including the "Others" group.
     * **Average** — Averages all filtered values shown in the donut. Disabled when no Group By is selected.
     * **Count** — Counts the items in the selected Group By dimension. Respects the Number of top values limit, and is disabled when no Group By is selected.
     * **Custom text** — Free text of your choice.

<figure><img src="/files/F6aTlJA47JHfQGlGMjYS" alt=""><figcaption></figcaption></figure>

* Scale Factor - Adjust how unit economics is calculated—for example, to show cost per 1,000 units instead of per 1.  (For computation layer)
* Enable event annotations to display them on specific dates, making it easier for teams to collaborate and highlight key insights directly in Finout. <br>

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Event Annotations can only be added through MegaBill. See <a href="/pages/HmUJlXC09tHYvI2xpYC4#event-annotation-coming-soon">Event Annotations</a> for more information.</p></div>

1. **Visual Settings**

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Visualization settings options shown depend on the selected visualization type.</p></div>

   **Table visualization options:**

   * **Transpose Table** - Change the order of the columns and rows. The rows will become the column keys.
   * **Select which columns to display in the table**:
     1. **Total** — Show or hide the total column.&#x20;
     2. **Dates** — Show or hide date columns.
     3. **Percentage of total** — Show each value as a percentage of the total cost.&#x20;
     4. **Previous period total cost** - Show the previous period cost of each value.

   <figure><img src="/files/mF6Irubcvz5tEgvAQRW9" alt=""><figcaption></figcaption></figure>

   **All visualization types:**

   * Add a Description.
   * Show title toggle: Enable or disable the title.
2. &#x20;Select a visualization type (bar, line, pie, donut, table, or numeric) that best suits your cost/usage data.<br>

   <figure><img src="/files/FpF9XPwIks49IOg2cP3W" alt=""><figcaption></figcaption></figure>
3. Click **Save**.

   Your widget is configured.

### Text Widget <a href="#h_668422585b" id="h_668422585b"></a>

Provides a space for adding custom text, notes, or descriptions to your dashboard. This widget is useful for adding context, instructions, or annotations to your dashboard for better clarity and communication.<br>

**To create a new text widget:**

<figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/27220856/8e694ea5f35dd7a786e35cd92aac/AD_4nXcLLwl2IasrmKqy6UFVYQEV1cKET10n2EPHCN79nJt-8r0shgnJ6Nqzp3c_QVDpoA0x8rUWivxTrR0L7uzGbbDhzGWVy99gfWrbBOb_p0wMQU2_QRKiU6Vw3V3kenbJyT7pbPA1Aw?expires=1732782600&#x26;signature=b003129cb45ab1b47c980ae9734866da4dc09340c7bb419422eba5f191a7f320&#x26;req=0tJtx1jyqTFk2hL085ZhofLQZWNLyUh82j2UMGLrD8wVXtYOoiAlSwhLaPhd%0AQg%3D%3D%0A" alt=""><figcaption></figcaption></figure>

1. Type in the free text, choose a color, and select an alignment and font size.
2. Click **Save**.\
   The widget is created.

### CostGuard Widget <a href="#h_bf4f217448" id="h_bf4f217448"></a>

The CostGuard widget in Finout is a powerful tool designed to help you identify cost optimization opportunities within your infrastructure. Now part of your dashboards, it is positioned as a key focus within your top interest points, making it easier than ever to streamline cost savings. This feature integrates seamlessly with MegaBill, enabling you to pinpoint areas ripe for cost savings across Virtual Tags, teams, environments, and cost centers in one centralized location. By using the CostGuard widget, you can streamline your cost optimization efforts, making it easy to identify and act on potential savings, ultimately maximizing your cloud investment. For more information about CostGuard, refer to the [main documentation](/user-guide/optimize/costguard).

{% hint style="info" %}
**Note**: Data is updated on a daily basis.
{% endhint %}

**To create a new CostGuard widget:**<br>

<figure><img src="/files/9jBxZAzecwNB3dD11xhS" alt=""><figcaption></figcaption></figure>

<figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/26980469/ccee48a1f45228ea13f364328513/AD_4nXfTEW4rWoso9u2CFhGwiySSatyIGxTjFrzJCeJZt7Z5qvjZaDwilqZhR5qidFMjmkF8Qa1plI2OLLj8ucAN3mS3HrBNVZDPCFSiuqC4mOiN834sapbw0kx24G2tT6YOyTCmaAnD3A?expires=1732782600&#x26;signature=b6c1078c2be797440258b0a76d4caddbd58628ed61031f286b100791d1a2b20c&#x26;req=0tNmzVj%2Bqj5k2hL085ZhobaevRg50BXuudYKsHZ%2F5gdjDOr217XREgGox1vG%0AiA%3D%3D%0A" alt=""><figcaption></figcaption></figure>

1. Name your widget

   <figure><img src="https://downloads.intercomcdn.eu/i/o/wkjhtykk/26980483/968c7f2c264a5ac19ce546f506f7/AD_4nXeJDOQq7M6u_h_R0YuJjwu1Y9IQ5yWDmtOvWd6hewwHlTiUD34Z3_4A6R7p2vjHN4WpUfpOsFgho2y5IewyYCcn3oLQmGT5E9rFw_RBOrSrEsiLDagNyod90QaeKVxpsgO-OO3y3Y78tLK3YxI0MHXEYDs?expires=1732782600&#x26;signature=08c268969b0f2241cf21f10b36387469c64ff974ba84bb38aa63c63d53552c25&#x26;req=0tNmzVj%2BpDRk2hL085ZhoaftYFrvqEij7aJCAtDOrOLyNEgLZVxy5FuTQcq2%0Alg%3D%3D%0A" alt=""><figcaption></figcaption></figure>

2. Choose a metric:
   * **Waste** - historical waste based on internal and external data, wasted cost according to the scan.
   * **Scanned cost** - total cost of resources eligible to be scanned for waste (will always have a higher value than the waste value of the same resource).
   * **Both** - You can select both metrics.

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: If both metrics are selected, the pie and the donut views won’t be applicable.</p></div>

3. Select a visualization type that best suits your widget.<br>

   <figure><img src="/files/FpF9XPwIks49IOg2cP3W" alt=""><figcaption></figcaption></figure>

4. Select an icon for your visualization.<br>

   <div align="left"><figure><img src="/files/o9DOFpztoNuoxh0GxRG8" alt=""><figcaption></figcaption></figure></div>

5. **Widget main settings**:
   * Select Scans - Select the scans that you would like to drill down:
     * All (Default)
     * Idle
     * Rightsizing
     * Specific scans from the dropdown<br>

       <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: If more than 5 scans are selected, the preview will display data in a "sampled" view. The complete data calculation will occur only upon saving the feature, with an information indicator appearing to notify you.</p></div>

   * Load View - Select a created and saved view from the MegaBill to use its configuration.

   * Choose Filters - Choose filters from the filter component window.

     <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Important</strong>: If you select a virtual tag with reallocation or group by virtual tag reallocation as a megabill dimension, and the reallocation rule splits a resource into multiple values, the calculated waste and annual potential savings will be impacted. <br><em>Example</em>: If you filter or group by virtual tag with reallocation, and the reallocation rule splits a resource into multiple values, the calculated waste and potential savings will be impacted. <em>Example</em>: Consider a Virtual Tag with three rules:</p><ul><li>Rule 1 - Team 1</li><li>Rule 2 - Team 2</li><li>Rule 3 - Shared. This rule has a reallocation setup.</li></ul><p>When filtering by <strong>Team 1</strong> or <strong>Team 2</strong>, the Potential Savings and Waste % will be precise. However, when filtering by <strong>Shared</strong>, the reallocation may split a single resource across multiple values. This distribution can cause the Potential Savings and Waste % to exceed expectations.</p></div>

   * Group By - Choose from the following:

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Group By is not supported for the numeric view.</p></div>

     * None
     * MegaBill key<br>

       <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: When grouping by a MegaBill dimension, commitment scan recommendations are excluded.</p></div>
     * Scans - Group by the scan name.
     * Resources - Group by the resource ID.

   * Set time resolution -

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This is relevant only for the "Waste" metric type. When the "Scanned Cost" metric type is selected, the "time resolution" is disabled.</p></div>

     \
     ![](/files/cVHweHPBQhQGuKWo9LNU)

     * Daily - represents the potential daily waste.
     * Monthly- represents the calculation of the potential daily waste \* x days of the current month.
     * Yearly- represents the calculation of the potential daily waste \* 365 days.

   * Operator - Sum or Average.<br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This is relevant only to numeric visualization type.</p></div>

   * Transpose Table - Change the order of the columns and rows. The rows will become the column keys.<br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>:<br>-By default, the transpose table is off.<br>-This is only relevant to table visualization types.</p></div>

6. **Widget Advanced Settings** <br>

   <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Note</strong>: The advanced settings are dynamically adapted based on the chosen widget type (cost/usage), specialized layer (trend projection/computation layer configurations), and visualization type.</p></div>

   * Choose a cost type for the widget. See [Cost Types and Usage](/get-started-with-finout/cost-and-usage-types) for all of the cost types.
   * Add a **Central value** (donut chart only) — The value shown in the donut's hollow center. On by default, showing the **Total**. You can turn it off, or change what it displays:
     * **Total** (default) — Sums all filtered values shown in the donut, including the "Others" group.
     * **Average** — Averages all filtered values shown in the donut. Disabled when no Group By is selected.
     * **Count** — Counts the items in the selected Group By dimension. Respects the Number of top values limit, and is disabled when no Group By is selected.
     * **Custom text** — Free text of your choice.

   <figure><img src="/files/F6aTlJA47JHfQGlGMjYS" alt=""><figcaption></figcaption></figure>

   * Enable event annotations to display them on specific dates, making it easier for teams to collaborate and highlight key insights directly in Finout. <br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Event Annotations can only be added through MegaBill. See <a href="/pages/HmUJlXC09tHYvI2xpYC4#event-annotation-coming-soon">Event Annotations</a> for more information.</p></div>
   * Add a Description.
   * Select the horizontal and vertical text alignment (numeric visualization).
   * Select the text size: Large, Medium, and Small (numerical visualization).&#x20;
   * Select the number format: Standard or Compact (numerical visualization).
   * Show title toggle: Enable or disable the title.

7. Click **Save**.

   Your widget is configured.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: <br>-  This widget will not be impacted by the dashboard's time filter, as each CostGuard has its own unique calculation interval.<br>- The configure widget will have a CostGuard button that shows the widgets data filtered in CostGuard.<br><img src="/files/Apg31bXwN8i6mBy91mWo" alt=""><br></p></div>

### Governance Widget

The Governance widget is designed to provide visibility into your cloud non-compliant costs and resources. This widget allows you to monitor tagging governance, ensuring all resources adhere to your organization's tagging policies and analyze non-compliant costs by Virtual Tags, teams, environments, or cost centers. For more information about Governance, refer to the [main documentation](/user-guide/operate/tag-governance).

<figure><img src="/files/U9pTac9FBKdwTHGs6c9C" alt=""><figcaption></figcaption></figure>

1. **Name your widget**: Click ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXcqVxdCuI1Qr4rycwqijxdCTpZYaGXhUibfnFjkbDUeMIUvPM6e8jmmOgw515XAxPSIj0IvZq9bptC9MweGQOdezmIL-d5JQDf46mDxT7Ut351Ch2g2aGoxKXJsCnB9qnJ6fPGp1FIWKh6JqJOLaZbNeOE?key=jYYKLsEU9XabFVVSo4QKfQ) and add a name.\
   ​![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXf6JhaP---CYGsQM5S7uIksIXAvN050qXVUuW6GrJtzRLTPICVbhcWiQO_wgvF04jyHbNjP7Hd8VkHAewnb9Al65fvF0SrOlv78BkbS2HTRI6_XSEHc_MuxVkXNaIS3C9sOYxkCew1AeetoOCjJnMRf6Mu9?key=jYYKLsEU9XabFVVSo4QKfQ)
2. **Choose a metric**: Non-compliant cost - the cost of the non-compliant resources
3. **Widget main settings**:

* **Select Policies** -  Select the policies that you would like to drill down:
  * All (Default)
  * Untagged Resources
  * Unapproved Values
  * Specific policies from the dropdown<br>

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: If more than 5 policies are selected, the preview will display data in a "sampled" view. The complete data calculation will occur only upon saving the feature, and an information indicator will appear to notify you.</p></div>

* **Load from View** -  Select a created and saved view from the MegaBill to use its configuration.

* **Choose Filters** - Choose filters from the filter component window.

* **Group By** - Choose from the following:<br>

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Group By is not supported for the numeric view.<br></p></div>

  * None
  * MegaBill key<br>

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The default MB group is automatically applied by property.</p></div>
  * Policies  - Group by the policy name.
  * Resources - Group by the resource ID.

8. **Transpose Table** - Change the order of the columns and rows. The rows will become the column keys.
9. **Widget advanced settings**:

   * Choose a cost type to show the actual cost.
   * Add a description to the widget.
   * Add a **Central value** (donut chart only) — The value shown in the donut's hollow center. On by default, showing the **Total**. You can turn it off, or change what it displays:
     * **Total** (default) — Sums all filtered values shown in the donut, including the "Others" group.
     * **Average** — Averages all filtered values shown in the donut. Disabled when no Group By is selected.
     * **Count** — Counts the items in the selected Group By dimension. Respects the Number of top values limit, and is disabled when no Group By is selected.
     * **Custom text** — Free text of your choice.

   <figure><img src="/files/F6aTlJA47JHfQGlGMjYS" alt=""><figcaption></figcaption></figure>
10. Select a visualization type (pie, donut, table, or numeric) that best suits your widget.<br>

    <figure><img src="/files/H8wTycC2kBRURaEF82o4" alt=""><figcaption></figcaption></figure>

Table visualization shows:

* The chosen metric data
* % Non-compliant cost - The percentage of non-compliant costs for the last day of data.
* Non-compliant resources - The number of non-compliant resources for the last day of data.
* % Non-compliant resources - The percentage of non-compliant resources for the last day of data.<br>

  <figure><img src="/files/Uvj5OmZ2HO0sAnSjizZ8" alt=""><figcaption></figcaption></figure>

11. Select an icon for your visualization.<br>

    <div align="left"><figure><img src="/files/o9DOFpztoNuoxh0GxRG8" alt=""><figcaption></figcaption></figure></div>
12. Click **Save**.\
    Your widget is configured.

{% hint style="info" %}
**Note**: This widget will not be impacted by the dashboard's time filter, the widget shows results of the last day of data.
{% endhint %}

### Financial Plan Widget

The Financial Plan widget in Finout is a powerful tool to help you set and track financial goals for your cloud spending. It allows you to compare actual expenses with planned budgets and run rates, offering a clear view of your financial progress. With the Financial Plan widget, you can monitor how your spending aligns with your targets, pinpoint areas needing adjustments, and make data-driven decisions to optimize your cloud costs. For more information about the financial plans,  refer to the [main documentation](/user-guide/inform/financial-plans).

To create a new financial plan widget:

<div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc84GO7lwRU2W6vJGNSB-XtkFH9CQOmvL5ZTekylnbV5YVTeXWlbObyQmQbbAzSsKROxap9cGtLINfnPVs7yBYOOXX9oxTk1YJVw0nm7HSulC2uxqeGhQmsZNC5ISGBmzY6SBQ_?key=jYYKLsEU9XabFVVSo4QKfQ" alt=""><figcaption></figcaption></figure></div>

1. Select a financial plan and click **Continue**.\
   The financial plan widget builder appears.<br>

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeINjjf94pGPngyIJoXXGsxeOgnWBd_U7vPUzO2vuti9bVqxNgWRWQfj7T863NXz5RWn7_Op03OKF9tSnIt9LluC-Y0PVFPKa4SYNbRJNI7LP6DRI4yIC10uDKM9_qGb8QrXij0?key=jYYKLsEU9XabFVVSo4QKfQ" alt=""><figcaption></figcaption></figure>
2. **Name your widget**: Click ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfIqaXFRphste7bRvZGNgR9OAFIGD9-BY7IjFhEQCcz_3jpisWyRMHhve77Onba7ybgfAVeGsGOIMWHRALDKN3cmFuuM_JPJ0eogMDpfsca5FlRHWQdPKw8NBi484jw7BOGrQB4MQ?key=jYYKLsEU9XabFVVSo4QKfQ) and add a name.<br>

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXf8zGxiWt3Ro-tMVqJ5eOPU2T5fl4fAXxE7owDyxK9BNfnnJoGG-__Ir78BUahteb5LeaZpS9Eby2p1IY6KAyZoFa5bT6bnDE2HfIKQIl7e7O2-E7Rzz6Q0nbtQ9BlhVjsLFkhaPg?key=jYYKLsEU9XabFVVSo4QKfQ" alt=""><figcaption></figcaption></figure>
3. **Metric selection**: Determine which metrics to display. You can select more than one metric. Available metrics:

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can select multiple metrics at the same time.</p></div>

* Budget (selected by default)  - displays the financial plan budget values&#x20;
* Cost (Selected by default) - displays the actual cost
* Forecast - displays the forecast that was generated during the financial plan creation.
* Run Rate ​- displays the end of month estimated cost based on the past 30 days of spending.<br>

  <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfnbD4Zf3TiFnVzmJndoyqKl43l7ddwxkgKmJBTY-S0pkBn8CSdn9k3SLes0l6v-FjtGglyhfWKf5aqvnqdoDfYo0IATpVttVZoYicElAxRn441wx8EE10MGdbMVL2uuV8lpoHC?key=jYYKLsEU9XabFVVSo4QKfQ" alt=""><figcaption></figcaption></figure>

8. Enable a specialization layer (optional).

**Computational layer**

The Computational Layer allows for the creation of custom ratio metrics. This is achieved by performing mathematical operations, such as division, subtraction, or percentage calculations between any two data points you select. The results of these operations can be visualized directly within your widgets, providing a powerful means for custom analysis and deeper insights.

With the computational layer you can combine different data sources to create meaningful ratios, such as cost-to-revenue, to monitor efficiency or other key performance indicators

How to use the computational layer:

<div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfBVfiTtZhhr6Vi4_mKEm_SmfKCPvlZ9oFn1HvjQ6d9hQmtjgulBid-4tSr-f7KIek8x_KvbRsKkRXV0uWn5imO-RzALjBeT7nImZEZLOR5un8dvEVPmgthzHU342CHOrecCgKazg?key=jYYKLsEU9XabFVVSo4QKfQ" alt=""><figcaption></figcaption></figure></div>

1. Choose the two data points you want to use; cost, budget, run rate or forecast.
2. Select the mathematical operation (division, subtraction, percentage) to apply to your chosen data points.
3. Once your custom metric is created, it will appear as an additional visualization in your widget.

Example:\
You can create a metric to represent cloud spending as a percentage of the total budget. This visualization provides valuable insights by highlighting the proportion of your budget allocated to cloud expenses, helping you evaluate spending efficiency and guide strategic budgeting decisions.

9. **Widget main settings**:\
   ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXecHrPTsJ71I79XbprQq31zPLbYKt4JHlDOlhLlz7f-_ZinfAVLcUumfC9uHtC6jSW1K1qHjAiHxQ50MMb8TYNV_wJommEZRzffl0tQO8yUNnOZwn3jR5skO2cEegYw3NwLZ6sTFw?key=jYYKLsEU9XabFVVSo4QKfQ)

* Date customization (optional): adjust the financial plan date and interval displayed in the widget.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can select <strong>Full Plan</strong> for  the full financial plan period in the timeframe breakdown to allow viewing the whole financial plan in accounts that their fiscal year is not standard.</p></div>
* Filter on financial plan values: Select specific financial plan values to display. You have the option to group by these values.
* Group-By financial Plan keys -\
  \
  Allows to group by any of the keys of the financial plan. Once enabled, you must select the key for the group by

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc4zin5mb0wJM6spuiW2R-NRiLFioVverMF_bbwXGYvXGRV7vqyKpNtohE0SyBm5RwbDbW_69T84ADOpW6e9MxFWxAwaUkdh0veF2j8CTE5Ggav9gRBIL9eklGeDF0tH8h4KWAbgw?key=jYYKLsEU9XabFVVSo4QKfQ" alt=""><figcaption></figcaption></figure>

* X-Axis configuration: For bar, line, or table widgets, decide whether the X-axis will show dates by default.&#x20;

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Event Annotations can only be added through MegaBill. See <a href="/pages/HmUJlXC09tHYvI2xpYC4#event-annotation-coming-soon">Event Annotations</a> for more information.</p></div>
* For Numeric widgets, select either sum or average as the calculation method.

10. **Widget advanced settings:**

    * Choose a cost type to show the actual cost.
    * Enable event annotations to display them on specific dates, making it easier for teams to collaborate and highlight key insights directly in Finout.&#x20;

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Event Annotations can only be added through MegaBill. See <a href="/pages/HmUJlXC09tHYvI2xpYC4#event-annotation-coming-soon">Event Annotations</a> for more information.</p></div>

11. **Visualization Settings:**

    **Bar, Line, Donut and Pie visualization options:**

    * **Show Data Labels** **(Beta)** — Toggle on to display labels directly on the chart. Choose whether the labels show the **percentage of total** or the **absolute value**. These labels will also appear when sending a report to Slack channels/Teams/email.&#x20;

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: When Group By is applied, data labels are display only for the group with the highest value and for the totals. Labels for the remaining groups are hidden.</p></div>

    <figure><img src="/files/HUTFrElLOsyI0N3WW2hb" alt=""><figcaption></figcaption></figure>

    \
    **All visualization types:**

    * Add a Description.
    * Show title toggle: Enable or disable the title.

12. **Select a visualization type** (bar, line, table, or numeric) that best suits your cost/usage data.<br>

    <div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc_RrnYClvpk4O2OTr_PlMfDApySQPzNQMvgkkVke3ljH9cW7Hyzcksbl9TK4NnhjNKHFRqQq-1jHBf7REbH--WImvFmTQqDM3LyAuIpQgOzgifelCqmS843MlLenXY_Pxh3MGp?key=jYYKLsEU9XabFVVSo4QKfQ" alt=""><figcaption></figcaption></figure></div>

13. Select an icon for your visualization.<br>

    <div align="left"><figure><img src="/files/o9DOFpztoNuoxh0GxRG8" alt=""><figcaption></figcaption></figure></div>

14. Click **Save**.\
    Your widget is configured.

### Data Explorer Widget&#x20;

The Data Explorer Widget lets you build powerful table visualizations in your dashboards. It’s ideal for exploring complex cost and usage data and can be easily shared in reports for deeper analysis across teams.

**To create a new data explorer widget:**

<figure><img src="/files/JsFBxgu6he6Jk2yMpM3z" alt=""><figcaption></figcaption></figure>

1. Name your widget: **Click** ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfIqaXFRphste7bRvZGNgR9OAFIGD9-BY7IjFhEQCcz_3jpisWyRMHhve77Onba7ybgfAVeGsGOIMWHRALDKN3cmFuuM_JPJ0eogMDpfsca5FlRHWQdPKw8NBi484jw7BOGrQB4MQ?key=jYYKLsEU9XabFVVSo4QKfQ) and add a name.<br>

   <div align="left"><figure><img src="/files/jPQY98OIh2MwHlIRqC2N" alt=""><figcaption></figcaption></figure></div>

2. Widget Main Settings:
   * **Time Frame**\
     **-** The default is the last 30 days. You can either select one of the predefined options or switch to custom.\
     ![](/files/Uo59tlYeaxSTFWSIFEUu)\
     **-** When switching to custom, you can define a custom start and end date. You can keep **Today** as the relative end date or unmark it to set a custom end date.\
     ![](/files/FhpFzY1DqNV5qmUn3PuU)

   * **Filters -** Choose virtual tags, cost centers, and their keys. <br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: </p><ul><li>Choosing virtual tags is not available when reallocation is enabled.</li><li>You can use up to 5 dimensions in table widgets and up to 3 dimensions in bar or line charts.</li></ul></div>

     <div align="left"><figure><img src="/files/9FryDArVTEeB7Nrtef8z" alt=""><figcaption></figcaption></figure></div>

   * **Dimensions:** Choose dimensions to appear in your widget.<br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: </p><ul><li>Choosing virtual tags is not available when reallocation is enabled.</li><li>You can use up to 5 dimensions in table widgets and up to 3 dimensions in bar or line charts.</li></ul></div>

     <div align="left"><figure><img src="/files/C50lGsPwNSG08vZfm7KX" alt=""><figcaption></figcaption></figure></div>

   * **Measurement**: Select one of the following measurements. (*Required for Bar and Line views*)
     * **Cost/Usage data:** Choose the cost type and specify aggregation.

       <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can select up to one metric.</p></div>

       * Cost type:&#x20;
         * Net Amortized Cost
         * Amortized Cost
         * Unblended Cost
         * Net Unblended Cost
         * Blended Cost
         * Effective Cost
         * Net Effective Cost
         * List Cost
         * FairShare Cost
         * Net FairShare Cost
         * Usage Amount
         * Normalized Usage Amount\
           ![](/files/Kb2hbWkboPgGht5GOCYW)
       * Specify aggregation activities for the report: Sum, Average, Minimum, or Maximum.

         ![](/files/FQXDv52ShmatJBWKuqH8)

     * **Dimensional Analysis:**\
       Count the number of unique values within a specific dimension or count the total number of entries or occurrences within a dimension, including duplicates. For a full explanation, see [Dimension Analysis](/user-guide/inform/data-explorer#h_e0e5ae30de).\
       ![](/files/029lSy8AMK0vnljOWFTw)
       * Select operator: Count Distinct or Count
         * Select a Dimension. Click ![](/files/MxuBCPr2syFQbSv5n3rb) to add another dimension.

     * **Finout predefined queries:** (*Required for Bar and Line views*)\
       The Resource Normalized Runtime metric provides a measure of how long resources were operational within a specified timeframe and normalized according to the total hours in that timeframe. For a full explanation, see [Predefined Queries](/user-guide/inform/data-explorer#h_c67965ba36).\
       ![](/files/gRCdihyXOkixxuYstR1w)

   * **Column Management**: Reorder and rename the columns that will appear in the table. \
     (*Available for the Table view only*)\ <img src="/files/hA77LLRfGwyS40X3H8wH" alt="" data-size="original">

   * **Order by**: Set the order of the data table. (*Available for the Table view only*)\
     \
     ![](/files/0yUUuKKxxuN3vAdrG4Eo)\
     \
     **Result**: The table will reflect a preview of the widget with the main settings inputs. <br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The table displays up to 10,000 rows, prioritized according to the selected sort order.<br></p></div>

3. **Advanced Settings**:
   * **Number of top values:** Set how many top values to display in the graph. All remaining values will be grouped under ‘Others’. (*Available for Bar and Line views only*)\
     ![](/files/8nhcvbF7iGP7fbqMqOg0)<br>

4. **Visualization Settings:**

   **Bar, Line, Donut and Pie visualization options:**

   * **Show Data Labels** **(Beta)** — Toggle on to display labels directly on the chart. Choose whether the labels show the **percentage of total** or the **absolute value**. These labels will also appear when sending a report to Slack channels/Teams/email.&#x20;

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: When Group By is applied, data labels are display only for the group with the highest value and for the totals. Labels for the remaining groups are hidden.</p></div>

   <figure><img src="/files/HUTFrElLOsyI0N3WW2hb" alt=""><figcaption></figcaption></figure>

   \
   **All visualization types:**

   * Add a Description.
   * Show title toggle: Enable or disable the title.

5. Choose the visualization type.<br>

   <div align="left"><figure><img src="/files/VUkIGDgwi4LtDLRg6Kji" alt=""><figcaption></figcaption></figure></div>

6. Select an icon for your visualization.<br>

   <div align="left"><figure><img src="/files/o9DOFpztoNuoxh0GxRG8" alt=""><figcaption></figcaption></figure></div>

7. Click **Save**.\
   \
   **Result**: The widget is created and appears in the dashboard.<br>

   <figure><img src="/files/7jJqrY84X97JuSXjrcOt" alt=""><figcaption></figcaption></figure>

8. In Finout, navigate to **Dashboards**.

   A list of your dashboards appears. ​<br>

   <figure><img src="/files/Svio4FQrGOXXRHqUhkUJ" alt=""><figcaption></figcaption></figure>

9. Select the relevant dashboard.\
   The **Dashboard overview** appears.​<br>

   <figure><img src="/files/ogfRGuaMKgNb2fIquQMC" alt=""><figcaption></figcaption></figure>

10. Click ![](https://docs.finout.io/~gitbook/image?url=https%3A%2F%2Fdownloads.intercomcdn.eu%2Fi%2Fo%2Fwkjhtykk%2F27220013%2F2596ace3a79e6654c623359a8be0%2FAD_4nXf9RlJL9azncG45vGpLqK-lQjjVh_VLwz3OmhX-l3a1MlH36ErKskR-6es3lkBurBa76lhhBja8XlpeahzLclej-QgLuNn2pLwogRmkoo27RQOVQK_WWs00iVGOR3ngTCotlhDJ%3Fexpires%3D1732806000%26signature%3D989e5eb03949e7b7772a16b0ff9b3297a89f3f7f7addaabd0606a638ec2e4b66%26req%3D0tJtx1j6rTRk2hr889pg6oXGi4tNMLahSso6UokIDojkiEmp8KuSSMlXyFk%253D%250A\&width=300\&dpr=4\&quality=100\&sign=32a2e304\&sv=2)and then click **Dashboard Settings**. \
    The **Dashboard Settings** side-window appears.<br>

    <figure><img src="/files/hnu5ju2iH5YkV9efQkMF" alt=""><figcaption></figcaption></figure>

11. **Edit** the following fields:

    * **Dashboard Name**: Edit the name of your dashboard.

    * **Grid Layout Settings**: Configure the dashboard's horizontal and vertical scales to control how widgets fit within the dashboard layout.\
      \
      Horizontal Scale:

      * Spacious&#x20;
      * Standard
      * Compact

      Vertical Scale:

      * Compact
      * Standard

      <figure><img src="/files/uGOfetXM8rN42AK69d82" alt=""><figcaption></figcaption></figure>

    * **Dashboard Default Filters**\
      Define default values that will automatically apply when the dashboard loads.
      1. Click **Filters.**\
         ![](/files/bejXSjFi8X8F7EXcELVu)<br>
      2. Choose the values you want to set as the default in the dashboard and click **Apply Filters**.\
         ![](/files/vY5VgxKY3HrPZz2g0JWW)<br>
      3. Click **Save.**\
         The filters are saved to the dashboard and will appear whenever the dashboard is accessed.<br>

         <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can add additional filters while viewing a dashboard. However, when you exit and reopen the dashboard, only the default filters are retained. Any filters added during the session are not saved.</p></div>

    * **Default Timeframe and Interval**:
      * **Time Frame** (optional): Select a default timeframe for your dashboard.

        <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>​<strong>Note</strong>: Once saved, the chosen parameters will appear at the top of your dashboard.</p></div>

        <figure><img src="https://docs.finout.io/~gitbook/image?url=https%3A%2F%2Ffinout.intercom-attachments.eu%2Fi%2Fo%2F6520066%2Ffdeff2c1c8be05acc10573f7%2FFINR_J0oY5NGkwwcXr8do5Lhyxzb0D33gBFcGbrnGZV4Xof0KlCGStrX4Ymf0AEOTYpNOJGkI9YG48oEkWcHxeeNMz7N3AdODwOfXelVCN5bYZTGwVtZUk3d6cChTDjKow2vChtFqqczjwcHMi3DnwE%3Fexpires%3D1728804600%26signature%3Dd01a1930e84c1247ca42298422542529179ea911e4001a170389a8efb21c9c55%26req%3D1tBtxVj8qnsp0xr0v9tnpEyoNuePwgjW2ZaIF8zbqu8EFMZkxshJTCs%252BXyTf%250ApI6NOUHCG1%252Fm5Y4%253D%250A&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=6a4327ff&#x26;sv=2" alt=""><figcaption></figcaption></figure>
      * **Time Interval** (optional): Select a default time interval for all widgets on your dashboard. Once saved, the chosen parameters will appear at the top of your dashboard. ​

        <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>​<strong>Important</strong>: Implementing a dashboard-wide timeframe or interval will override the settings of individual widgets. When these changes are made, you'll receive an alert. A detailed filter overview will also be available to show which widget settings have been affected.</p></div>

    * [**ACL Permissions**](/cross-platform-features/list-of-cross-platform-features/acl-permissions)**:**

      You can set **read** and **write** permissions as either **Public**, **Private**, and **Shared**. Permission for an object is granted if a user or group has a role with the proper permission and also ACL permission to access the object. By default, ACL read and write permissions follow the account’s default configuration.

      <div align="left"><figure><img src="/files/aac29YmDU06saxps5FJt" alt=""><figcaption></figcaption></figure></div>

      * **Types of ACL Permissions:**

        * **Public:** Grants access to anyone in the organization that has Role-Based Access Control (RBAC).
          * **Private:** Restricts access to admins and the user who created the object.
            * **Shared:** Limits access to specific users or groups that have Role-Based Access Control (RBAC).&#x20;

              <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Admins and creators always retain access.</p></div>

        <div align="left"><figure><img src="/files/7MS3nN8ppMXCneSMykzm" alt=""><figcaption></figcaption></figure></div>

<figure><img src="/files/mOYZGqBb2BzQlcxyWKbr" alt=""><figcaption></figcaption></figure>

### FAQs

#### Why don't negative or zero values appear in my pie or donut chart?

This is expected — pie and donut charts don't show negative or zero values.

* When all values are negative, the widget renders empty with an explanation.
* When values are mixed, only the positive values appear, with a message noting that negatives were excluded. This message shows both while building the widget and on the dashboard.

<figure><img src="/files/MJ9xPihwhfLuYO2wkCcu" alt=""><figcaption></figcaption></figure>

#### How is the "Others" group counted when Central value is set to Count?

The "Others" group counts as a single item — the individual values grouped inside it are not counted


# Predefined Dashboards

## Overview

Finout offers out-of-the-box dashboards that provide instant visibility into costs across key cloud services and providers like AWS, GCP, Azure, Snowflake, and Datadog. Each dashboard focuses on a specific service (e.g., EC2, RDS, GCP Storage, Kubernetes) and delivers detailed visual breakdowns.

These dashboards save time, follow FinOps best practices, and help teams quickly gain insights without building from scratch. Users can interact with each dashboard, explore metrics, and customize them as needed by cloning.

<figure><img src="/files/KcsZvhN9k4Vxhe10pFcQ" alt=""><figcaption></figcaption></figure>

## Dashboard Types

<table><thead><tr><th width="387.5767822265625">Dashboard Name</th><th>Description</th></tr></thead><tbody><tr><td><mark style="color:green;"><strong>AWS</strong></mark></td><td></td></tr><tr><td>AWS EC2 Compute costs</td><td>Displays EC2 instance running hours and attached storage usage. Helps identify usage patterns and potential over-provisioning.</td></tr><tr><td>AWS EC2 Compute &#x26; Storage Usage (Running Hours &#x26; GB)</td><td>Track EC2 instance running hours alongside associated storage usage in gigabytes. This dashboard helps you understand usage patterns and spot over-provisioned or underutilized resources.</td></tr><tr><td>AWS S3 and Storage cost</td><td>Analyze your AWS S3 and other storage-related costs, including usage by storage class and bucket. Useful for identifying cost drivers and opportunities to optimize long-term storage.</td></tr><tr><td>AWS RDS Compute &#x26; Storage Usage (Running Hours &#x26; GB)</td><td>See detailed RDS instance runtime and storage usage over time. This dashboard helps you align database compute and storage with actual demand to reduce waste.</td></tr><tr><td>AWS RDS Compute costs</td><td>Focuses specifically on the compute portion of your RDS spend. Ideal for monitoring cost efficiency by instance type, region, or database engine.</td></tr><tr><td>AWS ElastiCache Compute costs</td><td>Visualizes ElastiCache compute costs across instance types and regions. Helps identify scaling inefficiencies or underused clusters in your caching layer.</td></tr><tr><td><mark style="color:green;"><strong>GCP</strong></mark></td><td></td></tr><tr><td>GCP Compute costs</td><td>Breaks down GCP compute expenses by service, project, and instance type. Use this dashboard to monitor usage trends and optimize your GCP virtual machines.</td></tr><tr><td>GCP Storage</td><td>Provides visibility into GCP storage usage and costs by bucket, class, and region. Helps track growth and optimize storage tier usage over time.</td></tr><tr><td>GCP Networking</td><td>Highlights GCP networking costs such as egress and inter-region traffic. Useful for monitoring high-volume data movement and controlling data transfer spend.</td></tr><tr><td>GCP Commitments</td><td>Shows your committed use discounts (CUDs) and how they’re applied across your GCP environment. Helps track utilization and spot unused commitments.</td></tr><tr><td><mark style="color:green;"><strong>Azure</strong></mark></td><td></td></tr><tr><td>Azure costs</td><td>Get a high-level view of your Azure cloud spend, broken down by services, resource groups, and regions. Use this dashboard to monitor trends and optimize usage across your Azure environment.</td></tr><tr><td><mark style="color:green;"><strong>Kubernetes</strong></mark></td><td></td></tr><tr><td>Kubernetes Costs</td><td>Breaks down Kubernetes costs by cluster, node, namespace, and workload. Helps you identify top spending workloads, idle node costs at different levels, and understand your Kubernetes spend across Cloud vendors based on the enabled enrichment integrations in your account.</td></tr><tr><td><mark style="color:green;"><strong>Datadog</strong></mark></td><td></td></tr><tr><td>Datadog Costs</td><td>Displays Datadog usage and costs by service type, account, and integration. Useful for identifying the most expensive components and optimizing observability spend.</td></tr><tr><td><mark style="color:green;"><strong>Snowflake</strong></mark></td><td></td></tr><tr><td>Snowflake costs</td><td>Provides visibility into Snowflake’s total and projected spend, and cost breakdowns across accounts, services, regions, warehouses, databases, and additional resources, along with optimization insights for warehouse utilization and for identifying idle tables.</td></tr><tr><td><mark style="color:green;"><strong>AI</strong></mark></td><td></td></tr><tr><td>FinOps for AI Dashboard (General)</td><td>Overview of AI spending across all cloud providers. Compare total spend, analyze AI as a percentage of overall cloud costs, and forecast future AI investments across AWS, GCP, and Azure.</td></tr><tr><td>FinOps for AI OpenAI Dashboard</td><td>A high-level dashboard to track OpenAI spend across projects, users, and models. This helps you monitor usage trends, break down cost drivers, and spot optimization opportunities before unexpected spikes occur.</td></tr><tr><td>FinOps for AI Azure Dashboard </td><td>Provides full visibility into Azure AI spend. Track service-level usage, analyze spending trends, and visualize cost distribution across models, tokens, and subscriptions. Identify optimization opportunities and monitor AI cost efficiency across your Azure environment.</td></tr><tr><td>Finops for AI GCP Dashboard</td><td>This dashboard provides a high-level view of AI spending across your GCP environment, allowing you to compare total AI spend, measure AI as a percentage of overall cloud costs, and forecast future investments. It’s a pre-built dashboard designed to help you get started quickly. To customize it—such as filtering by team, adjusting time ranges, or adding metrics—clone the dashboard and edit your version under Custom Dashboards.</td></tr><tr><td>FinOps for AI AWS Dashboard</td><td>Provides visibility into AI-related AWS services. Analyze usage and cost trends for AI workloads, compare regions or services, and track optimization opportunities.</td></tr><tr><td>FinOps for AI AWS Bedrock</td><td>Dedicated dashboard for AWS Bedrock services. View cost and usage by model, track inference patterns, and identify cost-saving opportunities across Bedrock workloads.</td></tr><tr><td>Finops for AI Anthropic Dashboard</td><td>This dashboard provides visibility into your Anthropic spend, breaking down costs by model, workspace ID, and token type so you can monitor key drivers, identify optimization opportunities, and track overall impact on your cloud spend.</td></tr><tr><td><mark style="color:green;"><strong>Cursor</strong></mark></td><td></td></tr><tr><td>Cursor Costs</td><td>Provides visibility into your Cursor spend, breaking down costs by model, user, and kind so you can monitor usage patterns, identify top cost drivers, and track overall impact on your cloud spend.</td></tr><tr><td><mark style="color:green;"><strong>CircleCI</strong></mark></td><td></td></tr><tr><td>CircleCI Costs</td><td>Provides visibility into your CircleCI spend, breaking down costs by project, workflow, job, and resource class so you can monitor usage patterns, identify top cost drivers, and track overall impact on your cloud spend.</td></tr><tr><td><mark style="color:green;"><strong>Global</strong></mark></td><td></td></tr><tr><td>Extended Support</td><td>Provides visibility into extended support charges across AWS, GCP, and Azure, breaking down costs by service and provider so you can identify which end-of-life resources are driving avoidable fees and prioritize upgrade efforts.</td></tr><tr><td><mark style="color:green;"><strong>Databricks</strong></mark></td><td></td></tr><tr><td>Databricks Costs</td><td>Provides visibility into your total and projected Databricks spend, with cost breakdowns by SKU, billing origin product, node type, and serverless vs. non-serverless usage — plus workspace-, job-, and owner-level drill-downs so you can identify your top cost drivers and track overall impact on your cloud spend.</td></tr></tbody></table>

## Customize Predefined Dashboards

Predefined dashboards can’t be edited directly. To make changes, you’ll need to clone the dashboard and customize the duplicated version.

{% hint style="info" %}
**Note**:&#x20;

* Users with ACL restrictions and data access permissions may not see all data within a dashboard, even if they can access or clone it.
* In some cases, users may be unable to clone dashboards if all underlying data falls outside their permitted access.
  {% endhint %}

1. In Finout, navigate to **Dashboards**.<br>

   <figure><img src="/files/XMghDgNZN61tIZQya9DE" alt=""><figcaption></figcaption></figure>
2. Click ![](/files/m4sVMFviHLGAiyDuZnc4) and then click **Clone dashboard**.
3. Navigate to **All** or **Custom Dashboards** on the right side of Dashboards.<br>

   <figure><img src="/files/khmetEraQaz1Hghcnris" alt=""><figcaption></figcaption></figure>
4. Click on the **Copy** of the predefined dashboard and edit in order to fully customize the cloned dashboard.&#x20;


# Manage Dashboards

## Dashboard Actions

Customize your dashboard to fit your unique needs and preferences. With customizable options, such as widgets, time parameters, and notifications, you can prioritize the most relevant information, creating a more focused and efficient dashboard. Whether you want to highlight key metrics, adjust layouts, or personalize the look and feel, customizing your dashboard empowers you to streamline data visualization and make better-informed decisions.

{% hint style="info" %}
**Note**:You can create up to 25 widgets in a single dashboard. Text widgets are not counted toward this limit. For example, if you create 20 widgets and 5 text widgets, you can still add 5 more widgets before reaching the limit.
{% endhint %}

### Dashboard Filtering

<figure><img src="/files/n9tpdgn5kxnEbWSeXrVE" alt=""><figcaption></figcaption></figure>

1. **Filters:** Filters can be used in two components: **Basic** and **Advanced** Filters also have two layer types: **Dimension Sets** and **All Dimensions.** See [Dimension Sets](https://docs.finout.io/configuration/dimension-sets) for more information.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> You can define default filters for your dashboard; see <a href="#dashboard-settings">dashboard settings</a>.</p></div>

   **Basic Filters:** Select the keys for a cost center or virtual tag to view their cost or usage trends over time. This fully customizable filter lets you combine keys in any way that fits your needs and also serves as the foundation for creating a saved view. For example: You what to see the cost over time for AWS services.

   1. Navigate to your dashboard and click **Filters.**<br>

      <figure><img src="/files/hJMzaVFGbNbU6vtDVGS2" alt=""><figcaption></figcaption></figure>
   2. Select the **AWS** tab, mark **Services**, and click **Apply Filters**.

      <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: <em>Copy/ Paste -</em> You can copy and paste filter configurations from this view into any other filter capability in Finout, or paste configurations from other areas back into this view.<br><img src="/files/9d5Z8NfxjqxbM9kkGxgb" alt=""></p></div>

      <br>

   **Advanced Filters:** You can optionally refine your view with more granular control using advanced operators, which are ideal for deeper analysis or complex filtering needs.

   1. Navigate to your dashboard, click **Filters** and then **c**lick **Advanced Filters.**<br>

      <figure><img src="/files/iHOpSBBRjkbUb0esLTOg" alt=""><figcaption></figcaption></figure>
   2. Select a **Cost Center**, a **Key**, an **Operator**, and a **Value**, and then click **Apply Filters**.

      <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: <em>Copy/ Paste -</em> You can copy and paste filter configurations from this view into any other filter capability in Finout, or paste configurations from other areas back into this view.<br><img src="/files/9d5Z8NfxjqxbM9kkGxgb" alt=""><br></p></div>

      <figure><img src="/files/xDNIJdOXFOxB3gxOzCgg" alt=""><figcaption></figcaption></figure>
2. **Time Frame -** The default is the last 30 days. You can either select one of the predefined options or switch to custom. \
   ![](/files/sy5koxNQKHLMPXZkrS1W)
3. **Time Aggregation -** Daily, weekly, or monthly.<br>

   <div align="left"><figure><img src="/files/qspeRMHtIe7u05fxEv5U" alt=""><figcaption></figcaption></figure></div>
4. **Group By** - You can group by any value in your dashboard. &#x20;

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Group by effects only cost and usage widgets.</p></div>

   <div align="left"><figure><img src="/files/DyGKs5vUyvRVs2ftm8Mr" alt=""><figcaption></figcaption></figure></div>
5. **Cost and Usage Widget Drilldown**: You can drill down directly on a dashboard from a Cost or Usage widget by clicking a specific value. The chosen data will then apply to the dashboard filter and group-by, allowing you to instantly focus on the relevant slice of cloud cost or usage data.&#x20;

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This feature only affects Cost and Usage widgets.</p></div>

   <figure><img src="/files/JnAy9Aqk6wE4McEKsxrs" alt=""><figcaption></figcaption></figure>
6. Include or exclude values from Cost and Usage widgets.
   1. In Dashboards, find your desired dashboard.<br>

      <figure><img src="/files/DZx5vdrpEYr3JVsLGgFT" alt=""><figcaption></figcaption></figure>
   2. Right-click a bar, pie, or line chart in Cost or Usage widgets to include or exclude it from the dashboard filters.\
      **Result**: The included or excluded value is added to the filters.<br>

      <figure><img src="/files/c4sq2H1t7Qk46q4S1GmD" alt=""><figcaption></figcaption></figure>

### Custom Dashboard Settings

1. In Finout, navigate to **Dashboards**.

   A list of your dashboards appears. ​<br>

   <figure><img src="/files/Svio4FQrGOXXRHqUhkUJ" alt=""><figcaption></figcaption></figure>
2. Select the relevant dashboard.\
   The **Dashboard overview** appears.​<br>

   <figure><img src="/files/ogfRGuaMKgNb2fIquQMC" alt=""><figcaption></figcaption></figure>
3. Click ![](https://docs.finout.io/~gitbook/image?url=https%3A%2F%2Fdownloads.intercomcdn.eu%2Fi%2Fo%2Fwkjhtykk%2F27220013%2F2596ace3a79e6654c623359a8be0%2FAD_4nXf9RlJL9azncG45vGpLqK-lQjjVh_VLwz3OmhX-l3a1MlH36ErKskR-6es3lkBurBa76lhhBja8XlpeahzLclej-QgLuNn2pLwogRmkoo27RQOVQK_WWs00iVGOR3ngTCotlhDJ%3Fexpires%3D1732806000%26signature%3D989e5eb03949e7b7772a16b0ff9b3297a89f3f7f7addaabd0606a638ec2e4b66%26req%3D0tJtx1j6rTRk2hr889pg6oXGi4tNMLahSso6UokIDojkiEmp8KuSSMlXyFk%253D%250A\&width=300\&dpr=4\&quality=100\&sign=32a2e304\&sv=2)and then click **Dashboard Settings**. \
   The **Dashboard Settings** side-window appears.<br>

   <figure><img src="/files/hnu5ju2iH5YkV9efQkMF" alt=""><figcaption></figcaption></figure>
4. **Edit** the following fields:

   * **Dashboard Name**: Edit the name of your dashboard.

   * **Grid Layout Settings**: Configure the dashboard's horizontal and vertical scales to control how widgets fit within the dashboard layout.\
     \
     Horizontal Scale:

     * Spacious&#x20;
     * Standard
     * Compact

     Vertical Scale:

     * Compact
     * Standard

     <figure><img src="/files/uGOfetXM8rN42AK69d82" alt=""><figcaption></figcaption></figure>

   * **Dashboard Default Filters**\
     Define default values that will automatically apply when the dashboard loads.
     1. Click **Filters.**\
        ![](/files/bejXSjFi8X8F7EXcELVu)<br>
     2. Choose the values you want to set as the default in the dashboard and click **Apply Filters**.\
        ![](/files/vY5VgxKY3HrPZz2g0JWW)<br>
     3. Click **Save.**\
        The filters are saved to the dashboard and will appear whenever the dashboard is accessed.<br>

        <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can add additional filters while viewing a dashboard. However, when you exit and reopen the dashboard, only the default filters are retained. Any filters added during the session are not saved.</p></div>

   * **Default Timeframe and Interval**:
     * **Time Frame** (optional): Select a default timeframe for your dashboard.

       <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>​<strong>Note</strong>: Once saved, the chosen parameters will appear at the top of your dashboard.</p></div>

       <figure><img src="https://docs.finout.io/~gitbook/image?url=https%3A%2F%2Ffinout.intercom-attachments.eu%2Fi%2Fo%2F6520066%2Ffdeff2c1c8be05acc10573f7%2FFINR_J0oY5NGkwwcXr8do5Lhyxzb0D33gBFcGbrnGZV4Xof0KlCGStrX4Ymf0AEOTYpNOJGkI9YG48oEkWcHxeeNMz7N3AdODwOfXelVCN5bYZTGwVtZUk3d6cChTDjKow2vChtFqqczjwcHMi3DnwE%3Fexpires%3D1728804600%26signature%3Dd01a1930e84c1247ca42298422542529179ea911e4001a170389a8efb21c9c55%26req%3D1tBtxVj8qnsp0xr0v9tnpEyoNuePwgjW2ZaIF8zbqu8EFMZkxshJTCs%252BXyTf%250ApI6NOUHCG1%252Fm5Y4%253D%250A&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=6a4327ff&#x26;sv=2" alt=""><figcaption></figcaption></figure>
     * **Time Interval** (optional): Select a default time interval for all widgets on your dashboard. Once saved, the chosen parameters will appear at the top of your dashboard. ​

       <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>​<strong>Important</strong>: Implementing a dashboard-wide timeframe or interval will override the settings of individual widgets. When these changes are made, you'll receive an alert. A detailed filter overview will also be available to show which widget settings have been affected.</p></div>

   * [**ACL Permissions**](/cross-platform-features/list-of-cross-platform-features/acl-permissions)**:**

     You can set **read** and **write** permissions as either **Public**, **Private**, and **Shared**. Permission for an object is granted if a user or group has a role with the proper permission and also ACL permission to access the object. By default, ACL read and write permissions follow the account’s default configuration.

     <div align="left"><figure><img src="/files/aac29YmDU06saxps5FJt" alt=""><figcaption></figcaption></figure></div>

     * **Types of ACL Permissions:**

       * **Public:** Grants access to anyone in the organization that has Role-Based Access Control (RBAC).
         * **Private:** Restricts access to admins and the user who created the object.
           * **Shared:** Limits access to specific users or groups that have Role-Based Access Control (RBAC).&#x20;

             <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Admins and creators always retain access.</p></div>

       <div align="left"><figure><img src="/files/7MS3nN8ppMXCneSMykzm" alt=""><figcaption></figcaption></figure></div>

5.Click **Save**. \
Your settings are saved.

### Open Multiple Dashboards <a href="#h_b41fb8c87c" id="h_b41fb8c87c"></a>

{% hint style="info" %}
**Note**: This applies only to all dashboards.
{% endhint %}

You can open a dashboard in a new browser tab directly from the dashboards list.\
Right-click the dashboard and select **Open in New Tab**, or use:

* **Command + Click** on macOS
* **Ctrl + Click** on Windows or Linux

This allows you to compare multiple dashboards side by side or keep several dashboards open at the same time.

### Clone and Delete your Dashboard

{% hint style="info" %}
**Note**: You can only delete custom dashboards.
{% endhint %}

Under the Dashboard feature, you can access a list of your custom dashboards. You can clone or delete any custom dashboard. To do so, navigate to the dashboard list and click on the three dots for the dashboard you want to clone or delete.<br>

<figure><img src="/files/NjCKfaB9sBX5LHhHsll6" alt=""><figcaption></figcaption></figure>

#### **Add Widgets to your Custom Dashboard**

1. Click **Add Widget** at the top right of the screen.
2. Choose a widget for your dashboard from a list of available templates or recently saved widgets.\
   Choose from the following widgets:
   * [Cost and Usage](#h_bacda317de)
   * [Unit Economics](#h_9ed1e827e4)
   * [Text ](#h_668422585b)
   * [CostGuard ](#h_bf4f217448)
   * [Governance](#governance-widget)
   * [Financial Plan](#financial-plan-widget)
   * [Data Explorer](#data-explorer-widget)\
     \
     Go to the specific widget procedure to complete the dashboard setup.

#### Creating Reports for Dashboards

With Finout, you can set up daily, weekly, or monthly reports based on your dashboards. These reports can be conveniently delivered to your email or shared as Slack messages.

To create a report for a specific dashboard, simply navigate to the dashboard view and click on the **Subscribe** button. This will initiate the process of setting up a report specifically tailored to that dashboard.

1. Enter a **Report Name**.
2. Enter a **Report Description**.
3. Select a dashboard.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>:  </p><ul><li>You can only choose dashboards for which you have <a href="/pages/i7OqCE0PN5UuVmvMYLUJ">ACL </a>access.</li><li>ACL changes do not impact reports. They will continue to run even if access to the dashboard or its underlying objects is revoked.</li></ul></div>
4. In the **Choose an endpoint**, either select a Slack endpoint or enter an email address.
5. Select a **Report time frame** (Daily, Weekly, or Monthly) and the required number of days, weeks, or months.
6. Select the **Interval** (daily, weekly, or monthly). This defines how often the report will be sent.
   * For weekly, select the Day of the Week.
   * For monthly, select the Day of the Month.
7. Select the time to Send at and the Time Zone.
8. Click **Save Report**.

   <figure><img src="https://finout.intercom-attachments.eu/i/o/6520080/e6dc9f30b8f94fa18093e2da/g1VFiOQPWIB5sjzCIdaQmgDeqprBVzexKiM0meql4jZWL45hFk1yA3Mo0emV5UY_x6f6lp05vwiNyEICi-CnUNdBn9K1_SvazdzS_Q4KhktXbSf5jODUmgMzFYpbwT-QntsD2sgcebYYYImXl8_p1tc?expires=1728804600&#x26;signature=8b4bc6899af7254e083ada93070f36bf0cbcd2149b5c0eb0c9961e2760b6cdc7&#x26;req=1tBtxVjyrHsp0xr0v9tnpE7kVcctUfhYicf6mFzsaEdNVeRhu6HY2xJ8d2EU%0A" alt=""><figcaption></figcaption></figure>

#### Customize Predefined Dashboards

Predefined dashboards can’t be edited directly. To make changes, you’ll need to clone the dashboard and customize the duplicated version.

{% hint style="info" %}
**Note**:&#x20;

* Users with ACL restrictions and data access permissions may not see all data within a dashboard, even if they can access or clone it.
* In some cases, users may be unable to clone dashboards if all underlying data falls outside their permitted access.
  {% endhint %}

1. In Finout, navigate to **Dashboards**.<br>

   <figure><img src="/files/XMghDgNZN61tIZQya9DE" alt=""><figcaption></figcaption></figure>
2. Click ![](/files/m4sVMFviHLGAiyDuZnc4) and then click **Clone dashboard**.
3. Navigate to **All** or **Custom Dashboards** on the right side of Dashboards.<br>

   <figure><img src="/files/khmetEraQaz1Hghcnris" alt=""><figcaption></figcaption></figure>
4. Click on the **Copy** of the predefined dashboard and edit in order to fully customize the cloned dashboard.&#x20;

## **Widget Actions**

Customize your widgets to align with your specific goals by using built-in actions such as edit, duplicate, remove, and export. These options let you quickly adjust metrics, clone and repurpose existing widgets, clean up unused views, or share insights externally. Whether you're fine-tuning a dashboard for a team or highlighting key trends for reporting, widget customization ensures your data is presented clearly and effectively.

### **Edit a Widget**

{% hint style="info" %}
**Note:** This applies to Custom Dashboards.
{% endhint %}

1. Click on the three dots icon and click **Edit Widget.**

   You are brought to the widget builder.<br>

   <figure><img src="/files/OWYJkRQBgsq5Un8cPsxg" alt=""><figcaption></figcaption></figure>
2. Make the necessary changes.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>​<strong>Note</strong>: See the widget types section for all the widget options.</p></div>

### Edit a Widget Title

{% hint style="info" %}
**Note:** This applies to Custom Dashboards.
{% endhint %}

1. Go to the widget in the dashboard that you want to edit.

   <figure><img src="/files/FpMu4oDqnvBEkvaXzI8y" alt=""><figcaption></figcaption></figure>
2. Click in the title and make your changes.

### Duplicate a Widget

{% hint style="info" %}
**Note:** This applies to Custom Dashboards.
{% endhint %}

Click on the three dots icon to reveal a dropdown menu of options and select the **Duplicate Widget**.<br>

<figure><img src="/files/G05pGnzOcTqltpvxxkJL" alt=""><figcaption></figcaption></figure>

&#x20;      The widget is duplicated.

### **Copy Widget to Dashboard**

{% hint style="info" %}
**Note:** This applies to Custom Dashboards.
{% endhint %}

1. Click on the three dots icon. <br>

   <figure><img src="/files/xzorJnMUqcvKQRAIPjmU" alt=""><figcaption></figcaption></figure>
2. Select **Copy to dashboard.**<br>

   <div align="left"><figure><img src="/files/LYJ4kZ2eTG0adNDiPrh8" alt=""><figcaption></figcaption></figure></div>
3. Enter a **Widget name** and **Choose a dashboard** on which you want to add the copied widget.
4. Click **Copy Widget**.\
   The copied widget appears on the selected dashboard.<br>

### **Export a Widget to CSV**

{% hint style="info" %}
**Note:** This applies to Custom Dashboards.
{% endhint %}

Click on the three dots icon and select **Remove from dashboard.**<br>

<figure><img src="/files/okBnelCTGUkd67r7am1T" alt=""><figcaption></figcaption></figure>

&#x20;The widget is removed.

### Remove a Widget

{% hint style="info" %}
**Note:** This applies to Custom Dashboards.
{% endhint %}

Click on the three dots icon to reveal a dropdown menu of options and select **Remove from the dashboard**.

<figure><img src="/files/XSYw4Ju86XjeGNI0QeaM" alt=""><figcaption></figcaption></figure>

&#x20;     The widget is removed.

### Open a Widget in MegaBill

{% hint style="info" %}
**Note:** This applies to All Dashboards.
{% endhint %}

<figure><img src="https://finout.intercom-attachments.eu/i/o/6520071/c3afb4c0aaf9141ac7634221/V4jox4MWNeICDPxRqLXA42BL_XMq7m8m9z3cdNrqgvmqcwA8e7QBTCzseo7n9aNp0bQ4UKVBn3fG5T437jCp2y6SqEYWknIiyAi3GImUoqwttQtcS__t1SR1jRHy9wb22Cvts6Uia9GeOtyZ0RkReHo?expires=1728804600&#x26;signature=67fc85a28a081a389177f7508d29cfe32560e1f5bc6512c6f543b2a173b2d70e&#x26;req=1tBtxVj9rXsp0xr0v9tnpMieVhowxoEqbCBb94OYLQbEAaK4Br1rxcNP76sb%0AR1OXTGwwOob%2F9xM%3D%0A" alt=""><figcaption></figcaption></figure>


# Virtual Tags

## Overview <a href="#h_d2d1f5fc57" id="h_d2d1f5fc57"></a>

Managing and allocating native tagging systems from various cloud technologies can be complex and frustrating. Inconsistent tags across platforms, like an AWS resource labeled "Team A" corresponding to "Team Alpha" in Snowflake, lead to confusion and inefficiency. Additionally, native tagging lacks retroactive application, leaving historical data fragmented and obscured.

Finout's Virtual Tag feature addresses these challenges with a dynamic, real-time cost allocation solution. Virtual Tags offer a coherent and unified view, enabling the consolidation and analysis of costs across all cloud providers and services. Leveraging advanced filters allows you to segment your cost data into specific segments, creating a structured and comprehensive financial overview without modifying original resource labels. Tailored rules within each Virtual Tag refine cost visualization and management, streamlining how you manage your cloud spending.

A Virtual Tag acts like a funnel from the top down, and each rule further filters the data received after the preceding rule is run.

For example, with Virtual Tags, you can view the costs associated with logical categories:

* AWS and Kubernetes are used for different environments, such as development versus production.
* Snowflake queries for Data Team 1 versus Data Team 2.
* Snowflake, Kubernetes, and the cloud providers (such as AWS and GCP) for the Application, Backend, Data, and Analytics groups.
* You can even use Virtual Tags based on other Virtual Tags. So you can aggregate all Data Team's different Virtual Tags together to allocate the entire Data group cost.

{% hint style="info" %}
**Note:** Finout also supports *Relational Virtual Tags* that enable the breakdown of shared infrastructure costs across multiple dimensions from a single telemetry while preserving the relationships between them. See [Relational Virtual Tags](/user-guide/inform/virtual-tags/relational-virtual-tags) for more details.
{% endhint %}

#### **What is the structure of a virtual tag?**

<figure><img src="/files/p71ihbYx539jxYoGlgKJ" alt=""><figcaption></figcaption></figure>

* A **virtual tag** is made up of **rules**.&#x20;
* A **rule** defines a condition based on the **values** (#2) of a specific **key** (#1).
* This **rule** is then **allocated** to a **Custom value** or a **MegaBill key**(#3) .

#### Types of Virtual Tags

* [Custom Virtual Tags](/user-guide/inform/virtual-tags/custom-virtual-tags)
* [Finout Virtual Tags](/user-guide/inform/virtual-tags/finout-virtual-tags)
* [AI Virtual Tags](/user-guide/inform/virtual-tags/ai-virtual-tags-alpha)
* [Relational Virtual Tags](/user-guide/inform/virtual-tags/relational-virtual-tags)

#### Virtual Tag Shared Cost Reallocation

Building upon this foundation, Finout takes it a step further with the [Shared Cost Reallocation](/user-guide/inform/shared-cost-reallocation). The reallocation of Virtual Tags enhances the granularity of cost allocation, enabling a more refined reallocation of shared expenses. Finout’s Shared Cost Reallocation not only addresses the direct challenges of shared cost management but also promotes a deeper understanding of cloud expenditure patterns, allowing you to make more informed financial decisions and strategic planning.

{% hint style="info" %}
**Note:** Virtual tags with relocation are not available in the raw data.
{% endhint %}

Finout offers practical strategies for shared cost reallocation:

* [Telemetric based reallocation](/user-guide/inform/shared-cost-reallocation#h_c3d618efdd)
* [Customized cost reallocation](/user-guide/inform/shared-cost-reallocation#h_64d95edb9e)


# Custom Virtual Tags

Custom Virtual Tags in Finout enable you to model cloud spend the way your business actually thinks about it, rather than being constrained by how each provider structures its billing data. They act as a flexible semantic layer on top of your existing costs, so you can define rules that group spend by teams, products, environments, customers, or any other business dimension—across all clouds and services.

Using rule-based logic and filters, you can harmonize different naming conventions, unify cross-cloud metadata, and create a consistent view of ownership and responsibility. Once created, Custom Virtual Tags are available everywhere in Finout—MegaBill, dashboards, Cost Centers, and reports—so every widget and analysis reflects the same, business-aligned model of your cloud spend, making it easier to drive accountability, understand unit economics, and support smarter financial decisions.

## Create a Virtual Tag <a href="#h_7a4a4f8a04" id="h_7a4a4f8a04"></a>

1. In Finout, navigate to **Virtual Tags.** <br>

   <figure><img src="/files/8Hem70b6mJ4n8HftTiB4" alt=""><figcaption></figcaption></figure>
2. Click **Create New** and **Virtual Tag**.\
   ​The **Create virtual tag** page appears.<br>

   <figure><img src="/files/mT6DwuMADT74xSPRVtBe" alt=""><figcaption></figcaption></figure>
3. Name the **Virtual tag**.\
   ![](/files/G8789x7AUgGAPl8Ek9KQ)
4. You can optionally choose an endpoint to be notified about changes made to this virtual tag.<br>

   <figure><img src="/files/BKS8y7zMhfZBJ34SkDWp" alt=""><figcaption></figcaption></figure>
5. Create the rules for the Virtual Tags by setting **Where** conditions and corresponding **Then** actions.\
   This can be done through the **AI Virtual Tag Rule Builder** or **Manually.**<br>
   * **AI Virtual Tag Rule Builder (Alpha)**:

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> For more information, see the <a href="/pages/r3FX5mPukNjH1LtnpNKT">AI Virtual Tag Builder</a>.</p></div>

     1. In a virtual tag builder, click **Generate with AI** under a specific rule.\
        The free text-box appears.<br>

        <figure><img src="/files/yFQazhGItUmt8cKyJ7Ob" alt=""><figcaption></figcaption></figure>
     2. Write what you want the rule to be, for example "All regions in the US per team" and click <img src="/files/G0Rrk4mPwykJhfR3xNrT" alt="" data-size="line">.\
        The virtual tag rule is created.<br>

        <figure><img src="/files/F5mQsRBrx4PVLaDGG2mD" alt=""><figcaption></figcaption></figure>
     3. Continue to edit the virtual tag and click **Save**.
   * **Manual Rule Builder:**

     <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Important</strong>: The order of rules is crucial as it determines their priority. Rule 1 has the highest priority and is assessed first, with its tagging action overriding subsequent rules. Only if a resource does not meet Rule 1's conditions will it be evaluated against Rule 2, and so on.​</p></div>

     <figure><img src="/files/1RvlZJfDzExvBT6Bv8RT" alt=""><figcaption></figcaption></figure>

     * WHERE:
       1. Select any **cost center** from the [MegaBill](/user-guide/inform/megabill).
          1. Select a **filter key**.
             1. Select an **operator** (One Of, Not one of, Is, Is not, Contains, Not Contains, Exists, or Not exists).
             2. Depending on the operation, select or enter one or more **Filter values**.
             3. To add a further criterion to the rule, **click +**.
             4. Select **AND** or **OR**.
             5. Complete the **rule row** as described above.
             6. THEN: There are two options:
                1. Choose a **static value** for this portion of your infrastructure by choosing **Custom Value** and typing it into the text box.
                2. If you already have an appropriate allocation for this portion of your infrastructure in a cloud service provider tag, account name, or resource name, you can select that field using the MegaBill Key option to have those values populated for the Virtual Tag.​

                   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: when selecting a key from the MegaBill, the key’s values will appear in the MegaBill when filtering or grouping by the Virtual Tag.​</p></div>

                   ![](/files/3Vu2gB1p4A120quxI8OW)\
                   **Example** - Rule 1 includes: \
                   **Where conditions**: The rule is structured to evaluate resources across different cloud providers: AWS, GCP, Azure, and Kubernetes. It will trigger if a resource within these providers has specific tags or labels that match predefined values. For AWS and Azure, the rule triggers for resources with any chosen values in 'environment' tags. For GCP, the rule is triggered if the 'env' label is exactly 'production'. For Kubernetes, it checks against specified 'label\_environment' values. \
                   **Then outcome**: If a resource meets any of the 'Where' conditions, the 'Then' action tags it as 'Production'.<br>

                   <figure><img src="/files/2JUV01JnPHGSEsi9LyGP" alt=""><figcaption></figcaption></figure>
6. In a virtual tag builder, click **Generate with AI** under a specific rule.\
   The free text-box appears.<br>

   <figure><img src="/files/KrYZsp9aNeWLEbiyiG9b" alt=""><figcaption></figcaption></figure>
7. Write what you want the rule to be, for example "All regions in the US per team" and click <img src="/files/3Tn56TDuk1CvXrPRdMOk" alt="" data-size="line"> .\
   The virtual tag rule is created.<br>

   <figure><img src="/files/kry5W4kVgRnWTDrgkbem" alt=""><figcaption></figcaption></figure>
8. Continue to edit the virtual tag and click **Save**.
9. You can optionally **set a timeframe** for the virtual tag, allowing you to specify exact dates for the rule application.<br>

   <figure><img src="/files/cU9YfXPU3M32WkPgXutS" alt=""><figcaption></figcaption></figure>
10. Click **Add rule** to add additional rules as required.

    <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The number of rules allowed in a virtual tag is 50.</p></div>

    <br>

    <figure><img src="/files/6s3a5UKc189vjXJ7dZgy" alt=""><figcaption></figcaption></figure>
11. You can optionally **Set the value for the untagged cost** field for all unallocated costs not covered by any rules are aggregated under the tag value "untagged." You can enter a custom name for these untagged costs to generate a single value or choose a key from the MegaBill to generate multiple values simultaneously. This feature enables continuous enhancement of Virtual Tag coverage and the creation of rules to reduce untagged costs.<br>

    <figure><img src="/files/yGuswCgcjrLnBI4sXhID" alt=""><figcaption></figcaption></figure>
12. To see a preview, click **Preview Virtual Tag**. The virtual tag preview appears.<br>

    <figure><img src="/files/svGbJxHrHh5wDy2dr7Ky" alt=""><figcaption></figcaption></figure>

    <figure><img src="/files/f5UFqh194vnyOYgO51X8" alt=""><figcaption></figcaption></figure>
13. Click **Create Virtual Tag**.\
    The **Save version** modal appears.

<figure><img src="/files/uoFHCZ9yodN7e3v0qyDA" alt=""><figcaption></figcaption></figure>

* In the modal:
  * Optionally enter a **Change Description** to describe what this version includes. The limit is 280 characters.&#x20;
  * Review the **Mark as Live** checkbox (Beta):
    * **Checked (default)** — this version becomes the Live version. It is immediately active and available for filtering and grouping across Finout (MegaBill, dashboards, Reports, etc.).
    * **Unchecked** — a new version is created and saved to the version timeline, but the Live version does not change. Use this to stage a configuration without affecting other users.
  * Click **Save**.
* The virtual tag is created and appears in the Virtual Tags list.&#x20;

{% hint style="info" %}
**Note:**

* You cannot edit a Change Description after a version is created.
* The description limit is 280 characters.
* The Virtual Tag name and ACL permissions are not included in the version history.
  {% endhint %}

## Duplicate a Virtual Tag

1. Navigate to **Virtual Tags**.<br>

   <figure><img src="/files/7HUpGhQZeLtWY1IphT7v" alt=""><figcaption></figcaption></figure>
2. Click ![](/files/xe86c12Zlo0kN2vCb5rn) on the Virtual Tag you want to edit from the list and then click **Duplicate Virtual Tag**.\
   The virtual tag is duplicated.

{% hint style="info" %}
**Note**: Duplicating a Virtual Tag creates a copy of its *live* *version* only, not its *non-live* *versions*.
{% endhint %}

## Edit a Virtual Tag

1. Navigate to **Virtual Tags**.<br>

   <figure><img src="/files/kfPFvAZ1ffIt4E2jMaqP" alt=""><figcaption></figcaption></figure>
2. Click the ![](/files/xe86c12Zlo0kN2vCb5rn) on the Virtual Tag you want to edit from the list and then click **Edit Virtual Tag.**\
   The Edit virtual tag screen opens.
3. (Beta) When you open a Virtual Tag for editing, Finout loads the Live version by default. If no Live version exists, Finout loads the latest version in the list. To edit a different version, use the version dropdown at the top of the edit screen.

   <figure><img src="/files/dmwf9Awang1untrlkU4t" alt=""><figcaption></figcaption></figure>
4. Edit Virtual Tag rules: Click on the rule you want to change.
5. In the **Where** option, you can change the criteria using the **Filter keys** dropdown to select different filter types, such as tags or labels, and modify the logical operators as needed.
   * Adjust the cloud environments by selecting or deselecting them.
   * In the **Then** section, update the tag value that will be assigned when the rule's conditions are met.
   * Add or Delete Rules using the **+ Add rule button** to include new segmentation rules or the **–** button to remove an existing rule.

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The number of rules allowed in a virtual tag is  50.</p></div>
   * Adjust the rule order as desired using the **Move rule** function, which allows you to change their ranking, since the rules are applied from top to bottom.
6. Additional edits:
   * Adjust the time frame.
   * Edit the values for the untagged costs.
   * Set up notifications for changes.
7. Filter by conditions: Utilize the filter values dropdown options to narrow down your Virtual Tag based on specific chosen filters. This is particularly useful when the created Virtual Tag has many rules. Instead of manually searching for the specific item to edit within the Virtual Tag, you can use the filters option to drill down and easily find what you need to edit.

   Filter types:

   * Virtual Tag values: Filter based on the names assigned to the rule in the "Then" section.
   * Filter keys: Filter based on the keys chosen in your Virtual Tag.
   * Filter values: Filter based on the exact values that trigger the rule.
8. Click **Save**.\
   The **Save version** modal appears.

   <figure><img src="/files/MuvKKzStsXE9tQ7E0N3p" alt=""><figcaption></figcaption></figure>
9. In the modal:
   * Optionally enter a **Change Description**. You can add up to 280 characters. Change description cannot be added after saving.
   * Review the **Mark as Live** checkbox:
     * **Checked (default)** — this version becomes the Live version and goes live across all of Finout immediately.
     * **Unchecked** — the version is saved without affecting the current Live version.&#x20;
   * Click **Save**.\
     The Virtual Tag is updated.

{% hint style="info" %}
**Note:** To open a virtual tag that has saved versions that are not the current Live, Finout loads the Live version by default. You can select a version from the version history to base your edits on a previous configuration. This creates a new version (a copy of the selected version) that you can then save.
{% endhint %}

### View Version History

Each time a Virtual Tag is created or saved, a new version is added to the version timeline. You can optionally include a Change Description when saving. The Live version is the single active version visible and usable across the account. All other versions are available in the version history.

**To view version history:**

1. Navigate to **Virtual Tags**.
2. Click **⋮** on the Virtual Tag you want to inspect, then click **View version history**.\
   The **Version history** side panel opens.

   <figure><img src="/files/rtXwOAWdPA3YpemHLMcY" alt=""><figcaption></figcaption></figure>
3. View the versions in chronological order. The version marked **Live** is the currently active version used across Finout.
4. To filter versions by date, select a date range and apply it to the version history view.

{% hint style="info" %}
**Note:**

* For the Primary version, there is no retention limit.
* Virtual Tags are limited to 100 versions per tag and retain data for one year. If a 101st version is created, the oldest non-primary version is automatically deleted.&#x20;
  {% endhint %}

### Set a Version as Live (Beta)

Live version is the single active configuration that all users see across Finout. You can set any version as Live, including older ones.

{% hint style="info" %}
**Note:** Only users with **write** ACL permission on the virtual tag can set a version as Live. Admin users have write permission by default.&#x20;
{% endhint %}

**To set a version Live:**

1. Navigate to **Virtual Tags**.
2. Click **⋮** on the Virtual Tag and click **View version history**.\
   The **Version history** side panel opens.
3. Select the version you want to make Primary.
4. Click **Set as Live Version**.\
   ![](/files/4j1VnQJH7r4ZqtzuEy8Y)<br>
5. A confirmation modal appears. Optionally enter a **Change Description**.
6. Click **Set as Live**.\
   ![](/files/M2orulamAAibx0ycXvUY)\
   \
   The selected version becomes the Live version. All users with view access now see this configuration across Finout, and all objects relying on this Virtual Tag are updated accordingly.\
   The version history updates to show the newly Live version labeled **Live**.

### Delete Virtual Tags <a href="#h_b41fb8c87c" id="h_b41fb8c87c"></a>

1. Navigate to **Virtual Tags**.<br>

   <figure><img src="/files/0cRVydA0wCYZSSILNaiO" alt=""><figcaption></figcaption></figure>
2. Click ![](/files/xe86c12Zlo0kN2vCb5rn) on the Virtual Tag you want to edit from the list and then click **Delete Virtual Tag**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Deleting a virtual tag also deletes all versions.</p></div>

   <div align="left"><figure><img src="/files/cjfSibPobPwaxtyGVLQe" alt=""><figcaption></figcaption></figure></div>
3. Click **Delete**.\
   The virtual tag is deleted.

### Virtual Tag Settings  <a href="#h_b41fb8c87c" id="h_b41fb8c87c"></a>

1. Navigate to Virtual tags.

   <figure><img src="/files/nRgIsKKO6dHNxvyzvrdQ" alt=""><figcaption></figcaption></figure>

2. Click on a **Virtual Tag**.\
   The Edit virtual tag page appears.<br>

   <figure><img src="/files/fe5W52rGHhLdXMzu31R7" alt=""><figcaption></figcaption></figure>

3. Click ![](/files/0Nyr6fZfj03NePvyTD0c).\
   The Settings side window appears.<br>

   <figure><img src="/files/OKLHmyw3w7ta3B6UOGHn" alt=""><figcaption></figcaption></figure>

4. [**ACL permissions**](/cross-platform-features/list-of-cross-platform-features/acl-permissions):

   **Read** permissions are always public for virtual tags, but you can set **write** permissions as either **Public**, **Private**, and **Shared.** Permission for an object is granted if a user or group have a role with the proper permission and also ACL permission to access the object. By default, the write permissions are set according ot the account default, but users can change it to view or modify an object if they have Role-Based Access Control (RBAC)  to read or write the object.&#x20;

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> </p><ul><li>Virtual tags are always public for read purposes, allowing all users in the account to utilize them for filtering and grouping, as well as view their configuration. However, only users with the appropriate write ACL permissions can edit a virtual tag’s configuration.</li><li>Write access follows the account-level default but can be modified as needed. </li></ul></div>

   <br>

   <figure><img src="/files/BoyaGNMgDWDeKwNu6qFy" alt=""><figcaption></figcaption></figure>

   * **Types of ACL Permissions:**
     * **Public:** Grants access to anyone in the organization that has Role-Based Access Control (RBAC).
     * **Private:** Restricts access to admins and the user who created the object.
     * **Shared:** Limits access to specific users or groups that have Role-Based Access Control (RBAC).&#x20;

       <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Admins and creators always retain access.</p></div>

       <figure><img src="/files/x5QaqiLZ7g9vADMjX1NA" alt=""><figcaption></figcaption></figure>

5. Click **Save**.\
   ACL permissions are set.

### FAQs <a href="#h_b41fb8c87c" id="h_b41fb8c87c"></a>

**Can I restore a previous version?**\
Yes. Select any version in the version history and click **Set as Live**. The selected version's configuration is immediately Live across Finout.<br>

**Who can set a version as Live?**\
Only users with **write** ACL permission on the Virtual Tag can set a version as Live. Admin users have write permission by default. Users with read-only access cannot change the Live version.<br>

**How do I know if a Virtual Tag has no Primary version?**\
In the Virtual Tags list, Virtual Tags without a Live version show a note indicator in the Version column. Hovering over the note reveals: "There is no Primary version. This Virtual Tag is not available for filtering and grouping

![](/files/yabf6yTE3lRMZztJDJCY)<br>

**Can a Virtual Tag have no Live version?**\
Yes. If you save a version without checking **Set as Live**, or if no version has ever been set to Live, the Virtual Tag exists in the system but has no active configuration. It will not be available for filtering or grouping across Finout until a version is set as Live.


# Finout Virtual Tags

## Overview

Finout Virtual Tags give you an out-of-the-box way to slice and analyze your cloud costs without building complex rules from scratch. Based on Finout’s FOCUS cost model, these predefined tags normalize core dimensions like provider, service, region, charge category, and pricing type, creating a consistent cross-cloud structure from day one. When a new account is created, Finout automatically adds this curated set of tags—along with additional FinOps-oriented views such as AI spend or efficiency indicators—so you can start analyzing your data immediately across all CSPs using a unified, business-ready taxonomy.

This configuration is shown in read-only mode, but you can clone any Finout virtual tag into your Custom Virtual Tags to change the logic for your specific needs. This provides a fast starting point with standardized, Finout-maintained definitions for common scenarios, offering the flexibility to adapt them to your organization’s data model and governance policies.

## Predefined Virtual Tag Types

<table><thead><tr><th width="367">Virtual Tag Name</th><th>Description</th></tr></thead><tbody><tr><td><mark style="color:green;"><strong>AI</strong></mark></td><td></td></tr><tr><td>Model Name</td><td>See <a href="https://docs.finout.io/user-guide/inform/virtual-tags/finout-virtual-tags/canonical-ai-taxonomy">Canonical AI Taxonomy</a> for details.</td></tr><tr><td>Model Family</td><td>See <a href="https://docs.finout.io/user-guide/inform/virtual-tags/finout-virtual-tags/canonical-ai-taxonomy">Canonical AI Taxonomy</a> for details.</td></tr><tr><td>Model Brand</td><td>See <a href="https://docs.finout.io/user-guide/inform/virtual-tags/finout-virtual-tags/canonical-ai-taxonomy">Canonical AI Taxonomy</a> for details.</td></tr><tr><td>Model Channel</td><td>See <a href="https://docs.finout.io/user-guide/inform/virtual-tags/finout-virtual-tags/canonical-ai-taxonomy">Canonical AI Taxonomy</a> for details.</td></tr><tr><td>Model Lifecycle</td><td>See <a href="https://docs.finout.io/user-guide/inform/virtual-tags/finout-virtual-tags/canonical-ai-taxonomy">Canonical AI Taxonomy</a> for details.</td></tr><tr><td>[Beta] Token Type</td><td>See <a href="https://docs.finout.io/user-guide/inform/virtual-tags/finout-virtual-tags/canonical-ai-taxonomy">Canonical AI Taxonomy</a> for details.</td></tr><tr><td><mark style="color:green;"><strong>Focus</strong></mark></td><td></td></tr><tr><td>FOCUS/Sub Account ID</td><td>Exposes the provider-assigned identifier of a sub-account (such as an account, subscription, or project), so you can group, analyze, and allocate costs by your organizational structure.</td></tr><tr><td>FOCUS/Sub Account Name</td><td>Exposes the provider-assigned name of a sub-account (such as an account, subscription, or project), allowing you to easily identify, group, and analyze costs using readable organizational names.</td></tr><tr><td>FOCUS/Provider</td><td>Shows which provider supplies the resource or service (for example, a cloud vendor or SaaS provider), making it easy to filter and report on costs by provider.</td></tr><tr><td>FOCUS/Service Name</td><td>Displays the name of the purchased service or offering (such as a cloud VM service, managed database, or professional services), helping you analyze cost trends over time and focus investigations on specific services.</td></tr><tr><td>FOCUS/Region</td><td>Surfaces the provider’s display name for the geographic location where a resource runs or a service is delivered, so you can compare costs and unit prices based on where workloads are deployed.</td></tr><tr><td>FOCUS/Resource ID</td><td>Shows the provider-assigned identifier of an individual resource (such as an instance ID, database ID, or bucket), enabling detailed cost reporting, analysis, and allocation at the asset level.</td></tr><tr><td>FOCUS/Charge Category</td><td>Classifies each charge at a high level based on how it is billed (for example, usage, fees, support, or adjustments), helping you distinguish between different types of charges that may need different handling.</td></tr><tr><td>FOCUS/Service Category</td><td>Groups each billing line item into a high-level service category aligned with the FOCUS standard (such as Compute, Storage, Networking, or Database) across AWS, GCP, Azure, and Oracle Cloud, making it easy to analyze spend patterns across providers without mapping provider-specific SKUs yourself.</td></tr><tr><td><mark style="color:green;"><strong>Global</strong></mark></td><td></td></tr><tr><td>Extended Support</td><td>Classifies billing line items that incur Extended Support charges - i.e., fees for running end-of-life versions of managed services such as AWS RDS, EKS, ElastiCache, OpenSearch, or GCP Cloud SQL. Use to track and reduce avoidable extended support costs.</td></tr><tr><td>Marketplace Spend</td><td>Classifies billing line items originating from cloud marketplace purchases (AWS Marketplace, Azure Marketplace, GCP Marketplace). Use to separate third-party software and service spend from native infrastructure costs.</td></tr><tr><td>Taggable Spend</td><td>Classifies billing line items that are eligible for native resource tagging - i.e., usage charges with an associated resource ID. Non-taggable rows (support, tax, credits, commitments) are excluded. Use to measure and improve tag governance coverage.</td></tr></tbody></table>

## Duplicate Finout Virtual Tags for Customization <a href="#customize-predefined-dashboards" id="customize-predefined-dashboards"></a>

Finout virtual tags can’t be edited directly. To make changes, you’ll need to duplicate the virtual tag and edit the duplicated version.

{% hint style="info" %}
**Note**: Any future changes made to the original Finout Virtual Tag will **not** be applied to your duplicated version.
{% endhint %}

1. In Finout, navigate to **Virtual Tags**.<br>

   <figure><img src="/files/K6OG70FiTEDy4fwfllJT" alt=""><figcaption></figcaption></figure>
2. Click the **Finout Virtual Tags** tab.<br>

   <figure><img src="/files/1y0WvwBvqwzNGbn4CVEu" alt=""><figcaption></figcaption></figure>
3. Click ![](https://docs.finout.io/~gitbook/image?url=https%3A%2F%2F3858159242-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FWqjB2puKXPDR7L86FX2e%252Fuploads%252FuCPzMsQJNoMBmE25eInw%252Fimage.png%3Falt%3Dmedia%26token%3D89aacbcd-d585-4ff0-8d76-7472074afdd0\&width=300\&dpr=4\&quality=100\&sign=72b5676e\&sv=2) and then click **Duplicate to edit**.\
   The virtual tag is duplicated.
4. Navigate to **All** or **Custom Virtual Tags**.<br>

   <figure><img src="/files/NbxMkKJjMOVIj0rKZi5O" alt=""><figcaption></figcaption></figure>
5. Click the Copy of the virtual tag to edit and customize the duplicated virtual tag. See [Edit Custom Virtual Tags](#h_c1128142c3) for more information.

## FAQs

**What are Finout virtual tags?**\
Finout Virtual Tags are out-of-the-box predefined virtual tags created and maintained by Finout. They provide ready-made dimensions for common analysis scenarios, so you can start slicing and querying your data in MegaBill without defining complex tagging rules yourself.

**How can I use Finout predefined virtual tags?**

You can use Finout’s virtual tags like any other dimension to include or exclude costs, break down spend, and build consistent cross-cloud views. They’re available anywhere you filter or group data, and appear under the **Global** tab in filter and group-by

**Are predefined virtual tags automatically available in every account?**\
Yes. When a new Finout account is created, all predefined virtual tags are added automatically and appear under the **Finout Virtual Tags** tab on the Virtual Tags page. As you onboard Cost Centers, you can immediately use these tags in MegaBill and other views, and the results will reflect only the data from Cost Centers that are actually connected.

**Can I edit or change a predefined virtual tag directly?**\
No. Predefined virtual tags are read-only. You can open them to review their rules and configuration, but you can’t modify them in place. If you need to adjust the logic, clone the Finout Virtual Tag to create a Custom Virtual Tag, and then edit that copy.

**Can predefined virtual tags break if some billing fields or keys are missing?**\
No. The tag itself doesn’t break, but the output may be partial or empty. Predefined virtual tags only return data for records that match their rules. If specific Cost Centers are missing the fields or values that those rules rely on, those costs won’t appear in that tagged view.

**Do predefined virtual tags show data for all my clouds and Cost Centers automatically?**\
No. Predefined virtual tags only surface data from Cost Centers that have been onboarded and contain matching records. If a tag references a provider or service that isn’t connected, you’ll either see partial data or no data at all in the table or graph.


# Canonical AI Taxonomy

Predefined Virtual Tags for LLM spend — what each tag normalizes, how values are determined, and which LLM sources are covered.

### Overview

Every LLM provider — AWS Bedrock, Azure Foundry, OpenAI, Anthropic, and others — structures its billing data differently, uses its own model identifiers, and embeds model information in usage description strings rather than exposing it as a dedicated field. The same model accessed through two different cost centers can appear under completely different identifiers in raw billing data, making cross-cost-center analysis difficult without manual mapping.

To address this, Finout provides a set of predefined [Virtual Tags](https://docs.finout.io/user-guide/inform/virtual-tags/finout-virtual-tags) that normalize this data into a consistent taxonomy. They parse model information from each cost center's billing data and surface it as filterable tags — so you can analyze LLM spend across all your cost centers.

These Virtual Tags are maintained and updated by Finout.

### **Where to find the tags:**

To use these Virtual Tags, navigate to **Global** and select the **Finout Virtual Tags** tab. The tags are available automatically — no configuration required.

<figure><img src="/files/zdniXBgtKHL1OWlsPD4n" alt=""><figcaption></figcaption></figure>

### Supported Cost Centers

These Virtual Tags apply to the following CSPs and SaaS providers:

* AWS
* GCP
* Azure
* Anthropic
* OpenAI
* Cursor

LLM spend from cost centers not listed above will not be tagged.

### Virtual Tag Definitions

#### `Model Brand`

The product brand under which a model is marketed, independent of the cost center through which it is accessed.

A single brand can appear across multiple cost centers. Claude, for example, is available through Anthropic, Bedrock, and Bedrock Marketplace — Model Brand normalizes all of these under `Claude`, so you can see total brand-level spend regardless of procurement path.

**Example values:** `Claude` · `GPT` · `Gemini` · `Llama` · `Mistral` · `Cohere` · `Nova`

#### `Model Family`

Groups model variants under a shared generational line, regardless of version date or minor iteration.

Where `Model Name` identifies the specific version, `Model Family` identifies the line it belongs to. This makes it useful for tracking spend trends across a model generation and understanding how spend shifts between generations over time.

**Examples:**

| Model Name          | Model Family   |
| ------------------- | -------------- |
| `GPT-4o 2024-11-20` | `GPT-4o`       |
| `Claude Haiku 4.5`  | `Claude Haiku` |
| `Gemini 2.5 Pro`    | `Gemini Pro`   |

If a model doesn't include a distinct generational variant (e.g., GPT-5), then the `Model Family` will default to either the `Model Name` or the `Model Brand`.

#### `Model Name`

The normalized model identifier — a consistent, human-readable name for the specific model version being used.

**Why normalization is needed:** Many cost centers do not expose model name as a standalone field. Instead, it appears embedded in usage description strings, SKU names, or resource identifiers, formatted according to each cost center's own conventions. A single model can appear as `USE1-Llama3-8B-output-tokens` in one cost center and `Llama3-8B` in another. `Model Name` parses each cost center's billing data and produces a consistent identifier across all cost centers.

**What a canonical model name includes:**

* The model family name and variant (e.g. `GPT-4o`, `Claude Sonnet`)
* A version date or iteration where the provider includes it (e.g. `GPT-4o 2024-11-20`, `Claude Haiku 4.5`)
* Parameter count where it is part of the model's identity (e.g. `Llama 3.3 70B`)

**What it does not include:**

* Cost center specific prefixes or suffixes (e.g. region codes, token type labels, edition names)
* Modality identifiers — text, image, and speech variants of the same model are not distinguished

**Examples:**

| Raw billing string                          | Model Name          |
| ------------------------------------------- | ------------------- |
| `gpt 4o 1120 Inp regnl Tokens`              | `GPT-4o 2024-11-20` |
| `USE1-Llama3-8B-output-tokens`              | `Llama 3 8B`        |
| `Claude Haiku 4.5 (Amazon Bedrock Edition)` | `Claude Haiku 4.5`  |

#### `Model Channel`

Identifies the billing path through which a model is accessed — the cost center or integration through which the spend is flowing.

A single model can be accessed through multiple cost centers, each with different pricing, contract terms, and billing structures. `Model Channel` makes this visible, so you can compare spend on the same model across procurement paths and understand where your LLM budget is actually going.

**Example values:** `Bedrock` · `Bedrock Marketplace` · `Anthropic` · `OpenAI` · `AI Foundry` · `Vertex AI` · `Gemini API`&#x20;

#### `Model Lifecycle`

Indicates the current operational status of a model based on provider documentation.

**Lifecycle states:**

| State          | Definition                                                                                                                                                                                                                                                         |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Current**    | The most recently released model in a given family. Recommended for new and ongoing production workloads.                                                                                                                                                          |
| **Legacy**     | A model that has been superseded by a newer version but has not yet been formally sunset by the provider. Still callable, still supported, but no longer the recommended option for new workloads.                                                                 |
| **Deprecated** | The provider has issued a formal end-of-life or end-of-support announcement for the model. Still accessible until its EOL date, but at risk of pricing increases, feature lockouts (no new fine-tunes, no new Provisioned Throughput), until the eventual removal. |
| **Unknown**    | All data from before December 31st, 2025                                                                                                                                                                                                                           |

**How status is determined:** Finout monitors official provider documentation and deprecation notices to assign lifecycle status. `Current` reflects the most recently released model in a given family. `Deprecated` reflects a formal provider announcement of EOL or end-of-support. `Legacy` covers everything in between — models that have been superseded but have not yet been formally sunset.

`Model Lifecycle` is a point-in-time representation based on provider documentation at the time of last update.

&#x20;**For Example:**

MegaBill grouped by `Model Lifecycle`, showing the split between Deprecated, Current, and Legacy model spend over time.

<figure><img src="/files/Q0BHJGMKIE8xNQ0tyyGa" alt=""><figcaption></figcaption></figure>

#### **Worked example table:**

A raw AWS Bedrock cost line — `Claude Opus 4.7 (Amazon Bedrock Edition)` — is automatically classified as:

| Tag               | Value             |
| ----------------- | ----------------- |
| `Model Name`      | `Claude Opus 4.7` |
| `Model Family`    | `Claude Opus`     |
| `Model Brand`     | `Claude`          |
| `Model Channel`   | `Bedrock`         |
| `Model Lifecycle` | `Legacy`          |

#### `[Beta] Token Type`

Classifies each cost line by the type of token usage it represents — the consumption dimension of the charge, rather than the identity of the model.

Where `Model Name`, `Model Family`, and `Model Brand` identify which model a charge belongs to, `Token Type` identifies how that model was consumed on each line. LLM providers bill different token operations at different rates — a token read from cache costs a fraction of a fresh input token, while a token written to cache can cost more than one. This tag makes that breakdown visible, so you can analyze where token spend concentrates and how caching affects your bill. It is most useful grouped alongside `Model Name`, which pairs each model with its usage breakdown.

**Values:**

| Value             | Definition                                                                                                                             |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| **Input Tokens**  | Uncached input tokens — the prompt tokens processed fresh, without a cache hit. The standard input charge.                             |
| **Output Tokens** | Tokens generated by the model in its response.                                                                                         |
| **Cache Read**    | Input tokens served from a prompt cache on a cache hit, billed at the provider's discounted cached-input rate.                         |
| **Cache Write**   | Input tokens written to a prompt cache so they can be reused by later requests. Billed only by providers that charge for cache writes. |

**Why normalization is needed:** Each cost center labels these operations differently in its billing data. A cache read appears as `cache-read-input-token-count` in one cost center, `Cache Hit Input Tokens` in another, and an abbreviated string such as `cd inp` in a third. `Token Type` parses each cost center's own conventions and maps them to a consistent set of values.

**Classification is based on provider-stated billing data, not inference.** `Token Type` assigns a value only when the token type is explicitly identifiable from the cost center's billing data. Where the token type cannot be determined from what the provider reports, the line item is left untagged rather than assigned an inferred value.

**Examples:**

| Raw billing string                                                | Model Token Type |
| ----------------------------------------------------------------- | ---------------- |
| `USE1-Claude-Sonnet-4-5-cache-read-input-token-count`             | `Cache Read`     |
| `Claude Sonnet 4.6 — Input Cache Write Tokens (TTL 3600 seconds)` | `Cache Write`    |
| `gpt 4o 1120 Inp regnl Tokens`                                    | `Input Tokens`   |
| `Gemini 2.5 Pro Text Output - Predictions`                        | `Output Tokens`  |

{% hint style="info" %}
**Cache support varies by provider.** Not every provider exposes every token type. Some bill cache writes as standard input rather than as a separate charge, so no `Cache Write` value appears for those models — only `Cache Read`. Two provider families use automatic (implicit) caching and do not support explicit cache control: Gemini 2.5 and above, and GPT-4o through GPT-5.5.
{% endhint %}

**Cursor is not covered by the** `Token Type` Vtag. While Cursor is supported by the other Model Virtual Tags, its billing data does not expose token type as a distinguishable dimension, so Cursor spend is not classified by `Token Type`. It remains tagged by `Model Name`, `Model Family`, `Model Brand`, and `Model Lifecycle`.

### Virtual Tag Use Cases

**Identifying deprecated spend by cost center:** Filter by `Model Lifecycle = Deprecated`, then group by `Model Channel`. This shows you not just how much you're spending on sunset models, but which procurement paths that spend is flowing through — so you know where to target migration effort.

**Total LLM spend by brand, across all cost centers:** Group by `Model Brand`. This gives you a cost center agnostic view of which AI brands are driving spend — useful for vendor consolidation decisions and negotiating volume agreements.

**Tracking spend distribution across model families:** Group by `Model Family` and view over a rolling period. This surfaces how spend is distributed across families within the same brand — for example, whether Claude spend is concentrated in Sonnet, split across Sonnet and Haiku, or still carrying Opus usage.

**Catching cross-channel pricing arbitrage**: Group by Model Name and by Model Channel. The same Claude Sonnet 4.5 model accessed via Bedrock, Anthropic, and Bedrock Marketplace will appear in three rows — letting you see whether you're paying different rates for the same model across procurement paths.

**Understanding caching efficiency for a model:** Group by `Token Type` and filter to a single `Model Name`. This shows the split between fresh input, cache reads, and cache writes for that model — so you can see whether a workload is benefiting from prompt caching or paying repeatedly for uncached input.

### FAQ

**Why is some of my LLM-related spend not tagged?** Not all LLM-related charges are model invocation costs. Only model invocation charges are tagged — supporting charges such as AWS Bedrock Guardrails, AI agent runtime, and tool-use fees are not.

**Can I see text, image, and speech costs separately?** No. Modality is not separated — text, image, speech, and embedding usage of the same model are not distinguished by these Virtual Tags. All invocation types roll up under the same Model Name, Family, Brand, and Lifecycle values.

**Why is spend from one of my cost centers not showing up?** These Virtual Tags only apply to the cost centers listed in [Supported Cost Centers](#supported-cost-centers). Any LLM spend flowing through a cost center not on that list will not be tagged.

**Why doesn't a model's lifecycle status reflect a recent deprecation announcement?** Lifecycle status is determined by official provider documentation. Lifecycle tags will be updated to reflect new provider deprecations within a time period of 2 weeks from the official announcement.

**What if I disagree with how a model is classified?** Lifecycle status is based on the provider's official documentation, not Finout's judgment. If you believe a model is misclassified, contact Finout support at <support@finout.io> with the model name and the provider documentation URL

**Can I customize or override these tags?** No. Predefined Virtual Tags are maintained centrally by Finout and cannot be edited on a per-account basis. To classify spend by your own logic, create a custom Virtual Tag that derives from these predefined ones.

**Why is some of my historical spend marked as "Unknown" under Model Lifecycle?**\
To maintain data integrity and taxonomy accuracy, all LLM spend data incurred prior to December 31st, 2025, is automatically classified with an `Unknown` lifecycle status.

**Why do some models have no `Cache Write` value?** Not all providers charge for writing to cache. Where a provider bills cache writes as standard input — or does not expose them as a distinct charge — those tokens are counted as `Input Tokens`, and no `Cache Write` value appears for that model. `Cache Write` only appears for providers that meter cache writes as a separate line item.

**Is cache storage included in `Token Type`?** No. Some providers bill a separate time-based cache storage charge (for example, per token-hour of cached content held). Storage is not a token-processing operation and is not one of the four token types, so these charges are left untagged. Only per-request token usage is classified.

<br>


# AI Virtual Tags (Alpha)

## Overview

AI Virtual Tags scan names, labels, namespaces, accounts, projects, and metadata across your connected systems and turn them into clear, explainable allocation rules. You approve, tweak, or extend the rules in one click, and every line item—past and future - is instantly allocated to the right team, product, or environment. What used to take weeks of tagging projects now takes minutes.

FinOps teams spend months writing tagging policies, chasing engineers, and rebuilding allocation models every time the org changes. AI Virtual Tags flip this model: they learn from your real usage and organizational data, auto-generate hundreds of Virtual Tag rules, and keep your allocation aligned with how the business is actually structured. You stop wrestling with tags and spreadsheets, and start making decisions on fully allocated, trustworthy cost data.

{% hint style="info" %}
**Note**: AI never uses customer data for model training, and all processing stays securely isolated within your workspace.
{% endhint %}

* **Automated Cost Allocation**:
  * Replaces manual tagging projects with AI-generated Virtual Tag rules.
  * Handles edge cases with an AI Rule Builder -  describe the change in plain language and Finout generates the rule for you.
* **Real-Time Allocation**:
  * Approved rules apply instantly and retroactively to historical spend.
  * Every new line item is allocated the moment it hits your bill - no batch jobs, no overnight pipelines.
  * Change logic or ownership and see allocation updates immediately.
* **Clear, Explainable AI**:
  * AI proposes Virtual Tag rules based on real usage patterns across names, labels, namespaces, accounts, projects, and metadata.
  * You can approve, edit, or reject suggestions individually or in bulk.
  * Every rule is transparent and auditable, so Finance and Engineering can trust the numbers.
* **Automatic, End-to-End Coverage for Every Bill**:
  * Connect AWS, GCP, Azure, and other cloud bills—no agents, no tagging projects.
  * Ingest Kubernetes usage down to cluster, namespace, and workload level.
  * Bring in Snowflake, Datadog, and other SaaS and data tools, plus internal chargeback data and custom sources.
  * Achieve near-100% allocation across all providers from day one.

#### **Prerequisites**

AI in Finout requires two prerequisites:

1. **Admin:** An Admin must [opt in to AI Services](/cross-platform-features/list-of-cross-platform-features/ai-in-finout/ai-opt-in) for the workspace.
   * Performed in **Settings → Compliance & Privacy → AI Services**. See AI Opt in for more information.
   * Opt-in to enable AI capabilities across the entire account.
   * Recorded in the audit log.\
     AI Opt-In - Finout Docs
2. **User: An Admin must enable** [**AI permissions** ](/settings/role-based-access-control-rbac)
   * Certain AI-powered features require feature-specific activation for your users.
   * Admins maintain full control over enabling and disabling these capabilities.

## Create an AI Virtual Tag&#x20;

1. In Finout, navigate to **Virtual Tags**.

   <figure><img src="/files/3Q9WKaIx8OFAVnqdKn8i" alt=""><figcaption></figcaption></figure>
2. Click **Create New** and then **AI Virtual Tag.** \
   The **Choose Virtual Tag Category** step appears.<br>

   <figure><img src="/files/kjqf2A8YSrpl8ZV6rga3" alt=""><figcaption></figcaption></figure>
3. Select a **Category** and then click **Generate Virtual Tag**.<br>

   <figure><img src="/files/KAbjpLHXyGbutQp0Bs5x" alt=""><figcaption></figcaption></figure>
4. Review the AI-generated virtual tag, make any desired changes, and then click **Save**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can also <a href="#create-an-ai-virtual-tag-rule">create an AI virtual tag rule</a>.</p></div>

   \
   **Result**: The AI virtual tag is created and appears in the list of virtual tags. Once the AI virtual tag is created, it behaves like any other virtual tag and can be [managed](/user-guide/inform/virtual-tags/custom-virtual-tags#h_c1128142c3) in the same way.<br>

   <figure><img src="/files/vO0mivMLTLtovg1o7sgy" alt=""><figcaption></figcaption></figure>

## Create an AI Virtual Tag Rule

This can be used for an **existing virtual tag** or a **new virtual tag**.

<figure><img src="/files/2XqUWTcWfX0BzUxECbHR" alt=""><figcaption></figcaption></figure>

1. In a virtual tag, click **Generate with AI** under a specific rule.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: This can be used for any <strong>new virtual tag</strong> or <strong>existing virtual tag</strong>.</p></div>

   The free text-box appears.<br>

   <figure><img src="/files/yFQazhGItUmt8cKyJ7Ob" alt=""><figcaption></figcaption></figure>
2. Write what you want the rule to be, for example "All regions in the US per team" and click <img src="/files/G0Rrk4mPwykJhfR3xNrT" alt="" data-size="line">.\
   The virtual tag rule is created.<br>

   <figure><img src="/files/F5mQsRBrx4PVLaDGG2mD" alt=""><figcaption></figcaption></figure>
3. Continue to create or edit the virtual tag and click **Save**.

## FAQs

**Which Virtual Tag categories are supported?**\
The current version supports a closed list of categories: **Environment, Application, Team, and Customer.**

**What data does Base Virtual Tag Assist use to build virtual tags?**\
The feature utilizes only native keys from your cost data. It does not use existing Virtual Tags as inputs.

**Can I change or remove the suggested rules?**\
Yes. You can edit individual rules, reorder them by priority, and remove any irrelevant rules before finalizing the Virtual Tag.


# Relational Virtual Tags

## **Overview**

Relational Virtual Tag enables the breakdown of shared infrastructure costs across multiple dimensions from a single telemetry while preserving the relationships between them.&#x20;

Imagine your company is managing cloud costs through Finout’s MegaBill. The company uses various shared infrastructures, such as Airflow, which runs on shared cloud instances and runs tasks which can serve multiple teams, applications and workflows. Since resources like EC2 instances are not tied to a single team or workflow, accurately allocating costs becomes challenging.

With Relational Virtual Tags, you can establish connections between multiple attributes—such as Airflow's DAG ID, Team, and Environment—ensuring that costs are properly allocated while maintaining the relationships between these attributes. This advanced tagging method provides deeper insights into shared infrastructure usage and cost allocation.

## Challenges and Solutions

#### **Let's start with a simple story...**

Meet the Miller family. They track their household expenses and bills meticulously, and electricity usage is no exception. Mike relies on Finout’s MegaBill to monitor costs and consumption, which provides him with the family’s total electricity bill and usage.&#x20;

<figure><img src="/files/z4rDeWUVgi5bvLgHLX4y" alt="" width="447"><figcaption></figcaption></figure>

One day, he noticed that their electricity costs were steadily increasing, even though their consumption habits hadn’t noticeably changed. Curious to uncover the cause, Mike began digging deeper into the data.

**Electricity Usage per Room**

Mike set up a telemetry and used Virtual Tag Reallocation to break down electricity usage by room. The results were revealing as the kitchen was the biggest consumer of electricity.

<figure><img src="/files/f5wIqfKSqt5B9pfdGsZ9" alt=""><figcaption></figcaption></figure>

**Electricity Usage per Device in the Kitchen**&#x20;

This information was insufficient to pinpoint the root cause of the high costs. Mike decided to analyze the electricity consumption of each kitchen appliance. His findings showed that the dishwasher was the biggest consumer of electricity.

<figure><img src="/files/fUd3wzMibI4JnagexmIo" alt="" width="540"><figcaption></figcaption></figure>

**Electricity Usage for the Dishwasher per Household Member**

This was still not enough to pinpoint what caused the spike in the dishwasher's electric cost.\
He installed a motion sensor to monitor the household members’ interactions with the dishwasher and integrated this new data into his analysis.  The results were surprising as Olivia, his daughter, was responsible for the highest dishwasher usage.<br>

<figure><img src="/files/Hm65pDpx0OAbXQ5CXAjx" alt=""><figcaption></figcaption></figure>

This family's story reflects the challenges companies face when trying to break down shared cloud infrastructure costs across multiple dimensions. It highlights how deeper data analysis and segmentation can reveal hidden cost drivers.&#x20;

**What is the Challenge with Virtual Tag Reallocation?**

* **Complex and Manual Process:**\
  Breaking down costs across multiple dimensions is possible today, but it requires a lot of manual effort. Users must create multiple virtual tags, starting from the lowest level (Household Member → Device → Room).
* **Virtual Tag Reallocation cannot preserve relationships between dimensions:**
  * You *can* determine electricity usage by device.&#x20;
  * You *can* determine electricity usage by household member.
  * But *you can’t* determine the electricity usage of each device by each household member.\
    \
    **For Example:** \
    Let's assume that the dishwasher's electricity cost is $40. \
    Breaking it down by household member would assign random costs because regular virtual tags lack the ability to preserve the relationship between the device (the dishwasher) and its usage by each household member, making it difficult to identify the precise sources of cost discrepancies.

<figure><img src="/files/IJZeoF66egxhA8PUJPCF" alt=""><figcaption></figcaption></figure>

#### Let's talk about cloud...

Imagine a company is using AWS to manage its cloud costs through Finout’s MegaBill. This company relies on a shared infrastructure, such as **Airflow**, which operates on cloud instances (like EC2 in AWS) to manage tasks, run DAGs, and store metadata.&#x20;

Airflow, like Mike’s electricity bill, is a shared resource that requires careful allocation across multiple workflows (DAGs), teams, and developers. The challenge lies in accurately breaking down and reallocating these shared infrastructure costs.&#x20;

One day, the company noticed an increase in Airflow costs and needed to pinpoint the source, just as Mike used data to understand the drivers of his electricity usage.

<figure><img src="/files/aJzVKfAUH5en2PULhZsR" alt=""><figcaption></figcaption></figure>

**This is where the Relational Virtual Tag solution comes in!**

Relational Virtual Tags Enables:

* **Streamlined Setup and Efficiency:**\
  Relational Virtual Tags replace the manual creation of multiple virtual tags with a single, unified configuration that uses one telemetry to build all the necessary building blocks to break down a shared infrastructure cost.
* **Dynamic Cost Allocation and Relationship Preservation:**\
  Relational Virtual Tags maintain relationships between dimensions (e.g., team, workflow, developer) and enable dynamic, proportional cost reallocation. This prevents inaccurate cost assignments, improves financial transparency, and provides deeper insights for more informed decision-making and better cost management.

**For example:**\
The company has two teams - "Data" and "App".&#x20;

The company wants to determine the cost of each DAG for the App team. They aim to break down the total cost of the App team by DAG ID for better visibility and allocation.

This is the company's telemetry:

<figure><img src="/files/sdZul0Wn4AG5n6KAj4MQ" alt=""><figcaption></figcaption></figure>

The company created a relational virtual tag, and now they filter by team “App” and group by “DAG\_ID.”&#x20;

Let’s assume that the App team cost is $100. The breakdown would be as follows:

<figure><img src="/files/uwhGfwkav4vOoxtlxTnh" alt="" width="434"><figcaption></figcaption></figure>

By leveraging Relational Virtual Tags, the company transformed a seemingly unmanageable rise in shared infrastructure costs into clear, actionable data. This deeper level of visibility empowered the company to identify inefficiencies, distribute costs fairly across teams, and optimize their use of shared resources—just as Mike did with his electricity bill.

## Use Cases

#### **Spark: Break Down Costs by Query and Project**

Spark costs are often lumped together in shared infrastructure, making attributing expenses to **specific queries** or **projects** difficult. Without proper tracking, teams struggle to pinpoint cost drivers. **Relational Virtual Tags** solve this by linking queries to projects, enabling precise cost reallocation.

***

#### **RDS: Break Down Costs by Database Name, Environment, and Team**

RDS instances are shared across multiple **databases**, **environments**, and **teams**, making it hard to distribute costs accurately. Without visibility, production, staging, and development usage may be misallocated. **Relational Virtual Tags** create structured relationships, ensuring fair cost distribution across Database Names, Environments, and Teams.

***

#### **ClickHouse: Break Down Costs by Query Type, Cluster, and Application**

ClickHouse workloads are distributed across multiple **query types**, **clusters**, and **applications**, making it challenging to track and allocate costs accurately. Without a structured breakdown, teams struggle to optimize resource usage and manage expenses efficiently. **Relational Virtual Tags** preserve the relationships between these dimensions, ensuring cost allocation across Query Type, Cluster, and Application.

## Create a Relational Virtual Tag

{% hint style="success" %}
**Prerequisite**: A telemetry must be set up before Relational Virtual Tag configuration.
{% endhint %}

**To create a relational virtual tag:**

1. In Finout, navigate to **Virtual Tags**.<br>

   <figure><img src="/files/qm6U3FdI26buosnsyslR" alt=""><figcaption></figcaption></figure>
2. Click **Create New** and then **Relational Virtual Tag**.\
   The **Create Relational Virtual Tag** step appears.<br>

   <figure><img src="/files/nkpgeEzg9OKCWvE5VFmL" alt=""><figcaption></figcaption></figure>
3. Add a name.<br>

   <div align="left"><figure><img src="/files/w847vap8AXu5oUmXnU2w" alt=""><figcaption></figcaption></figure></div>
4. Under **Cost Filter Selection**, select from the following:<br>

   <figure><img src="/files/ljv2xqQ0lvIzsjLfO3Mk" alt=""><figcaption></figcaption></figure>

   1. **Cloud service:**\
      ![](/files/HIiE9Hy6IZ3l2S2cVAUM)<br>
   2. **Key type:**<br>

      <div align="left"><figure><img src="/files/NL5DmG0D5psQTJUO9CI3" alt=""><figcaption></figcaption></figure></div>
   3. **Operator:**\
      ![](/files/CkUosWpT9nh7QpiqNBOc)<br>
   4. **Values:**\
      ![](/files/hMBZWVAeGgLox9pmXYHS)<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Click <img src="/files/4J99LhtBmtFWZtW7YwRG" alt=""> to add another filter.</p></div>
5. Select your **Telemetry-Based Reallocation.**<br>

   <figure><img src="/files/xORZ4wljmaWHsuFZadjb" alt=""><figcaption></figcaption></figure>

   1. **Select a Telemetry:**\
      ![](/files/g8QQRMUUWPBPWFu6CrCv)
   2. **Pick the Allocation Keys:**\
      Choose the Allocation Keys from your selected telemetry. This will allow for the segmenting of the Telemetry data and the calculation of the relevant ratio based on the keys and values.<br>

      <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Relational virtual tags support cost reallocation based on relationships across up to 10 keys.</p></div>

      <figure><img src="/files/TJnjz5YCXDkaZIoNUD3f" alt=""><figcaption></figcaption></figure>
   3. **Select Telemetry filters:**<br>

      <figure><img src="/files/wGG4zcOdbzzO3cvPMrsy" alt=""><figcaption></figcaption></figure>
6. **Preview** the Relational Virtual Tag.\
   You can simulate the graph preview by choosing a group-by and filters.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: By default, the first selected key is displayed in the preview, but this can be edited.</p></div>

   <br>

   <figure><img src="/files/xNPeowi3KgS9QIUkZ8ww" alt=""><figcaption></figcaption></figure>
7. Click **Save**.\
   The relational virtual tag is created.

**Result**: \
You can view your Relational Virtual Tag keys and values in the MegaBill filters component, just like any other keys and values.<br>

<div align="center"><figure><img src="/files/q7lgiaW63NKnK1aBDEOr" alt=""><figcaption></figcaption></figure></div>

\
Let's go back to the [house and electricity bills example](#challenges-and-solutions). Here's how the Relational Virtual Tag configuration would be set up:

<figure><img src="/files/lre8n3OpxVVf3SwOBvrc" alt=""><figcaption></figcaption></figure>

## Limitations

* When using Relational Virtual Tag keys or values in MegaBill or any Finout object, you can only filter or group by keys and values from the same Relational Virtual Tag or a connected Virtual Tag.
* A Relational Virtual Tag can handle up to 50,000 unique values, with any additional values automatically grouped under “Others.”
* You can create an unlimited number of relational virtual tags.&#x20;
* Each relational virtual tag can break down the cost of a single infrastructure (single cost rule).

## FAQs

**How is a Relational Virtual Tag different from a Virtual Tag with telemetry-based reallocation?**

Unlike Virtual Tag Reallocation, which allocates costs based on a single key from a single telemetry, Relational Virtual Tags support multiple key allocations (up to 10) while preserving the relationships between them.

**What happens if I try to group by a Relational Virtual Tag and an unrelated tag?**

Grouping by a Relational Virtual Tag while filtering by an unrelated tag (e.g., Airflow DAG ID with an AWS Region) is not supported.

**Can I create a Relational Virtual Tag via API?**

No, Relational Virtual Tags cannot be created through the Finout API.

**Is there a limit on the number of unique values a Relational Virtual Tag can handle?**

There is a limit: The system supports up to 50,000 unique values, with any additional values grouped under “Others.”

**Can I change a Virtual Tag and convert it to a Relational Virtual Tag?**

No, you need to create a new Relational Virtual Tag.


# Virtual Tag Sync

## **Overview**

Organizations often manage their own internal structure of services, teams, or environments using spreadsheets, internal platforms, or databases. Keeping this structure aligned with cloud cost data can be time-consuming and error-prone.\
Finout’s **Virtual Tag Sync** solves this by enabling you to streamline cost allocation by automatically aligning your Finout Virtual Tags with your internal business structure. By syncing daily from your designated Service Catalog file, this feature ensures that changes in your organization are reflected in cost allocations—eliminating manual tagging, maintaining data integrity, and enabling accurate, timely reporting, chargebacks, and anomaly routing.

## Service Catalog File Structure&#x20;

To successfully integrate the Virtual Tag Sync, you must ensure that your Service Catalog follows the required file structure:

#### File Example:

<div align="left"><figure><img src="/files/WJ587oZGdpaFfCPXpDA0" alt=""><figcaption></figcaption></figure></div>

#### **File Structure:**

* *First Column - Source Column Configuration*:\
  This column defines the source values that match your existing Finout data.<br>

  1\) ***Source Key*** -The column header in your file (`e.g., Application`). This represents the name of the MegaBill key you're using for allocation. &#x20;

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> This does not need to match a MegaBiil key name in Finout, only the key values are necessary to match for configuration.</p></div>

  \
  2\) ***Source Key Values*** - The values listed under the header (`e.g., App1, App2`) must exactly match the values in MegaBill.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note :</strong> If a value does not match, it will not be allocated to the destination custom tag and will instead appear as "<em>Untagged</em>."</p></div>
* *Second Column - Destination Column Configuration*:\
  This column defines the custom tags assigned to each corresponding source value.\
  \
  3\) ***Destination Custom Value*** - The values listed in this column (`e.g., TeamA`) represent the  custom tags that should be associated with each key value from the source column. Each row links a source key value (from the first column) to a destination custom tag, which will be applied in Finout as part of the Virtual Tag configuration. <br>

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> Destination tags do not need to pre-exist in Finout, they will be created or updated based on the created file.</p></div>
* *Third Column - Metadata Endpoints (Optional)*: (Coming Soon)\
  This column defines the metadata endpoint that is assigned each key value from the source column.<br>

  4\) **Metadata Endpoint ID** (Optional)- This column specifies the unique IDs (e.g., 123abc) of metadata endpoints to be associated with each value in the destination column. This ensures that features using these endpoints route messages to the correct communication channels—such as Slack, Email, Jira, Microsoft Teams, or ServiceNow—based on the defined destination. Each destination value can be linked up to 10 metadata endpoint IDs. These endpoints IDs are generated by Finout which can be retrieved via the [Finout API](/api/finout-api/finout-api-v1/endpoint-api-v1).

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong>  If the endpoint doesn't exist or doesn't match, there will be no endpoint assigned to that destination value. Ensure that the metadata endpoint values are a Finout ID and not the URL channel.</p></div>

#### **How is this applied in Finout?**

The file provides the configuration to build the virtual tag in the following way:

<figure><img src="/files/r98TKRjwiUFCuQOExIyQ" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**: For more information on virtual tags and how they are structured, see our [Virtual Tag documentation](/user-guide/inform/virtual-tags#h_d2d1f5fc57).
{% endhint %}

## Example Scenarios

#### Scenario 1

You want to create a virtual tag using the following information:

<figure><img src="/files/xTMAgiE7gbPj2JkG3XYi" alt=""><figcaption></figcaption></figure>

After sharing your service catalog file with Finout, the virtual tag is automatically created in the following way:

* The **Source Key > Application** with the values  "App1", and "App2" are allocated to **TeamA**.&#x20;
* The **Source Key > Application** with the values  "App3" and "App4" are allocated  to **TeamB**.\
  \
  *This is how it appears in the virtual tag configuration* :<br>

  <figure><img src="/files/CyF9YULc4QUZ4Wlg1SjF" alt=""><figcaption></figcaption></figure>

  *This is how it appears in MegaBill* :<br>

  <figure><img src="/files/jArsvQRdOzzfmeLrVBcD" alt=""><figcaption></figcaption></figure>

#### Scenario 2

The following day the the service catalog file is updated (e.g., App3 has been moved to TeamA) and the changes are automatically applied to the virtual tag.<br>

<figure><img src="/files/O2DXjSg7QMyc4Aoc3KT2" alt=""><figcaption></figcaption></figure>

* The **Source Key > Application** with the values "App1", "App2", and "App3" are allocated to **TeamA**.&#x20;
* The **Source Key > Application** with the value "App4" is allocated to **TeamB**.\
  \
  *This is how it appears in the virtual tag configuration* :<br>

  <figure><img src="/files/5152cqrwZAmgHkz13FSA" alt=""><figcaption></figcaption></figure>

  *This is how it appears in MegaBill* :<br>

  <figure><img src="/files/0nFHOkdy5qEujYaoCamY" alt=""><figcaption></figcaption></figure>

## Setting up a Virtual Tag Sync

1. Create a service catalog file with all the virtual tags that you want to create.&#x20;

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: To learn how to format the Service Catalog file, see <a href="#service-catalog-file-structure">Service Catalog File Structure</a>.</p></div>
2. Upload the file to a designated storage source.
3. Contact your customer success representative and send the following information in a secure way:
   * S3 Access Details:
     * IAM Role ARN
     * Bucket name and prefix
   * The Service Catalog File

**What happens next?**\
Once the Virtual Tag Sync is configured, Finout automatically processes the service catalog file daily and updates the virtual tags for use across the platform.

## FAQs

**Can I allocate a source column to multiple cost centers?**

The source column in the service catalog file must be associated with a single cost center type. If you need to allocate costs across multiple types, such as AWS, GCP, or Virtual Tags, you’ll need to first merge them into a single Virtual Tag.&#x20;

**Do the values of the source column in the service catalog file need to exactly match my MegaBill key data?**

Yes, partial or fuzzy matches won’t be allocated to the specified value; it will appear as an “*Untagged* ” value in Finout.

**What happens if a value in my cost data doesn’t appear in the uploaded file?**

Any unmatched value will automatically be marked as "*Untagged* ".

**Will updates to my service catalog file affect historical data?**&#x20;

Yes, previous versions of your service catalog file are not stored or preserved, as there is no historical data versioning. Finout always uses the most recent version of the file, and updates are applied dynamically, meaning the latest version of your catalog file is always used.

**What file formats can be uploaded?**

Currently, only parquet files are supported for service catalog uploads. \
\
**What storage platform is supported for hosting service catalog files?**

Currently, only AWS S3 is supported for hosting service catalog files.&#x20;

**Can I access the updated cost data via API after new virtual tags are applied?**

Yes, it functions like any regular virtual tag in Finout—once created, the updated cost data becomes available through the API. Simply [generate an API token](/api/finout-api/generate-an-api-token) in Finout to securely integrate the latest cost allocation information into your workflows.

**What happens if I have more than 1,000 rules in my Virtual Tag sync file?**

Finout currently supports a maximum of 1,000 rules per Virtual Tag sync configuration.\
If your sync file contains more than 1,000 rules, the Virtual Tag sync will not be processed. To ensure successful synchronization, please reduce the number of rules to 1,000 or less.


# Manage Virtual Tags

Managing Virtual Tags allows you to edit, delete, and duplicate virtual tags to better organize and optimize your cloud cost allocation in Finout.

### Edit Custom Virtual Tags <a href="#h_c1128142c3" id="h_c1128142c3"></a>

{% hint style="info" %}
**Note**: You can only edit custom virtual tags.
{% endhint %}

1. Navigate to **Virtual Tags**.

   <figure><img src="/files/pN4PGr86XmGnJKq9sqS1" alt=""><figcaption></figcaption></figure>
2. Click the ![](/files/xe86c12Zlo0kN2vCb5rn) on the Virtual Tag you want to edit from the list and then click **Edit Virtual Tag.**\
   The Edit virtual tag screen opens.
3. (Beta) When you open a Virtual Tag for editing, Finout loads the Live version by default. If no Live version exists, Finout loads the latest version in the list. To edit a different version, use the version dropdown at the top of the edit screen.

   <figure><img src="/files/dmwf9Awang1untrlkU4t" alt=""><figcaption></figcaption></figure>
4. Edit Virtual Tag rules: Click on the rule you want to change.
5. In the **Where** option, you can change the criteria using the **Filter keys** dropdown to select different filter types, such as tags or labels, and modify the logical operators as needed.
   * Adjust the cloud environments by selecting or deselecting them.
   * In the **Then** section, update the tag value that will be assigned when the rule's conditions are met.
   * Add or Delete Rules using the **+ Add rule button** to include new segmentation rules or the **–** button to remove an existing rule.

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The number of rules allowed in a virtual tag is  50.</p></div>
   * Adjust the rule order as desired using the **Move rule** function, which allows you to change their ranking, since the rules are applied from top to bottom.
6. Additional edits:
   * Adjust the time frame.
   * Edit the values for the untagged costs.
   * Set up notifications for changes.
7. Filter by conditions: Utilize the filter values dropdown options to narrow down your Virtual Tag based on specific chosen filters. This is particularly useful when the created Virtual Tag has many rules. Instead of manually searching for the specific item to edit within the Virtual Tag, you can use the filters option to drill down and easily find what you need to edit.

   Filter types:

   * Virtual Tag values: Filter based on the names assigned to the rule in the "Then" section.
   * Filter keys: Filter based on the keys chosen in your Virtual Tag.
   * Filter values: Filter based on the exact values that trigger the rule.
8. Click **Save**.\
   The **Save version** modal appears.

   <figure><img src="/files/MuvKKzStsXE9tQ7E0N3p" alt=""><figcaption></figcaption></figure>
9. In the modal:
   * Optionally enter a **Change Description**. You can add up to 280 characters. Change description cannot be added after saving.
   * Review the **Mark as Live** checkbox:
     * **Checked (default)** — this version becomes the Live version and goes live across all of Finout immediately.
     * **Unchecked** — the version is saved without affecting the current Live version.&#x20;
   * Click **Save**.\
     The Virtual Tag is updated.

{% hint style="info" %}
**Note:** To open a virtual tag that has saved versions that are not the current Live, Finout loads the Live version by default. You can select a version from the version history to base your edits on a previous configuration. This creates a new version (a copy of the selected version) that you can then save.
{% endhint %}

### Delete Custom Virtual Tags <a href="#h_b41fb8c87c" id="h_b41fb8c87c"></a>

{% hint style="info" %}
**Note**: You can only delete custom virtual tags.
{% endhint %}

1. Navigate to **Virtual Tags**.

   <figure><img src="/files/R6PzGm0r8Q9QUVyzTomy" alt=""><figcaption></figcaption></figure>
2. Click ![](/files/xe86c12Zlo0kN2vCb5rn) on the Virtual Tag you want to edit from the list and then click **Delete Virtual Tag**.<br>

   <div align="left"><figure><img src="/files/cjfSibPobPwaxtyGVLQe" alt=""><figcaption></figcaption></figure></div>
3. Click **Delete**.\
   The virtual tag is deleted.

### Duplicate Custom Virtual Tags <a href="#h_b41fb8c87c" id="h_b41fb8c87c"></a>

1. Navigate to **Virtual Tags**.

   <div align="left"><figure><img src="/files/LhX3BqQ8zK8vKson4FHb" alt=""><figcaption></figcaption></figure></div>
2. Click ![](/files/xe86c12Zlo0kN2vCb5rn) on the Virtual Tag you want to edit from the list and then click **Duplicate Virtual Tag**.\
   The virtual tag is duplicated.

### Duplicate Finout Virtual Tags for Customization <a href="#customize-predefined-dashboards" id="customize-predefined-dashboards"></a>

Finout virtual tags can’t be edited directly. To make changes, you’ll need to duplicate the virtual tag and edit the duplicated version.

{% hint style="info" %}
**Note**: Any future changes made to the original Finout Virtual Tag will **not** be applied to your duplicated version.
{% endhint %}

1. In Finout, navigate to **Virtual Tags**.<br>

   <figure><img src="/files/K6OG70FiTEDy4fwfllJT" alt=""><figcaption></figcaption></figure>
2. Click the **Finout Virtual Tags** tab.<br>

   <figure><img src="/files/1y0WvwBvqwzNGbn4CVEu" alt=""><figcaption></figcaption></figure>
3. Click ![](https://docs.finout.io/~gitbook/image?url=https%3A%2F%2F3858159242-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FWqjB2puKXPDR7L86FX2e%252Fuploads%252FuCPzMsQJNoMBmE25eInw%252Fimage.png%3Falt%3Dmedia%26token%3D89aacbcd-d585-4ff0-8d76-7472074afdd0\&width=300\&dpr=4\&quality=100\&sign=72b5676e\&sv=2) and then click **Duplicate to edit**.\
   The virtual tag is duplicated.
4. Navigate to **All** or **Custom Virtual Tags**.<br>

   <figure><img src="/files/NbxMkKJjMOVIj0rKZi5O" alt=""><figcaption></figcaption></figure>
5. Click the Copy of the virtual tag to edit and customize the duplicated virtual tag. See [Edit Custom Virtual Tags](#h_c1128142c3) for more information.

### Open Multiple Virtual Tags <a href="#h_b41fb8c87c" id="h_b41fb8c87c"></a>

{% hint style="info" %}
**Note**: This applies only to all virtual tags.
{% endhint %}

You can open a virtual tags in a new browser tab directly from the virtual tags list.\
Right-click the virtual tags and select **Open in New Tab**, or use:

* **Command + Click** on macOS
* **Ctrl + Click** on Windows or Linux

This allows you to compare multiple virtual tags side by side or keep several virtual tags open at the same time.

### Virtual Tag Settings  <a href="#h_b41fb8c87c" id="h_b41fb8c87c"></a>

{% hint style="info" %}
**Note**: This applies only to custom virtual tags.
{% endhint %}

1. Navigate to Virtual tags.<br>

   <figure><img src="/files/MzXG6wWdoXJ5tZZ1OCh7" alt=""><figcaption></figcaption></figure>
2. Click ![](/files/xe86c12Zlo0kN2vCb5rn) on the Virtual Tag you want to set ACL permissions and then click **Virtual Tag Settings**.\
   The Settings side window opens.<br>

   <figure><img src="/files/OKLHmyw3w7ta3B6UOGHn" alt=""><figcaption></figcaption></figure>
3. [**ACL permissions**](/cross-platform-features/list-of-cross-platform-features/acl-permissions):

   **Read** permissions are always public for virtual tags, but you can set **write** permissions as either **Public**, **Private**, and **Shared.** Permission for an object is granted if a user or group have a role with the proper permission and also ACL permission to access the object. By default, the write permissions are set according ot the account default, but users can change it to view or modify an object if they have Role-Based Access Control (RBAC)  to read or write the object.&#x20;

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note:</strong> </p><ul><li>Virtual tags are always public for read purposes, allowing all users in the account to utilize them for filtering and grouping, as well as view their configuration. However, only users with the appropriate write ACL permissions can edit a virtual tag’s configuration.</li><li>Write access follows the account-level default but can be modified as needed. </li></ul></div>

   <br>

   <figure><img src="/files/BoyaGNMgDWDeKwNu6qFy" alt=""><figcaption></figcaption></figure>

   * **Types of ACL Permissions:**
     * **Public:** Grants access to anyone in the organization that has Role-Based Access Control (RBAC).
     * **Private:** Restricts access to admins and the user who created the object.
     * **Shared:** Limits access to specific users or groups that have Role-Based Access Control (RBAC).&#x20;

       <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Admins and creators always retain access.</p></div>

       <figure><img src="/files/x5QaqiLZ7g9vADMjX1NA" alt=""><figcaption></figcaption></figure>


# Dictionary Virtual Tags

### Overview

[Virtual Tags](https://docs.finout.io/user-guide/inform/virtual-tags) let you allocate and classify cloud costs using rule-based conditions. Dictionary Virtual Tags take a different approach: instead of writing rules, you supply an external mapping file that maps source values directly to destination values in a one-to-one relationship.

This is designed for situations where the number of distinct values is too large to manage through manual rules — such as mapping thousands of application IDs to application names, or mapping email addresses to squads or cost centers. Finout reads the mapping file from your S3 bucket daily, so any updates you make to the file are automatically reflected without any configuration changes on your end.

**When to use Dictionary Virtual Tags:**

* You need to map a high-cardinality dimension (hundreds or thousands of values) to a human-readable label.
* Your mapping data already lives in a system of record that can export a CSV file.
* Your mapping changes periodically and you want Finout to stay in sync automatically.
* You need time-bounded mapping — where the same source value maps to a different destination depending on the date.

{% hint style="info" %}
**Note:** Each dictionary Virtual Tag is a strict one-to-one mapping. A single source value maps to exactly one destination value. If you need to map values from multiple dimensions (e.g., AWS Account ID and GCP Project ID), first combine them into a single [Custom Virtual Tag](https://docs.finout.io/user-guide/inform/virtual-tags/custom-virtual-tags), then use that Virtual Tag as the source dimension for your dictionary.
{% endhint %}

### How It Works

You provide a CSV mapping file stored in an S3 bucket. Finout reads the file daily through a [Read Only Amazon S3 Bucket Endpoint](https://docs.finout.io/settings/endpoints/amazon-s3-bucket-endpoint) and derives a Virtual Tag from the mappings defined in the file. The tag is then available for filtering and grouping across MegaBill and all reporting surfaces just like any other Virtual Tag.

If you upload an updated version of the file to the same S3 prefix, Finout automatically picks up the latest file on the next daily sync.

### Prerequisites

Before setting up a Dictionary Virtual Tag, make sure you have:

* An S3 bucket in your AWS account where you can store the mapping file
* Permission to create an IAM role and inline policy in that AWS account
* A mapping file prepared in the required format detailed below

### Setup

#### Step 1 — Create the Mapping File

Prepare a CSV file that defines how each source value maps to a destination value.

**File Format**

* Only CSV files are supported. Finout will not process files in any other format.&#x20;
* The file must use the following column headers exactly as shown. Headers are case-sensitive.

**Standard mapping**

Use this when each source value always maps to the same destination:

| Source  | Destination |
| ------- | ----------- |
| value-a | Label A     |
| value-b | Label B     |

**Time-bounded mapping**

Use this when a source value should map to different destinations depending on the date:

| Source  | Destination | From       | To         |
| ------- | ----------- | ---------- | ---------- |
| value-a | Label A     | 2024-01-01 | 2024-06-30 |
| value-a | Label B     | 2024-07-01 |            |

{% hint style="info" %}
**Column details:**

* `Source` — the value as it appears in your MegaBill dimension. Must be an exact match; partial or fuzzy values will appear as *Untagged*.
* `Destination` — the label Finout assigns when the source value matches.
* `From` — the start date for this mapping row (inclusive). Required when using time-bounded mapping.
* `To` — the end date for this mapping row (inclusive). Leave empty if the mapping has no upper limit and should apply indefinitely from the `From` date.
  {% endhint %}

**Date Format**

The date formats listed below are supported. Use a consistent format throughout the file and include the format you used when contacting support in Step 4 — Finout configures the mapping based on the format you specify.

* `YYYY-MM-DD`
* `MM/DD/YYYY`
* `DD/MM/YYYY`

**File Size & Validations**

* The file size limit is **500,000 rows**.
* Overlapping date ranges for the same source value are not permitted and will cause validation to fail.
* If time-bounded mapping is enabled, every row must have a `From` date. Rows with a missing `From` date will fail validation.

#### Step 2 — Upload the Mapping File to S3

Upload your CSV file to an S3 bucket in your AWS account. Keep the following in mind:

* **Use a dedicated prefix for each mapping file.** For example: `s3://your-bucket/dictionary/email-to-squad/`.&#x20;
* Each dictionary Virtual Tag reads from a single **S3 prefix**. For updates, you can either replace the mapping file with a new version or upload an additional file if preferred. In the case of multiple files, Finout will read the one that was recently modified.

{% hint style="warning" %}
**Each dictionary requires its own S3 endpoint — not just its own prefix.** The most recently modified file from whatever path it's scoped to is being processed daily, so two dictionaries cannot share a single endpoint even if their mapping files live in different subfolders of the same bucket.
{% endhint %}

If you need multiple dictionaries (e.g., email-to-squad and email-to-cost-center), create a dedicated a dedicated prefix for each one, and register each prefix as its own separate S3 endpoint in Finout (see Step 3 below).

#### Step 3 — Create an S3 Endpoint in Finout

Finout connects to your S3 bucket through a Read Only Amazon S3 Bucket Endpoint. Follow the [Amazon S3 Bucket Endpoint guide](https://docs.finout.io/settings/endpoints/amazon-s3-bucket-endpoint) to create one, making sure to select **Read Only** under Bucket Access.

Set **S3 Path Prefix** to the exact dedicated prefix you created in Step 2 (e.g., `dictionary/email-to-squad/`).&#x20;

If you have more than one dictionary, repeat this step to create a **separate endpoint per dictionary**, each with its own matching prefix.

Give the endpoint a clear, descriptive name — you will reference it by name when contacting support in Step 4.

<figure><img src="/files/zoJi1kn67US0vBFUn02z" alt=""><figcaption></figcaption></figure>

#### Step 4 — Contact Finout Support to Complete Setup

Once the mapping file is in place and the S3 endpoint is created, contact your customer success manager or email <support@finout.io> with the following information:

| Detail                   | Description                                                                                                           |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| **S3 Endpoint Name**     | The name you gave the endpoint in Step 3                                                                              |
| **File Name**            | The exact name of your CSV file (e.g., `dict_email_to_squad.csv`)                                                     |
| **Date Format**          | The date format used in your `From` / `To` columns (e.g., `YYYY-MM-DD`) — only required if using time-bounded mapping |
| **Time-Bounded Mapping** | Whether your file includes `From` / `To` columns (`Yes` or `No`)                                                      |

Finout will configure the Dictionary Virtual Tag on your account and notify you when it is ready.

### Result

Once configured, the Dictionary Virtual Tag appears in your Virtual Tags list and is immediately available for filtering and grouping across MegaBill and all reporting surfaces. Values from the `Destination` column become the tag values. Any source value not present in the mapping file appears as *Untagged.*

### FAQs

**How often does Finout sync the mapping file?**

Finout processes the file once per day. In the prefix includes a single file, Finout will reingest based on modification date. In case of multiple files in the prefix, a single file will be ingested, based on the modiciation date as well.&#x20;

**What happens if a source value in my cost data is not in the mapping file?**

It appears as *Untagged* in Finout.

**Can I have multiple dictionary Virtual Tags for the same account?**

Yes. Each dictionary Virtual Tag maps to one file in one S3 prefix. Create a separate file, prefix, and dictionary Virtual Tag configuration for each mapping you need.

**Can I map a source value to multiple different destinations?**

No. Each dictionary Virtual Tag has a single `Source` column and a single `Destination` column — one mapping per file. If you need the same source dimension to produce multiple different destination tags (for example, AppSpace ID → Team and AppSpace ID → Cost Center), create a separate mapping file and a separate dictionary Virtual Tag for each. Each file should live in its own dedicated S3 prefix:

```
your-bucket/dictionary/appspace-to-team/mapping.csv
your-bucket/dictionary/appspace-to-costcenter/mapping.csv
```

**Can I use a Virtual Tag as the source dimension for a dictionary?**

Yes. Finout supports Virtual Tags as source values in a mapping file, in addition to native MegaBill dimensions. This is useful when you need to combine multiple dimensions — for example, merging AWS Account ID and GCP Project ID into a single Virtual Tag and then building a dictionary on top of it.

**What happens if my mapping file fails validation?**

The previous version of the mapping file remains active, and your Virtual Tag continues to serve values from the last successful file. Finout will notify you of any validation errors.

**What do I do if a row has a `To` date but no `From` date?**

Rows with a `To` date but no `From` date will fail validation. When using time-bounded mapping, every row must include a `From` date. The `To` date is optional — leave it empty if the mapping should apply indefinitely.


# Data Explorer

## Data Explorer Overview <a href="#h_012e1775d1" id="h_012e1775d1"></a>

Data Explorer is a reporting tool for building multi-dimensional cost and usage reports. You define which measurements you want (cost, usage, counts) and which dimensions to break them down by and Data Explorer aggregates the underlying billing records into a table you can read on a daily, weekly, or monthly interval.

Use Data Explorer when a [MegaBill view](https://docs.finout.io/user-guide/inform/megabill#views) or a [dashboard widget](https://docs.finout.io/user-guide/inform/finops-dashboards/custom-dashboards) doesn't give you the row-level shape you need — for example, when you want a single table that combines several dimensions, applies a specific aggregation function, or surfaces resource-level metrics like running hours or object counts.

**Use cases**

Data Explorer fits scenarios such as:

* Breaking down costs by Resource ID, with filters for usage type, product family, or service.
* Tracking sub-service usage like S3 storage or NAT Gateway, measured in hours or gigabytes.
* Surfacing untagged data to guide your tagging strategy and improve cost allocation coverage.

**Measurements vs. Dimensions**

**Measurements** - Numerical values or quantitative data used to represent a particular aspect of the analyzed data. These can include numbers such as cost types, and usage.

**Dimensions** - Categories or classifications that help organize and group related measurements. These can include the service type, region, or any tags. Dimensions provide context to the measurements and allow for deeper analysis and understanding of the data. Dimensions affect the level of detail in the view.

## Creating a New Data Explorer

1. Navigate to **Data Explorer** in the navigation bar on the left side of the console.

<figure><img src="/files/fiULv7vmdlo9GZ6PLRqv" alt=""><figcaption></figcaption></figure>

2. Click **New Data Explorer**. The **Create new explorer** side window appears.

<figure><img src="/files/N302LCNazCMwls48SSHL" alt=""><figcaption></figcaption></figure>

3. **Name**: Provide a name for your report.
4. **Description** (optional): Add a description for your report.
5. **Time Frame and Interval**: Define the relevant dates for your report data and the interval (day, week, or month).
6. **Filters**: Filter the report using MegaBill components such as services, Cost Centers, or Virtual Tags. To scope a report to a single Cost Center, select **Global > Cost Center**, then choose the Cost Center from the value list. Cost Center is a global dimension, so it appears under **Global** rather than under the individual Cost Center sections in the filter list.
7. **Dimensions** (optional): Add dimensions using MegaBill components such as services, Cost Centers, or Virtual Tags. Dimensions control how rows are grouped in the output.
8. **Measurements**: Define what each row should report. You can combine any of the following:
   * **Cost/Usage Data**: Add a Cost or Usage Type field and choose how to aggregate values — **Sum**, **Average**, **Minimum**, or **Maximum**. To add another measurement, click **+**.

{% hint style="info" %}
**Note:** Aggregation functions operate across the billing records grouped into each row, not across days in the timeframe. The interval you choose (day, week, or month) controls grouping; the aggregation function controls how values within each group are combined.
{% endhint %}

| Function    | What it does                                       | When to use                                                      |
| ----------- | -------------------------------------------------- | ---------------------------------------------------------------- |
| **Sum**     | Adds all values in the group.                      | Total cost or usage for a service, SKU, or tag combination.      |
| **Average** | Divides Sum by the number of records in the group. | Typical cost per line item (e.g., per instance, per deployment). |
| **Minimum** | Smallest single billing record in the group.       | Identifying low-cost outliers.                                   |
| **Maximum** | Largest single billing record in the group.        | Spotting spikes or anomalies.                                    |

To make the difference concrete, here's a single grouped row. Data is grouped by **Instance Type** and **Day**:

| Sum (Net Amount) | Count | Average | Instance Type | Day         |
| ---------------- | ----- | ------- | ------------- | ----------- |
| $9.00            | 4     | $2.25   | db.t3.medium  | 24 Jul 2025 |

The **Sum (Net Amount)** of $9.00 is the total cost of all billing records that fall under *db.t3.medium* on 24 July 2025. The **Count** of 4 means four individual billing line items belong to this group. The **Average** of $2.25 is $9.00 ÷ 4 — the average cost per billing record, not a daily or time-based average.

<figure><img src="/files/YomYifwTis7i9xkaV08s" alt=""><figcaption></figcaption></figure>

* **Dimensional Analysis** (optional): Count the number of unique values within a dimension, or count the total number of entries within a dimension (including duplicates). For details, see the [Dimension Analysis section](https://docs.finout.io/user-guide/inform/data-explorer#h_e0e5ae30de). To add another dimensional analysis, click **+**.

<figure><img src="/files/NO4CFUd8hb6zpscmL3HY" alt=""><figcaption></figcaption></figure>

* **Finout Predefined Queries** (optional): Prebuilt, standardized queries for common reporting needs, so you don't need to assemble them from scratch. For details, see the [Finout Predefined Queries section](https://docs.finout.io/user-guide/inform/data-explorer#h_c67965ba36).
* **Additional Billing Metrics** (optional): Select additional billing metrics that surface Savings Plan and Reservation information from the CUR. See the [AWS documentation](https://docs.aws.amazon.com/cur/latest/userguide/cur-sp.html) for details on Savings Plans.

9. **Columns management** (optional): Reorder or rename the selected fields. Drag measurements up or down using the dots beside each measurement.

<figure><img src="/files/LV3TndLnlst6XOHimLwt" alt=""><figcaption></figcaption></figure>

10. **Order by**: Set the row order based on a selected measurement.

<figure><img src="/files/oVdpOi4g3D1b3HNdR0BH" alt=""><figcaption></figcaption></figure>

11. Click **Save** to generate the report. Once saved, the report displays with all selected data.

## Working with Data Explorer <a href="#h_612e8b1b5b" id="h_612e8b1b5b"></a>

### Open and manage existing reports

1. Navigate to **Data Explorer** to see the list of saved reports.

<figure><img src="/files/4RKRJqAGYNzUGo6qvUbO" alt=""><figcaption></figcaption></figure>

2. From the list, you can edit, duplicate, or delete any report.

{% hint style="info" %}
**Note**: You can open a Data Explorer report in a new browser tab directly from the Data Explorer list.\
Right-click the data explorer  and select **Open in New Tab**, or use:

* **Command + Click** on macOS
* **Ctrl + Click** on Windows or Linux

This lets you compare multiple reports side by side.
{% endhint %}

### Open a report

1. Navigate to **Data Explorer**.<br>

   <figure><img src="/files/n0A8GfKB7bS3niVPXWHj" alt=""><figcaption></figcaption></figure>
2. Choose a **Data Explorer report.**<br>

   <figure><img src="/files/w2ssqFyYtW5RhXylHua0" alt=""><figcaption></figcaption></figure>

### Export a report to CSV

1. Open the report you want to export.
2. Click **Download CSV** and choose one of the following options, then click **Export**.
   1. **Top Results Export**: Instantly export a CSV file with the top 10 thousand rows.\
      or
   2. **Full Data Export**: Generate and send a detailed report of your endpoint with up to 6 full months of data.

<figure><img src="/files/5NpvbfTvrifmWex9zQeA" alt=""><figcaption></figcaption></figure>

For Full Data Export:

* Choose an **Endpoint.** See [Endpoints](/settings/endpoints) for more information.
* **Time Frame -**&#x54;he default time frame is based on your report, but you can adjust it to any time range you prefer.

### Edit, duplicate, or delete a report

From an open report, you can:&#x20;

* **Edit Data Explorer**: make the necessary edits and click **Save**.
* **Duplicate Data Explorer**: create a copy of the report.
* **Delete Data Explorer**: remove the report.

## Dimension Analysis <a href="#h_e0e5ae30de" id="h_e0e5ae30de"></a>

In Dimension Analysis, two key concepts are used to gain insights into your data:

* **Count Distinct Dimensions**: Counts the number of unique values within a specific dimension.\
  ​*Use Case #1*: Analyzing user tags - Counting distinct dimensions shows how many unique tags exist across all resources. This helps you understand the diversity and categorization within that dimension.\
  ​*Use Case #2*: Determine the distinct number of resources for each service per day- Identify the various values for each user tag and check the number of instance types for EC2/RDS or the number of regions per account.
* **Count Dimensions**: Counts the total number of entries or occurrences within a dimension, including duplicates.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>​Note</strong>: This feature is supported for every dimension in Data Explorer and is available for all accounts.</p></div>

  #### &#x20;**​To add dimensional analysis**:

\
![](/files/Ie5ajfJnMbbbcLmxr5UM)

<div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/15822125/87d01d5534ab9e1c020d283d/AD_4nXeaeVlbD5ZD3K4VIYouBgj8C23Ch8wzgUfQM3xSvoRePU__s6_XgxGOvU2jP2UW52GXtk92fuuPK7Uhvj1zEF5UjirYoVaqyN4vK0jfaBDGn9RWgdIMpLjAjFRN87Zdeh_X7KdYXe-I_0E62Kt4udW0Nm0l?expires=1727360100&#x26;signature=510be10216eba75b2880729098d3c9cb4a8b1f7bfbd58b5e94bc91eddb8c1d75&#x26;req=0dBnx1r7rjJk2hL085ZhoRubmYkB%2BbiLjsQ%2FLgoQNwV01S1FhclbYs5s%2Ftp7%0A0Q%3D%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>

1. Select one of the following:
   * **Count Distinct** - Count the values that are unique from one another based on what was selected above.
   * **Count** - Count all the values that have been selected.<br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>​Note</strong>: If you selected the same dimension as in the report, you will only receive one return per value.</p></div>

2. Click **Dimension**.\
   The Dimension window appears.

   ![](/files/3oYIrvrtow5lSTQmGlqY)

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/15822127/6de4db5ae25363a7b007d7d3/AD_4nXeP9innGYbeoFTmpao15JxGr6HXcjnWNWVyJhsMD8IEhB5O6TeVmUuakJhkenTdIRtjQqM6VJomn_S4ujJRQeqePLeIEtH3PzLjg0FBFBPpOQ-FfR3y4O37F0E-0Fu8nVoscGbBKYd7s2r4ivsudFq01Ii1?expires=1727360100&#x26;signature=ac62efe93654ccce080d424c06c66c95ce72bd6f2129c80795a9948443504a04&#x26;req=0dBnx1r7rjBk2hL085Zhof%2FUz1hosja6krHugQoMPXtPqg6W1BkvGCAwvnI5%0AFw%3D%3D%0A" alt="" width="563"><figcaption></figcaption></figure></div>

3. Mark the dimensions that you want to be used for the analysis and click **Apply Group By**.

4. Click ![](https://lh7-us.googleusercontent.com/docsz/AD_4nXf15wT9EJBUUrrega7LoWFwxO_cAXUbb-mdzUnOtMaaYnf7Tj1qbFlplOlnnF2Tdiqp7XRnOv30kvLtvd89W8jE-kLmmBMAAo9NdBVDCezcCOyN2yNjDlC1R1ZLJ_o2v8PFZvr59gYVl7S2n2EFx5eRvBTl?key=ddmHaBrcFdU7WpPIDAJGGA)to add another dimensional analysis.\
   ​

## Finout Predefined Queries <a href="#h_c67965ba36" id="h_c67965ba36"></a>

Predefined queries are prebuilt, standardized queries designed to streamline data retrieval and analysis. Created to address common data needs or reporting requirements, they allow for quick access to specific data sets or insights without the need to craft complex queries from scratch.

### Resource Normalized Runtime <a href="#h_7942b73e02" id="h_7942b73e02"></a>

The Resource Normalized Runtime metric measures the total operational time of resources within a specified timeframe, normalized against the total hours in that period. It is calculated by dividing the total running hours of all resources by the total number of hours in the timeframe.

{% hint style="info" %}
**​Note**:&#x20;

* When grouping by date, each timeframe is set to 24 hours.
* Supported for AWS only.
  {% endhint %}

**Formula**:

* Resource Normalized Runtime = Total Running Hours / Total Hours in Timeframe
* Numerator (Total Running Hours): The cumulative sum of hours all queried resources were active during the specified timeframe.
* Denominator (Total Hours in Timeframe): The total number of hours within the specified timeframe.

  <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>​<strong>Note</strong>: When grouping by date, this is set to 24 hours.</p></div>

**Example Calculations:**

**Scenario 1**: 5 Resources Over 3 Days

| **Date**   | **Total Running Hours** | **Total Hours in Timeframe** | **Resource Normalized Runtime** |
| ---------- | ----------------------- | ---------------------------- | ------------------------------- |
| 2024-07-28 | 79                      | 24                           | 3.29                            |
| 2024-07-29 | 85                      | 24                           | 3.54                            |
| 2024-07-30 | 74                      | 24                           | 3.08                            |

*2024-07-28*:

Total Running Hours: 79 hours (cumulative for all 5 resources)

Total Hours in Timeframe: 24 hours

Resource Normalized Runtime: 79 / 24 = 3.29

**Scenario 2**: 3 Resources Over 2 Days with Resource IDs

| **Date**   | **Resource ID** | **Total Running Hours** | **Total Hours in Timeframe** | **Resource Normalized Runtime** |
| ---------- | --------------- | ----------------------- | ---------------------------- | ------------------------------- |
| 2024-07-28 | i-abc123        | 30                      | 24                           | 1.25                            |
| 2024-07-28 | i-def456        | 40                      | 24                           | 1.67                            |
| 2024-07-29 | i-ghi789        | 35                      | 24                           | 1.46                            |

*i-abc123*:

Total Running Hours: 30 hours

Total Hours in Timeframe: 24 hours

Resource Normalized Runtime: 30 / 24 = 1.25

**Scenario 3**: 4 Resources Over 1 Day

| **Date**   | **Total Running Hours** | **Total Hours in Timeframe** | **Resource Normalized Runtime** |
| ---------- | ----------------------- | ---------------------------- | ------------------------------- |
| 2024-08-01 | 24                      | 24                           | 1.00                            |

*2024-08-01*:

Total Running Hours: 24 hours (cumulative for all resources running the entire day)

Total Hours in Timeframe: 24 hours

Resource Normalized Runtime: 24 / 24 = 1.00

**Scenario 4**: Aggregated Resources Over Multiple Days Without Date Column

| **Resource ID** | **Total Running Hours** | **Total Hours in Timeframe** | **Resource Normalized Runtime** |
| --------------- | ----------------------- | ---------------------------- | ------------------------------- |
| i-abc123        | 120                     | 240                          | 0.50                            |
| i-def456        | 200                     | 240                          | 0.83                            |
| i-ghi789        | 160                     | 240                          | 0.67                            |
| i-jkl012        | 80                      | 240                          | 0.33                            |

*i-abc123*:

Total Running Hours: 120 hours

Total Hours in Timeframe: 240 hours (10 days x 24 hours/day)

Resource Normalized Runtime: 120 / 240 = 0.50

**Scenario 5**: Aggregated Total Running Hours Without Date or Resource ID

| **Total Running Hours** | **Total Hours in Timeframe** | **Resource Normalized Runtime** |
| ----------------------- | ---------------------------- | ------------------------------- |
| 2100                    | 600                          | 3.50                            |
| 2400                    | 600                          | 4.00                            |
| 3000                    | 600                          | 5.00                            |
| 1800                    | 600                          | 3.00                            |

*Entry 1*:

Total Running Hours: 2100 hours

Total Hours in Timeframe: 600 hours

Resource Normalized Runtime: 2100 / 600 = 3.50

### Resource Normalized Runtime vCPU <a href="#h_e3a3771e2b" id="h_e3a3771e2b"></a>

Resource Normalized Runtime vCPU: This metric calculates the total normalized vCPU runtime used by resources over a specified timeframe. It is determined by multiplying the total running hours of each resource by its vCPU count and dividing by the total number of hours in the timeframe.

{% hint style="info" %}
​**Note**:&#x20;

* When grouping by date, each time frame is set to 24 hours.
* Supported for AWS only.
  {% endhint %}

**Formula**:

* Resource Normalized Runtime vCPU = Σ (Running Hours x vCPU) / Total Hours in Timeframe
* Numerator: The cumulative sum of the product of running hours and vCPU count for each resource.
* Denominator (Total Hours in Timeframe): The total number of hours within the specified timeframe. When grouping by date, this is set to 24 hours.

**Example Calculations:**

**Scenario 1**: Multiple Resources with vCPUs Grouped by Day

| **Date**   | **Resource ID** | **vCPU** | **Running Hours** | **Normalized Runtime vCPU** |
| ---------- | --------------- | -------- | ----------------- | --------------------------- |
| 2024-07-28 | i-12345678      | 5        | 24                | 5.00                        |
| 2024-07-28 | i-12345677      | 6        | 12                | 3.00                        |
| 2024-07-28 | i-12345676      | 3        | 16                | 2.00                        |
| 2024-07-28 | i-12345675      | 2        | 17                | 1.42                        |
| 2024-07-28 | i-12345674      | 16       | 20                | 13.33                       |

*i-12345678*:

Calculation: (5 x 24) / 24 = 5.00

The resource consumed 5.00 vCPU days.

**Scenario 2**: Mixed vCPU Resources Over 2 Days

| **Date**   | **Resource ID** | **vCPU** | **Running Hours** | **Normalized Runtime vCPU** |
| ---------- | --------------- | -------- | ----------------- | --------------------------- |
| 2024-07-28 | i-98765432      | 8        | 18                | 6.00                        |
| 2024-07-28 | i-87654321      | 4        | 10                | 1.67                        |
| 2024-07-29 | i-76543210      | 2        | 5                 | 0.42                        |

*i-98765432*:

Calculation: (8 x 18) / 24 = 6.00

The resource consumed 6.00 vCPU days.

**Scenario 3**: Aggregated vCPU Resources Over Multiple Days

| **Date**   | **Resource ID** | **vCPU** | **Running Hours** | **Normalized Runtime vCPU** |
| ---------- | --------------- | -------- | ----------------- | --------------------------- |
| 2024-07-30 | i-55555555      | 10       | 40                | 16.67                       |
| 2024-07-30 | i-44444444      | 6        | 20                | 5.00                        |
| 2024-07-31 | i-33333333      | 3        | 15                | 1.88                        |

*i-55555555*:

Calculation: (10 x 40) / 24 = 16.67

The resource consumed 16.67 vCPU days.

**Scenario 4**: vCPU Resources Without Date or Resource ID

| **vCPU** | **Running Hours** | **Total Hours in Timeframe** | **Normalized Runtime vCPU** |
| -------- | ----------------- | ---------------------------- | --------------------------- |
| 8        | 200               | 600                          | 2.67                        |
| 4        | 150               | 600                          | 1.00                        |
| 6        | 240               | 600                          | 2.40                        |

*Entry 1*:

Calculation: (8 x 200) / 600 = 2.67

The resources consumed 2.67 vCPU days in the timeframe.

### EBS Running Hours <a href="#h_21f0de122a" id="h_21f0de122a"></a>

This metric calculates the total running hours of EBS resources within a specified timeframe and tracks the cumulative hours that they have been active.

**Formula**:

-EBS Running Hours = Sum of Running Hours for EBS Resources in a selected timeframe.

-Total Running Hours: The cumulative sum of hours that individual EBS resources were active within the selected timeframe.

\- Per resource: The total hours for each resource are summed based on the timeframe and aggregation type.

\- For grouped resources: When multiple resources are grouped, their running hours are summed together to give the total running hours.

**Example Calculations**:

**Scenario 1**: Single Resource Over 2 Days, Group by Day

| **Date**   | **Total Running hours** |
| ---------- | ----------------------- |
| 2024-08-01 | 22                      |
| 2024-08-02 | 18                      |

For 2 days:

* Total Running Hours for August 1: 22 hours
* Total Running Hours for August 2: 18 hours

The total running hours over these two days for a single resource is 40 hours.

**Scenario 2**: 3 Resources Over 4 Days, Group by Day

| **Date**   | **Total Running Hours** |
| ---------- | ----------------------- |
| 2024-09-05 | 65                      |
| 2024-09-06 | 72                      |
| 2024-09-07 | 80                      |
| 2024-09-08 | 78                      |

For 4 days with 3 resources:

* Total Running Hours for September 5 for all 3 resources: 65 hours
* Total Running Hours for September 6 for all 3 resources: 72 hours
* Total Running Hours for September 7 for all 3 resources: 80 hours
* Total Running Hours for September 8 for all 3 resources: 78 hours

The total running hours over these four days is 295.

**Scenario 3**: 5 Resources Over 1 Month (August)

| **Date Range**           | **Total Running Hours** |
| ------------------------ | ----------------------- |
| 2024-08-01 to 2024-08-31 | 3,000 hours             |

The total running hours for August for all 5 resources is 3000 hours.

### S3 Number of Objects <a href="#h_3ef5f65907" id="h_3ef5f65907"></a>

The S3 Number of Objects metric calculates the average number of objects stored in your S3 buckets from the last 24 hours of a selected timeframe. This metric is derived from CloudWatch data and helps monitor object count trends in your S3 buckets, providing insights into storage usage.

{% hint style="info" %}
**Note**: The resource ID will be automatically added to your Data Explorer report when selecting this predefined query.
{% endhint %}

**Scenario 1**: Number of Objects in S3 Buckets, Broken Down by Virtual Tag Teams

You want to create a report of the number of S3 objects in a bucket over April.

{% hint style="info" %}
**Note**: The S3 Number of Objects metric calculates the average number of objects stored in your S3 buckets from the last 24 hours of the selected timeframe. For example, in the table below, Bucket001, Team A, had an average of 1,500,000 objects on April 30th.
{% endhint %}

| **Resource ID** | **Team** | **Number of S3 Objects** |
| --------------- | -------- | ------------------------ |
| Bucket 001      | Team A   | 1,500,000                |
| Bucket 001      | Team B   | 800,000                  |
| Bucket 002      | Team A   | 1,100,000                |
| Bucket 003      | Team C   | 500,000                  |
| Bucke t003      | Team B   | 900,000                  |

**Scenario 2**: Number of Objects in S3 Buckets in Q1 2024, Broken Down by Month

You want to create a report for Q1 with object counts in monthly intervals to monitor the growth of data in your S3 buckets over time.

| **Resource ID** | **Month** | **Number of S3 Objects** |
| --------------- | --------- | ------------------------ |
| Bucket 001      | January   | 1,200,000                |
| Bucket 002      | January   | 900,000                  |
| Bucket 001      | February  | 1,500,000                |
| Bucket 003      | February  | 600,000                  |
| Bucket 002      | March     | 1,000,000                |
| Bucket 003      | March     | 800,000                  |

**Scenario 3**: Number of Objects in S3 Buckets, Broken Down by Virtual Tag Teams and by Week

You want to create a report for the previous month with weekly intervals, showing the number of objects in each S3 bucket, broken down by virtual tag teams.

| **Resource ID** | **Team** | **Week** | **Number of S3 Objects** |
| --------------- | -------- | -------- | ------------------------ |
| Bucket 10       | Team A   | Week 1   | 11,000                   |
| Bucket 10       | Team A   | Week 2   | 8,800                    |
| Bucket 10       | Team B   | Week 1   | 3,000                    |
| Bucket 20       | Team A   | Week 3   | 21,800                   |
| Bucket 20       | Team B   | Week 2   | 16,700                   |

### Daily Actual Storage

Daily Actual Storage transforms AWS's billing-focused GB-Month reporting into actionable, day-by-day storage insights. While AWS Cost & Usage Reports (CUR) are perfect for monthly invoicing, they create a blind spot for engineering teams who need to see what's happening daily on their storage infrastructure. &#x20;

Daily actual storage shows how many GB were in your storage for a particular day, and not the normalized daily GB (1GB / day per month) from the CUR. Finout converts these normalized daily GB  back into precise daily GB measurements, revealing the actual storage footprint on your daily storage (S3, EBS Snapshots, EFS, etc). \
\
Due to the varying number of days each month, the CUR may show artificial daily spikes or drops at the start and end of the month. Using actual daily storage values keeps the data consistent and reflects the actual GB storage.

{% hint style="info" %}
**Note**: The **Normalized Storage** column only returns values when **GB-Mo** is selected as the unit. If any other unit is used, the column will display **0**.
{% endhint %}

**Daily Usage Example**

If you store 1 GB of data for just 1 day, that’s about 1/30 of a month:

* **CUR daily storage data:** 1 GB × (1 ÷ 30) = 0.033 GB-Mo\
  Since you used only a fraction of the month, you’re charged only a fraction of the cost. This is a **pro-rated charge**; you only pay for what you use.
* **Finout Daily Actual Storage:** 1 GB stored for a whole month = 1 GB-Mo<br>

  <figure><img src="/files/z5HhjgLagr8bUn8IElTu" alt=""><figcaption></figcaption></figure>

### **FAQs**

**Question**: What is the difference between the object count from CloudWatch and the object count from AWS CUR.

**Answer**: The CUR alone does not provide object-level or detailed bucket insights without integrating other AWS tools such as S3 Storage Lens (with advanced metrics) or S3 Inventory. Without these, the CUR will only show aggregated S3 storage usage and costs.

**Question**: How can I get object count data per S3 bucket in the AWS CUR?

**Answer**: To obtain object count data per S3 bucket in the CUR, you need additional services:

\- S3 Storage Lens with advanced metrics- This is required for detailed usage insights.

\- S3 Inventory: Provides detailed reports at the object level but does not integrate directly into the CUR.


# Shared Cost Reallocation

This advancement represents a critical phase in your company's FinOps journey, enhancing the granularity of cost allocation and allowing for a more refined reallocation of shared expenses. Effective managing and allocating costs is crucial for businesses leveraging SaaS and cloud services. These should be correctly allocated and assigned across different projects, teams, or departments, especially for shared costs.

This document will guide you through each method, providing a clear understanding of how to implement them effectively in your FinOps practice.

For instructions on setting up Shared Cost Reallocation in Finout, please refer to the [How to Use Shared Cost Reallocation ](/user-guide/inform/shared-cost-reallocation/how-to-use-shared-cost-reallocation)documentation.

## Finout Shared Cost Allocation <a href="#h_d71a57e9e1" id="h_d71a57e9e1"></a>

Finout’s cost allocation layer powered by [Virtual Tags](/user-guide/inform/virtual-tags) streamlines the mapping and analysis of cloud services and providers, ensuring transparent and detailed breakdowns of cloud spending.

{% hint style="info" %}
**Note:** Virtual tags with relocation are not available in the raw data.
{% endhint %}

Finout's Shared Cost Reallocation solution directly addresses the challenges of showback by facilitating precise and automated reallocation of shared expenses. This advancement represents a critical phase in your company's FinOps journey, enhancing the granularity of cost allocation, allowing for a more refined reallocation of shared expenses.

By this stage, you should have already achieved the following:

* [Integrated](/billing-integrations/cloud-providers) your cloud infrastructure spending into Finout.
* Familiarize yourself with Finout’s [MegaBill](/user-guide/inform/megabill).
* Completed the creation of your [Virtual Tags](/user-guide/inform/virtual-tags), to allocate all your dedicated resources to their right owners tailored to your company's requirements.

But now you are stuck with a portion that isn’t “breakable”, a shared cost that you cannot allocate as a dedicated cost on a resource level.

Building on these initial steps, the Shared Cost Reallocation feature brings a new level of granularity to cost allocation, enabling more precise reallocation of shared costs.

To navigate your shared costs, we offer two strategies to help you break down shared costs:

* [Telemetric based reallocation](#h_c3d618efdd)
* [Customized cost reallocation](#h_64d95edb9e)

## Shared Cost Allocation Strategies <a href="#h_5fc4ee5121" id="h_5fc4ee5121"></a>

### 1. Telemetric based reallocation <a href="#h_c3d618efdd" id="h_c3d618efdd"></a>

Finout’s telemetry-based cost reallocation leverages external telemetry data, such as the number of bytes transmitted, length of queries, or even business KPIs, to precisely and equitably distribute shared cloud costs among different use cases (Virtual Tags values). This approach splits costs in a way that reflects the actual consumption of shared resources, ensuring fair attribution according to actual data, enhancing visibility into cloud spending, enabling more accurate financial management.

By utilizing shared costs within Virtual Tags, users can select metrics that may not directly relate to the cost in question but offer a fair basis for further breaking down expenses based on real usage or engagement.

Integrating telemetry data into Finout is streamlined through various methods, including direct exports from an [S3 bucket](/telemetry-integrations/telemetry/s3-csv-telemetry) and integrations with [Datadog](/billing-integrations/observability-platforms/connect-to-datadog), [Snowflake](/billing-integrations/data-and-engineering-platforms/connect-to-snowflake/connect-to-snowflake-account-level-integration), or [Prometheus](/kubernetes-integrations/kubernetes/prometheus/prometheus-per-cluster-integration). This ensures a seamless flow of relevant data into Finout's cost allocation mechanisms, simplifying the process of managing complex cloud expenses and aligning financial responsibilities with measurable contributions.

[![](https://downloads.intercomcdn.eu/i/o/11941618/9578bb6b361db2c1149d333a/image.png?expires=1726568100\&signature=b7b17061c450d624a5841d86b541138619fd7ae9ee6a76bdc4bc2c1ff9b45a96\&req=0dRmwVn8rT9k2hL085Zhoe78JFo%2B6HDefhQHoLp7i6MgylCpPVm5uTZJKr1v%0ALJecYM5XWF8g6CKY%0A)](https://downloads.intercomcdn.eu/i/o/11941618/9578bb6b361db2c1149d333a/image.png?expires=1726568100\&signature=b7b17061c450d624a5841d86b541138619fd7ae9ee6a76bdc4bc2c1ff9b45a96\&req=0dRmwVn8rT9k2hL085Zhoe78JFo%2B6HDefhQHoLp7i6MgylCpPVm5uTZJKr1v%0ALJecYM5XWF8g6CKY%0A)

**Analogy:** Imagine a group of business partners sharing a buffet. Instead of tracking every item each person consumed, they agree on a practical proxy—such as how many trips each person made to the buffet—to divide the cost fairly. In the same way, telemetry-based reallocation distributes shared cloud costs using meaningful usage indicators, ensuring each team pays its proportional share.

For instructions on setting up telemetry based reallocation in Finout, please refer to the [Setting Up a Telemetry Based Reallocation ](/user-guide/inform/shared-cost-reallocation/how-to-use-shared-cost-reallocation)documentation.

### 2. Customized cost reallocation <a href="#h_64d95edb9e" id="h_64d95edb9e"></a>

The customized cost allocation, also known as the fixed percentage method, simplifies the process of sharing costs by evenly dividing them among all involved entities. This approach assumes that each entity, regardless of their individual usage or consumption, benefits equally from the shared resource. Therefore, it distributes the total cost uniformly, ensuring that each party bears an identical fraction of the expense. This method is particularly effective in scenarios where detailed tracking of individual usage is impractical or where the perceived value of the shared resource is equally distributed among the users.

This method additionally offers the flexibility to customize allocation percentages among users, enabling adjustments based on specific criteria to ensure the total cost is accurately divided, covering the full 100% across selected entities. It's particularly suited for customizing cost distribution to accurately reflect each participant's unique usage patterns, contributions, or agreed terms within a group.

**Analogy:** Imagine a group of business partners sharing a buffet. When it’s time to settle the bill, a flexible cost-sharing method allows them to choose how the cost should be allocated. \
**Option one:** divide the total evenly among all participants—a simple approach. \
**Option two:** allocate the cost based on each person’s level of participation, such as who contributed more to the shared meal or made greater use of particular offerings. Similarly, the flexible percentage method distributes shared business expenses according to meaningful usage patterns, ensuring that each team contributes fairly based on its share of consumption.

For instructions on setting up customized cost reallocation, please refer to the [Setting Up a Customized Cost Reallocation ](/user-guide/inform/shared-cost-reallocation/how-to-use-shared-cost-reallocation)documentation.


# How to Use Shared Cost Reallocation

This documentation will guide you through how to create the different strategy types to help you break down shared cost.

## Setting Up a Telemetry Based Reallocation <a href="#h_d42fb96adf" id="h_d42fb96adf"></a>

Finout’s Telemetry-based cost reallocation leverages external telemetry data, such as # of bytes transmitted, length of queries or even Business KPIs, to precisely and equitably distribute shared cloud costs among different use cases (Virtual Tag values). This approach apportions costs in a way that reflects the actual consumption of shared resources, ensuring fair attribution according to actual data. This enhances visibility into cloud spending and enables more accurate financial management.

{% hint style="info" %}
**Note:**&#x20;

* Virtual tags with relocation are not available in the raw data.
* When telemetry data is missing or empty, the system treats the virtual tag or rule as having no available telemetry. In this case, the evaluation defaults to the configured fallback value.
  {% endhint %}

1. Navigate to the **Virtual Tags page** via the left side menu.

2. Select the desired **Virtual Tag** for reallocation.

3. In the Virtual Tag window, there are two tabs: Tagging and Reallocation. Choose the **Reallocation tab.**

   <figure><img src="https://finout.intercom-attachments.eu/i/o/11940298/322dd5782acc24ed3e2f240c/cD7MLJwzY5NU8xcLMou39BuvEgT5B9cBJbPpgUlPapBsNGrs8RAP2MZOZ_BQFrboCx3PdkWU8QUwi1pSO8DZq4MtBeroOVKKS72ji5AEbcBdRHqXVf1I91T2uHE4F9M66bK0dJhZQmryGefEPB3wY7k?expires=1732707900&#x26;signature=c69d41b9292b4488960a407cc6d0918b3f9337fd9267089c740a3976d0743af4&#x26;req=0dRmwVj4pT9k2hL085ZhoQdgrRAZiFH8UZmfo01UPiT3K%2FJe5eLMeFrk63up%0AGg%3D%3D%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/3hBrF35YlOeXAn81ZmLL" alt=""><figcaption></figcaption></figure>

4. Choose a **Virtual Tag value** to reallocate.<br>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/11940299/2b5047c898350d4e412942dd/sfvaiadKInZRGo5sC6Z5MFlLJ5YI_JeA10JEpnxEZgZh9eJ6hit2Lc-17s7GLoGP5TV2l1z3x4V8Dlm78K37JsFUBWYe5i7quaxmnu_BqVM_ZwCaZgVQ0WbiZGBXduRYSorCqROqPk0JAxdM6FFmAWY?expires=1732707900&#x26;signature=256ce8a4a5fa13c66912ac6461e36541cc09cbbb6c46e8eb3069a45dfce6a410&#x26;req=0dRmwVj4pT5k2hL085ZhodSO%2BoXi1GxKHCfBgUHbLtX6BZgSRAQ9j86ofNu%2F%0Abg%3D%3D%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/kC1tqugkKWSIvelyH2Mg" alt=""><figcaption></figcaption></figure>

5. For **Select reallocation strategy**: Use the dropdown to choose a **Telemetry-based Reallocation**.

   <figure><img src="/files/AJhP1Fgdas1Yhix2C4nI" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/11940301/83763b76d5a0900f7900b81f/ExYT_VBQNrA5y2aqoR5ilNva4H32IzM1ADIhWQzfirPJV9Qv6ACFfFenrWwiczjgnntOpbuPm3o13bSuCZNfM1v5IjBCYfJxF5yv8k-sqgCtV5P53EGcJznzfsuHEUK0AcyLQY1wVlflsD7mI3iUDkI?expires=1732707900&#x26;signature=d9adbff8ffc380f9f6c89254804ee4d10c16297a234853383c3e67d05bf92cdf&#x26;req=0dRmwVj5rDZk2hL085ZhoRpPCGhbQ7fYbhf7m1sqTysYoAyPxlfXAXz4szs6%0AlQ%3D%3D%0A" alt=""><figcaption></figcaption></figure>

6. **Choose Your telemetry metric**: From the dropdown menu, select the **telemetry metric** you wish to use for reallocation and **Pick an Allocation Key**: Choose the **Allocation Key** from your selected telemetry. This will allow segmenting the Telemetry data and calculating the relevant ratio based on the key values.<br>

   <figure><img src="/files/UfDj8ISYYGQ81kzPznPa" alt=""><figcaption></figcaption></figure>

7. Add a **Description** (Optional): You may enter a description of the reallocation strategy, though this is optional.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Once selections are made, the allocation will automatically populate based on the chosen telemetry name and key.</p></div>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/11940305/ce4f18620acb9eb552f164e5/d2q7Gx8gNxVHith9AeILHb7Tj6rEsYcecIpsw4uMJ4OlkhAS0xgLI6DwI2KtBlu3tYiBaecNsPGAHmUKWO0cZ1vbduQowe9htFPbYlscfku2589fFNrVPly1RnrO1Z0ZWoFXmcjbXma_w42cEv2Unv8?expires=1732707900&#x26;signature=d867f87af11f6f5ed3ea4f742a901b273f21c369bdb2b3aef040cac54e5004f0&#x26;req=0dRmwVj5rDJk2hL085ZhofxqpqxPrsqs%2B09p7IJLiMz60pgUjTlqgAhIwcwD%0AQw%3D%3D%0A" alt=""><figcaption></figcaption></figure>

8. On the left side of the displayed screen, a table is presented including the reallocation details; key name, allocation percentage, a preview of the cost from the total value, and a unit preview (showing allocation per metric unit).<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Important</strong>: In this method, the allocation percentage is fixed and calculated daily based on the telemetry data and cannot be edited.</p></div>

9. On the right side of the displayed screen, a visualization of your cost reallocation is presented. Use the toggle in the top right corner of the visualization to switch between pie and line charts for different views of the reallocation.

10. If you wish to change the rule to another metric, the preview will automatically change accordingly.

11. Click **Save Changes**.

Once you’ve applied the Virtual Tag for telemetry-based cost reallocation in Finout, the reallocation view is dynamically updated to reflect any changes, including the addition of new value to the original virtual tag.

## Setting Up a Customized Cost Reallocation <a href="#h_76b7aba216" id="h_76b7aba216"></a>

The customized cost allocation offers a versatile approach to dividing shared costs. It allows for allocation either by distributing expenses evenly across all values, ensuring each bears an equal share, or by manually adjusting percentages among values for a tailored distribution. This adaptability is ideal for situations where tracking individual usage is challenging or when shared resources are perceived to have equal value to all users.

1. Navigate to the **Virtual Tags page** via the left-side menu.
2. Select the desired **Virtual Tag** for reallocation.
3. In the Virtual Tag window, there are two tabs: Tagging and Reallocation. Choose the **Reallocation tab**.\ <br>

   <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Important</strong>: You must have at least one defined rule under “Tagging” in order to reallocate costs for this specific Virtual tag. To read more about <a href="/pages/WHYsLrZ15iSPByLv7ekB">Tagging</a>.</p></div>

   <figure><img src="/files/pyrcRFH2tHC6oMD9uczn" alt=""><figcaption></figcaption></figure>
4. For the Virtual Tag value to reallocate, **select the relevant value** defined in Virtual Tag.<br>

   <figure><img src="/files/86Y5lk662P3rN3HBeuUy" alt=""><figcaption></figcaption></figure>
5. For the Select reallocation strategy, use the dropdown to choose **Customized Cost Reallocation**.<br>

   <figure><img src="/files/viQwJ79TZQHyxFPOB3q9" alt=""><figcaption></figcaption></figure>
6. Reallocate costs evenly or manually:<br>

   **Reallocate Evenly**:

   * Click on the **Reallocate Evenly tab**.
   * Input your value(s) and **click the + button** to include additional values.
   * The system will automatically display the allocated percentage next to each value.

   **Reallocate Manually**:

   * Select the Reallocate Manually tab.
   * Input your value(s) and click the + button to include additional values.
   * Specify the allocation percentage for each value, ensuring the total equals 100%.<br>

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can enter percentages with up to one decimal place.</p></div>

     <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Important</strong>:</p><ul><li><em>Unallocated percentage</em>: Indicates under-allocation. Please adjust to reach 100%.</li><li><em>Overallocated percentage</em>: Indicates over-allocation. Please adjust to ensure the total is at most 100%.</li><li><em>Fully allocated</em>: Confirms 100% allocation across all values.</li></ul></div>
7. To finalize, click **Apply Virtual Tag**.

## Preview The Virtual Tag <a href="#h_bb01896a2f" id="h_bb01896a2f"></a>

1. Select the **Preview Virtual Tag button** located in the footer.
2. A pop-up window will display the selected Virtual Tag's visualization.
3. Use the **toggle button** in the top right corner of the pop-up to switch between views: with the reallocation applied and without it.

## Reset Virtual Tag Changes <a href="#h_4c7e7b0495" id="h_4c7e7b0495"></a>

Selecting the **Reset Virtual Tag Changes** button in the footer will revert the virtual tag to its previous settings.

## Turn Rule On/Off <a href="#h_f5ea18cf64" id="h_f5ea18cf64"></a>

Use the **toggle button** in the top right corner of your window to switch the rule on and off at any time.


# Financial Plans

## Financial Plan Overview <a href="#h_09b77ed4fc" id="h_09b77ed4fc"></a>

\
Every organization manages yearly budgets to plan annual spending. In cloud environments, every small change impacts cost, and it's essential to have the necessary budget data to foresee future costs and plan for your company's yearly budget. Managing cloud spending effectively involves addressing challenges such as uncontrolled costs due to pay-as-you-go models, lack of usage visibility, and complex pricing structures. Additionally, issues like difficulty in cost allocation, inefficient resource management, and decentralized governance further complicate cost management.

Finout’s solution enables you to plan your company's annual financial plan and expected budgets so that you can allocate accordingly by planning, managing, and monitoring cloud spending. This ensures alignment with business goals and prevents budget overruns. Financial plans enable you to create a budget per unit cost to address the fluctuation of unit-based pricing and cloud spend. For example, if your organization has numerous teams and groups that require budget management, you can utilize Finouts virtual tags to create a structured financial plan tailored to your organization and effectively manage the annual budget.

**You will learn how to**:

1. [Create a Financial Plan](#h_5bfec57ebb) - Configure your financial plan, arrange its hierarchy, and set up forecasting models.
2. [Input Data to your Financial Plan](#h_da5b90eeee) - Add budget and forecast values via manual entry or bulk upload.
3. [Manage your Financial Plan](#h_95e1938f42) - Manage your financial plan by filtering and adding custom lines.

## Create a Financial Plan <a href="#h_5bfec57ebb" id="h_5bfec57ebb"></a>

Start creating your financial plan by following the configuration, hierarchy, and forecast steps below.

{% hint style="info" %}
**Note**: Only Admins can create a financial plan.
{% endhint %}

**To add a financial plan**:

### 1. Financial Plan Configuration <a href="#h_de652a6435" id="h_de652a6435"></a>

1. In Finout, navigate to **Financial Plans**.<br>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20224412/d71f9e08e102f090b0736906/image.png?expires=1727308800&#x26;signature=b11da35c537c3b7ff118ee4fb94fe90076d2d780c055a36094cf9d8da23ebc20&#x26;req=0tVtx1z%2BrTVk2hj99dpg6sq6tMoYGJfAgI1GgSQp7hI1EvFBQ46stJhYD6sv%0A4SK7KxalFuQSDtVXtQJvOaME%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/l6T8ORX3akQVpWxqOKcF" alt=""><figcaption></figcaption></figure>
2. Click **Add Financial Plan** on the top right of the page.\
   The **Financial Plan Configuration** window appears.

   <figure><img src="/files/4PzeIoeCS6lg7iduhadE" alt=""><figcaption></figcaption></figure>
3. Configure your financial plan:
   1. **Financial plan name**: Enter a financial plan name.
   2. **Financial plan duration**: Select the duration of your financial plan by year.
   3. **Start period**: Select the start period by year and month.
   4. **Financial plan cost type**: Select a financial plan cost type. For more information, see [Cost and Usage Types](/get-started-with-finout/cost-and-usage-types).
   5. [**ACL permissions**](/cross-platform-features/list-of-cross-platform-features/acl-permissions):

      You can set **read** and **write** permissions as either **Public**, **Private**, and **Shared**. Permission for an object is granted if a user or group have a role with the proper permission and also ACL permission to access the object. By default, ACL read and write permissions follow the account’s default configuration.

      <div align="left"><figure><img src="/files/aac29YmDU06saxps5FJt" alt=""><figcaption></figcaption></figure></div>

      * **Modes of ACL Permissions:**
        * **Public:** Grants access to anyone in the organization that has Role-Based Access Control (RBAC).
        * **Private:** Restricts access to admins and the user who created the object.
        * **Shared:** Limits access to specific users or groups that have Role-Based Access Control (RBAC).

          <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Admins and creators always retain access.</p></div>

          <div align="left"><figure><img src="/files/xgs21NqRNlFS8aaTbt5b" alt=""><figcaption></figcaption></figure></div>
4. Click **Next**.\
   The configuration of your plan is completed. The next step is to structure the hierarchy of your plan.

### 2. Financial Plan Hierarchy <a href="#h_8eb672e0cc" id="h_8eb672e0cc"></a>

<figure><img src="/files/laB0VdZgEeiM5OisGxDO" alt=""><figcaption></figcaption></figure>

1. Click **Select Keys**.\
   The available keys appear for selection.

   <figure><img src="/files/TymdNElH0cYLqWU4af6b" alt=""><figcaption></figcaption></figure>
2. Select the desired keys and click **Select**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Financial plans support up to 1000 line items. Ensure that the selected keys do not exceed the 1000 line item limit. Higher limits (up to 5,000 line items) are available in beta — contact your customer success manager to enable.</p></div>

   The keys appear in the **Financial Plan Keys & Hierarchy** window.

<figure><img src="/files/A3z34hdKnfiUhNE9POGn" alt=""><figcaption></figcaption></figure>

3. You can arrange the keys by dragging and dropping each one. This order defines the hierarchy of the keys in the financial plan.

{% hint style="info" %}
**Note**: Hierarchy order cannot be changed once the plan is created.
{% endhint %}

4. Under **Financial Plan Cost Filters**, click **Filters**.\
   The filter component window appears.\
   ​

<figure><img src="/files/pnzNJot8GiA1QruZ49Pk" alt=""><figcaption></figcaption></figure>

5. Choose to include or exclude the costs of specific items on the financial plan.

{% hint style="info" %}
**Note**: Filters cannot be changed once the plan is created.
{% endhint %}

\
Hover over a key to include or exclude it in the plan:

* **Mark** a dimension or value to include it in the plan.
* **Exclude** a dimension or value to remove its cost from the row.

By default, excluded filters still appear as line items in the plan — only their cost is removed. <br>

6. (Beta) To hide excluded items from the plan entirely, select **Exclude line items** checkbox.<br>

<figure><img src="/files/kWnefszhuQrvzrhe5Ut2" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**:

* **Exclude line items off** (default): excluded dimensions or values remain visible as line items, but their cost is filtered out.&#x20;
* **Exclude line items on**: excluded dimensions or values don't appear as line items in the plan at all — neither in the table nor in cost calculations.
  {% endhint %}

7. (Beta) You can see the estimated line items amount at the bottom.&#x20;
8. Click **Apply Filters**.
9. Click **Next**.\
   The financial plan hierarchy is complete. The next step is to customize your plan.

### 3. Financial Plan Customizations  <a href="#h_849ac68586" id="h_849ac68586"></a>

<figure><img src="/files/PtIhlsMQlopdSiXaZ20o" alt=""><figcaption></figcaption></figure>

1. Select two metrics to compare and define how delta is calculated. The customized delta will appear in the financial plan's details table and the financial plan's dashboard, aligning with your planning and analysis needs.

   The metrics options are:&#x20;

   * Actual Cost
   * Forecast
   * Run Rate
   * Budget

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Delta calculation requires two different metrics.</p></div>

2. Click **Next**.\
   The Delta Customization is complete. The next step is Forecast Configuration.

### 4. Forecast Configuration <a href="#h_849ac68586" id="h_849ac68586"></a>

{% hint style="info" %}
**Note**: You can skip this step if you prefer to use your own forecasts.
{% endhint %}

<figure><img src="/files/yH2A9kzDuEe7OhkwNGGP" alt=""><figcaption></figcaption></figure>

You can choose one of the following options:

* [Monthly Seasonality Adjustment](#monthly-seasonality-adjustment): Calculate forecasts based on fluctuations from the prior year.
* [Driver-Based Forecasting](#driver-based-forecasting): Calculate forecasts by multiplying unit economics with projected volumes.

#### Monthly Seasonality Adjustment

1. Click **Select Period**.\
   The period dropdown appears.<br>

   <figure><img src="/files/q4YdpIBlXhHTIBNW4VEJ" alt=""><figcaption></figcaption></figure>
2. You can select one or more months from the past twelve months to establish the baseline forecast for the initial month of your financial plan. This baseline is the initial set of data that serves as a reference point for projecting the first month of each line item in the financial plan.\
   ​
3. View the displayed preview, which includes three line items from your new plan and their forecast for the first month.<br>

   <figure><img src="/files/iyr2EezS11fFv5dZoCI7" alt=""><figcaption></figcaption></figure>

**Monthly Seasonality Adjustment:**

The Finout forecasting algorithm leverages historical data to predict future budgets in your financial plan.\
This algorithm calculates month-over-month percentage fluctuations for each line item over the past twelve months to establish a pattern of seasonal changes. These historical percentage changes are then applied to forecast each month in the upcoming financial plan.\
​\
​*Example*:\
It is August 2024, and you are planning for 2025. You want Finout to create a forecast using the baseline reference period from June and July 2024.\
​\
1\)**Baseline Calculation**\
Finout takes the average value of the months chosen to establish the baseline.\
​\
\- *Line Item*: Sub Service\
\- *June 2024 Amount*: $9,500\
\- *July 2024 Amount*: $10,500\
\- *Baseline*: $10,000\
​\
2\)**Monthly Growth Rate Calculation**\
Finout calculates the month-over-month percentage change for each line item based on historical data of the past twelve months (August 2023 to July 2024).

Each month in the forecasted year (2025) is projected using the percentage fluctuation from the corresponding month of the previous year to factor in seasonality.\
​\
​*For Example*: The percentage fluctuations for line X in the previous year were:\
\- February 2024 : 6% fluctuation\
\- March 2024: 5% fluctuation\
\- April 2024: 4% fluctuation\
\- This continues per month for the rest of the year\
​\
3\) **Forecast Calculation**\
Finout uses the Baseline and percentage fluctuations to project a forecast for 2025 for each line item.

{% hint style="info" %}
​**Note**: January’s forecast is the calculated baseline.
{% endhint %}

*For Example*: The forecast for line X will be calculated as follows:\
\- *January 2025 Forecast*: $10,000 (Baseline)\
\- *February 2025 Forecast*: $10,000 + ($10,000 x 6%) = $10,600\
\- *March 2025 Forecast*: $10,600 + ($10,600 X 5%) = $11,130\
\- *April 2025 Forcast*: $11,130 + ($11,130 x 4%) = $11,575.2\
\- This calculation is repeated for each subsequent month, using the updated value from the previous month and applying the growth rate to build a complete forecast for 2025.

4. You can optionally choose the following actions:
   1. Toggle on Automatically fill in the budget values with the forecast numbers.\
      ​

      <div align="left"><figure><img src="/files/IgUVovaWyowQhR3Xp2Y5" alt=""><figcaption></figcaption></figure></div>
   2. Click **Skip** if you would like to add your own forecasts and not rely on Finouts’s automatic forecasting. This is available only if no reference period was selected.<br>

      <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Forecast configuration cannot be changed once the plan is created, but you can always override a forecast and manually add your own forecasts. See <a href="#h_da5b90eeee">Input Data to Financial Plans</a>.</p></div>
5. Click **Next**.\
   The forecast navigation is complete.

#### Driver-Based Forecasting

<div align="left"><figure><img src="/files/VO49tQPNdHOmiWo86BIE" alt=""><figcaption></figcaption></figure></div>

Driver-based forecasting calculates future costs by multiplying unit rates by the expected number of units. The process is divided into two steps: 1) **Calculate the Unit Rate** and 2) **Input Expected Unit Numbers.**

1. **Calculate the Unit Rate**:\
   Choose the *unit rate* for each financial plan line. To configure the driver-based forecast, select either **Automatic Unit Rate Calculation** or **Manual Unit Rate Calculation**.
   * **Automatic Unit Rate Calculation**<br>

     Finout calculates the unit rate from historical spend data. It analyzes past data, determines the cost per driver unit, and applies that rate to future usage.

     You pair historical cost with real telemetry (actual usage data).

     * The system calculates the unit rate automatically:\
       **unit rate = cost ÷ telemetry**
       * Best when you have reliable, measurable usage data.

     *Example*\
     Last month, a service cost 2,000 and processed 100 telemetry units.

     * **Unit rate = 2,000 ÷ 100 = 20**

     *Configure Unit Economics*:

     1. Configure Unit Economics by choosing which Cost and Telemetry data to calculate.<br>

        <div align="left"><figure><img src="/files/cp7l2E0RJEbpBv5PBahm" alt=""><figcaption></figcaption></figure></div>

     2. **Cost**:
        * **Filters**
        * **Group by**
        * Choose a **cost type**: See [Cost and Usage Types ](/get-started-with-finout/cost-and-usage-types)for an explanation of all cost types.

     3. **Telemetry**: Telemetry refers to any data measurements that users intend to incorporate into Finout. This includes any metrics or data points that can be leveraged to enhance insights, enable monitoring, or assist in managing costs within the platform. See the [Telemetry documentation](/telemetry-integrations/telemetry) for more information.
        1. **Telemetry name**
        2. **Filters**
        3. **Telemetry Group by**: The Group By selection must match the Cost Group By. If the selections do not align, no data will be displayed.

     4. Review or adjust unit economics.<br>

        <figure><img src="/files/CUR25pfShOQTMtnkUJQX" alt=""><figcaption></figcaption></figure>
   * **Manual Unit Rate Calculation**\
     You define the unit rate yourself. This is useful when historical data is unreliable, prices are changing, or when you want complete control over the model.

     * You define the unit rate yourself; no automatic calculation.
     * Best when telemetry is missing, not relevant, or you want complete control over rates and assumptions.

     *Manually set unit rates*:

     1. Click **Manual Unit Rate Calculation**.<br>

        <div align="left"><figure><img src="/files/b8abWeR4hAE2qfxqqufk" alt=""><figcaption></figcaption></figure></div>
     2. Input unit rates.<br>

        <figure><img src="/files/qhUxz0GJ5KLMtaO00cgH" alt=""><figcaption></figcaption></figure>
2. **Input Monthly Forecasted Units**:&#x20;

   After unit rates are set, the user provides the forecasted number of units:<br>

   <figure><img src="/files/pttPJA8QnHjx7294eWws" alt=""><figcaption></figcaption></figure>

   \
   **Example:**\
   You manually set the unit rate to 20 because you want a fixed, controlled rate.\
   You forecast 150 manual units for the next period.\
   The forecast is calculated by: **Forecasted cost = unit rate × unit number** = 20 × 150 = 3,000
3. Click **Next**.\
   **Result**:\
   You are brought to the **Run Rate Alerts** step.<br>

### 5. Run Rate Alerts&#x20;

The monthly run rate of a given line item projects the estimated end-of-month cost based on the past 30 days of spending.

Run rate alerts notify you when the monthly run rate for any given line item exceeds its budgeted amount, allowing you to make timely adjustments to stay on target with your financial goals. Alerts are sent four times a month, on the **4th, 11th, 18th, and 25th** — each based on run rate data from two days earlier (the 2nd, 9th, 16th, and 23rd), once that billing data is finalized and available in Finout.

<figure><img src="/files/UN7OZrcv7B8vJZmkyVuj" alt=""><figcaption></figcaption></figure>

1. Enabling Run Rate Alerts is toggled on by default. **Toggle off** to disable it.
2. Enable the toggle "**Define endpoints per line item**" to send alerts to distinct endpoints for each line item.\
   A new Endpoint column appears. Choose an endpoint for each line.<br>

   <figure><img src="/files/VBWJqecoO0d9gIi39cu4" alt=""><figcaption></figcaption></figure>

When at least one of the selected keys in the financial plan is a Virtual Tag, you can choose which key's endpoint metadata to use. Endpoint metadata is populated automatically. To learn more about setting endpoint metadata for a virtual tag, see [Virtual Tag Metadata API](/api/finout-api/finout-api-v1/virtual-tag-metadata-api-v1).\ <br>

<figure><img src="/files/dQVWivdgVdStsOmrLUj9" alt=""><figcaption></figcaption></figure>

3. Choose a default endpoint for financial plan alerts. If not set, alerts will default to the endpoint configured in the anomalies settings.<br>

   <figure><img src="/files/70iTzMmzzCwiURRWTxRz" alt=""><figcaption></figcaption></figure>
4. You can choose to disable alerts to a specific value.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The run rate alert configuration can be edited after creating a financial plan.</p></div>

<figure><img src="/files/mw8DxdNrAxdGAMw3ZzeZ" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Note**: Alerts are sent to configured endpoints based on user configurations and will also appear in the Anomalies Feed, where users can review and access them directly.
{% endhint %}

5. Click **Create**.\
   Your financial plan is created and appears in the Financial Plan list.

## Input Data to Financial Plans <a href="#h_da5b90eeee" id="h_da5b90eeee"></a>

After creating your financial plan, you can add budget and forecast values in the following ways:

* **Inline edit** - Manually insert the necessary data per line item.
* **Bulk upload** - Bulk upload data using a CSV.&#x20;

{% hint style="info" %}
**Note**: Only an Admin can bulk upload.
{% endhint %}

* **Edit budgets in a line item** - Editing budgets in a line item within a financial plan allows you to update and manage the financial allocations for specific entries or distribute them evenly throughout each month.

### Financial Plan Permissions <a href="#h_55e4e09a6a" id="h_55e4e09a6a"></a>

By default, only admins have access to edit financial plans. You can provide edit permissions for users and groups in the following two ways:

1. **Define group permissions by using Virtual Tag Value Metadata API**

   While all users have read permissions, you can specify who has permission to edit a particular line item within a financial plan. This can be done by determining who can edit line items in a financial plan using your account groups. To use the groups in a financial plan, you need to set group metadata on the values of the lowest virtual tag in your financial plan hierarchy.

   Once groups are defined based on the values of the lowest virtual tag, you need to sync your plan to reflect those changes. Once done, only users in the group associated with the line item can edit the line. See [Virtual Tag Metadata API](/api/finout-api/finout-api-v1/virtual-tag-metadata-api-v1).\
   ​\
   ​**Example**: Suppose you have two groups—Group 1 and Group 2.

   1\) *Define Groups*:\
   Enrich your virtual tag values with group metadata as follows:

   * **Data** is associated with Group 1.
   * **App** is associated with Group 2.

   2\) *Set Permissions*:

   * Only users in Group 1 or admins can edit lines associated with **Data**.
   * Only users in Group 2 or admins can edit lines associated with **App**.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can only view custom metadata added to a value of the lowest virtual tag in your hierarchy.</p></div>
2. [**ACL permissions**](/cross-platform-features/list-of-cross-platform-features/acl-permissions):

   You can set **read** and **write** permissions as either **Public**, **Private**, and **Shared**. Permission for an object is granted if a user or group have a role with the proper permission and also ACL permission to access the object. By default, ACL read and write permissions follow the account’s default configuration.<br>

**To  change ACL permissions**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.\
   ​

   <figure><img src="/files/n5NrdTQuQ6YJ7iqiLzQI" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/zFJRIVV0YhdYlU9XRZj3" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20224082/a92b30eb331cbcfdf24f98de/image.png?expires=1727308800&#x26;signature=e25b922dba65294fa60c1bcc3dbfa1a7426a861ee7c49a1d8197f78fbedade12&#x26;req=0tVtx1z6pDVk2hj99dpg6kPXuSom3fJ%2FqYehiYf0vL87fq9%2FtyQOWyJTJOPV%0AsBXFdlzxLnNho%2FTULr3F81JR%0A" alt=""><figcaption></figcaption></figure>
3. Click ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXcjaOV5vVjXBIHgz_4MiaKHIIfPx7i8IUxalqokVUYN10Rvae7TIheqcH0J_dlxEqOX9mdl4BkTLPOyGS4sdwYsMHINr8Mqwiy2lHUIFyyF_31vsezZ797y-_pfFFqJRTpKMQAQKKOGzbBNNUB7RRKs-Lha?key=fjqBSIeK_DDgXRG_cRbrLA) by the financial plan name.\
   The Settings popup appears.

   <figure><img src="/files/AUB9KJsl9FJXLjscaT5t" alt=""><figcaption></figcaption></figure>
4. Select one of the three modes in ACL permissions:
   * **Public:** Grants access to anyone in the organization who has Role-Based Access Control (RBAC).
   * **Private:** Restricts access to admins and the user who created the object.
   * **Shared:** Limits access to specific users or groups that have Role-Based Access Control (RBAC).&#x20;

     <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Admins and creators always retain access.</p></div>
5. Click **Save**.\
   Your Permissions are updated.

### Edit Line Item Values <a href="#h_7a7925fa12" id="h_7a7925fa12"></a>

Inline editing lets you add budget values by manually entering the required data in your financial plan.

\
​**To enter edit mode within the financial plan:**

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/yVXUW2gk8r8lHLecq9mX" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.<br>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20235417/e1a88d014803068867cb7e0d/image.png?expires=1727181900&#x26;signature=3f4b0fd4448c341419e0b4bb03dc11e97a8475b9ea1e134d8517e145856f6094&#x26;req=0tVtxl3%2BrTBk2hL085ZhoVR8cdtJioypZlsMHVXQsQTNrDamZH1RvxhgBx7%2F%0AzQ%3D%3D%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/GA0Zed4gsczAiz75qPD4" alt=""><figcaption></figcaption></figure>
3. Click the rows that you want to edit.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20202932/9b27c295a60530fb9424fe95/image.png?expires=1727308800&#x26;signature=366395cca75eb1c20afdd5d98e509107be546b3bc20fd8740ad39467b8fc6594&#x26;req=0tVtxVrzrzVk2hj99dpg6tLuyplUJxN7ack%2BIMQdO4Y63cLQsnWVD9lFzbQh%0Ak5c1wXDii2E%2BjbdhVRm7qyDa%0A" alt=""><figcaption></figcaption></figure>
4. Click ![](https://lh7-us.googleusercontent.com/docsz/AD_4nXdWQn20HR3aUdpVSByBna33VH5JE07rlgiovKd0QEGxYImwCyxw5vtmKWDDgTT1iSlPp2wG3L6DlAJOkd9QatnGBozyujVxM502AH5KjrNSXSqsvTkcN5twGTzEpwUaSWjJ_-BYQ-QHcQCTsVMwddMFKGQ?key=fjqBSIeK_DDgXRG_cRbrLA).\
   Inline editing is enabled for the selected rows.

   <figure><img src="/files/l1QfoZKc8JbMYRNe034b" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20202839/b151eb83ee782d11f175e50e/image.png?expires=1727308800&#x26;signature=5b3bbbf39cc749fedf13869fece410f004215ffc31a01e7f0ea128a6f0345789&#x26;req=0tVtxVryrz5k2hj99dpg6v%2B9pSg3YTlJHE0zqXY6PxQ8LbjQ0YtMgN61x%2Fm2%0App0ygJ03uRjdFh0AbOKhT2lI%0A" alt=""><figcaption></figcaption></figure>
5. Make your changes and click **Apply**.\
   Your plan is updated.

### Bulk Upload Line Item Values <a href="#h_6ddcdcd415" id="h_6ddcdcd415"></a>

Bulk upload data by uploading a CSV to your financial plan.&#x20;

{% hint style="info" %}
**Note**: Only an Admin can bulk upload.
{% endhint %}

**To bulk upload data to your financial plan**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/YnlYFTDwaUwdXhUSsCey" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>

2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.<br>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20229723/4e28850270af1946df7d93c2/image.png?expires=1727308800&#x26;signature=6ca712c59bed5fd4e132923c1d0acbace24adb64887e21fb91bfe568f2794f18&#x26;req=0tVtx1H9rjRk2hj99dpg6gE7xtHi7F3c0LjxXWuFNSOAR05YP2smBM2vAsWj%0AKAatrgQx6pt9Um2yBQZYm2G5%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/jmWw9nUrbcndp3Q3BajU" alt=""><figcaption></figcaption></figure>

3. Click <img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdK6flAeBugOLHcmtmUZ1gLlpRrVR-NoEI1O0FwPp5eRe9khalEIhH2F9dCQhHqTPyCh_qqbYXNkx_GyLUl83CaWGwkIwr5b9lEza_a5eY1vwu4D_tWzQ7SOzmgV67xciTo8DbqobjATWeXiOoPVFszwEF9?key=fjqBSIeK_DDgXRG_cRbrLA" alt="" data-size="line">to download the view as a CSV file.\
   A CSV of the financial plan is downloaded to your computer.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The download will only show what is in the current view. You can filter the view to customize the downloaded CSV file.</p></div>

4. Enter the budget and forecast values in the downloaded CSV file.

   <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Important</strong>:<br>- Financial plans support up to 1000 line items.<br>- Ensure your data matches the downloaded CSV template.<br>- Use full numerical values (Ex: 10,000, not 10K).<br>- In the type column, indicate if the line is custom or not.<br>- In the Status column, indicate whether the line item is ignored or included.<br>- If you want to add a custom line, make sure to mark it as custom in the <em>type</em> column.</p></div>

5. Import the CSV file to Finout by clicking **Import CSV File**.\
   The **Import CSV File** window appears.

   <div align="left"><figure><img src="/files/G7pKiExaQ1RHRTCxMvDV" alt=""><figcaption></figcaption></figure></div>

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/15120893/f983c721436e2a472d959ac3/AD_4nXfzIPlVH2zvHDxXeeMmdGzjOnipZkUOdts-4_Qk2TmhOCHGxZ8wHVSJWfLlSqu0XR_jHIb8azr2ACa_DBIu7LU9C8rWEAUoACHH08okJEG90jByh3uvNea741FWXh2ZAvVCihFsJn6e33p9Sn6jL4TUirkv?expires=1727308800&#x26;signature=85fc1a33720ecd5235d42fda76b6810415692dd6f9f45a4a1db4133e34d00a5e&#x26;req=0dBux1jypTRk2hj99dpg6g2w6N0bhIwzyB4SV8%2FerI%2FI5ySxBkTt1doQv34R%0A1HalgK9HXmfPNQ%2FjwtwUTypm%0A" alt="" width="563"><figcaption></figcaption></figure></div>

6. Upload the CSV file.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: The values uploaded in the CSV file will override any existing budgets and forecast values. Cost and delta values are not updated.</p></div>

7. Click **Update**.\
   The data from the CSV has been updated in your financial plan.

### CSV Import Errors and Solutions <a href="#h_e8fe983ec8" id="h_e8fe983ec8"></a>

Various errors can prevent a successful upload of CSV files to financial plans. The following table describes common CSV import errors and solutions to resolve them. By understanding these error messages and their solutions, you can troubleshoot any issue and ensure a smoother import process.

<table data-header-hidden><thead><tr><th width="446"></th><th></th></tr></thead><tbody><tr><td><strong>Upload Error Reason</strong></td><td><strong>Error Solution</strong></td></tr><tr><td>Some cells in your file that are supposed to contain numerical values for budgets or forecasts have text instead.</td><td>Ensure that all these cells have only numbers.</td></tr><tr><td>The column headers in your uploaded file do not match the headers in the Financial Plan.</td><td>Check and ensure that the headers are identical.</td></tr><tr><td>The months provided in your file are not within the range specified in the financial plan.</td><td>Adjust the months to fall within the correct range.</td></tr><tr><td>Some numbers in your file are not in full numerical format.</td><td>Ensure that all numbers are fully displayed and formatted correctly.</td></tr><tr><td>A custom line item you are trying to upload already exists in the Financial Plan.</td><td>Remove or rename the duplicate item.</td></tr><tr><td>A line item appears more than once in your CSV file.</td><td>A line item appears more than once in your CSV file. Ensure that all line items are unique.</td></tr><tr><td>A month is listed more than once in your CSV file.</td><td>Each month should be unique and only appear once.</td></tr><tr><td>A custom line item is not marked as "Custom" in the Type column.</td><td>Ensure that custom items are correctly labeled in the Type column.</td></tr><tr><td>Some line items in the Type column are not specified as default or custom.</td><td>All line items in the Type column must be either default or custom. Correct the Type column to include only these two options.</td></tr><tr><td>Your uploaded file is empty or lacks the necessary data.</td><td>Ensure that the file contains the required information.</td></tr><tr><td>The file you are trying to upload is too large.</td><td>Reduce the file size to within the 2MB limit.</td></tr><tr><td>You are trying to upload multiple files simultaneously.</td><td>Only one file can be uploaded at a time.</td></tr><tr><td>The file type you are trying to upload is not allowed.</td><td>Ensure that the file type is in CSV format.</td></tr><tr><td>File reading has failed.</td><td>Try uploading the file again.</td></tr><tr><td>An unknown error has occurred.</td><td>Try uploading the file again.</td></tr><tr><td>All the line items in your uploaded file are custom.</td><td>Change the format of the key cells in the Excel file to a string instead of a number.</td></tr><tr><td>Adding new custom line items would exceed the maximum limit of 1,000 line items per plan, preventing the upload.</td><td>Ensure that your financial plan does not exceed the 1000 line items limit.</td></tr></tbody></table>

### Edit Budgets in a Line Item <a href="#h_b2d2368ced" id="h_b2d2368ced"></a>

Editing budgets in a line item within a financial plan allows you to update and manage the financial allocations for specific entries or distribute them evenly throughout each month. This ensures that your plan remains accurate and up-to-date.

{% hint style="info" %}
**Note**: Updated budgets will override existing budget values.
{% endhint %}

**A budget can be split in two ways:**

*Split Manually* - Manually enter the monthly budget.

*Split Evenly* - The budget amount of the whole line item will be divided equally across the financial plan period.\
​

<figure><img src="https://downloads.intercomcdn.eu/i/o/19724134/5616f6d7dde869f130c76d21/editlineitems-ezgif_com-speed.gif?expires=1727308800&#x26;signature=236c34b4b7be5f0128dabbfad10040769678733336f56112f133c3c00d55bdaa&#x26;req=0dxox1z7rzNk2hj99dpg6oIv5slhv6454t8pIklVSMx97qshGWzzSNd7R%2FWd%0AnJ2c4tOpj0JvVd%2FjRFKsL%2BcB%0A" alt=""><figcaption></figcaption></figure>

**To manually split budgets in a line item**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/7wxJKAKzDNFrXxNk0zDN" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/IAxnEJDH8mRalzx5JLow" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20229919/f05898098e486044b113c614/image.png?expires=1727308800&#x26;signature=24d7642a3d0566e1fcb8a1694d147a43541d54cbed7e028f43412d559d6974b0&#x26;req=0tVtx1HzrT5k2hj99dpg6g6mlzP40KBcb1a66QruMPSV5PH%2FA5tQMnR9cCRi%0ADyk42BQ2jz9zp1oqsuaMwBp9%0A" alt=""><figcaption></figcaption></figure>
3. Click![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXesDC0kyiDXzQQsOEKxigsOcMGAGhej0rzyE39FAtoWnM_fATqBHcITivje_VoYhAPjII_IahW-07-PzS0qe6mNvVk5IzTAMWbkCVo3WPZMWil6dM9MhF4Wt8cfe2HliJi0FbnxRBHVDvlpRdONvRpCpaUQ?key=fjqBSIeK_DDgXRG_cRbrLA)for the line item whose budget you want to edit and click **Edit Line’s Budget**.\
   The **Edit Line’s Budgets** popup appears.

   <div align="left"><figure><img src="/files/fmBQfEm2vsGWlNZIHKSj" alt=""><figcaption></figcaption></figure></div>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/18128895/fd8bef4c155a25ad9a748d85/AD_4nXdZR4JGGS_cm0ipoz-zqOHgzvNBldjiobmS-cu2elo-RdIrmgTsQolraKOYarbIzy8uQcIC3DPAa8lJSd96MBYcPi6s1nKFZ_AMo2Ngj5QhXKL_wG_D1XdH96AZY4epxjXJwMd5YZzGhyoRMvzEpOIHb_QW?expires=1727308800&#x26;signature=1879e06668b94c3841d886b3160396217c81009efcf8e06b67c2dacac7c115e4&#x26;req=0d1ux1DypTJk2hj99dpg6mwKMlUt7g4OS1OTLfE%2BAooAGSy09CwJOWNKLrSi%0A%2BwTj%2BZxnHtjPhHq7gsJSa%2Fcf%0A" alt=""><figcaption></figcaption></figure>
4. Under the **Updated Budget** column, enter your updated budget values.
5. Click **Save**.\
   The **Confirm updates** popup appears.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Updated budgets will override existing budget values.</p></div>

   <div align="left"><figure><img src="/files/RwHQqrM5noZW3UBudqXI" alt=""><figcaption></figcaption></figure></div>

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/18128896/ebfcf82de50dfc823b2ecea3/AD_4nXd0uqjk9dzjCWvKhDvE8hzHrKwcQWECmaSe7XquPpfnS6Dkyfxbq35TVKBCV7APhnFixL3Zs4_stOVpJLhFlWClu7a403DnvdiTAzSY2RkgrKh0cA6I6GNrrrUFVlbGayfaGVHqxIbvOm2gnzj1iaj6HzOj?expires=1727308800&#x26;signature=bee25b56065935c7a7759f9e8de480bdea35d5dc0363ac7b29ce41c648e0bd96&#x26;req=0d1ux1DypTFk2hj99dpg6rZBte2AdqFdUadaqOebHZVRN8RdeK3g2yl3UZwt%0ALRA%2F21iFHiHDywXbmXr%2Frfsy%0A" alt=""><figcaption></figcaption></figure></div>
6. Click **Apply**.\
   ​Your new budgets are updated.

**To evenly split budgets in a line item**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.<br>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/Gs2W3uLMoBVQTx1jTYTk" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/uU81V6uYJkJpEARV2bKa" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20222980/dd9e4379d68755dec125cf47/image.png?expires=1727308800&#x26;signature=c8eafe1a19c4461398451ea365e6968170ee2ca25d5a9377f8ad35d294fec2f0&#x26;req=0tVtx1rzpDdk2hj99dpg6synl0dNowPQ5fHhQEIMs10B4nKZi4BFsvaVQhhs%0A5STHxOMhvFjTFmeCSKqwIfjU%0A" alt=""><figcaption></figcaption></figure>
3. Click![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXesDC0kyiDXzQQsOEKxigsOcMGAGhej0rzyE39FAtoWnM_fATqBHcITivje_VoYhAPjII_IahW-07-PzS0qe6mNvVk5IzTAMWbkCVo3WPZMWil6dM9MhF4Wt8cfe2HliJi0FbnxRBHVDvlpRdONvRpCpaUQ?key=fjqBSIeK_DDgXRG_cRbrLA)for the line item whose budget you want to edit and click **Edit Line’s Budget.**\
   The **Edit Line’s Budgets** popup appears.

   <div align="left"><figure><img src="/files/SfSiF190Wr3sGSVEOskG" alt=""><figcaption></figcaption></figure></div>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/18128898/5d9f107e444c912c5c9db2f9/AD_4nXdZR4JGGS_cm0ipoz-zqOHgzvNBldjiobmS-cu2elo-RdIrmgTsQolraKOYarbIzy8uQcIC3DPAa8lJSd96MBYcPi6s1nKFZ_AMo2Ngj5QhXKL_wG_D1XdH96AZY4epxjXJwMd5YZzGhyoRMvzEpOIHb_QW?expires=1727308800&#x26;signature=3c59590a7658d11f055e4cef6c4efc1f66153dfd5f2eb0c599ef0ba43cfcf8c3&#x26;req=0d1ux1DypT9k2hj99dpg6nq3yZczwrdocahrKo%2BTYNdJ4m%2BPk4wuhRan62Um%0AV9erkCOGLV4Ey1BLBwxgVLZb%0A" alt=""><figcaption></figcaption></figure>
4. Click the **Spilt Evenly** tab.

   <div align="left"><figure><img src="/files/InktFkS1bA4U8zEXSirV" alt=""><figcaption></figcaption></figure></div>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/18128901/86d2565680c9ce5df17286d3/AD_4nXfCXR-1Cg8it8HLPKDwIcOy3f6l1f6fa-wZL2pdgED4G8Tc6PwpI3HryEjqTlLfPSiJVvgh8lgyVricOlwIjo8JUcRSGO5BSnckCRl9vF7R0hg2xxV9mwQ9-bXxPyxExoFSbdgj309XDiuHi0sA5dgKhTA?expires=1727308800&#x26;signature=d0f6b2443ae4f18833abdd5abf536fd9abe6a2726fb9b96a7e24a09774da6210&#x26;req=0d1ux1DzrDZk2hj99dpg6vVaWjEv1bkB8m5vy%2BBeLRoKBeQS64x86mF7fwx0%0AoGrAXnqQdyFD1q3V1a4LgY7I%0A" alt=""><figcaption></figcaption></figure>
5. In **Total Budget**, enter the total budget for the line you want to be evenly divided across each month.
6. Optionally press **Calculate** to see the budget amounts in the **Updated Budget** column.
7. Click **Save**.\
   The **Confirm updates** popup appears.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Updated budgets will override existing budget values.</p></div>

   <div align="left"><figure><img src="/files/1dlyekCoHnbO8olx38Lz" alt=""><figcaption></figcaption></figure></div>

   <div align="left"><figure><img src="https://finout.intercom-attachments.eu/i/o/18128904/171835c1e47d20183033ff86/AD_4nXd0uqjk9dzjCWvKhDvE8hzHrKwcQWECmaSe7XquPpfnS6Dkyfxbq35TVKBCV7APhnFixL3Zs4_stOVpJLhFlWClu7a403DnvdiTAzSY2RkgrKh0cA6I6GNrrrUFVlbGayfaGVHqxIbvOm2gnzj1iaj6HzOj?expires=1727308800&#x26;signature=2e6318cdfb426a4c51bf9081b3d8fa35026a72b350494f0a712e0788e922d16c&#x26;req=0d1ux1DzrDNk2hj99dpg6mBuaydWSrU3bKO9AYW1qE0Ca%2BcqXZuVwPqxnODo%0AO17xkrv4LaTyJdSSoGYAFdFR%0A" alt=""><figcaption></figcaption></figure></div>
8. Click **Apply**.\
   ​Your new budgets are updated.

## Manage Financial Plans <a href="#h_95e1938f42" id="h_95e1938f42"></a>

Managing your financial plan in a streamlined and efficient way by using three key tabs. Utilize these tabs to effectively manage your financial plan and ensure that it is accurate, comprehensive, and aligned with your financial goals.

* [Financial Plan Details](#h_57ab60415a): This is where you manage the budgets and forecasts for your financial plan. You can apply various filters to focus on particular data sets, add custom line items to account for unique or anticipated future expenses, and sync your financial data to ensure all data is up-to-date. This level of detail ensures that your financial plan is comprehensive and tailored to your specific needs.
* [Dashboard](#h_e0181fe78e): The dashboard provides a visual representation of your financial plan through widgets that display actual costs and budgets. This view allows you to quickly assess your financial status at a glance, identify any discrepancies between planned and actual expenditures, and make informed decisions based on real-time data. The visual nature of the dashboard makes it easier to understand complex financial information and track your progress.
* [Plan Completion Rate](#h_00029f968c): This view helps you track the percentage of line items with budget values in your financial plans. By monitoring the completion rate, you can ensure that all necessary items are accounted for and budgeted. This view is essential for maintaining the accuracy and completeness of your financial plan, as it highlights any areas that may need attention or adjustments.

### Financial Plan Details <a href="#h_57ab60415a" id="h_57ab60415a"></a>

Financial plan details enable you to dive into the specifics of your financial plan. You can apply various filters to focus on particular data sets, add custom line items to account for unique or anticipated future expenses, and sync your financial data to ensure everything is up-to-date. This level of detail ensures that your financial plan is comprehensive and tailored to your specific needs.<br>

Each month in the financial plan details tab consists of the following five columns:

**Budget**: Represents the financial allocation for a specific month for each line item. It outlines the financial targets set for the selected month, which helps guide financial planning and budgeting.

**Forecast**: The [Finout forecasting algorithm](#h_849ac68586) leverages historical data to predict future budgets in your financial plan.

**Actual Cost**: Reflects the total expenditures accumulated over month and for the applied filters, providing a real-time view of how much has been spent during the specified timeframe.

**Run Rate**: Projects the estimated end-of-month cost based on the past 30 days of spending. It allows users to monitor whether their projected spend for the month will exceed or stay within budget, providing actionable insights to adjust usage or allocations and ensure better financial management throughout the month.

*How the Calculation Works:*

\- The total cost from the past 30 days is used to estimate the spending trend.

\- This trend is then projected forward for the remaining days in the current month, estimating the total expected spend by month-end.

<figure><img src="https://downloads.intercomcdn.eu/i/o/22134861/d4e6c0f813a9c0e87b2eb98c/AD_4nXcb2StV8d12xrTkzZVQYsiBvdrj_weIog_I3v9xDmXr5stmj4d8owzgGBB6Qr_ERFhLFLP10Wl-bnrAcTxkueSq8K-Iqhg7SYnSlzDuH1sOsdHZhPndvkBarjccbNdBR1vHfw2cDpib3FcfkzOh9-MivU0?expires=1728973800&#x26;signature=c9029adccba8a255a1b26f7071ced7f7ea3b9f624a29133d9be788ea06ca1e45&#x26;req=0tduxlzyqjZk2hL085ZhoRgWXR9BATmeJVLGWWsh5DykXzZWO%2FaL35Jwt983%0AQ4M3fkqhjPKUvFrc%0A" alt=""><figcaption></figcaption></figure>

\- Once a month ends, the run rate shows the actual end-of-month spend.\
\
​Example: \
Suppose a company's total spend for the past 30 days is $45,000. If today is the 20th day of a month with 31 days, then there are 11 days remaining. The total spend for this month is $43,500.

1. *Calculate Daily Average Spend*: $45,000/30=$1,500
2. *Estimate Spend for the Remaining Days of the Month*: $1,500×11=$16,500
3. *Calculate Total Projected Spend by Month-End*: $43,500+$16,500=$60,000

According to the run rate, the estimated end-of-month spend will be $60,000. This projection helps you monitor whether you are on track to stay within the budget or if adjustments are needed.\
​

**Delta**: Indicates a customized delta between two selected metrics—such as Budget and Run Rate—for the current month and applied filters. By defining how the delta is calculated, teams can align financial tracking with their planning needs and quickly spot whether spend is expected to exceed or stay within budget. Available metrics include: Actual Cost, Forecast, Run Rate, and Budget.

<figure><img src="/files/zKscwmfT7t9E8ngkJlte" alt=""><figcaption></figcaption></figure>

1. **Search Bar** - Free search using keywords to find specific information.
2. **Time frame** - Filter for specific months, quarters, halves, or years.
3. **Key Filters** - Filter keys that you chose in the configuration process.\
   ​\
   Keys operate based on cascade filtering and ensure that filters are progressively refined according to the hierarchy established during configuration.\
   When filtering for a specific department, users will only see the relevant groups in the filters. Selecting a department will show only the applicable group names.\
   ​\
   ​**Example**:\
   Imagine the financial plan hierarchy is structured as follows:

   1. Department\
      TLV

      NYC
   2. Group Names

   If you filter by a specific **Department**, you will only see the groups within that department (TLV and NYC).\
   If you select TLV, you will only see the following group names in the filter:

   * **TLV Department**
     * Data
     * Core

   This hierarchical approach simplifies filtering data by ensuring that each step is more focused and manageable.
4. **Settings** - View and edit your financial plan configurations. See [Edit Financial Plan Settings](#edit-financial-plan-settings).
5. **Share link** - Share a link of the financial plan.
6. **Aggregate By** - You can aggregate the data by keys you chose in the configuration process.
7. **Export** - Download a CSV file of the current view.
8. **Import** - Import Data to your financial plans. See [Input Data to Financial Plans](#h_da5b90eeee).
9. **Add a Custom Line Item** - Custom line items let you add rows not included in the automatic setup based on your chosen keys. This allows you to anticipate future relevance and budget for these items as part of your financial plan. See [Input Custom Line Items](#h_da5b90eeee).

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Custom line items cannot be added if the plan has reached the 1,000 line limit.</p></div>
10. **Duplicate Plan** - Duplicate your financial plan with all its settings and configurations and use it as a basis for making a new customized plan. If a sync is required, you can update the plan by duplicating it. See [Duplicate your Financial Plan](#duplicate-your-financial-plan).
11. **Columns Management** - Choose which columns to show or hide.
12. **Show Deltas** - Choose to show or hide Delta columns.
13. **Show Actual Costs**- Choose to show or hide Actual Cost columns.
14. **Show Forecasts**- Choose to show or hide Forecast columns.
15. **Show Run Rates** - Choose to show or hide the run rate column.
16. **Show Only Lines with Missing Budgets** - Filter for missing budgets only.
17. **Show Only Custom Lines** - Filter for customs lines only.
18. **Show Ignored Line Items** - Ignore individual or multiple line items to ensure they are not part of your plan.
19. **Edit Budgets in a Line Item** - Editing budgets in a line item within a financial plan allows you to update and manage the financial allocations for specific entries or distribute them evenly throughout each month. See [Edit Budgets in a Line Item](#h_b2d2368ced).
20. **Ignore Line Items** - Ignore individual or multiple line items to ensure they are not part of your plan. See [Ignore Line Items](#ignore-line-items).
21. **Comment on a Line Item** - Commenting on a line item lets you add notes, feedback, or explanations directly to individual budget entries within a financial plan. See [Comment on a Line Item](#comment-on-a-line-item).

### **Custom Line Items**

#### **Input Custom Line Items**

Custom line items allow you to add rows not included in the automatic setup based on your chosen keys. You may add a custom line if you anticipate its relevance in the future and want to budget for it as part of your financial plan.

**To add custom line items**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/LtF9IpAGAsPkRKB2uE9f" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.<br>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20221172/0e25390079acf0a67f15d173/image.png?expires=1727308800&#x26;signature=be6ca00640c88bdd72268461aaa1c58945eb79083a58fe30f7c1f5c909145e0e&#x26;req=0tVtx1n7qzVk2hj99dpg6m1hLjrV6yYNQMFk13VD9egiaKr%2Bl29M4mjd7Koc%0AmcafU6n%2FvBMoBXI%2FskJITzda%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/gOLFlUGBvpC3fSSAvBSz" alt=""><figcaption></figcaption></figure>
3. In your financial plan click ![](https://lh7-us.googleusercontent.com/docsz/AD_4nXf_5emtE1rfZHBdCGzAPUC9ksu__cZkhl3P3XesNV6buOj3c0lrWWqXHJ04TS2jGODrcHni5sXeQn8flB8K8EIigJJPpR-bWpIbRobACSBftmruLXzipKbF-Ah8gpVv4afY2yhTsmjKOur7u84KrNyeqjNu?key=fjqBSIeK_DDgXRG_cRbrLA) and then click **Add Custom Line Item**.\
   The **Add Custom Line Item** window appears. <br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Financial plans support up to 1000 line items. You cannot add custom line items if you have already reached this limit.</p></div>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/15120897/c46476b31327e1e4ec70c082/AD_4nXcY8eoEsFYGxrTMFf0yGEAV64YvMnZZhtBCea2IFDp0GUeI6HU6U3ZdND27kWIo3wZi0sJW50_8zOO5HDkb_bscOLrLgT7majLAu6momQuL4cQ4w2exerRRyOop4td3r_vNvISjr1auAEsDvDgCUJtFH1yk?expires=1727308800&#x26;signature=e1df225c7f2361635621d24aff6e1ed1318d1f8fe6b5d74f11b5d24262945765&#x26;req=0dBux1jypTBk2hj99dpg6srsLUanwvsobx1vSOOFHB%2B62LMjguEh18ikEBU6%0AHWMGZGcMAdAbDwlqMrw%2BhYUn%0A" alt=""><figcaption></figcaption></figure>

   <div align="left"><figure><img src="/files/Ngp0edKRfdctPuIXRUyK" alt=""><figcaption></figcaption></figure></div>
4. Select values for the keys or add your own values, then click **Add Line Item**.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: When adding your own values, you can choose to add values to one or all of the keys.</p></div>

   The line item appears in the financial plan list with an ![](https://lh7-us.googleusercontent.com/docsz/AD_4nXePV41TFGYSEQTH2Dtb7RoNFABLChpTr4RoL9cypn22Gq-_GhfcVNmirrja8W1420IyZz0usoPkHh5WbUCeMmiMYAIa0CKHN6B3fZliyx5YSxwgakhEE46AKvi3TyMFiUjENeKs1Qt2YA60p51Qd7FGEL6j?key=fjqBSIeK_DDgXRG_cRbrLA)indicator.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/15120786/4f3d51d18c32814d32f8284e/Screenshot+2024-06-19+at+15_13_07.png?expires=1727308800&#x26;signature=2069778e3f7e68d7fd0506fccc7e2067cbc0834b1e0befa660d6f0d0f832ab19&#x26;req=0dBux1j9pDFk2hj99dpg6v9rraq8bi%2Bx4JXwVcVPCIGtoNkufD4XpY%2BIXRvD%0ArFSgT5mLpQ2IKljOaVHjOk0N%0A" alt=""><figcaption></figcaption></figure>

**To show only custom line items**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/yQRtDIyuTyUWWNM6Sey2" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/DVlbHsaJtT7yrjDVctvC" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20220853/81408e37fa5bf800692d9ccd/image.png?expires=1727308800&#x26;signature=ebb4555a059c04b873af57e26101c15ba63de607aae5ae0ba21ac85fffef4705&#x26;req=0tVtx1jyqTRk2hj99dpg6qKUB6sP6GdP8fLj23r%2FZY0fBwE%2FxKW2GWiuhJ4g%0Aztnejh8QxMCxca5ldH3cObnf%0A" alt=""><figcaption></figcaption></figure>
3. In your Financial Plan, click![](https://lh7-us.googleusercontent.com/docsz/AD_4nXf_5emtE1rfZHBdCGzAPUC9ksu__cZkhl3P3XesNV6buOj3c0lrWWqXHJ04TS2jGODrcHni5sXeQn8flB8K8EIigJJPpR-bWpIbRobACSBftmruLXzipKbF-Ah8gpVv4afY2yhTsmjKOur7u84KrNyeqjNu?key=fjqBSIeK_DDgXRG_cRbrLA) and then toggle on **Show Only Custom Lines**.\
   Only your custom line items appear in the financial plan.
4. Toggle off **Show Only Custom Lines** to return to the full financial plan list.

#### **Ignore Line Items**

Ignore individual or multiple line items to ensure they are not part of your plan. The line item is not deleted, but its data will not be included in the financial plan calculation.

{% hint style="info" %}
**Note**: Only Admins can ignore items, view ignored items, and reinclude them into the plan.
{% endhint %}

**To ignore one line item**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/BPtH7nEzgmM8OqKMKd9A" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/3dMPkImAqRMlE97uv9BI" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20220376/2d49a7907021f1b0782cef37/image.png?expires=1727308800&#x26;signature=b4e8478de1fc367374ba84405a8976d30cd3f7cc0eef35a381ac4f871f5f6df5&#x26;req=0tVtx1j5qzFk2hj99dpg6nvSCRZIcFU3zPz%2BgcV0WZjMf9iP6h35laGC5Yxi%0AyiyBwfVdZ1R5B7b2vtpirXWA%0A" alt=""><figcaption></figcaption></figure>
3. In your financial plan, find the line item you want to ignore and toggle it off.\
   The line item and its data are ignored.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Ignored lines are not shown in the view.</p></div>

**To ignore multiple line items**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/3ECb7tPUCEk62DPcytoi" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/sRWSuu47ylAH4wGVHxBF" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20220008/ad3d43dbab80998eaa84e1dd/image.png?expires=1727308800&#x26;signature=31470486b2019585a1310f0e1daea791aa4e414e8c5a9cb64ac7c61a8ea7629a&#x26;req=0tVtx1j6rD9k2hj99dpg6nPPflKqEmO7Y4JyYjagVIBLd9samEUr1vZ12cId%0Akr2Jad%2FWdh71M9t%2F3btj53Wu%0A" alt=""><figcaption></figcaption></figure>
3. In your financial plan, find line items you want to ignore. Mark the checkbox at the beginning of each line item.\
   The **Change Status** bar appears at the bottom of the financial plan.

   <figure><img src="/files/wz492fpXbl7mzrVUIYda" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20231109/446f60ccd1517f514b026be0/image.png?expires=1727308800&#x26;signature=b5adbbe01a92d4b35bd220d4d8e7b2ac4192da68dc0bb09b529c3d62d18c1803&#x26;req=0tVtxln7rD5k2hj99dpg6n5ZGpAfSkKGohUuijjHymMSBjbDUJ6l3ghOh4x2%0Am0PmuChdIWuiTRVbj9b1zjXR%0A" alt=""><figcaption></figcaption></figure>
4. Click **Change Status**.\
   A dropdown appears.\
   ![](/files/DweF4YYlbAKI3gwZEvgV)
5. Choose to **Ignore** the chosen line items.\
   The line items are ignored.<br>

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Ignored lines are not shown in the view.</p></div>

**To show ignored line items**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/EEvvcgosC7i2CgFK5fly" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/WTP7BikJGdoFZh7yQKmz" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20219732/e3254014065127f7ef8ff726/image.png?expires=1727308800&#x26;signature=5da30da7291181385721e69671eb8bdb68bfccc107f33752d66c1538569b7722&#x26;req=0tVtxFH9rzVk2hj99dpg6grsjWNdIOAIammGbXannaHmz1aAHRs1K2A87ZEh%0AFavbjeGMtaAmNtWxS2zLvdrm%0A" alt=""><figcaption></figcaption></figure>
3. In your financial plan, click![](https://lh7-us.googleusercontent.com/docsz/AD_4nXf_5emtE1rfZHBdCGzAPUC9ksu__cZkhl3P3XesNV6buOj3c0lrWWqXHJ04TS2jGODrcHni5sXeQn8flB8K8EIigJJPpR-bWpIbRobACSBftmruLXzipKbF-Ah8gpVv4afY2yhTsmjKOur7u84KrNyeqjNu?key=fjqBSIeK_DDgXRG_cRbrLA) and then toggle on **Show Ignored Line Items**.\
   Your ignored line items reappear.

#### **Comment on a Line Item**

Commenting on a line item enables you to add notes, feedback, or explanations directly to individual line items within a financial plan, facilitating clear communication and better financial management.

**To comment on a line item**:

1. Navigate to **Financial Plans**.\
   You are brought to the **Financial Plans list**.

   <figure><img src="/files/3VjUKcyjbwqx1U1cWdcP" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/w0a72UTNMx12jbfRSlsi" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20218276/8dd95dcb4fedad281eda7a4d/image.png?expires=1727308800&#x26;signature=5dae7a35c4f67d9646f98ec9adb217b5eaba39ae83b5ee0d4c89c4dd0734f3e3&#x26;req=0tVtxFD4qzFk2hj99dpg6s0HY3TRRzFfCGbLTtNssueVDnRoheqIGIucQn7J%0A2%2BgOc1kS7qr6AdEsdMEiM5G5%0A" alt=""><figcaption></figcaption></figure>
3. In the comment column of your financial plan, click ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXdEE1oh8BnMGR-0LfQkYRJ1GUpQt62RJdhme6_snySpw0-ZrMyduUL_aqxY7IEP0Cp_4w-9ZhFEXTMWzvI-9LAzlRUcVTiOqhpjq8yyuvMBZOR21TAsoyDMuz5h0lAl7ydLjLXYv-9rV_ZQsAAovtt-TBJV?key=fjqBSIeK_DDgXRG_cRbrLA) for the line item you want to comment on.\
   The commenting popup appears.\
   ​![](/files/NY0ywpB2bMj1iPR05tu1)
4. Write a comment and then click **Save**.\
   ​Your comment is saved.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: You can sort the column so lines with comments will appear at the top by clicking <img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdp-4OCO-LvX1Z6tw_uy7MfbAhfbnTmCOlYlTBCgkj7gNOVLD26xdDwBsPY2ZC33I-L3HXe0-wXA2Uvf_lxrMUZdLCqU_G9so_QX0YOJtIQNfndpjmjOxdxgHGu95jwLvDq77oudnXssxgaO3n2vQI8O2xz?key=fjqBSIeK_DDgXRG_cRbrLA" alt="">> <strong>Sort Descending</strong> by the comments column.</p></div>

**To edit a comment**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/Tv7VA3kjcdXONm2aw1FP" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/ZlNP2cEBxBSEs5Mx64zS" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20218276/8dd95dcb4fedad281eda7a4d/image.png?expires=1727308800&#x26;signature=5dae7a35c4f67d9646f98ec9adb217b5eaba39ae83b5ee0d4c89c4dd0734f3e3&#x26;req=0tVtxFD4qzFk2hj99dpg6s0HY3TRRzFfCGbLTtNssueVDnRoheqIGIucQn7J%0A2%2BgOc1kS7qr6AdEsdMEiM5G5%0A" alt=""><figcaption></figcaption></figure>
3. In the comment column of your financial plan, click ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXezfjz0Gtirfp5ZIH21IJ64VWGNguQd_6RoPmNlAL1_Xs4m8buZwjHQLEUV14JToyADidLOfFFr5UTKB-81tddcBnixF2kKK9TICCxykAXCTUYxExroF5KPlhmBZSaWnqnbuliRYYqxyKkDk7p19cgHlI07?key=fjqBSIeK_DDgXRG_cRbrLA) for the comment you want to edit.\
   The commenting popup appears.
4. Make your changes to the comment and click **Save**.

**To delete a comment on a line item**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/8rdeEO9Xj0aFhR45Eksi" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/zrPvzM6n3P3hSi6ABeel" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20218276/8dd95dcb4fedad281eda7a4d/image.png?expires=1727308800&#x26;signature=5dae7a35c4f67d9646f98ec9adb217b5eaba39ae83b5ee0d4c89c4dd0734f3e3&#x26;req=0tVtxFD4qzFk2hj99dpg6s0HY3TRRzFfCGbLTtNssueVDnRoheqIGIucQn7J%0A2%2BgOc1kS7qr6AdEsdMEiM5G5%0A" alt=""><figcaption></figcaption></figure>
3. In the comment column of your financial plan, click ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXezfjz0Gtirfp5ZIH21IJ64VWGNguQd_6RoPmNlAL1_Xs4m8buZwjHQLEUV14JToyADidLOfFFr5UTKB-81tddcBnixF2kKK9TICCxykAXCTUYxExroF5KPlhmBZSaWnqnbuliRYYqxyKkDk7p19cgHlI07?key=fjqBSIeK_DDgXRG_cRbrLA) for the comment you want to delete.\
   The commenting popup appears.

   <div align="left"><figure><img src="https://downloads.intercomcdn.eu/i/o/20218364/4d8b3fa996cc3b2c58c152d5/image.png?expires=1727308800&#x26;signature=e1c0351f8a3a51ad4d5cb3ba43cd1588c4447a2dc472875253cc9ad76b015719&#x26;req=0tVtxFD5qjNk2hj99dpg6rG4jQCy9MF1PjKhmQpu%2FrQmiNBVAVabP91ZgAnx%0A%2BYGUOAjiwapfmnNdiA3v34m1%0A" alt=""><figcaption></figcaption></figure></div>
4. Click **Delete**.\
   The **Delete this comment** popup appears.

   <div align="left"><figure><img src="https://downloads.intercomcdn.eu/i/o/20218648/88554b38006afdf66ac1d521/image.png?expires=1727308800&#x26;signature=55ba323117337869500f7700d3a65499aeab0db725a93d112a68d880210a277e&#x26;req=0tVtxFD8qD9k2hj99dpg6lrF5CcLqT2%2FU8%2FKCchHQKTF8sAezpw9nPir%2FfIl%0AL4KqsLpjYhs2%2FMuTKOZfu%2FZh%0A" alt=""><figcaption></figcaption></figure></div>
5. Click **Delete**.\
   The comment is deleted.

#### **Investigate a Line Item in MegaBill**

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/7Uf0bG2iaDUIadQ8b9RL" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** list.<br>

   <figure><img src="/files/f5ZDak0mcKa1vjbFMbtb" alt=""><figcaption></figcaption></figure>
3. **Click on an Actual Cost** cell of a specific month that you want to investigate.

   You are brought to MegaBill, filtered for that value and month.<br>

   <figure><img src="/files/OgI7qOQkCGaK7TfzrksP" alt=""><figcaption></figcaption></figure>

### **Plan Settings and Controls**

#### **Edit Financial Plan Configuration**

Edit your plan settings to optimize functionality and meet specific objectives efficiently.

**To edit plan settings**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/DS5TBbzyRlxROoMqvg8d" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/akOIlhwxxWuvsZKbL35W" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20216913/05786e943e3c639466ec45cb/image.png?expires=1727308800&#x26;signature=4dc1048ce3b6782c5d009f93d3dc1ffb97dfdc56355f90ccc159868cf33bea7b&#x26;req=0tVtxF7zrTRk2hj99dpg6jXlQuzQHZhKhWybNUmZ1dcjF7mWSKY3fnPLhysg%0A0vZj5FObDjLqssInUFMm2Zs5%0A" alt=""><figcaption></figcaption></figure>
3. In your financial plan, click ![](https://lh7-us.googleusercontent.com/docsz/AD_4nXfrtRs2Y4g6RShDY6v5aQ4upZzl5sqo7BHe0bPPwAoBEfcNLPjvZDxboa8NsS0xf16Mrn_EA7DtHKfurjKtvquBJNWXE1RnItxfHp86h-vFOK4kW3N8xfvXHlmSROP5qaMcbZS-xbhybeoNIBYAR67Z8RcX?key=fjqBSIeK_DDgXRG_cRbrLA)next to the financial plan name.\
   The edit settings popup appears.

   <figure><img src="/files/guSEC6W7uNORwvDpXdfs" alt=""><figcaption></figcaption></figure>
4. You can edit the following:
   1. **Financial plan name**: Enter a financial plan name.
   2. [**ACL permissions**](/cross-platform-features/list-of-cross-platform-features/acl-permissions):

      You can set **read** and **write** permissions as either **Public**, **Private**, and **Shared**. Permission for an object is granted if a user or group have a role with the proper permission and also ACL permission to access the object. By default, ACL permissions for read and write access are public, meaning users can view or modify an object if they have [Role-Based Access Control (RBAC)](/settings/role-based-access-control-rbac)  to read or write the object.&#x20;

      <div align="left"><figure><img src="/files/aac29YmDU06saxps5FJt" alt=""><figcaption></figcaption></figure></div>

      * **Types of ACL Permissions:**
        * **Public:** Grants access to anyone in the organization that has Role-Based Access Control (RBAC).
        * **Private:** Restricts access to admins and the user who created the object.
        * **Shared:** Limits access to specific users or groups that have Role-Based Access Control (RBAC).&#x20;

          <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p><strong>Note</strong>: Admins and creators always retain access.</p></div>

          <div align="left"><figure><img src="/files/xgs21NqRNlFS8aaTbt5b" alt=""><figcaption></figcaption></figure></div>
5. Click **Save**.\
   Your changes are implemented into the plan.

#### Edit Run Rate Alerts&#x20;

Edit your run rate alerts to notify you when the monthly run rate for any given line item exceeds its budgeted amount, allowing you to make timely adjustments to stay on target with your financial goals.\
\
**To edit your run rate alert:**

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/ypciNxwE7iFVC7trcINw" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/rszGqCVv4v6ViY1y2QbO" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20216913/05786e943e3c639466ec45cb/image.png?expires=1727308800&#x26;signature=4dc1048ce3b6782c5d009f93d3dc1ffb97dfdc56355f90ccc159868cf33bea7b&#x26;req=0tVtxF7zrTRk2hj99dpg6jXlQuzQHZhKhWybNUmZ1dcjF7mWSKY3fnPLhysg%0A0vZj5FObDjLqssInUFMm2Zs5%0A" alt=""><figcaption></figcaption></figure>
3. In your financial plan, click ![](https://lh7-us.googleusercontent.com/docsz/AD_4nXfrtRs2Y4g6RShDY6v5aQ4upZzl5sqo7BHe0bPPwAoBEfcNLPjvZDxboa8NsS0xf16Mrn_EA7DtHKfurjKtvquBJNWXE1RnItxfHp86h-vFOK4kW3N8xfvXHlmSROP5qaMcbZS-xbhybeoNIBYAR67Z8RcX?key=fjqBSIeK_DDgXRG_cRbrLA)next to the financial plan name.\
   The edit settings popup appears.<br>

   <figure><img src="/files/RNqFZyosPAsetNtEt5uN" alt=""><figcaption></figcaption></figure>
4. Click the **Run Rate Alert** tab.<br>

   <figure><img src="/files/fKDr9CrQ0bCtFNcGu5hb" alt=""><figcaption></figcaption></figure>
5. Toggle on Enable Run Rate Alert and follow the steps in [Run Rate Alerts](#id-4.-run-rate-alerts) to edit the alert.

#### **Edit Customizations**

Customized delta, shown in both the financial plan’s details table and dashboard, aligns with your specific planning and analysis needs.

**To edit your Delta Customization:**

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.<br>

   <figure><img src="/files/9h7OV99f72LSFzVoYibu" alt=""><figcaption></figcaption></figure>

<figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>

2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.<br>

   <figure><img src="/files/xSouPosrMGTgZveGCjRk" alt=""><figcaption></figcaption></figure>

<figure><img src="https://downloads.intercomcdn.eu/i/o/20216913/05786e943e3c639466ec45cb/image.png?expires=1727308800&#x26;signature=4dc1048ce3b6782c5d009f93d3dc1ffb97dfdc56355f90ccc159868cf33bea7b&#x26;req=0tVtxF7zrTRk2hj99dpg6jXlQuzQHZhKhWybNUmZ1dcjF7mWSKY3fnPLhysg%0A0vZj5FObDjLqssInUFMm2Zs5%0A" alt=""><figcaption></figcaption></figure>

3. In your financial plan, click ![](https://lh7-us.googleusercontent.com/docsz/AD_4nXfrtRs2Y4g6RShDY6v5aQ4upZzl5sqo7BHe0bPPwAoBEfcNLPjvZDxboa8NsS0xf16Mrn_EA7DtHKfurjKtvquBJNWXE1RnItxfHp86h-vFOK4kW3N8xfvXHlmSROP5qaMcbZS-xbhybeoNIBYAR67Z8RcX?key=fjqBSIeK_DDgXRG_cRbrLA)next to the financial plan name.\
   The edit settings popup appears.<br>

   <figure><img src="/files/PEXOtosMQFWFi3NgpNMy" alt=""><figcaption></figcaption></figure>
4. Click the **Customizations** tab.<br>

   <figure><img src="/files/j4oCtKJSfucRjVwrvEH6" alt=""><figcaption></figcaption></figure>
5. Change the metrics and click **Save**.\
   Your changes are implemented into the plan.

#### **Sync your Financial Plan**

Changes made to virtual tags or Megabill keys can alter the keys that define your financial plan. If the values or the metadata of the virtual tag keys that define this financial plan have changed, a ‘Sync required’ icon will appear. Duplicate your financial plan to enable a sync with all the new key values.&#x20;

{% hint style="info" %}
**Note**:&#x20;

* Only Admins can duplicate or synd financial plans.
* Financial plans support up to 1,000 line items. If syncing would cause the plan to exceed this limit, it will not proceed.
  {% endhint %}

**To sync your financial plan:**

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/87B4rZLcOfyiqKCRh5LP" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.<br>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20210438/198d1939dc0c0578175b20fd/image.png?expires=1727308800&#x26;signature=5fea68f857680db3055f9341b1a89fec382d91e0d78835d2d314071aee151413&#x26;req=0tVtxFj%2Brz9k2hj99dpg6oeHJYIlUlNivyQts%2FCeYDrlFp2GmVWrUtoxFF6Y%0AmTgBL8gUMPggQvwGtnNjCJCH%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/TI0tT7spFugB44WuP7kn" alt=""><figcaption></figcaption></figure>
3. In your Financial Plan, click![](https://lh7-us.googleusercontent.com/docsz/AD_4nXf_5emtE1rfZHBdCGzAPUC9ksu__cZkhl3P3XesNV6buOj3c0lrWWqXHJ04TS2jGODrcHni5sXeQn8flB8K8EIigJJPpR-bWpIbRobACSBftmruLXzipKbF-Ah8gpVv4afY2yhTsmjKOur7u84KrNyeqjNu?key=fjqBSIeK_DDgXRG_cRbrLA), and then click **Duplicate Plan** or click <img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe7TQ5vWOenfmngi2PbFGgqFQEOvimcrGS4iqhlDTWc8WcFE3ts9Q9Aob7JRw1SbHiReTJR8jehKd49ZMGVDNeMCMsKneFCAIRdED2T7jZnbBRLTUO_kkJcUWrxhJJvJwg1q3_8i02Ll-343-nuBOruCt4?key=fjqBSIeK_DDgXRG_cRbrLA" alt="" data-size="line">at the top right of the plan.\
   The Duplicate Financial Plan window appears.\
   ![](/files/Msn6ElC6WukUGWONhXrT)
4. Mark **Duplicate and include recent updates**; optionally add a new name and click **Duplicate**.\
   Your financial plan is duplicated and synced.

**Sync FAQ**:

* **Question**: Why does my financial plan require a sync, and what causes it to be out of sync?

  **Answer**: Changes to virtual tags can alter the line items defined in your financial plan. If a financial plan's virtual tags values or metadata have been changed, a ‘Sync required’ icon will appear, indicating that the plan needs to be updated.
* **Question**: What happens to a line item after a sync if its virtual tag value has been deleted?

  **Answer**: After the sync, the old line item will still appear with the budget value, and the cost will stop populating. For example, if a virtual tag value is removed, the associated line item will no longer accrue costs but will remain visible in the plan.
* **Question**: What happens when renaming a virtual tag value?

  **Answer**: When you rename a virtual tag, a ‘Sync required’ icon will appear, indicating that the plan needs updating. To sync with the new name, you must duplicate your financial plan. After duplicating, the old value will remain, and a new entry will be added for the new name.
* **Question**: Can I remove a line item entry that is not relevant anymore?\
  ​*Scenario*:

  You have a financial plan with the following keys:\
  \- Org\
  \- Team\
  \- App\
  After syncing, you notice two line items in the financial plan:\
  \- Org 1 - Team A - App A (old entry)\
  \- Org 1 - Team B - App A (new entry)\
  I want to remove the old entry and only keep the new one.\
  ​**Answer**: You can ignore an old line item by toggling it off. The line item data will not be deleted, but its data will not be included in the financial plan calculation. See [Input Custom Line Items](#input-custom-line-items).

#### **Duplicate your Financial Plan**

Duplicate your financial plan with all its settings and configurations and use it as a basis for making a new customized plan. This approach saves time and streamlines your workflow, making revising projects, adapting to new scenarios, or optimizing processes more efficient.

{% hint style="info" %}
**Note**: Only Admins can duplicate financial plans.
{% endhint %}

**To duplicate your plan**:

1. Navigate to **Financial Plans**.\
   You are brought to the **Financial Plans** list.

   <figure><img src="/files/TQDGMQmMPlJqt39zMvea" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208114/c05579c6d7bbebae7e4158be/image.png?expires=1727308800&#x26;signature=0d515de05f596665dfb1663f29d8ebd76cf9ee07efb571276df2c9e9131774e6&#x26;req=0tVtxVD7rTNk2hj99dpg6uqf3m3NEkP7IT6tRsD8Bx6hMuJwF4zWlPVbISnC%0AXftBP61nK9f6I7fAVcyRA8zN%0A" alt=""><figcaption></figcaption></figure>
2. Choose a financial plan.\
   You are brought to the **Financial Plan Details** tab.

   <figure><img src="/files/rgWtgPzTplzs4Mxsd1kO" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20210224/21f08df6083120e7037e9e30/image.png?expires=1727308800&#x26;signature=492df866db9ade973ea7e29cbba97ad36c3bf21247a5bf66c52d727d0dffcba8&#x26;req=0tVtxFj4rjNk2hj99dpg6gdN2gk2KTGe8k76kdShopceccAt3rM9Ff6jUxs0%0AENMVP%2BXr0WWVMmaHwjIIbzEC%0A" alt=""><figcaption></figcaption></figure>
3. Click![](https://lh7-us.googleusercontent.com/docsz/AD_4nXf_5emtE1rfZHBdCGzAPUC9ksu__cZkhl3P3XesNV6buOj3c0lrWWqXHJ04TS2jGODrcHni5sXeQn8flB8K8EIigJJPpR-bWpIbRobACSBftmruLXzipKbF-Ah8gpVv4afY2yhTsmjKOur7u84KrNyeqjNu?key=fjqBSIeK_DDgXRG_cRbrLA)and then click **Duplicate Plan**.\
   The Duplicate Financial Plan window appears.\
   ![](/files/7P7gpgyQfuyI1Z3HrJ80)
4. Add a new name and click **Duplicate**.\
   The plan is duplicated.

**To delete your financial plan**:

1. Navigate to **Financial Plans**.\
   You are brought to the Financial Plans list.

   <figure><img src="/files/dCt1Jc7ZfAM0QA1Xr4oc" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20208791/562414b640b9e703fa27cb45/image.png?expires=1727308800&#x26;signature=42e38a6615410d3998a323cb58d147fddc78643774653059a3564d19a0ba6a01&#x26;req=0tVtxVD9pTZk2hj99dpg6rYBfrnWn4rRbLQ4c2L%2FoPdmGHoLkzeWvJ4p29Ig%0ApEfEtavZs8wLRNNJgIoiGacD%0A" alt=""><figcaption></figcaption></figure>
2. Click![](https://lh7-us.googleusercontent.com/docsz/AD_4nXf_5emtE1rfZHBdCGzAPUC9ksu__cZkhl3P3XesNV6buOj3c0lrWWqXHJ04TS2jGODrcHni5sXeQn8flB8K8EIigJJPpR-bWpIbRobACSBftmruLXzipKbF-Ah8gpVv4afY2yhTsmjKOur7u84KrNyeqjNu?key=fjqBSIeK_DDgXRG_cRbrLA)next to the financial plan you want to delete and then **Delete Financial Plan**.\
   The Delete Financial Plan pop-up appears.

   <div align="left"><figure><img src="/files/AfUv2ngpOl0kh8lqJR83" alt=""><figcaption></figcaption></figure></div>

   <div align="left"><figure><img src="https://downloads.intercomcdn.eu/i/o/19621239/b2584516efdbadb34f961fbc/image.png?expires=1727308800&#x26;signature=9f29025c1ef3d63e2a29548a3e5758d85d4381c1adda41db423e200c6c568041&#x26;req=0dxpx1n4rz5k2hj99dpg6rcPLiBCJJaUrHd2P%2B51Gw1q6UsUM%2BcCX7qQZeBV%0AvCthB5swHKk9HIrTrO3%2B0pFU%0A" alt=""><figcaption></figcaption></figure></div>
3. Click **Delete**.\
   The Financial Plan is deleted.​

### Dashboard <a href="#h_e0181fe78e" id="h_e0181fe78e"></a>

The dashboard view provides a visual representation of your financial plan through widgets that display actual costs and budgets. This view allows you to quickly assess your financial status at a glance, identify any discrepancies between planned and actual expenditures, and make informed decisions based on real-time data. The dashboard's visual nature makes it easier to understand complex financial information and track your progress.

1. **Time frame** - Filter for specific months, quarters, halves, or years.
2. **Key Filters** - Filter keys that you chose in the configuration process.
3. **Aggregate By** - You can aggregate the data by keys you chose in the configuration process.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20203344/7db53cea6c49aacdf472430b/AD_4nXdgrRqdowJxw0r5AN2_kcgruYMzbESUVnoTI2HYFE3KRKuiqyliG1glWAAR3hITVaAEMh698lieAAKsqO2iVh0rihcfT6YhDCItroHJabNeCzsUpjsk1OFOBkI1nSy_cFfRI7UhjVEoDqUl55BV-l4ayAxj?expires=1727308800&#x26;signature=170c678ae9e9fa8bbfc1d89d4c348bf3845e6518771af8e5207fc8112e4a3115&#x26;req=0tVtxVv5qDNk2hj99dpg6m%2B97ADvszPPVK1gvgZ5L8UhpxlJNXrEAsnlq%2FcC%0APIdL6qnVYG%2BrtOXXFv5ViEPh%0A" alt=""><figcaption></figcaption></figure>
4. **Cost Summary**: This enables you to compare actual spending against budgeted targets, track performance, and make informed adjustments to stay within financial goals. This widget includes:\
   -*Actual Cost:* The total accumulated expenditures for the selected period and filters. It provides insight into how much has been spent within the specified timeframe.\
   -*Budget*: This displays the total accumulated budgeted amount for the same period and filters. It represents the financial targets set for the selected timeframe.\
   -*Delta*: Delta highlights the difference between two selected metrics—such as Actual Cost, Forecast, Run Rate, or Budget—for a given period and filters. This customizable metric helps analyze financial trends and deviations based on the specific metrics selected.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20203467/a379fb449d0071924322aa45/AD_4nXcIImylNwSZU8Vo9pNu_ShKNIiGwLi3yF26snPdyZSPkbxHCu8py4rqp6xAmql5OxSDi8cvRyjP-5PXs4DMhBvv3bLm0ujDF_qflQpubF7SEriB7DqOlLmZuLySIxnk3UsuvH3WJL7g3nleJg4XZTAsRxU?expires=1727308800&#x26;signature=3e1b8e311077f4eec007956e2a650f9a5de1b984fab0251f73e28b25cb8e9ee7&#x26;req=0tVtxVv%2BqjBk2hj99dpg6tAd7HVbE49yaFCFaRv%2FUAhrSR7mDagUb1B5PHms%0Av6ll3nJLlr3U1ysA9nqpoKAa%0A" alt=""><figcaption></figcaption></figure>
5. **The Budget vs Actual** (by date) - Provides a visual comparison of your planned budget against actual expenditures over a specified time period. This widget lets you track your financial performance and identify discrepancies between your projected budget and real spending.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20203520/dd233fc28fbd8f2f0b9b5a5d/AD_4nXfPCxjqKBX4J4TNIQFt-Up5JFimrkgdOgF7MaJqA5vlEGDwVwCBBMy9AMwzwv1gA1PfivOxhZgP97sXwe39YHKKGnb-4S7CtqzXPpd1r16xYDOBfRvVDv8Vlaj_MHyNDNk8Uhz1o7HmNKWd1dAR0ikaP-45?expires=1727308800&#x26;signature=940bdb5d74c4a7ee48815d5660aa516992c25de66421c59bfc28085d2fc849b4&#x26;req=0tVtxVv%2Frjdk2hj99dpg6vsgkXriF0vcPJgvBII4fMGnNvVe3Vq98igR9axi%0AcmjdSVbXkwcRWU%2BxdCg2ydBA%0A" alt=""><figcaption></figcaption></figure>
6. **The Budget vs Actual** (by value) - Provides a visual comparison of your planned budget against actual expenditures per value. This widget lets you track your financial performance and identify discrepancies between your projected budget and real spending per value.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20203582/3549026c99389ce478dc1f23/AD_4nXd_k9fX7pg4X2qyjSpQMDaEGYJLDDXreo3cNfcBv2_ydUUpe62qCrq1uexklSrNfhPlkqxv4nqNS90Hti6lXNdaUsal7fq_GX9Vootn4prwzcc4BfHOqSOu2kM2H2NfGwXEDsc3KLjH4PnoMH9B84C2Sstg?expires=1727308800&#x26;signature=7f84a36da462fbc592c9d58f2fd7d0da2a706b15b560737750cde1ae4ba1d955&#x26;req=0tVtxVv%2FpDVk2hj99dpg6soDhTrek9%2FaMRpLNsvX0otV3x2BLmdYlFODoVa3%0A%2F2z9p34vGAXK09VkcuOy3Z2j%0A" alt=""><figcaption></figcaption></figure>
7. **Budget Value Performance**—This widget provides a clear overview of your budgets per value by displaying three key metrics: cost, budget, and delta. It shows actual expenditures (cost), the planned, budgeted amount (budget), and the variance between them (delta). This widget lets you track and compare your spending against your financial targets per value, helping you identify discrepancies and make informed adjustments to stay aligned with your budget and financial goals.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20203647/6b3f349dcb050b6dae6f64d6/AD_4nXcw9gQXyCiCMcz4cGbvAc1k9g5vhEN3cSDe3kfkUwEdstr10x8R_M_H45XGd43ckNOcEZuSFTC1o_FJW12XXZgCwUMd_OqNS0MPfSUqKNV5npimwy_v6-OzzjIaE_7Iu1VlJN6WuMzmi31mrHu9dPLNx08?expires=1727308800&#x26;signature=582784202347fe60d75b1a8673357953651a3b87374a8faa1638458d89431892&#x26;req=0tVtxVv8qDBk2hj99dpg6rM607SwB1x%2FutajZ%2B6TIjfAsaZXU%2FbcAjBGnjO7%0AZmmx1Rn6NP%2FZk2EZM1zENK5S%0A" alt=""><figcaption></figcaption></figure>
8. **Actual Costs Trend** - Displays the ratio between the cost of the current month and the cost of the previous month. Tracking these ratios allows you to observe trends and patterns in your spending over time. By visualizing these monthly ratios, you can easily identify periods of significant increases or decreases in spending, assess financial performance, and make data-driven decisions to manage your budget more effectively.

   <figure><img src="https://downloads.intercomcdn.eu/i/o/20203682/10ba42d84d6fb7d96ecedaf9/AD_4nXfUbDccK5qh61ZXcgZcGDNGzawqNHEAq8ABXPmd0ToJbh2Q6AsLzxIvm6vlZCzixkBZHj5M_8z8JkbJ_-IgbezQdM0oz6XGUJ8moB3oDabWLCcf4_sFt6VaZWtSoMKOstiUBaKAZpo1eiDbW_ua2eToWdPZ?expires=1727308800&#x26;signature=d7a5cced2dce8279fbcc233dcfb70e4ac8913a495790a3ad31b3382d521ca125&#x26;req=0tVtxVv8pDVk2hj99dpg6rumQPGSMc26p5MvA9IuqJI5I1HNiMztiaU%2FMXxP%0Anb9xRQHLsdVPZlnkzhORXg00%0A" alt=""><figcaption></figcaption></figure>

### Plan Completion Rate <a href="#h_00029f968c" id="h_00029f968c"></a>

The Plan Completion Rate tab allows you to track the percentage of line items with budget values in their financial plans. This enables you to monitor the status of budgeted line items per quarter. By monitoring the completion rate, users can ensure that all necessary items are accounted for and budgeted, maintaining the accuracy and completeness of their financial plan. This feature provides a clear view of financial planning progress and highlights any areas needing attention or adjustments.

**Completion Rate Calculation**

The completion rate is calculated using the following formula:

<figure><img src="https://finout.intercom-attachments.eu/i/o/18128912/4ee0ad9c29c61d88d65e67d1/AD_4nXeNM9kYRieZjCyAGZkGrIUen4z5Jd4xZmoPztfAq7cVyYy9Chieom1-wy7cL6JZlHxOrOUC6EHxARXnU4FfVu05zWs0fHEhBA9VuE-9iaoRMSI06mXlMNssTa4jGRArTY2bGgTlFpICFDJxonfc1seqTSs?expires=1727308800&#x26;signature=950b2f32995a3fe4d5626fc2ecff63ea4552e9425344a98ca8bd0a0f7201ae47&#x26;req=0d1ux1DzrTVk2hj99dpg6jOzcATSopxNROK1ejhEgdizvAHNLgYqr2oQNsB9%0AT5D2P%2FvzCutYADfhxFkAV6BT%0A" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/sZkUGSrxUniCLpjjBazE" alt=""><figcaption></figcaption></figure>

1. **Search Bar** - Free search using keywords to find specific information.
2. **Time frame** - Filter for specific months, quarters, halves, or years.
3. **Key Filters** - Filter keys that you chose in the configuration process.

   The keys operate based on cascade filtering and ensure that filters are progressively refined according to the hierarchy established during configuration.

   When filtering for a specific department, users will only see the relevant groups in the filters. Selecting a department will show only the applicable group names.

   **Example**: Imagine the financial plan hierarchy is structured as follows:

   1. Department
      1. TLV
      2. NYC
   2. Group Names

   If you filter by a specific **Department**, you will only see the groups within that department. If you select TLV, you will see the following group names in the filter:

   * **TLV Department**:
     * Data
     * Core

   This hierarchical approach simplifies filtering data by ensuring that each step is more focused and manageable.
4. **Aggregate By** - You can aggregate the data by keys you chose in the configuration process.
5. **Status Indicators** - The completion status percentage of your financial plan is visually represented with colors according to the following thresholds:
   1. Green: 85% - 100%
   2. Yellow: 50% - 90%
   3. Red: 0% - 50%

### Add Metadata to Financial Plans <a href="#h_71f9175d15" id="h_71f9175d15"></a>

Once a financial plan is created, you can add custom columns to the financial plan by enriching the virtual tag values with metadata using the [Virtual Tag Metadata API](/api/finout-api/finout-api-v1/virtual-tag-metadata-api-v1).

{% hint style="info" %}
**Note**: You can only view custom metadata added to a value of the lowest virtual tag in your hierarchy.
{% endhint %}

**Use Case Example**:

Your current virtual tag and values:

You have created a financial plan with a “Dev Teams” virtual tag. This **Virtual tag** contains the following **Values**:

* Infrastructure
* Legacy App
* Core
* Data

<figure><img src="https://finout.intercom-attachments.eu/i/o/18128913/4b7acb8978b73d03ba97af07/AD_4nXe7LHs49Vbs0AxUT49TyqF7byGEOHmOEZn64C6h9NcfbLv9TV-RWD7eHFEbAVzofNC1mO4X3HMv_CY6YMczSkkUG2wcMJeo_Mfncl4tLV8GfhHU2664lJ3WrpXXotxYreycsQ8ijP5vRukp-1NxBQke4Y9D?expires=1727308800&#x26;signature=7face0cbf7e2b90c0b1c9b315f5fff255193a6e35799bb0e0557342485753394&#x26;req=0d1ux1DzrTRk2hj99dpg6iIHCi1kwSNVradRP4vd1LjihF9t6%2F6Ii%2FYYYSxT%0AQTXeOiVT1JRKsxhzAbnbeF%2FB%0A" alt=""><figcaption></figcaption></figure>

You want to add a new column with metadata for relevant value:

Add **Dave** as an **Owner** to the **Data** value of this virtual tag.

This is done by adding Custom Metadata to the value of the Dev Team virtual tag by using the [Virtual Tag Metadata API](https://docs.finout.io/en/articles/190851-virtual-tag-metadata-api-draft#h_b030924942).

{% hint style="info" %}
**Note**: After updating metadata for each value via API, you must [sync your plan](https://docs.finout.io/en/articles/176691-financial-plans#h_ff3a7edc14:~:text=into%20the%20plan.-,Sync%20your%20financial%20Plan,-Changes%20made%20to) in order to view the custom metadata column in the financial plan.
{% endhint %}

<figure><img src="https://finout.intercom-attachments.eu/i/o/18128915/4193cb20f85e940a3abe4d64/AD_4nXdWoWHo7SDF_tBDzhuyyt8lP-ZnJ2g-mVX418J3yUmZiOUafhT-Wi76C9L4PzqwEjUMV446TjQVea47HmWQmG4L5oaNTOlVbnd8xIzwd3a2SzVorpONKENFQEOdVB92JDsL2Diy3sdfrkSvWWppF7TGY8FP?expires=1727308800&#x26;signature=309bda670b998d29e9337d361d396a5bf9aabbf3878ec282b64078e306c4b962&#x26;req=0d1ux1DzrTJk2hj99dpg6jdtkD1rbMk6PFfp0QDOvZgTBrNa9l1wDpyqrSZ2%0ArbFvJ0zKqkjA64fgd3Xhk52%2F%0A" alt=""><figcaption></figcaption></figure>

**Result***:* A new column appears (Owner) with custom metadata (Dave) attached to a particular virtual tag value (“Data” value of the virtual tag “Dev Teams”).

**Custom Column Components**

The custom columns feature is configured based on the following components:

1. **Virtual tags** - The virtual tag chosen during your [financial plan setup](#h_5bfec57ebb).
2. **Virtual tag values** - The values in the virtual tag.
3. **Custom metadata** - Custom metadata that you want to attach to a particular virtual tag value.\
   ​

   <figure><img src="https://finout.intercom-attachments.eu/i/o/18128916/4188c080d57dde998ff92da6/AD_4nXeju2JWEbjYXmogHtGxqYC6wDtVX41GyTGxIlyWBAcw0a6fTvcNrHngMkf2cGJNAi8vfpsPeKOR4UdMW9prwC8dVMgPQfhqcg07g8UG1R22mzN68FNWZ60BkRV63Nlv8MJQKF72kc3LbjKkCHuNdrsIfPM-?expires=1727308800&#x26;signature=adef8c87d166807ee6099294745af260aa01cbcb1cc6fe918a8df9a94aea6f7b&#x26;req=0d1ux1DzrTFk2hj99dpg6mMwy0kNQmjGI3L1InDSR5lb50IDeGI29kXIioJz%0AiSZOsWkt9qmlxelyrc75b01K%0A" alt=""><figcaption></figcaption></figure>

### Financial Plans List

The Financial Plans list is your central workspace for managing all financial plans in Finout. From this page, you can quickly search for existing plans, create new financial plans, open multiple plans in separate browser tabs for comparison, adjust plan settings, and delete plans when they are no longer needed.

<figure><img src="/files/4UQNjPfV3XdcGIpeVds9" alt=""><figcaption></figcaption></figure>

1. **Search Financial Plans -** Quickly search financial plans using the search bar.
2. **Create Financial Plan** - [Create a new financial plan](#h_5bfec57ebb) to define budgets and track cloud spending against targets.
3. **Open Multiple Financial Plans** - You can open a financial plan in a new browser tab directly from the financial plan list.\
   Right-click the financial plan and select **Open in New Tab**, or use:

   * **Command + Click** on macOS
   * **Ctrl + Click** on Windows or Linux

   This allows you to compare multiple financial plans side by side or keep several financial plans open at the same time.
4. **Financial Plan Settings** – Edit a financial plan's configuration in the [settings](#plan-settings-and-controls).
5. **Delete Financial Plan** – Permanently delete a financial plan that is no longer required.


# Data Exporter

***

### Overview

Data Exporter automatically delivers your Finout cost data to your own Amazon S3 bucket every day, in Parquet format, ready to load into any BI tool, analytics platform, or data pipeline.

Instead of manually exporting reports, Data Exporter runs on a daily schedule and writes enriched cost data — including your [Virtual Tags](https://docs.finout.io/user-guide/inform/virtual-tags) and reallocation rules — directly to an S3 path of your choosing.

{% hint style="info" %}
Exported data is enriched by Finout. It includes Virtual Tags and all cost transformations applied in your [Data Explorer](https://docs.finout.io/user-guide/inform/data-explorer) analysis — not just raw billing data.
{% endhint %}

#### **What you get**

* Daily Parquet files written to your S3 bucket automatically
* Data enriched with your Finout Virtual Tags and dimensions
* Up to 3 months of historical backfill on first run
* Automatic re-export of any days where underlying data changed

### Step 1 — Create a Data Explorer Analysis

The export is based on a [Data Explorer](https://docs.finout.io/user-guide/inform/data-explorer) analysis, Finout's multi-dimensional reporting tool. The analysis defines the dimensions, filters, measurements, and Virtual Tags included in each daily export file.

#### **Create your analysis**

1. In the Finout console, navigate to **Data Explorer** in the left-hand menu.
2. Click **New Data Explorer**.
3. Give it a descriptive name.
4. Add your dimensions and measurements.
5. Apply any filters to scope the data (for example, specific cost centers or tag values).
6. Click **Save**.

**Important constraints**

* Each analysis can include up to **20 dimensions**. Plan your dimension selection accordingly before connecting the analysis to an export.
* Once a Data Explorer analysis is connected to an active export, the analysis itself is locked for editing. Note that the objects it references — such as Virtual Tags — remain editable, and changes to them are reflected in subsequent exports.
* Up to **5 analyses** can be scheduled as S3 exports per account.

### Step 2 — Configure Your S3 Endpoint

Data Exporter writes to your S3 bucket through an [Amazon S3 Bucket Endpoint](https://docs.finout.io/settings/endpoints/amazon-s3-bucket-endpoint-beta) configured in **Read and Write** mode.

If you don't already have a Read and Write S3 endpoint, follow the [Amazon S3 Bucket Endpoint](https://docs.finout.io/settings/endpoints/amazon-s3-bucket-endpoint) guide to create one. Make sure to:

* Select **Read and Write** under Bucket Access
* Use the Read and Write IAM policy from that guide

Once the endpoint is created and tested, return here for Step 3.

{% hint style="info" %}
A single Read and Write endpoint can be reused for multiple Data Exporter exports — each export writes to a different sub-path inside the bucket prefix.
{% endhint %}

### Step 3 — Share Your Configuration with Finout

Once your Data Explorer analysis and S3 endpoint are ready, send the following details to your Finout customer success manager to activate the export:

| Field                | Description                                                                                                                                                                                                                                                                                                                                                                                  |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Data Explorer ID** | The unique ID of the analysis to export. To find it: open Data Explorer, click the three-dot menu on your analysis, and select **Copy Data Explorer ID**.                                                                                                                                                                                                                                    |
| **Export Name**      | A standalone label for the export. This is not the Data Explorer analysis name — you provide it separately, and it is used as-is in your S3 path (see [Output File Location](https://claude.ai/chat/c9b13051-10c0-4440-9cee-65d5dc8791ee#output-file-location)). Spaces and case are preserved. Avoid characters that S3 object keys don't support (for example, apostrophes and backticks). |
| **Endpoint Name**    | The name of the S3 endpoint you configured in Step 2.                                                                                                                                                                                                                                                                                                                                        |

Finout configures the export on your behalf and confirms once the first run is scheduled.

### Understanding the Export Output

#### **Output file location**

Each day, Finout writes one or more Parquet files to the following path in your bucket:

```
s3://<your-bucket>/<prefix>/data-exporter/<provided-export-name>/<YYYY-MM-DD>/
```

For example, if your **Export Name** is `Finout Cost Report`, a daily file lands at:

```
s3://acme-finout/exports/data-exporter/Finout Cost Report/2026-04-15/
```

#### **What's in each file**

* Columns reflect the dimensions and measurements you defined in your Data Explorer analysis.
* Virtual Tags appear as dedicated columns — pre-applied by Finout's enrichment engine.
* Data is partitioned by date, with one folder per day.

#### **Historical data and backfill**

| Scenario                | Behavior                                                                                                                                      |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| **First run**           | Finout exports up to 3 months of historical data, then keeps it up to date daily. If longer timeframe is needed, please reach out to support. |
| **Recent days**         | The most recent 2 days are always refreshed to capture late-arriving billing updates.                                                         |
| **Billing changes**     | If billing data changes for any day within the past 3 months, the affected days are re-exported automatically.                                |
| **Virtual Tag changes** | If a Virtual Tag used in the report is modified, the previous 3 months are re-exported automatically.                                         |
| **No changes**          | Days with no changes are not re-exported, keeping the process efficient.                                                                      |

### FAQs

**Can I export multiple analyses to the same bucket?**

Yes. You can configure up to 5 scheduled S3 exports per account. Each analysis can write to the same bucket using a different prefix path, keeping datasets organized and separate.

**Can I change my Data Explorer analysis after scheduling an export?**

Not while the export is active. The analysis configuration is locked to ensure export consistency.

**Can I use the same S3 bucket I already use for Finout telemetry or billing data?**

Yes — as long as the IAM role has the required write permissions and the prefix paths do not conflict. We recommend using a dedicated prefix (for example, `finout/data-exporter/`) to keep exports organized.

**What file format are the exports in?**

All files are exported in Parquet — a columnar format optimized for analytics. Parquet files load directly into tools like Athena, Snowflake, BigQuery, Databricks, dbt, and most BI platforms.

**Can I edit or delete an S3 endpoint after creating it?**

Not at the moment. If you need a different endpoint, create a new one. Contact your customer success manager or <support@finout.io> if changes are needed.


# Custom Cost Input

Finout directly supports costs for the major cloud vendors and automatically appear in your MegaBill, but what about smaller vendor costs that are managed manually in spreadsheets?

Finout's Custom Costs feature enables you to add these costs directly to your MegaBill in seconds without any complex integration.

With all your costs in one place, you can get a real-time view of your total technology expenses and accurately assign costs to the appropriate reporting categories. Plus, with Finout's reporting capabilities, you can easily track and analyze all your costs by category, giving you invaluable insights into your spending.

## Adding Custom Costs <a href="#h_974e2f2ebe" id="h_974e2f2ebe"></a>

Using Finout’s Custom Cost option, you can add a Custom Cost as a one-time expense or a recurring cost for a specific duration.

A cost can be a charge or a refund, and you can tag the custom cost to categorize it. This allows you to view and generate reports based on the relevant categories.

1. Select **Settings**.
2. Select the **Custom Cost** tab.
3. Click **Create Custom Cost**.
4. In the **Choose a vendor** field, either select a vendor or enter a new vendor and click **Add**.
5. Enter an **Amount**. You can enter positive values (for costs) and negative values (for refunds).
6. Enter a **Description** for the custom costs (mandatory).
7. Select a **Tag key** (Project, Team, Features, or Environment) and **Tag value**.
8. To add additional tags, click **+** and select **Tag key** and **Tag value**.
9. Select a date for the cost.
10. If the cost is recurring, simply toggle on the **Recurring** option and specify the frequency of the cost (for example, Every 3 months) and the number of occurrences of the cost.
11. Click **Save custom cost**.

{% hint style="info" %}
**Note**: Custom costs may take up to 24 hours to appear in the filters list.
{% endhint %}

## Where Can I Use My Custom Costs? <a href="#h_84e6ef85c4" id="h_84e6ef85c4"></a>

The custom costs can be used to filter (or group) the costs in the MegaBill, in the Dashboards, as well as in the virtual tags. For more information, see [Virtual Tags](/user-guide/inform/virtual-tags).

<figure><img src="https://finout.intercom-attachments.eu/i/o/6519677/9be5fc4f628a90fc5a9bc002/eYsLm9_zNhFXJplPG0J50OEEiY2rzP1NmtwLEQCFHS92u90w5uxv5MLBMPY_U2pQD7IMBSNsPtRi5n7ebno87IWo8b9jz2JwsCKKpQMjJwgpOOsl3v60rDWjvUzHnkCKf_nrIE82h96cKDojG32Bg7Q?expires=1726559100&#x26;signature=42d4145305658a1baef9ddb923b68fe55b717a85f06179350816ab043f4a28c2&#x26;req=1tBuzF79q3sp0xr0v9tnpOXw57OkzmY9Y06Ypyv%2FuqKjtOjsvwrCNWCeFf%2Bx%0A1fjUSXzAQ554l6E%3D%0A" alt=""><figcaption></figcaption></figure>

## Can I Edit an Existing Custom Cost? <a href="#h_9ec1bf74c3" id="h_9ec1bf74c3"></a>

As noted above, it may take up to 24 hours for any updates made to Custom Costs to reflect in your account.

1. Select **Settings**.
2. Select the **Custom Cost tab**.
3. For the required custom cost, click **Edit custom cost**.

   <figure><img src="https://finout.intercom-attachments.eu/i/o/6519678/50e4c372b0f6138208c3839a/J1dlh5lvZyP1D7WfbuTnflinhQMbWK67x087LiynHc8nE2HnkRSs5PvJftQDb1zwIpdEjVWd895nMmDMfqwNRbh-QEadGduo0uZ5swdQcarctjQc7X15XnzdUBKxY8xhEAWbirgOFzJSJquuL7W00aI?expires=1726559100&#x26;signature=3de344316c2c73adcde03c7dbe1e375272805a8bfa05ab1cd38db4146384d2da&#x26;req=1tBuzF79pHsp0xr0v9tnpGvGpprQ8mEeka6qJ68MKuCa0Y6xzC9yvfGloHcU%0A" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://finout.intercom-attachments.eu/i/o/6519679/c30f345ebe3aefb410035fef/LaleMClXP_0-z1rnFdWsZEvCtgru7QEV3hDT3HYn8z4-_fSh01GSm0lxy6HJcGwlov89wfrsKrjoeLyta3u3VZA0ok4Ys4kGSDoX9KBeFlUITv3x1384iXvyGpNdcEzVxy6ovcsyz-JMxZqpU2Kc-68?expires=1726559100&#x26;signature=daafd7084baab614a096319fbfbdec4c16bbbbf3e7d3260b07740434bf576045&#x26;req=1tBuzF79pXsp0xr0v9tnpFQeFIU3KwOp%2FDioaEfajwx5a7p4amNdG%2FNu9hUx%0A" alt=""><figcaption></figcaption></figure>
4. To edit a cost entry, click **Edit custom cost**, double-click on a cost, edit the entry, and then click **Save**.
5. To delete a cost entry, click and then click **Delete**.

Still need help? Please feel free to reach out to our team at <support@finout.io>.




---

[Next Page](/llms-full.txt/1)

