Using your data
Cost Catch is the data layer for your vendor bills. It keeps every connected vendor's billing data complete and current in your Snowflake account — what you build on top is up to you, with whatever tools your team already uses.
Where the data lives
Everything lands inside the Cost Catch app in your account. The examples below assume you kept the
default app name cost_catch; substitute yours if you renamed it at install.
RAW.VENDOR_BILLING_CURRENT— the current version of every vendor record, for every connection. Start here for AWS, Azure, and Google Cloud. Each row carriessource_system,connection_id, and the vendor's original record inrecord, with the vendor's own column names.RAW.VENDOR_BILLING— the full append-only history, including earlier versions of figures a vendor later revised. Useful for audits; most reporting doesn't need it.ANALYTICS.<VENDOR>_BILLING— ready-to-query daily cost for OpenAI, Anthropic, Cursor, and OpenRouter, withusage_date,cost_usd, and asettlement_statuscolumn.ANALYTICS.<VENDOR>_BILLING_FINAL— the same, limited to rows markedfinal(see below).
Each connector page lists exactly what that vendor delivers.
Give your team access
Cost Catch ships a read-only application role, app_user. Grant it to whichever Snowflake
role your analysts, BI service account, or AI tools use:
GRANT APPLICATION ROLE cost_catch.app_user TO ROLE analyst;
That role is read-only: it can query the tables and views above and the run history, but can't change connections. Access stays governed by your own Snowflake roles.
Final vs. provisional figures
Vendors revise recent charges for a while after they first report them. Cost Catch keeps re-reading recent days so your data picks up those revisions.
AI vendors
Every row in the ANALYTICS views has a settlement_status. A day is
final once its settlement window has passed and Cost Catch has
re-read it after that point; until then it is provisional. The window is based on how long
each vendor documents revising its figures:
- OpenAI API platform — 2 days
- ChatGPT Enterprise (preview) — 34 days. Values are usage credits with an estimated dollar amount, even when final.
- Anthropic Claude Console — 2 days
- Anthropic Claude Enterprise — 30 days
- Cursor — 7 days
- OpenRouter — 2 days. OpenRouter documents no finality guarantee, so this is best-effort.
Two less common states: unsettled means the window has passed but the next scheduled run
hasn't re-read the day yet; unsettleable means the day aged out of the vendor's API before it
could be re-read. An admin can change a connection's window with
CALL cost_catch.config.set_setting('<connection_id>', 'settle_days', '<days>').
"Final" is not invoice reconciliation. It means the figure is past the vendor's revision window and we have the latest value the vendor reported. Vendor billing data can still differ from your invoice because of taxes, invoice-level adjustments, credits, and rounding — compare against the invoice when you close the books.
Cloud exports (AWS, Azure, Google Cloud)
These have no settlement_status column. RAW.VENDOR_BILLING_CURRENT always holds
the vendor's latest export — when a vendor re-issues a period, Cost Catch replaces the earlier version
automatically. To tell whether a period is closed, use the vendor's own fields in record.
Example: daily AI spend across vendors
SELECT 'openai' AS vendor, usage_date, settlement_status, SUM(cost_usd) AS cost_usd
FROM cost_catch.analytics.openai_billing GROUP BY ALL
UNION ALL
SELECT 'anthropic', usage_date, settlement_status, SUM(cost_usd)
FROM cost_catch.analytics.anthropic_billing GROUP BY ALL
UNION ALL
SELECT 'cursor', usage_date, settlement_status, SUM(cost_usd)
FROM cost_catch.analytics.cursor_billing GROUP BY ALL
UNION ALL
SELECT 'openrouter', usage_date, settlement_status, SUM(cost_usd)
FROM cost_catch.analytics.openrouter_billing GROUP BY ALL
ORDER BY usage_date DESC, vendor;
Bring your own tools
Because the data is ordinary Snowflake tables and views, anything that connects to Snowflake can use it:
- Snowsight worksheets and dashboards — nothing else to set up.
- BI tools such as Sigma, Tableau, Power BI, or Looker — connect with a role that has
app_user. - Notebooks and dbt — model it alongside your own data, for example joining spend to teams, products, or customers using your own mappings.
- AI assistants and agents — give one read access through that same role and ask questions about your spend in plain language.
Cost Catch doesn't ship dashboards. It stays focused on one job: getting your vendor billing data in, complete and current, so every tool you already trust can use it.