> For the complete documentation index, see [llms.txt](https://docs.finout.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.finout.io/user-guide/inform/virtual-tags/custom-virtual-tags.md).

# 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.md).
          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.md):

   **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.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.finout.io/user-guide/inform/virtual-tags/custom-virtual-tags.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
