Import any FOCUS-compliant billing data from a BigQuery table into Costory.
Import any billing data that follows the FOCUS specification from a BigQuery table. This is useful for SaaS vendors or internal services that are not natively supported.
Importable Columns
Mapping Key
Output Column
Type
Default
Status
billedCost
billed_cost
FLOAT64
NULL
Optional
contractedCost
contracted_cost
FLOAT64
NULL
Optional
billingAccountId
billing_account_id
STRING
NULL
Optional
billingCurrency
billing_currency
STRING
NULL
Optional
originalBillingCurrency
original_billing_currency
STRING
NULL
Optional
billingPeriodEnd
billing_period_end
DATETIME
NULL
Required
billingPeriodStart
billing_period_start
DATETIME
NULL
Required
chargeCategory
charge_category
STRING
NULL
Required
chargeDescription
charge_description
STRING
NULL
Optional
chargeFrequency
charge_frequency
STRING
NULL
Optional
chargePeriodStart
charge_period_start
TIMESTAMP
NULL
Optional
chargePeriodEnd
charge_period_end
TIMESTAMP
NULL
Optional
commitmentDiscountCategory
commitment_discount_category
STRING
NULL
Optional
commitmentDiscountId
commitment_discount_id
STRING
NULL
Optional
commitmentDiscountType
commitment_discount_type
STRING
NULL
Optional
consumedQuantity
consumed_quantity
FLOAT64
NULL
Optional
consumedUnit
consumed_unit
STRING
NULL
Optional
effectiveCost
effective_cost
FLOAT64
NULL
Optional
invoiceIssuer
invoice_issuer
STRING
NULL
Optional
listCost
list_cost
FLOAT64
NULL
Optional
listUnitPrice
list_unit_price
STRING
NULL
Optional
pricingCategory
pricing_category
STRING
NULL
Optional
pricingQuantity
pricing_quantity
FLOAT64
NULL
Optional
pricingUnit
pricing_unit
STRING
NULL
Optional
provider
provider
STRING
"Custom BigQuery"
Optional
publisher
publisher
STRING
NULL
Optional
regionId
region_id
STRING
NULL
Optional
resourceId
resource_id
STRING
NULL
Optional
resourceName
resource_name
STRING
NULL
Optional
resourceType
resource_type
STRING
NULL
Optional
categoryFocus
category_focus
STRING
NULL
Optional
serviceName
service_name
STRING
NULL
Optional
skuId
sku_id
STRING
NULL
Optional
sku
sku
STRING
NULL
Optional
skuPriceId
sku_price_id
STRING
NULL
Optional
subAccountId
sub_account_id
STRING
NULL
Optional
tags
labels
ARRAY<STRUCT<key STRING, value STRING>>
NULL
Optional
Terraform
Manual setup
Not supported.
Open Costory and go to Billing > Import new billing datasource > Custom Billing Format (FOCUS). The stepper guides you through each field.
Prepare a BigQuery table in FOCUS format.
Provide the BigQuery table path, provider name, and optional billing account ID and date range.
Map the FOCUS columns to Costory fields during the import flow.
Costory imports whatever date range exists in the BigQuery table. No separate backfill step is needed.
Last modified on March 18, 2026
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Costory Documentation","colors":{"primary":"#1D3C93","light":"#305DD9","dark":"#1D3C93"},"logo":{"light":"https://mintcdn.com/costory/jdghijjvsrOsYiTC/logo/light.png?fit=max\u0026auto=format\u0026n=jdghijjvsrOsYiTC\u0026q=85\u0026s=dee63acdba91bf952855557cc5c5ec16","dark":"https://mintcdn.com/costory/jdghijjvsrOsYiTC/logo/light.png?fit=max\u0026auto=format\u0026n=jdghijjvsrOsYiTC\u0026q=85\u0026s=dee63acdba91bf952855557cc5c5ec16","href":"https://costory.io"},"favicon":"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026auto=format\u0026n=stODLWETeKeyz7ed\u0026q=85\u0026s=334ff5307103e4ffc0473bb6e1b9b56c","appearance":{"default":"light","strict":true},"navbar":{"links":[{"href":"https://costory.io","label":"Website"}],"primary":{"type":"button","label":"Start a free trial","href":"https://app.costory.io/welcome-demo?utm_source=get-started"}},"integrations":{"posthog":{"apiKey":"phc_jgU0iQbU4Arfu5ouKpn9YhzkTWv3P5VfW2n7sJsKR0P","apiHost":"https://user.costory.io","sessionRecording":true}},"contextual":{"options":["copy","view","chatgpt","claude","aistudio"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"costory","hasAudioNarration":false,"actualSubdomain":"costory","customDomains":["docs.costory.io"],"gitSource":{"type":"github","owner":"costory-io","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6af2033088844f4e905da51d","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"API Reference","count":124},{"language":"default","tag":"Documentation","count":70},{"language":"default","tag":"Setup","count":44},{"language":"default","tag":"Alerts V2","count":26},{"language":"default","tag":"Dashboards","count":23},{"language":"default","tag":"Billing Data","count":22},{"language":"default","tag":"Use Cases","count":17},{"language":"default","tag":"Reports","count":16},{"language":"default","tag":"Metrics Correlation","count":13},{"language":"default","tag":"Events","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"setup/billing/focus","slug":"/setup/billing/focus","pageMetadata":{"title":"Custom Billing Format (FOCUS) in BigQuery","description":"Import any FOCUS-compliant billing data from a BigQuery table into Costory.","href":"/setup/billing/focus"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Import any FOCUS-compliant billing data from a BigQuery table into Costory.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Accordion,Tab,Table,Tabs}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Import any billing data that follows the `,_jsx(_components.a,{href:`https://focus.finops.org/`,children:`FOCUS specification`}),` from a BigQuery table. This is useful for SaaS vendors or internal services that are not natively supported.`]}),`\n`,_jsx(Accordion,{title:`Importable Columns`,id:`importable-columns`,children:_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Mapping Key`}),_jsx(_components.th,{children:`Output Column`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Status`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`billedCost`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`billed_cost`})}),_jsx(_components.td,{children:`FLOAT64`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`contractedCost`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`contracted_cost`})}),_jsx(_components.td,{children:`FLOAT64`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`billingAccountId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`billing_account_id`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`billingCurrency`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`billing_currency`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`originalBillingCurrency`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`original_billing_currency`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`billingPeriodEnd`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`billing_period_end`})}),_jsx(_components.td,{children:`DATETIME`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Required`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`billingPeriodStart`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`billing_period_start`})}),_jsx(_components.td,{children:`DATETIME`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Required`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`chargeCategory`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`charge_category`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Required`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`chargeDescription`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`charge_description`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`chargeFrequency`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`charge_frequency`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`chargePeriodStart`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`charge_period_start`})}),_jsx(_components.td,{children:`TIMESTAMP`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`chargePeriodEnd`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`charge_period_end`})}),_jsx(_components.td,{children:`TIMESTAMP`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`commitmentDiscountCategory`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`commitment_discount_category`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`commitmentDiscountId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`commitment_discount_id`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`commitmentDiscountType`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`commitment_discount_type`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`consumedQuantity`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`consumed_quantity`})}),_jsx(_components.td,{children:`FLOAT64`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`consumedUnit`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`consumed_unit`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`effectiveCost`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`effective_cost`})}),_jsx(_components.td,{children:`FLOAT64`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`invoiceIssuer`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invoice_issuer`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`listCost`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`list_cost`})}),_jsx(_components.td,{children:`FLOAT64`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`listUnitPrice`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`list_unit_price`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pricingCategory`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`pricing_category`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pricingQuantity`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`pricing_quantity`})}),_jsx(_components.td,{children:`FLOAT64`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pricingUnit`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`pricing_unit`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`provider`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`provider`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`\"Custom BigQuery\"`})}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`publisher`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`publisher`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`regionId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`region_id`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`resourceId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`resource_id`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`resourceName`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`resource_name`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`resourceType`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`resource_type`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`categoryFocus`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`category_focus`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`serviceName`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`service_name`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`skuId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`sku_id`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sku`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`sku`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`skuPriceId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`sku_price_id`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`subAccountId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`sub_account_id`})}),_jsx(_components.td,{children:`STRING`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`tags`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`labels`})}),_jsx(_components.td,{children:`ARRAY\u003cSTRUCT\u003ckey STRING, value STRING>>`}),_jsx(_components.td,{children:`NULL`}),_jsx(_components.td,{children:`Optional`})]})]})]})}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Terraform`,id:`terraform`,children:_jsx(_components.p,{children:`Not supported.`})}),_jsxs(Tab,{title:`Manual setup`,id:`manual-setup`,children:[_jsxs(_components.p,{children:[`Open Costory and go to `,_jsx(_components.strong,{children:`Billing > Import new billing datasource > Custom Billing Format (FOCUS)`}),`. The stepper guides you through each field.`]}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Prepare a BigQuery table in FOCUS format.`}),`\n`,_jsx(_components.li,{children:`Provide the BigQuery table path, provider name, and optional billing account ID and date range.`}),`\n`,_jsx(_components.li,{children:`Map the FOCUS columns to Costory fields during the import flow.`}),`\n`]}),_jsx(_components.p,{children:`Costory imports whatever date range exists in the BigQuery table. No separate backfill step is needed.`})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Custom Billing Format (FOCUS) in BigQuery","description":"Import any FOCUS-compliant billing data from a BigQuery table into Costory.","href":"/setup/billing/focus"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"subdomain":"costory","siteName":"Costory Documentation","title":"Custom Billing Format (FOCUS) in BigQuery - Costory Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-03-18T14:10:17.535Z","gitLastModified":"2026-03-18T17:37:50.000Z","originalFileLocation":"setup/billing/focus.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Import any FOCUS-compliant billing data from a BigQuery table into Costory.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Costory Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/svg+xml\" sizes=\"180x180\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"32x32\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"16x16\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/svg+xml\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003cmeta data-mint-head property=\"og:title\" content=\"Custom Billing Format (FOCUS) in BigQuery - Costory Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Import any FOCUS-compliant billing data from a BigQuery table into Costory.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Costory Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.costory.io/setup/billing/focus\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://costory.mintlify.site/_mintlify/api/og/v2?division=Billing+Data\u0026amp;title=Custom+Billing+Format+%28FOCUS%29+in+BigQuery\u0026amp;description=Import+any+FOCUS-compliant+billing+data+from+a+BigQuery+table+into+Costory.\u0026amp;theme=1281d3dcbd6f73a9ab3b217e\u0026amp;signature=15929e7ec9fbe3848388beb5c904aeed5a60ae75e1273fa81f1a30fbe499ba0a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Custom Billing Format (FOCUS) in BigQuery - Costory Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Import any FOCUS-compliant billing data from a BigQuery table into Costory.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://costory.mintlify.site/_mintlify/api/og/v2?division=Billing+Data\u0026amp;title=Custom+Billing+Format+%28FOCUS%29+in+BigQuery\u0026amp;description=Import+any+FOCUS-compliant+billing+data+from+a+BigQuery+table+into+Costory.\u0026amp;theme=1281d3dcbd6f73a9ab3b217e\u0026amp;signature=15929e7ec9fbe3848388beb5c904aeed5a60ae75e1273fa81f1a30fbe499ba0a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/costory/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Costory Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1D3C93\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.costory.io/setup/billing/focus\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/setup/billing/focus.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.costory.io/#organization\",\"name\":\"Costory Documentation\",\"url\":\"https://docs.costory.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/costory/jdghijjvsrOsYiTC/logo/light.png?fit=max\u0026auto=format\u0026n=jdghijjvsrOsYiTC\u0026q=85\u0026s=dee63acdba91bf952855557cc5c5ec16\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.costory.io#website\",\"name\":\"Costory Documentation\",\"url\":\"https://docs.costory.io\",\"publisher\":{\"@id\":\"https://docs.costory.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.costory.io/setup/billing/focus#webpage\",\"url\":\"https://docs.costory.io/setup/billing/focus\",\"name\":\"Custom Billing Format (FOCUS) in BigQuery\",\"description\":\"Import any FOCUS-compliant billing data from a BigQuery table into Costory.\",\"dateModified\":\"2026-03-18T17:37:50.000Z\",\"isPartOf\":{\"@id\":\"https://docs.costory.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.costory.io/setup/billing/focus#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.costory.io/setup/billing/focus#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Setup\",\"item\":\"https://docs.costory.io/setup/billing/aiven\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Billing Data\",\"item\":\"https://docs.costory.io/setup/billing\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Custom Billing Format (FOCUS) in BigQuery\",\"item\":\"https://docs.costory.io/setup/billing/focus\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.costory.io/setup/billing/focus#article\",\"headline\":\"Custom Billing Format (FOCUS) in BigQuery\",\"name\":\"Custom Billing Format (FOCUS) in BigQuery\",\"description\":\"Import any FOCUS-compliant billing data from a BigQuery table into Costory.\",\"url\":\"https://docs.costory.io/setup/billing/focus\",\"mainEntityOfPage\":{\"@id\":\"https://docs.costory.io/setup/billing/focus#webpage\"},\"dateModified\":\"2026-03-18T17:37:50.000Z\",\"publisher\":{\"@id\":\"https://docs.costory.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.costory.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Costory Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Costory Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/setup/billing/focus.md","siteName":"Costory Documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book","groups":[{"group":"Get Started","pages":[{"title":"Welcome to Costory","href":"/get-started/welcome"},{"title":"Quickstart: How to set up automated cloud cost reporting in 30 minutes","sidebarTitle":"Quickstart: Automate your cloud cost reporting","href":"/get-started/quickstart"},{"title":"Plans and fair use","icon":"tags","href":"/get-started/plans"}]},{"group":"Setup","pages":[{"group":"Billing Data","root":{"title":"Billing Data","href":"/setup/billing"},"pages":[{"title":"Aiven Billing Setup","href":"/setup/billing/aiven"},{"title":"Anthropic Billing Setup","href":"/setup/billing/anthropic"},{"title":"AWS Billing Setup","href":"/setup/billing/aws"},{"title":"Azure Billing Setup","href":"/setup/billing/azure"},{"title":"BytePlus Billing Setup","sidebarTitle":"BytePlus","href":"/setup/billing/byteplus"},{"title":"ClickHouse Billing Setup","href":"/setup/billing/clickhouse"},{"title":"Cloudflare Billing Setup","href":"/setup/billing/cloudflare"},{"title":"Confluent Billing Setup","href":"/setup/billing/confluent"},{"title":"Cursor Billing Setup","href":"/setup/billing/cursor"},{"title":"Databricks Billing Setup","description":"Connect Databricks DBU billing and full workload cost (DBUs plus cloud VMs) in Costory. Level 2 ties each instance to the cluster and job that ran on it.","sidebarTitle":"Databricks","href":"/setup/billing/databricks"},{"title":"Custom Billing Format (FOCUS) in BigQuery","href":"/setup/billing/focus"},{"title":"Datadog Billing Setup","description":"Connect Datadog usage and billing estimates to Costory.","href":"/setup/billing/datadog"},{"title":"Elastic Cloud Billing Setup","href":"/setup/billing/elastic-cloud"},{"title":"ElevenLabs Billing Setup","sidebarTitle":"ElevenLabs","href":"/setup/billing/elevenlabs"},{"title":"GCP Billing Setup","href":"/setup/billing/gcp"},{"title":"GCP CUD Metadata","href":"/setup/billing/gcp-cud-metadata"},{"title":"Kling AI Billing Setup","sidebarTitle":"Kling AI","href":"/setup/billing/kling-ai"},{"title":"OpenAI Billing Setup","href":"/setup/billing/openai"},{"title":"OpenRouter Billing Setup","sidebarTitle":"OpenRouter","href":"/setup/billing/openrouter"},{"title":"Oracle Cloud Infrastructure Billing Setup","sidebarTitle":"Oracle Cloud","href":"/setup/billing/oci"},{"title":"Scaleway Billing Setup","href":"/setup/billing/scaleway"},{"title":"Snowflake Billing Setup","href":"/setup/billing/snowflake"}]},{"group":"Metrics Correlation","root":{"title":"Correlate your costs with technical or business metrics","sidebarTitle":"Metrics Correlation","href":"/setup/usage-metrics"},"pages":[{"title":"Amplitude","href":"/setup/usage-metrics/amplitude"},{"title":"AWS CloudWatch","href":"/setup/usage-metrics/aws-cloudwatch"},{"title":"BigQuery","href":"/setup/usage-metrics/bigquery"},{"title":"BigQuery jobs","sidebarTitle":"BigQuery jobs (beta)","href":"/setup/usage-metrics/bigquery-jobs"},{"title":"GCP Cloud Monitoring","sidebarTitle":"Cloud Monitoring","href":"/setup/usage-metrics/gcp-cloud-monitoring"},{"title":"Custom Metrics Push","sidebarTitle":"Custom metrics","href":"/setup/usage-metrics/custom-metrics-push"},{"title":"Datadog","href":"/setup/usage-metrics/datadog"},{"title":"Datadog CI Visibility","href":"/setup/usage-metrics/datadog-ci"},{"title":"GCS Inventory (Parquet)","href":"/setup/usage-metrics/gcs-inventory"},{"title":"Google Sheets","href":"/setup/usage-metrics/google-sheet"},{"title":"S3 metrics","href":"/setup/usage-metrics/s3-parquet"},{"title":"Snowflake Metrics","href":"/setup/usage-metrics/snowflake"},{"title":"Tsuga","href":"/setup/usage-metrics/tsuga"}]},{"group":"Data Exports","pages":[{"title":"BigQuery Data Exports","sidebarTitle":"BigQuery exports","href":"/setup/destinations/bigquery"}]},{"group":"Events","root":{"title":"Connect Engineering Events to Costory (GitHub, CI/CD, Custom API)","sidebarTitle":"Events","href":"/setup/events"},"pages":[{"title":"Connect GitHub Events","href":"/setup/events/github"},{"title":"Send Events from CI/CD Pipelines","href":"/setup/events/ci-cd"},{"title":"Send Custom Events via API","href":"/setup/events/custom-api"},{"title":"Provider Events","href":"/setup/events/provider"}]},{"group":"Collaboration","pages":[{"title":"Slack","href":"/setup/collaboration/slack"},{"title":"Microsoft Teams","href":"/setup/collaboration/teams"},{"title":"Email","href":"/setup/collaboration/email"}]},{"title":"FinOps MCP: Cloud Cost Automation for AI Assistants and Slack","href":"/features/mcp"}]},{"group":"Understand","pages":[{"title":"Explorer","sidebarTitle":"Explorer","href":"/features/cost-explorer"},{"group":"Dashboards","root":{"title":"Cloud Cost Dashboards","sidebarTitle":"Dashboards","href":"/features/dashboards"},"pages":[{"title":"Create and Organize Dashboards","sidebarTitle":"Create dashboards","href":"/features/dashboards/create-dashboard"},{"title":"Dashboard Templates","sidebarTitle":"Templates","href":"/features/dashboards/templates"},{"title":"Dashboard Widgets and Chart Types","sidebarTitle":"Widgets and charts","href":"/features/dashboards/widgets"}]},{"title":"Events","sidebarTitle":"Events","href":"/features/events"},{"title":"Unit Economics","sidebarTitle":"Unit Economics","href":"/features/unit-economics"}]},{"group":"Tag \u0026 Allocate","expanded":true,"pages":[{"title":"Tag \u0026 Allocate Cloud Costs","sidebarTitle":"Overview","href":"/features/tagging"},{"title":"Dimensions","sidebarTitle":"Dimensions","href":"/features/tagging/dimensions"},{"title":"Split Shared Infrastructure Costs Across Teams","sidebarTitle":"Shared Cost Allocation","href":"/features/tagging/shared-cost-allocation"},{"title":"Enrichments","sidebarTitle":"Enrichments","href":"/features/tagging/enrichments"}]},{"group":"Share","pages":[{"title":"Share cost views","sidebarTitle":"Sharing","href":"/features/sharing"},{"title":"Cost Reports","sidebarTitle":"Cost Reports","href":"/v2/Automate/reports"},{"title":"Cost Digest: automate your FinOps reporting","sidebarTitle":"Digest","href":"/features/digest"},{"title":"Alerts","sidebarTitle":"Alerts","href":"/features/alerts"}]},{"group":"Teams","pages":[{"title":"Teams","sidebarTitle":"Teams","href":"/features/teams"},{"title":"Cloud Cost Budgets and Budget Alerts","sidebarTitle":"Budgets","href":"/features/budgets"}]},{"group":"Technical Documentation","pages":[{"group":"Cost Metrics","root":{"title":"Cost Metrics","href":"/docs/cost-metrics"},"pages":[{"title":"Contracted Cost vs Billed Cost: Savings Plan discount sharing issues","sidebarTitle":"Savings Plan discount sharing issues","href":"/docs/savings-plan-cost-fluctuation"},{"title":"Cloud Cost Currency Conversion","href":"/docs/currency-conversion"}]},{"title":"Standard Columns","href":"/docs/standard-columns"},{"title":"Billing Data Refresh Schedule and Cloud Cost Data Freshness","href":"/docs/data-refresh"},{"title":"Settings","sidebarTitle":"Settings","href":"/get-started/settings"},{"group":"Security","root":{"title":"Security","href":"/docs/security"},"pages":[{"title":"Identity and Access","href":"/docs/sso-access-control"},{"title":"Subprocessors","href":"/docs/subprocessors"}]}]},{"group":"Glossary","pages":[{"title":"Glossary","href":"/docs/glossary"}]}]},{"tab":"Use Cases","icon":"lightbulb","pages":[{"title":"Use Cases","href":"/use-cases/overview"}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/overview"}]},{"tab":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"FinOps Memes","icon":"face-laugh-squint","pages":[{"title":"FinOps Memes","href":"/docs/finops-memes"}]}]},"basePath":"","title":"Custom Billing Format (FOCUS) in BigQuery - Costory Documentation","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":[],"chunks":[]}