Stack SpendDocs

Custom provider (FOCUS)

Track spend from any tool StackSpend doesn't natively support by pushing cost data in the FOCUS standard, via the API or a CSV import.

Custom provider logo

Custom provider (FOCUS)

Any source · push (API or CSV) · 5 min setup

What is a custom provider?

A custom provider lets you bring spend into StackSpend from any tool that isn't in our built-in list — an internal platform, a niche SaaS, or a vendor we don't yet have a native connector for. Instead of StackSpend pulling the data, you push it: either by POSTing cost rows to our API, or by uploading a CSV in the app and mapping your columns. Once it's in, custom-provider spend flows through the same dashboards, anomaly detection, forecasts and savings as every other provider.

Why it exists

Most teams have long-tail cost sources that never make it into a cost tool, leaving dashboards and budgets incomplete. Custom providers close that gap. The data format is the StackSpend FOCUS Profile — our versioned profile of the FinOps FOCUS 1.2 standard. Because it uses standard FOCUS column names, a FOCUS export from another tool (for example a Vantage custom-provider export) maps straight in.

Push-only.Custom providers are never synced on a schedule — StackSpend only holds the data you send. Send a new batch whenever your costs update (e.g. a daily job, or a CSV upload each month).

Set up a custom provider

1

Create the provider

In Settings → Integrations, choose Custom provider (or “Can't find your provider? Add a custom one”). Give it a display name and a default currency, then Create & get ingest key.
2

Copy your ingest key

The ingest key is shown once on creation — copy it now. You can always generate a new one later from the provider's API key & ingest URL tab. The same tab shows your full ingest URL with the connection id baked in.
3

Send your data

Either POST FOCUS rows to the API (see below), or open the provider's Import data tab, upload a CSV, and map your columns to FOCUS fields. We auto-match columns that already use FOCUS names and save your mapping for next time.
4

Verify

Open the provider's History tab to see each ingest batch (rows, cost line items created, status). The spend then appears in your dashboards and Data Explorer.

The FOCUS Profile format

Each row is one charge. Send fully-priced rows — StackSpend stores the cost you provide (we don't price raw usage). Body shape: { "format": "stackspend.focus", "version": "1", "rows": [ … ] }.

ColumnRequiredNotes
ChargePeriodStartYesISO 8601 or YYYY-MM-DD.
BilledCostYesGross charge. Negative for credits/refunds.
ServiceNameYesWhat the charge is for.
ChargeCategoryYesUsage, Purchase, Tax, Credit, or Adjustment.
EffectiveCostRecommendedNet/amortized cost used by analytics. Defaults to BilledCost.
ChargePeriodEndRecommendedExclusive end of the period.
BillingCurrencyRecommendedISO 4217. Defaults to the provider's default currency.
RegionId, ResourceId, BillingAccountId, SubAccountId, ConsumedQuantity/Unit, Tags, …OptionalStandard FOCUS dimensions; mapped or preserved on the line item.

Example request

curl -X POST "https://ingest.stackspend.app/api/v1/public/ingest/focus/YOUR_CONNECTION_ID" \
  -H "Authorization: Bearer YOUR_INGEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "format": "stackspend.focus",
    "version": "1",
    "rows": [
      {
        "ChargePeriodStart": "2026-06-01",
        "ChargePeriodEnd": "2026-06-02",
        "BilledCost": 12.50,
        "EffectiveCost": 12.50,
        "BillingCurrency": "USD",
        "ChargeCategory": "Usage",
        "ServiceName": "Compute",
        "RegionId": "us-east-1",
        "Tags": { "env": "prod" }
      }
    ]
  }'
Explore the API.See the API reference for the full endpoint, scopes and schemas, or open the interactive API explorer to try it with your key.

Frequently asked questions

How does StackSpend get the data for a custom provider?

You push it. Unlike native connectors, a custom provider is never pulled or synced on a schedule — StackSpend only holds the data you send, either by POSTing FOCUS rows to the ingest API or by uploading a CSV in the app. Send a new batch whenever your costs update, such as a daily job or a monthly CSV upload.

What credential do I need?

You need the scoped ingest key generated when you create the provider. It is shown once on creation, and you can regenerate a new one from the provider's API key & ingest URL tab, which also shows your full ingest URL with the connection id baked in.

What data format does a custom provider use?

The StackSpend FOCUS Profile, a versioned profile of the FinOps FOCUS 1.2 standard. Because it uses standard FOCUS column names, a FOCUS export from another tool maps straight in. Each row is one fully-priced charge — StackSpend stores the cost you provide and does not price raw usage.

How do I confirm my data landed?

Open the provider's History tab to see each ingest batch, including rows received, cost line items created, and status. Once ingested, custom-provider spend flows through the same dashboards, anomaly detection, forecasts, and savings as every other provider.

StackSpend Docs