FOCUS-compatible CSV export
InferCost emits FOCUS-compatible CSV so on-prem inference spend drops into Kubecost, Cloudability, or any FOCUS-aware BI pipeline alongside your cloud spend — no custom importer, no schema translation.
The short version
# Export every UsageReport in the cluster to a CSV
infercost export focus --out april-2026.csv
# Filter by namespace and period
infercost export focus \
--namespace engineering \
--period 2026-04 \
--out engineering-april.csv
# Tag with a region for multi-cluster rollups
infercost export focus --region us-east-1-prod --out prod.csv
# Or stream to stdout and pipe
infercost export focus | awk -F, 'NR==1 || $1+0 > 1.0' Why FOCUS?
FOCUS v1 was designed around SaaS cloud billing. It has no column for "GPU amortization" or
"tokens consumed" — the fields an on-prem AI FinOps program actually needs. Rather than invent a
proprietary schema, InferCost populates the standard FOCUS columns with the closest natural
analogue (ServiceCategory = AI and Machine Learning, UsageUnit = Tokens, etc.) and carries the on-prem specifics as x-Infer* extension columns.
FOCUS explicitly allows the x- prefix for vendor extensions and requires importers
to tolerate unknown columns rather than reject them. A finance team that already pipes OpenCost
→ Kubecost → their BI stack can add InferCost's CSV as another source and slice total AI spend
alongside cloud spend on the same dashboard.
Row shape
One row per (UsageReport, ModelCostBreakdown). A report with three models produces
three rows. A report with no model breakdown (still warming up, pods missing) emits one rollup row so the namespace doesn't disappear from finance exports.
Column reference
Standard FOCUS v1 columns (always populated)
BilledCost,EffectiveCost,ListCost,ContractedCost— all equal (no discount model on-prem)ChargePeriodStart,ChargePeriodEnd— RFC3339 timestamps from the UsageReport's periodBillingPeriodStart,BillingPeriodEnd— month boundaries around the chargeCurrency=USDServiceName=On-Prem AI InferenceServiceCategory=AI and Machine Learning(FOCUS v1 canonical enum)ResourceId=<namespace>/<report>/<model>UsageQuantity= total tokens;UsageUnit=TokensSubAccountId= Kubernetes namespace (for per-team chargeback)ChargeCategory=Usage;ChargeClass= emptyTags= JSON object withreport/schedule/model/gpuModel
InferCost extensions (x-Infer*)
x-InferCostProfile— CostProfile name this row referencesx-InferGpuModel,x-InferGpuCountx-InferTokensInput,x-InferTokensOutputx-InferAmortizationYears,x-InferElectricityRatePerKWh,x-InferPUEFactorx-InferCloudEquivalentProvider,x-InferCloudEquivalentModel,x-InferCloudEquivalentCostUSDx-InferSavingsUSD,x-InferSavingsPercent
The cloud-equivalent columns are populated from the highest-savings entry in the
UsageReport's cloudComparison — that's the figure a finance audit actually needs
("what would this have cost us on cloud?"). Consumers who need the full per-provider comparison
matrix should query the CRD directly.
FOCUS version alignment
InferCost tracks FOCUS v1.0. When FOCUS v1.1 lands with native AI-inference coverage, the x-Infer* columns will migrate to the standard names in a minor release with a
documented alias period. Until then, the x- prefix guarantees import compatibility —
FOCUS requires importers to tolerate unknown x- columns.
Importing into Kubecost and Cloudability
Both tools accept FOCUS CSV via their custom-import flows. The standard columns are enough for
high-level spend dashboards. To unlock per-token and per-GPU-model views, register the x-Infer* columns as custom fields in the target tool. If a downstream tool rejects a
specific row, open an issue —
we adjust the emission rather than tell users to work around it.