FinOps FOCUS Schema
FOCUS is an open-source schema that standardizes cost and usage billing data across different cloud providers. When you add a Custom Provider in Vantage, you use a CSV template format that is a subset of the FOCUS schema. The fields in this template provide enough detail for Vantage to correctly render costs and perform cost allocation. With just the minimum required fields, Custom Provider costs are available with other Vantage features, such as anomaly alerts, report notifications, and forecasting. See the explainer video below for an introduction to this feature and how FinOps FOCUS is used.Review CSV Format
Follow the steps below to create a CSV based on the FOCUS format. You can also use focus.vantage.sh, a free web-based tool that converts cost CSVs or PDF invoices from select Cloud, AI, and SaaS providers into CSVs in the FinOps FOCUS 1.1 format.
ChargeCategory
ChargePeriodStart
BilledCost
ServiceName
If you want to upload amortized costs, then
ChargePeriodEnd
is also required.Data Format
The following table provides details for each field within the template, as well as their Vantage representation on reports.Column Name | Required | Vantage Representation | Data Type | FOCUS Column ID & Link | Examples |
---|---|---|---|---|---|
BillingCurrency | No | Billing currency costs are displayed in | A currency code, like GBP . If you enter a currency code not available in Vantage, an error is displayed on validation. Check that currency conversion is also enabled. See the Currency Conversion documentation for details. | [BillingCurrency](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=currency#modal-column-14236) | JPY , AUD , USD |
ChargeCategory | Yes | Charge Type filter and grouping option | Valid values are case-sensitive and include: - Credit - Refund - Discount - Tax - Usage | [ChargeCategory](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=charge%20category#modal-column-14378) | Usage |
ChargePeriodStart | Yes | Start date of cost period | Date in YYYY-MM-DD or ISO 8601 format | [ChargePeriodStart](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=charge%20period#modal-column-14370) | 2024-08-25 |
ChargePeriodEnd | Only for amortized costs | End date of cost period | Date in YYYY-MM-DD or ISO 8601 format | [ChargePeriodEnd](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=charge%20period#modal-column-14372) | 2024-08-25 |
ConsumedQuantity | No | Quantity associated with ConsumedUnit | Numeric | [ConsumedQuantity](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=consumed#modal-column-14488) | 598 |
ConsumedUnit | Only when ConsumedQuantity is provided | Unit of usage associated with ConsumedQuantity | Alphanumeric | [ConsumedUnit](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=consumed#modal-column-14491) | GB |
BilledCost | Yes | Cost that’s displayed | Positive or negative number values accepted; dollar signs and decimal values are also acceptable All costs are considered to be in USD | [BilledCost](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=billed%20cost#modal-column-14212) | 1245 or -456 or $1.23 or -$1.23 |
RegionId | No | Region filter and grouping option | Alphanumeric | [RegionId](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=region%20id#modal-column-14471) | us-east-1 |
ResourceId | No | Resource filter and grouping option | Alphanumeric | [ResourceId](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=resource%20id#modal-column-14475) | task/3 or 123456 |
ResourceType | No | Subcategory filter and grouping option | Alphanumeric | [ResourceType](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=resource%20type#modal-column-14479) | Large |
ServiceCategory | No | Category filter and grouping option | Alphanumeric | [ServiceCategory](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=service%20category#modal-column-14481) | Task |
ServiceName | Yes | Service filter and grouping option | Alphanumeric | [ServiceName](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=service%20name#modal-column-14268) | Compute |
Tags | No | Tags filter and grouping option | Valid JSON object; array of key/value pairs | [Tags](https://focus.finops.org/focus-columns/?prod_focus_columns%5Bquery%5D=tags#modal-column-14387) | "{""env"":""production""}" for one tag "{""env"":""prod"",""application"":""geo-location""}" for multiple tags |
Upload Custom Provider File
Custom Provider files can be uploaded at any time in the console. The above schema adds a timestamp based on theChargePeriodStart
column, so Vantage can place the data in the correct relationship to other costs under a Custom Provider.
Users must have Owner permissions to upload Custom Provider files. If you prefer to use the API rather than the Vantage console, see the API section below.
1
Navigate to the Integrations page in Vantage.
2
Select Custom Provider. (If you have already added a Custom Provider and are adding another one, ensure you are on the Connect tab.)
3
Click Select a File and upload your formatted CSV file.
4
Click Upload Costs.


- If your CSV file contains any errors, the Review pop-up window is displayed and indicates where the error occurred. See the Troubleshooting section for details on specific errors.
Click to view example image
Click to view example image

- For error-free files, a message is displayed that indicates your file is okay. Click Review to see the first 25 rows of uploaded data.
Click to view example image
Click to view example image

You can click Select a File again if you accidentally uploaded the wrong file.
5
Enter a Name for your Custom Provider. This is the name that will be displayed in report filters. Optionally, enter a Description.
6
Click Create Custom Provider Integration.
7
The Manage integration screen is displayed. Initially, the message Importing and Processing will be displayed on this screen. You can click the Import Costs tab if you want to upload additional cost files.

Click to view example image
Click to view example image

8
Once your Custom Provider is processed, in the Workspace Access section of this screen, select which workspaces this integration is associated with. See the Workspaces documentation for more information.
Troubleshoot Custom Provider Uploads
When you upload a file that contains errors, the Review window displayed and shows the rows where errors were identified. The first 25 rows are displayed. If you have an error in a row that’s not one of the first 25 rows, that row will be displayed at the top, along with all other errors. Some common errors are noted below.Issue | Description | Solution |
---|---|---|
Improper CSV format | The file format is not a valid CSV or exceeds the 10,000-row limit or 2MB file size max. | Ensure the file is a properly formatted CSV, with no more than 10,000 rows or 2MB in size. |
Missing required fields | One or more required fields (ChargeCategory , ChargePeriodStart , BilledCost , ServiceName ) are missing or improperly formatted. An error message noting which rows are missing required field values will be displayed in the Review window. | Verify that all required fields are present and correctly formatted. See the CSV Format section for details. |
Invalid values | The file contains invalid values, such as incorrect date formats, invalid numbers, tags that are not formatted as JSON or have missing quotes, or incorrect case-sensitive values for ChargeCategory . An error message noting which rows contain invalid values will be displayed in the Review window. | Double-check the data in your CSV to ensure dates are in YYYY-MM-DD format, numbers are valid, and ChargeCategory values match the allowed case-sensitive options (e.g., Usage , Credit ). See the Data Format table for details. |
Improper Vantage permissions | The user attempting the upload does not have the proper permissions. | Ensure you have Owner permissions to upload Custom Provider files. See the Role-Based Access Control documentation for details. |
Duplicate file names | You attempt to upload a new costs import file that has the same name as a previous costs upload file. An error message is displayed indicating you already have a file uploaded with the same name. The new file will overwrite the old file. | Ensure each CSV file that you upload is named something different (e.g., cloudflare_costs_8_2024 , cloudflare_costs_9_2024 ). |
Steps to Resolve File Issues
1
After you’ve identified the issues, reopen your CSV file, correct the errors, and save.
2
On the Custom Provider upload screen, close the Review window, click Select a File, and upload the corrected version of your CSV file.
3
After a successful upload, a confirmation message is displayed. You can click Review to verify the first 25 rows of your uploaded data to ensure accuracy.
4
Follow steps 5–8 in the Upload Custom Provider File section to complete the upload process.
View Custom Provider Costs in Vantage
Once you have uploaded Custom Provider costs, you can query these costs in other Vantage tools. Your Custom Provider will be included in the Providers list of filters on Cost Reports, Segment Reports, and Saved Filters.
RegionId
), then those filters will be displayed as empty.

Add Additional Imports
After the initial costs import, you can add additional cost imports.If you upload a file with the same name as an existing import, your new file will overwrite the original file. Ensure you have different names for each file upload (e.g.,
cloudflare_costs_8_2024
, cloudflare_costs_9_2024
).1
Navigate to the Integrations page.
2
Select your Custom Provider.

Click to view example image
Click to view example image

3
Click the Import Costs tab. Import your new cost file. Review any errors and correct as needed. Once uploaded, your file will be displayed within the Imports section of the Manage tab.
Delete Imported Files
If you want to delete an imported file, the costs will be removed from your Custom Provider.1
Navigate to the Integrations page.
2
Select your Custom Provider.
3
In the Imports section of the Manage tab, you can view existing imports along with the date the file was imported and who imported the file. Click the trashcan icon next to an import to remove it. If you delete a CSV, the corresponding data will be deleted from the provider.

Click to view example image
Click to view example image

Use the API to Add a Custom Provider
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
).1
Send a
POST
request to the /integrations/custom_provider
endpoint to create the Custom Provider.2
On a successful
200
response, a Custom Provider token
is returned.3
Use the
token
to upload a CSV file via the /integrations/{integration_token}/costs.csv
endpoint.4
If there are any errors, the following
422
response is returned. Fix the errors in your CSV, and upload a new file.