Connect Cursor
Cost Catch reads your team's usage events from Cursor's Admin API — one billable request each, with its model, kind, and charge. Summing them is your spend, at the finest grain. Nothing to choose here: Cursor has one billing surface and one key type.
Before you start
Three things, and the app generates the technical parts:
- A paid Cursor team plan (Teams, Business, or Enterprise). Individual Hobby / Pro / Ultra accounts have no Admin API.
- A Cursor Team API key (Dashboard → API & SSH Keys → Team tab → New API Key; you must be a team admin). Already have one? Reuse it.
- A Snowflake ACCOUNTADMIN to store the key as a secret and allow outbound calls to
api.cursor.com. The app generates the SQL.
Good to know
There are no options to choose — one API, one key. Worth knowing:
- Cost data is per-user. Every event carries an email. Cost Catch aggregates by default; per-user figures are an explicit, admin-gated opt-in — and even then the data never leaves your account.
You can connect more than one Cursor team, each as its own connection.
Create the key
You must be a team admin:
- Open the Cursor dashboard and go to API & SSH Keys.
- At the top of the key list there's a small User / Team toggle next to New API Key — click Team, then New API Key. It's this toggle, not the separate Team Settings sidebar item; and it must be Team, not User — a personal User key (even with Admin scope) authenticates as you, not the team, and Cursor's team usage API rejects it with a 401.
- Give it a name, then copy the key — it's shown only once — and paste it into the wizard.
Reference: Cursor Admin API.
Refresh cadence
Pick how often Cost Catch checks for new data. Every connection offers the same menu; we suggest a default that matches how often Cursor actually publishes.
| Cadence option | Good for |
|---|---|
| Every hour | Tightest freshness; more runs |
| Every 6 hours Recommended | Cursor usage is near-real-time but the cost grain that matters is a day; this keeps the current day current without exceeding the Admin API rate limit. |
| Every 12 hours | Twice a day; low cost |
| Daily | A once-a-day snapshot; lowest cost |
| Custom | Any schedule you like, on your own cron |
The app pre-selects Every 6 hours and shows this reasoning right next to the picker — override it any time.
What to expect
- Recent days can still change. Async agent events can arrive for a past day, so Cost Catch re-reads and replaces that date's snapshot during the settlement window; days are marked final 7 days after they occur. Compare against your Cursor invoice for the closed billing cycle.
- Where your data lands. Source event rows in
RAW.VENDOR_BILLING; current billing viaANALYTICS.CURSOR_BILLING. - The app offers a Test connection button so a bad key is caught during setup.
Connect it
Open Cursor in the setup wizard — it generates the Snowflake secret and network access, and tests the connection before you commit.
Stuck on a step? Email [email protected].