Cost Reports VQL Schema
VQL comprises two namespaces:costs
and tags
, which represent the available filters on Cost Reports in the Vantage console. To reference a filter, use the following syntax: namespace.field
(e.g., costs.provider
or tags.name
).
Namespace | Field | VQL Example |
---|---|---|
costs | provider | Providers example |
costs | allocation | Cost allocation example |
costs | region | Region example |
costs | marketplace | Marketplace example |
costs | account_id | Account ID example |
costs | provider_account_id | Provider account ID example |
costs | service | Service example |
costs | category | Category example |
costs | subcategory | Subcategory example |
costs | resource_id | Resource example |
costs | charge_type | Charge Type example |
tags | name | Tags name/value example |
tags | value | Untagged example |
Availability of the fields listed above varies among different cloud providers. For a comprehensive list of available fields per provider, see the Data Dictionary.
Keywords
VQL includes a set of keywords to create complex filter conditions. These keywords function similar to their SQL equivalents.Keyword | Description | VQL Sample | Explanation |
---|---|---|---|
AND | Logical AND operator | costs.provider = 'aws' AND costs.service = 'EC2' | This example filters AWS costs for the EC2 service, where both conditions must be true. |
OR | Logical OR operator | costs.provider = 'azure' OR costs.provider = 'aws' | This example retrieves costs from either Azure or AWS. At least one condition must be true. |
IN | Used to compare against an array list | costs.provider = 'azure' AND costs.account_id IN ('account-1', 'account-2') | This example filters based on a list of account IDs, returning data for the specified accounts You can also use IN along with a special syntax for filtering by multiple tags. See Filter by Multiple Tags for details. The IN keyword is not compatible for combining providers . |
LIKE | Performs string comparisons | costs.provider = 'gcp' AND tags.name = 'environment' AND tags.value LIKE '%prod%' | This example selects data where the tag value contains prod , such as production-1 . Note that at this time, LIKE is not compatible with costs.account_id , costs.provider_account_id , costs.region , and costs.service . |
NOT | Represents negation | costs.provider = 'aws' AND costs.region NOT IN ('us-east-1', 'us-east-2') | This example filters out data from both specified regions, providing all AWS costs not in these regions. Use NOT IN to specify a list of single or multiple values. You can also use the != or <> operators for “is not.” costs.provider = 'aws' AND costs.region != 'us-east-1' < br />You can use NOT LIKE to perform string comparisons: costs.provider = 'gcp' AND tags.name = 'environment' AND tags.value NOT LIKE '%prod%' |
~* | Flexible match operator for tag values | costs.provider = 'aws' AND (tags.name = 'teams' AND tags.value ~* 'Team A') | Searches for all items where the tag value loosely matches Team A , ignoring case, whitespace, hyphens, and punctuation. |
!~* | Does not flexible match operator for tag values | costs.provider = 'aws' AND (tags.name = 'teams' AND tags.value !~* 'Team A') | Filters out all items where the tag value loosely matches Team A , ignoring case, whitespace, hyphens, and punctuation. |
Syntax
You can think of VQL in its current iteration as theWHERE
clause of a SQL query. By combining the schema and keywords above with parentheses, you can form complex filter operations, such as:
VQL Examples
The following examples cover common use cases for VQL.Combining Providers
To reference a Custom Provider in VQL queries, navigate to the Integrations page. Use the displayed Provider ID (e.g.,
custom_provider:accss_crdntl_123a45bfdaf38765
).Cost Allocation
Set cost allocation to0.5
.
Costs from a List of Regions
Filter for Snowflake costs in two regions. Note that you will need to use the region code, such asus-east-1
in the case of AWS, or AWS_US_EAST_1
in the case of Snowflake, below.
Get Marketplace Transactions
Retrieve costs associated with the AWS Marketplace.Costs by Account ID
Costs for a specific set of services and account ID.Costs by Provider Account ID
The following example represents costs from a specific AWS billing account or costs from a specific Azure subscription.Per-Resource Costs and Costs by Service
Resource costs require bothprovider
and service
in addition to the resource_id
.
Multiple Resource IDs
Costs by Specific Category
Filter costs to see a specific cost category. Category costs require bothprovider
and service
as well as category
.
Costs by Specific Subcategory
Filter costs by a specific service and subcategory. Subcategory costs require bothprovider
and service
as well as subcategory
.
Cost by Charge Type
Filter costs by a specific charge type.Filter by Tag
Filter by Single Tag
Filter costs based on a specific tag, such asenvironment
, with the value production
, in AWS.
Filter for Multiple Values from a Single Tag Key
If you want to filter for multiple tag values that are tied to one tag key (e.g., costs tagged with theteam
tag of mobile
and data
), use the below syntax.
Filter by Multiple Tags
If you want to filter for resources that have more than one tag associated, you can use the syntax shown in the example below.environment
tag with a value of staging
as well as the team
tag with a value of engineering
. This filter is the same as creating the following manual filter in the console.

Filter for Matching Tags Using LIKE
Filter for Tags Using Flexible Matching
TeamA
, team-a
, and team_a
to a single Team A
tag value. See the Flexible Match documentation for details.
Filter for Untagged Resources
On providers that have a Not Tagged/Not Labeled filter option in the console, you can use the below VQL to see untagged resources. This example looks for untagged resources in a multi-cloud environment.Troubleshooting
If you are receiving an error when trying to complete a query, check the following troubleshooting tips below.- Each provider exposes certain names to the API. Those names are normalized within the schema. Check the Data Dictionary for normalized field names.
- Query parameter values should be wrapped in single quotes.
Click to view examples
Click to view examples
THIS WORKS
THIS DOES NOT WORK
- Currently, there is a limitation where
AND
andOR
are not supported together in a single “query group.”
Click to view examples
Click to view examples
THIS WORKS
THIS DOES NOT WORK
- The
costs.provider
field is required on every call.
Click to view examples
Click to view examples
THIS WORKS
THIS DOES NOT WORK
- The
costs.provider
field is not compatible with theIN
keyword.
Click to view examples
Click to view examples
THIS WORKS
THIS DOES NOT WORK
- Resource costs require both provider and service in addition to the resource ID.
Click to view examples
Click to view examples
THIS WORKS
THIS DOES NOT WORK
- Category and subcategory costs also require provider and service.
Click to view examples
Click to view examples
THESE WORK
THESE DO NOT WORK