VEXXHOSTDocumentation
Guides

Break down your costs

Break Cost Explorer reports down by service, region, usage type or resource, filter what they count, and add usage quantities.

This guide reports a month's costs per service and per day, narrows a report to one service or region, and adds how much of each resource type you used.

Before you begin

Sign in with the CLI, get a token for the API, or create the Python client.

1. Choose the period and granularity

A report covers a period from start up to, but not including, end, and splits it into hourly, daily or monthly rows. A period can be up to 366 days long. Prefer daily or monthly for long periods, because hourly rows make large reports.

2. Group by what you want to compare

group_by splits each row into groups. Group by any of service, region, usage_type, project_id and resource_id. Grouping by resource_id shows what each server, volume and image cost.

This request reports September's costs per service, per day:

openstack cost report create \
  --start 2026-09-01 \
  --end 2026-10-01 \
  --granularity daily \
  --group-by service \
  --metric cost \
  --detail

--detail adds the per-group rows to the CLI's table. The API returns one entry per day, each with a total and a group per service:

{
  "as_of": "2026-10-07T15:12:40Z",
  "currency": "USD",
  "pricing_version": "legacy-usd-21c6b51",
  "group_definitions": ["service"],
  "regions": [{"name": "ca-ymq-1", "data_through": "2026-10-07T14:00:00Z"}],
  "results_by_time": [
    {
      "time_period": {"start": "2026-09-01T00:00:00Z", "end": "2026-09-02T00:00:00Z"},
      "estimated": true,
      "total": {"cost": {"amount": "35.912000000000", "unit": "USD"}},
      "groups": [
        {"keys": ["compute"], "metrics": {"cost": {"amount": "31.104000000000", "unit": "USD"}}},
        {"keys": ["volume"], "metrics": {"cost": {"amount": "4.808000000000", "unit": "USD"}}}
      ]
    }
  ]
}

The keys of each group follow the order of group_definitions. The response continues with an entry for every day of September.

3. Filter what counts

Filters narrow a report to some of your spending. A filter with several values matches any of them, and different filters must all match.

FilterCLIAPI
Service: compute, volume, image or object--service compute"filter": {"services": ["compute"]}
Region--region ca-ymq-1"filter": {"regions": ["ca-ymq-1"]}
Usage type, such as a flavor--usage-type v3-standard-2"filter": {"usage_types": ["v3-standard-2"]}

On the CLI, repeat an option to give several values. In the API, leave a filter out to count everything. An empty list matches nothing.

4. Add usage quantities

To see how much you used as well as what it cost, add the usage_quantity metric. Hours and GiB-hours cannot be added together, so this metric needs grouping by usage_type:

openstack cost report create \
  --start 2026-09-01 \
  --end 2026-10-01 \
  --granularity monthly \
  --group-by usage_type \
  --metric cost \
  --metric usage_quantity \
  --detail

Each group then has a usage_quantity in Hours or GiB-Hours, and each row has usage_by_unit totals.

Verify

Add up the daily totals of a month and compare them with a monthly report for the same month. They are equal, because Cost Explorer counts each minute in exactly one row. If the most recent rows look low, check data_through: usage after that time is not counted yet.

Next steps

On this page