API / get-daily-active-users-via-analytics-api

API

Get daily active users with the Analytics API

Pull daily active user counts with GET https://api.cursor.com/analytics/team/dau. Official reference: Analytics API → Daily Active Users (DAU).

DAU is the number of unique users who used Cursor on a given day. An active user is a user who used at least one AI feature. The response also breaks out CLI, Cloud Agents, and BugBot DAU fields.

Authenticate with Basic auth (API key as username, empty password). Create keys at Cursor Dashboard → API Keys. Most Analytics endpoints need scope admin:*. Availability: Enterprise only. Team-level rate limit: 100 requests per minute per team (by-user endpoints: 50/min).

Query parameters

Parameter Rules
startDate Optional. Default: 7 days ago. Prefer YYYY-MM-DD, or shortcuts now / today / yesterday / Nd. Max range 30 days. Time is ignored.
endDate Optional. Default: today. Same formats as startDate.
users Optional. Comma-separated emails and/or public user ids (user_…).

Request

curl -X GET "https://api.cursor.com/analytics/team/dau?startDate=14d&endDate=today" \
  -u YOUR_API_KEY:

Omit dates for the last 7 days:

curl -X GET "https://api.cursor.com/analytics/team/dau" \
  -u YOUR_API_KEY:

Example response:

{
  "data": [
    {
      "date": "2025-01-15",
      "dau": 42,
      "cli_dau": 5,
      "cloud_agent_dau": 37,
      "bugbot_dau": 10
    },
    {
      "date": "2025-01-16",
      "dau": 38,
      "cli_dau": 4,
      "cloud_agent_dau": 34,
      "bugbot_dau": 12
    }
  ],
  "params": {
    "metric": "dau",
    "teamId": 12345,
    "startDate": "2025-01-01",
    "endDate": "2025-01-31"
  }
}

Response fields

Field Type Meaning
date string Day covered (YYYY-MM-DD). This endpoint names the day field date (agent-edits and tabs name theirs event_date)
dau number Unique users who used at least one AI feature that day
cli_dau number DAU breakdown for Cursor CLI
cloud_agent_dau number DAU breakdown for Cloud Agents
bugbot_dau number DAU breakdown for BugBot
params.metric string Echoes dau
params.teamId number Team id
params.startDate / params.endDate string Resolved range

Caching

Send prior ETag values with If-None-Match. 304 Not Modified responses do not count against the rate limit. Cache window: Cache-Control: public, max-age=900. See API Overview → Caching.

Pitfalls

  • Treating cli_dau + cloud_agent_dau + bugbot_dau as a partition of dau — breakdown metrics are separate counters; a user can land in more than one surface on the same day.
  • Requesting ranges wider than 30 days.
  • Calling this for Bugbot review-level analytics — dedicated Bugbot analytics and review analytics endpoints (review analytics need read:*) ship in a later batch; this response only includes bugbot_dau.

Sibling how-tos: Get agent edits, Get tab usage, Get model usage.