The Copilot usage metrics dashboard and APIs display and export data using a consistent set of fields. This reference lists all available metrics and describes how to interpret their values in both dashboard visuals and NDJSON or API exports.
- The Copilot usage metrics dashboards are available at the enterprise and organization level.
- The Copilot usage metrics APIs return reports at the enterprise or organization scope, with aggregated, repository-level, and individual user-level report granularities. Shapes vary by scope and granularity.
- Team-level metrics are not pre-aggregated; you construct them by joining the user-teams report with the per-user usage metrics report. See Team-level Copilot usage metrics.
- Repository-level reports contain one record per repository with pull request activity on the requested day. See Repository-level fields (API only) later in this article.
For guidance on how to read and interpret these metrics, see GitHub Copilot usage metrics.
Copilot usage dashboard metrics
These metrics appear directly in the Copilot usage dashboard. These charts do not include Copilot CLI usage.
| Metric | Description |
|---|---|
| Agent adoption | Percentage of Copilot-licensed active users who tried an agent in the current calendar month. |
| Average chat requests per active user | Average number of chat requests per active user. |
| Code completions (suggested/accepted) | Total number of inline code suggestions shown and accepted. |
| Code completion acceptance rate | Percentage of suggestions accepted by users. |
| Daily active users | Number of unique users who used Copilot on a given day. |
| Weekly active users | Number of unique users who used Copilot during a seven-day window. |
| Total active users | Licensed users active in the current calendar month. |
| Language usage | Distribution of programming languages used with Copilot. |
| Language usage per day | Daily breakdown of languages used. |
| Model usage | Distribution of AI models used for chat. |
| Model usage per day | Daily breakdown of chat model usage. |
| Model usage per chat mode | Model usage by Copilot feature (ask, edit, plan, agent). |
| Model usage per language | Distribution of languages broken down by model. |
| Most used chat model | The most frequently used chat model in the last 28 days. |
| Requests per chat mode | Number of chat requests by mode (ask, edit, plan, agent). |
Impact dashboard metrics
These metrics appear in the impact dashboard, which groups users into adoption cohorts and connects that adoption to pull request output. For guidance on interpreting adoption cohorts, see GitHub Copilot usage metrics.
| Metric | Description |
|---|---|
| Engagement trends | How the organization's adoption cohort mix and pull request throughput (total pull requests merged per month) have changed over the last six months. |
| Feature engagement | Number of active users who engaged with each included Copilot feature on at least two distinct days during the inclusive 28-day window. |
| Adoption cohort distribution | Share of licensed users grouped into each adoption phase (Passive users, Phase 1, Phase 2, Phase 3) for the period. Passive users correspond to the No Cohort value in the API. |
| Adoption multiplier | Compares engaged users (Phase 1, 2, or 3) against passive users on code shipped (pull requests merged per user per month) and time to merge pull requests, to show the relative impact of deeper Copilot adoption. |
| Recommendations | Suggested actions, such as configuring Copilot cloud agent or enabling Copilot code review, based on the organization's current cohort distribution. |
Code generation dashboard metrics
These metrics appear in the code generation dashboard and provide a breakdown of how code is being generated across user-initiated and agent-initiated activity. All values are derived from lines of code (LoC) added or deleted in the IDE.
| Metric | Description |
|---|---|
| Lines of code changed with AI | Total lines of code added and deleted across all modes in the last 28 days. |
| Agent contribution | Percentage of lines of code added and deleted by agents (including edit, agent, and custom modes) in the last 28 days. |
| Average lines deleted by agent | Average number of lines automatically deleted by agents on behalf of active users during the current calendar month. |
| Daily total of lines added and deleted | Total number of lines added to and deleted from the codebase across all modes for each day. |
| User-initiated code changes | Lines suggested or manually added by users through code completions and chat panel actions (insert, copy, or apply). |
| Agent-initiated code changes | Lines automatically added to or deleted from the codebase by agents on behalf of users across edit, agent, and custom modes. |
| User-initiated code changes per model | User-initiated lines of code, grouped by model used in the IDE. |
| Agent-initiated code changes per model | Agent-initiated lines of code, grouped by model performing the agent actions. |
| User-initiated code changes per language | User-initiated lines of code, grouped by programming language. |
| Agent-initiated code changes per language | Agent-initiated lines of code, grouped by programming language. |
API and export fields
These fields appear in the exported NDJSON reports and in the Copilot usage metrics APIs. Most tables below list the field name, its JSON type, whether the value can be null, and a description.
Reports come in different shapes depending on their scope and granularity, so the fields available in a record depend on which report it comes from:
- Per-user reports (
*-users-1-dayand*-users-28-day) contain one record per user, includinguser_id,user_login,ai_credits_used, theused_*indicators, andai_adoption_phase. They do not contain active-user counts,pull_requests, ortotals_by_ai_adoption_phase. - Aggregated reports (
enterprise-1-dayandorganization-1-day) contain one aggregated record per enterprise or organization, including active-user counts,pull_requests, andtotals_by_ai_adoption_phase. They do not containuser_id,user_login, or theused_*indicators. - 28-day aggregate reports (
enterprise-28-dayandorganization-28-day) wrap an array of daily aggregated records in aday_totalsfield, with the reporting window and optionalcopilot_feature_engagementobject at the top level. The object is not included in per-user reports. - User-teams reports (
*-user-teams-1-day) map users to the teams they belong to, so you can construct team-level metrics. - Repository-level reports (
*-repos-1-day) contain one record per repository with pull request activity for the day, including pull requests created by Copilot cloud agent and reviewed by Copilot code review.
Organization-scope reports also include organization_id alongside enterprise_id. For example schemas of the data returned by the APIs, see Example schema for Copilot usage metrics.
The Type column uses JSON Schema types: string, integer, number, boolean, array, and object. The Nullable column indicates whether a field's value can be null or absent from a record where it would otherwise apply. Activity breakdown arrays are always present but can be empty ([]). Optional arrays are marked as nullable and can be absent.
Report identification fields
These fields identify the scope and date of each record. The exact set present depends on the report shape.
| Field | Type | Nullable | Description |
|---|---|---|---|
day | string | No | Calendar day this record represents, in YYYY-MM-DD format. In 28-day reports, day appears within each day_totals entry rather than at the top level. |
enterprise_id | string | No | Unique ID of the enterprise. Included in both enterprise- and organization-scope reports. |
organization_id | string | Yes | Unique ID of the organization. Included in organization-scope reports only; omitted from enterprise-scope reports. |
Per-user report fields
Per-user reports contain one record per user for the reporting period. The 28-day per-user report also includes report_start_day and report_end_day to mark the reporting window.
| Field | Type | Nullable | Description |
|---|---|---|---|
user_id | integer | No | Unique identifier for the user. |
user_login | string | No | GitHub username for the user. |
ai_credits_used | number | No | Total AI credits consumed by the user in the reporting period. This field is included in per-user reports only and is not broken down by feature, model, or surface. This metric is for consumption analysis, not invoicing totals. |
user_initiated_ | integer | No | Number of explicit prompts sent to Copilot. Only counts messages or prompts actively sent to the model. Does not include opening the chat panel, switching modes (for example, ask, edit, plan, or agent), using keyboard shortcuts to open the inline UI, or making configuration changes. |
code_generation_ | integer | No | Number of distinct Copilot output events generated. Includes: All generated content, including comments and docstrings. Multiple blocks: Each distinct code block from a single user prompt counts as a separate generation. Note: This metric is not directly comparable to user_initiated_, since one prompt can produce multiple generations. |
code_acceptance_ | integer | No | Number of suggestions or code blocks accepted by users. Counts: All built-in accept actions, such as “apply to file,” “insert at cursor,” “insert into terminal,” and use of the Copy button. Does not count: Manual OS clipboard actions (for example, Ctrl+C). Granularity: Each acceptance action increments the count once, regardless of how many code blocks were generated by the initial prompt. |
loc_suggested_ | integer | No | Lines of code Copilot suggested to add (completions, inline chat, chat panel, and so on; excludes agent edits). |
loc_suggested_ | integer | No | Lines of code Copilot suggested to delete (future support planned). |
loc_added_sum | integer | No | Lines of code actually added to the editor (accepted completions, applied code blocks, agent and edit mode). |
loc_deleted_sum | integer | No | Lines of code deleted from the editor (currently from agent edits). |
used_agent | boolean | No | Whether the user used agent mode in the IDE that day. Does not include Copilot code review activity, which is captured separately in used_copilot_ and used_copilot_. |
used_chat | boolean | No | Whether the user used IDE chat that day. |
used_cli | boolean | No | Whether the user used Copilot CLI that day. |
used_copilot_app | boolean | No | Whether the user used the Copilot app that day. |
used_copilot_ | boolean | No | Whether the user used Copilot cloud agent (previously Copilot coding agent) that day. |
used_copilot_ | boolean | No | Whether the user used Copilot cloud agent that day. Carries the same value as used_copilot_; both names are retained for backward compatibility. |
used_copilot_ | boolean | Yes | Whether the user actively engaged with Copilot code review that day. A user is considered active if they manually requested a Copilot review, or applied a Copilot review suggestion. Null when there is no Copilot code review signal for the user that day. |
used_copilot_ | boolean | Yes | Whether the user had Copilot automatically assigned to review their pull request that day, without actively engaging with the review. Null when there is no Copilot code review signal for the user that day. |
used_vscode_agent | boolean | Yes | Whether the user used the dedicated VS Code Agents window during the reporting period. Omitted when no dedicated Agents-window data is available for the user. |
ai_adoption_phase | object | No | The user's AI adoption phase for the day. Always present; defaults to the "No Cohort" phase. See AI adoption phase fields. |
distinct_skill_ | integer | Yes | Number of different skill identifiers with recorded activity for the user. See Copilot CLI customization fields. |
distinct_custom_ | integer | Yes | Number of different custom agent identifiers with recorded activity for the user. See Copilot CLI customization fields. |
distinct_mcp_ | integer | Yes | Number of different Model Context Protocol (MCP) server identifiers with recorded connection activity for the user. See Copilot CLI customization fields. |
distinct_slash_ | integer | Yes | Number of different slash command identifiers with recorded activity for the user. See Copilot CLI customization fields. |
distinct_plugin_ | integer | Yes | Number of different plugin identifiers with recorded activity for the user. See Copilot CLI customization fields. |
totals_by_skill | array | Yes | Top skills used in Copilot CLI, ordered by interaction count. See Copilot CLI customization fields. |
totals_by_custom_ | array | Yes | Top custom agents used in Copilot CLI, ordered by interaction count. See Copilot CLI customization fields. |
totals_by_mcp | array | Yes | MCP servers with the most connection and reconnection attempts in Copilot CLI, ordered by interaction count. See Copilot CLI customization fields. |
totals_by_slash_ | array | Yes | Top slash commands used in Copilot CLI, ordered by interaction count. See Copilot CLI customization fields. |
totals_by_plugin | array | Yes | Top plugins used in Copilot CLI, ordered by interaction count. See Copilot CLI customization fields. |
totals_by_cli | object | Yes | CLI-specific metrics for the user. Omitted when the user had no Copilot CLI usage that day. See Copilot CLI metrics fields. |
totals_by_copilot_ | object | Yes | Copilot app metrics for the user. Omitted when the user had no Copilot app usage that day. See Copilot app metrics fields. |
totals_by_3rd_ | array | Yes | Per-agent usage metrics for recognized agent apps. Omitted when the user had no recognized agent app activity during the reporting period. See Agent apps metrics fields. |
totals_by_vscode_ | object | Yes | Dedicated VS Code Agents-window metrics for the user. Omitted when both required counts are not available. See VS Code Agents-window metrics fields. |
totals_by_ide | array | No | Per-IDE breakdown of the user's activity. See Activity breakdown objects. |
totals_by_feature | array | No | Per-feature breakdown of the user's activity. See Activity breakdown objects. |
totals_by_language_ | array | No | Breakdown combining language and feature dimensions. See Activity breakdown objects. |
totals_by_language_ | array | No | Breakdown combining language and model dimensions, for chat activity. See Activity breakdown objects. |
totals_by_model_ | array | No | Breakdown combining model and feature dimensions, for chat activity. See Activity breakdown objects. |
Aggregated enterprise and organization report fields
Aggregated reports contain one record per enterprise or organization, summarizing all users for the day. Active-user counts include users identified through both client-side and server-side telemetry. Users surfaced only through server-side telemetry are counted in active-user totals but may not appear in the dimensional breakdown arrays (totals_by_ide, totals_by_feature, and similar). The following tables list the active-user counts, then the activity totals and breakdowns.
Active-user counts:
| Field | Type | Nullable | Description |
|---|---|---|---|
daily_active_ | integer | No | Number of unique users who used Copilot on a given day. |
weekly_active_ | integer | No | Number of unique users who used Copilot during a trailing seven-day window. |
weekly_active_ | integer | Yes | Number of unique users who used the dedicated VS Code Agents window from Sunday through the report day, inclusive. This calendar-to-date count is not a trailing seven-day window. |
monthly_active_ | integer | No | Number of unique users who used Copilot during a trailing 28-day window. |
monthly_active_ | integer | Yes | Number of unique users who used the dedicated VS Code Agents window from the first day of the calendar month through the report day, inclusive. This calendar-to-date count is not a trailing 28-day window. |
monthly_active_ | integer | No | Number of unique users who used chat during a trailing 28-day window. |
monthly_active_ | integer | No | Number of unique users who used agent mode during a trailing 28-day window. |
daily_active_ | integer | No | Number of unique users who used Copilot cloud agent on a given day. |
weekly_active_ | integer | No | Number of unique users who used Copilot cloud agent during a trailing seven-day window. |
monthly_active_ | integer | No | Number of unique users who used Copilot cloud agent during a trailing 28-day window. |
daily_active_ | integer | No | Number of unique users who actively used Copilot code review on a given day. Active usage means manually requesting a review or applying a suggestion. When a user has both active and passive signals in the same period, they are counted as active only. |
weekly_active_ | integer | No | Number of unique users who actively used Copilot code review during a trailing seven-day window. When a user has both active and passive signals in the same period, they are counted as active only. |
monthly_active_ | integer | No | Number of unique users who actively used Copilot code review during a trailing 28-day window. When a user has both active and passive signals in the same period, they are counted as active only. |
daily_passive_ | integer | No | Number of unique users who had Copilot code review automatically assigned to review their pull request on a given day, with no active engagement. |
weekly_passive_ | integer | No | Number of unique users who had Copilot code review automatically assigned to review their pull request during a trailing seven-day window, with no active engagement. |
monthly_passive_ | integer | No | Number of unique users who had Copilot code review automatically assigned to review their pull request during a trailing 28-day window, with no active engagement. |
daily_active_ | integer | Yes | Number of unique users who used Copilot CLI on a given day. This count is independent of IDE active-user counts and is not included in IDE-based active-user definitions. Omitted for enterprises or organizations with no CLI usage that day. |
daily_active_ | integer | Yes | Number of unique users who used the Copilot app on a given day. Null when the enterprise or organization has no Copilot app activity that day. |
daily_active_ | integer | Yes | Number of unique users who used the dedicated VS Code Agents window on a given day. Omitted when no dedicated Agents-window data is available for the enterprise or organization. |
Activity totals and breakdowns:
| Field | Type | Nullable | Description |
|---|---|---|---|
user_initiated_ | integer | No | Total number of explicit prompts sent to Copilot across all users for the day. |
code_generation_ | integer | No | Total number of distinct Copilot output events generated across all users for the day. |
code_acceptance_ | integer | No | Total number of suggestions or code blocks accepted across all users for the day. |
loc_suggested_ | integer | No | Aggregated lines of code suggested to add for the day. Same definition as the per-user field. |
loc_suggested_ | integer | No | Aggregated lines of code suggested to delete for the day. Same definition as the per-user field. |
loc_added_sum | integer | No | Aggregated lines of code added for the day. Same definition as the per-user field. |
loc_deleted_sum | integer | No | Aggregated lines of code deleted for the day. Same definition as the per-user field. |
distinct_skill_ | integer | Yes | Number of different skill identifiers with recorded activity across the enterprise or organization. See Copilot CLI customization fields. |
distinct_custom_ | integer | Yes | Number of different custom agent identifiers with recorded activity across the enterprise or organization. See Copilot CLI customization fields. |
distinct_mcp_ | integer | Yes | Number of different MCP server identifiers with recorded connection activity across the enterprise or organization. See Copilot CLI customization fields. |
distinct_slash_ | integer | Yes | Number of different slash command identifiers with recorded activity across the enterprise or organization. See Copilot CLI customization fields. |
distinct_plugin_ | integer | Yes | Number of different plugin identifiers with recorded activity across the enterprise or organization. See Copilot CLI customization fields. |
totals_by_skill | array | Yes | Top skills used in Copilot CLI across the enterprise or organization. See Copilot CLI customization fields. |
totals_by_custom_ | array | Yes | Top custom agents used in Copilot CLI across the enterprise or organization. See Copilot CLI customization fields. |
totals_by_mcp | array | Yes | MCP servers with the most connection and reconnection attempts in Copilot CLI across the enterprise or organization. See Copilot CLI customization fields. |
totals_by_slash_ | array | Yes | Top slash commands used in Copilot CLI across the enterprise or organization. See Copilot CLI customization fields. |
totals_by_plugin | array | Yes | Top plugins used in Copilot CLI across the enterprise or organization. See Copilot CLI customization fields. |
totals_by_ide | array | No | Aggregated per-IDE activity breakdown. See Activity breakdown objects. |
totals_by_feature | array | No | Aggregated per-feature activity breakdown. See Activity breakdown objects. |
totals_by_language_ | array | No | Aggregated language-and-feature activity breakdown. See Activity breakdown objects. |
totals_by_language_ | array | No | Aggregated language-and-model activity breakdown. See Activity breakdown objects. |
totals_by_model_ | array | No | Aggregated model-and-feature activity breakdown. See Activity breakdown objects. |
totals_by_cli | object | Yes | Aggregated Copilot CLI metrics for the day. Omitted when there is no CLI usage that day. Unlike the per-user form, it does not include last_known_cli_. See Copilot CLI metrics fields. |
totals_by_copilot_ | object | Yes | Aggregated Copilot app metrics for the day. Null when the enterprise or organization has no Copilot app activity that day. See Copilot app metrics fields. |
totals_by_3rd_ | array | Yes | Aggregated per-agent usage metrics for recognized agent apps. Omitted when the enterprise or organization had no recognized agent app activity that day. See Agent apps metrics fields. |
totals_by_vscode_ | object | Yes | Aggregated dedicated VS Code Agents-window metrics for the day. Omitted when both required counts are not available. See VS Code Agents-window metrics fields. |
totals_by_ai_ | array | Yes | Per-phase aggregates of users and their average activity. Omitted when no adoption-phase data is available. See AI adoption phase fields. |
pull_requests | object | No | Daily pull request activity for the enterprise or organization. See Pull request activity fields. |
28-day report fields
The 28-day aggregate reports (enterprise-28-day and organization-28-day) are wrappers: they carry the reporting window at the top level and an array of daily aggregated records.
| Field | Type | Nullable | Description |
|---|---|---|---|
report_start_day | string | No | First calendar day of the 28-day reporting window, in YYYY-MM-DD format. |
report_end_day | string | No | Last calendar day of the 28-day reporting window, in YYYY-MM-DD format. |
created_at | string | No | Timestamp (ISO 8601) when the report was generated. |
copilot_feature_ | object | Yes | Rolling feature engagement for the 28-day window. Included only in enterprise and organization aggregate reports. Null or absent when the optional calculation is unavailable or the report predates this field. See Copilot feature engagement fields. |
day_totals | array | No | Array of daily aggregated records. Each entry has the same fields as an aggregated 1-day report. See Aggregated enterprise and organization report fields. |
Copilot feature engagement fields
The optional copilot_feature_engagement object summarizes the report's rolling active-user population and engagement with seven features. For the day_totals entry whose day matches report_end_day, copilot_feature_engagement.active_user_count equals the sum of the mutually exclusive totals_by_ai_adoption_phase[].users_in_phase_28d values.
Counts for individual features overlap because a user can engage with more than one feature. Do not add the engaged_user_count values together. The initial feature set reports active and passive Copilot code review as separate features. It does not include Copilot Chat or VS Code Agent.
Copilot Chat is planned for a later release after 28 consecutive days of data have been collected and report consumers support the additional entry.
| Field | Type | Nullable | Description |
|---|---|---|---|
copilot_feature_ | integer | No | Nonnegative number of distinct active users in the inclusive 28-day report window. A valid zero-user report sets this field to 0. |
copilot_feature_ | array | No | Feature engagement counts. The initial array contains exactly one entry for each of these values: code_completion, agent_edit, code_review_passive, code_review_active, cloud_agent, copilot_cli, and github_app. A valid zero-user report includes all seven entries with engaged_user_ set to 0. |
copilot_feature_ | string | No | Feature identifier. In this object, github_app represents the Copilot app. This differs from the copilot_app value used in activity breakdown arrays such as totals_by_feature. |
copilot_feature_ | integer | No | Nonnegative number of distinct active users who engaged with the feature on at least two distinct days during the inclusive 28-day report window. |
User-teams fields
These fields appear in the daily user-teams report (available via REST API at the organization and enterprise scopes) and are used to construct team-level metrics by joining with the per-user usage metrics report. For the full join recipe and the endpoint URLs, see Team-level Copilot usage metrics.
Teams with fewer than 5 seated Copilot users on a given day are excluded from the user-teams report.
| Field | Type | Nullable | Description |
|---|---|---|---|
user_id | integer | No | Unique identifier for the user. |
user_login | string | No | GitHub username for the user. |
day | string | No | Calendar day this record represents. |
organization_id | string | No | Unique ID of the organization the team belongs to. Organization scope only. |
enterprise_id | string | No | Unique ID of the enterprise the team belongs to. Enterprise scope only. The enterprise-scoped report includes both enterprise teams and business teams. |
team_id | integer | No | Unique ID of the team the user belongs to. |
slug | string | No | URL-friendly identifier for the team. |
Repository-level fields (API only)
Repository-level reports show daily pull request creation, review, merge, and suggestion activity, plus pull request review stage durations, for repositories in an organization or enterprise, including pull requests created by Copilot cloud agent and reviewed by Copilot code review. Each row represents one repository that had pull request activity on the requested day; repositories with no activity are omitted. These reports focus on pull request lifecycle activity and can contain data even when IDE usage metrics are absent.
These fields are returned by the daily repository-level report (repos-1-day), available via the REST API at the organization and enterprise scopes. For the endpoint URLs, response envelope, permissions, and download workflow, see REST API endpoints for Copilot usage metrics. For example rows, see Example schema for Copilot usage metrics.
| Field | Type | Nullable | Description |
|---|---|---|---|
day | string | No | Calendar day this record represents, in YYYY-MM-DD format. |
enterprise_id | string | No | Unique ID of the enterprise. Populated in enterprise-scoped reports, and in organization-scoped reports for organizations owned by an enterprise. Empty for organizations not owned by an enterprise. |
organization_id | string | No | Unique ID of the organization that owns the repository. Included in both enterprise- and organization-scoped reports. |
repo_id | integer | No | Unique ID of the repository. |
repo_owner_name | string | No | Login of the repository owner. |
repo_name | string | No | Repository name. |
repo_visibility | string | No | Repository visibility. Possible values are PRIVATE, INTERNAL, and PUBLIC. |
pull_requests | object | No | Daily pull request activity for the repository. See Pull request activity fields. |
pull_request_ | array | No | Review stage durations for qualifying pull requests merged in the repository on this day, with one entry per author and reviewer type. Empty when no qualifying pull requests were merged. See Pull request review time fields. |
Activity breakdown objects
The totals_by_* fields are arrays of breakdown objects. The array is always present but can be empty. Within each object, the metric fields (*_count and loc_*_sum) follow the same definitions as the top-level per-user fields, and the dimension fields carry the values documented in Breakdown dimension values.
| Object | Dimension fields | Description |
|---|---|---|
totals_by_ide[] | ide | Breakdown by IDE. In per-user reports, each entry also includes last_known_ide_ and last_known_plugin_. |
totals_by_feature[] | feature | Breakdown by Copilot feature (for example, inline chat or chat panel). |
totals_by_language_ | language, feature | Breakdown combining language and feature. Does not include user_initiated_. |
totals_by_language_ | language, model | Breakdown combining language and model, for chat activity (not completions). |
totals_by_model_ | model, feature | Breakdown combining model and feature, for chat activity (not completions). |
In per-user reports, each totals_by_ide[] entry also reports the most recently detected IDE and Copilot Chat extension versions for the user.
| Field | Type | Nullable | Description |
|---|---|---|---|
last_known_ide_ | object | Yes | Most recent IDE version detected for the user, as { ide_version, sampled_at }. Omitted for aggregated breakdown rows, such as the capped "others" IDE bucket. |
last_known_ide_ | string | No | IDE version string. Present when last_known_ide_ is present. |
last_known_ide_ | string | Yes | Timestamp (ISO 8601) when the version was sampled. |
last_known_plugin_ | object | Yes | Most recent Copilot extension detected for the user, as { plugin, plugin_version, sampled_at }. Omitted for aggregated breakdown rows. |
last_known_plugin_ | string | No | Extension name (for example, copilot or copilot-chat). Present when last_known_plugin_ is present. |
last_known_plugin_ | string | No | Extension version string. Present when last_known_plugin_ is present. |
last_known_plugin_ | string | Yes | Timestamp (ISO 8601) when the version was sampled. |
Copilot CLI metrics fields
The totals_by_cli object contains the following nested fields when Copilot CLI usage is present; the object is omitted when there is no CLI usage. CLI usage is independent of IDE metrics—it is not reflected in fields such as totals_by_ide or totals_by_feature. The last_known_cli_version object appears in per-user reports only.
| Field | Type | Nullable | Description |
|---|---|---|---|
totals_by_cli.session_ | integer | No | Number of distinct CLI sessions initiated on this day. |
totals_by_cli.request_ | integer | No | Total number of requests made to Copilot via the CLI on this day, including both user-initiated prompts and automated agentic follow-up calls. |
totals_by_cli.prompt_ | integer | No | Total number of user prompts, commands, or queries executed within a session. |
totals_by_cli.token_ | integer | No | Total number of output tokens generated across all CLI requests on this day. |
totals_by_cli.token_ | integer | No | Total number of prompt tokens sent across all CLI requests on this day. |
totals_by_cli.token_ | number | Yes | Average number of output and prompt tokens per CLI request, computed as (output_tokens_. Null when there were no requests that day. |
totals_by_cli.last_ | object | No | Most recent Copilot CLI version detected for the user that day, as { cli_version, sampled_at }. Per-user reports only. |
totals_by_cli.last_ | string | No | Copilot CLI version string. Defaults to unknown if no version was detected. |
totals_by_cli.last_ | string | Yes | Timestamp (ISO 8601) when the version was sampled. |
Copilot CLI customization fields (API only)
These metrics give enterprise and organization administrators visibility into which Copilot CLI automations developers use. Use them to understand adoption, identify enablement gaps, and prioritize the skills, Model Context Protocol (MCP) servers, custom agents, slash commands, and plugins that developers find valuable.
To access the reports, the Copilot usage metrics policy must be enabled. For policy configuration instructions, see:
- Managing policies and features for GitHub Copilot in your enterprise
- Managing policies and features for GitHub Copilot in your organization
These fields appear in the following enterprise and organization reports:
- Per-user 1-day and 28-day reports
- Aggregated 1-day reports
- Each
day_totalsrecord in aggregated 28-day reports
Each totals_by_* array contains up to five entries with the most recorded activity for its record, ordered from highest to lowest interaction_count. The values are event counts, not user counts. An entry's absence from an array does not mean that it had zero usage. Do not use these arrays to calculate exact adoption.
Recognized first-party names can appear when available. Customer-defined identifiers are not exposed. Skills, custom agents, MCP servers, and plugins identified only by customer-specific hashes are grouped under other in the arrays. Copilot CLI telemetry reports customer-defined slash commands as custom, so slash command arrays preserve that value.
Each array entry contains the name field listed in the table and an integer interaction_count field.
| Array | Name field | What interaction_count measures | Distinct-count field |
|---|---|---|---|
totals_by_skill[] | skill | Skill invocations. | distinct_skill_ |
totals_by_custom_ | custom_agent | Custom agent starts. | distinct_custom_ |
totals_by_mcp[] | mcp | Successful or failed MCP server connection and reconnection attempts. Tool calls through an already connected server do not increase this count. | distinct_mcp_ |
totals_by_slash_ | slash_cmd | Slash command invocations. | distinct_slash_ |
totals_by_plugin[] | plugin | Skill invocations associated with a plugin. Plugin interactions are a subset of skill interactions. | distinct_plugin_ |
Every plugin interaction is already included in totals_by_skill, while skill interactions that are not associated with a plugin appear only in skill totals. Do not add plugin and skill interaction counts together.
The distinct-count fields count different item identifiers with activity, not users or uses. In a per-user record, each different identifier that the user used counts once. In an aggregated enterprise or organization record, each different identifier used by anyone in the scope counts once, regardless of how many users used it. Aggregated distinct counts are not sums of per-user distinct counts.
Distinct counts retain the full identifier cardinality, including items outside the top-five array. When customer-defined artifacts are grouped under other, each hidden identifier still contributes separately to the corresponding distinct count.
When these fields are present, empty arrays and distinct counts of 0 mean that no matching activity was recorded. The fields can be null or absent when Copilot CLI customization data isn't available during rollout.
Copilot app metrics fields
The totals_by_copilot_app object contains the following nested fields when Copilot app usage is present. It appears in per-user reports and in aggregated enterprise reports; it is omitted or null when the user or enterprise had no Copilot app activity that day. Unlike totals_by_cli, Copilot app coding activity is also reflected in totals_by_feature, totals_by_model_feature, totals_by_language_feature, and totals_by_language_model under the copilot_app feature value, and in the top-level code activity and lines-of-code metrics. There is no last_known_app_version field.
| Field | Type | Nullable | Description |
|---|---|---|---|
totals_by_copilot_ | integer | No | Number of distinct Copilot app sessions initiated on this day. |
totals_by_copilot_ | integer | No | Total number of requests made to Copilot via the Copilot app on this day, including both user-initiated prompts and automated agentic follow-up calls. |
totals_by_copilot_ | integer | No | Total number of user prompts, commands, or queries executed within a session. |
totals_by_copilot_ | integer | No | Total output tokens generated across all Copilot app requests on this day. |
totals_by_copilot_ | integer | No | Total prompt tokens sent across all Copilot app requests on this day. |
totals_by_copilot_ | number | Yes | Average of output and prompt tokens per Copilot app request, computed as (output_tokens_. Null when there were no requests that day. |
VS Code Agents-window metrics fields
The dedicated VS Code Agents-window fields appear in enterprise, organization, enterprise-user, and organization-user 1-day and 28-day reports. In aggregated 28-day reports, they appear within each applicable day_totals entry, and weekly and monthly counts are calculated relative to the day of each entry. In per-user 28-day reports, they appear at the top level of each user record.
These fields are distinct from editor-window agent mode, including used_agent, monthly_active_agent_users, and the chat_panel_agent_mode and agent_edit feature values. Dedicated Agents-window activity is not included in generic top-level activity totals or dimensional breakdowns such as totals_by_feature, totals_by_model_feature, or totals_by_ai_adoption_phase.
The daily count and per-user fields can be omitted when no dedicated Agents-window data is available. The weekly and monthly fields are both omitted when there is no qualifying activity in either period. If one period has qualifying activity and the other does not, the inactive period has a value of 0. The totals_by_vscode_agent object appears only when both nested counts are available, including when both counts are zero.
| Field | Type | Nullable | Description |
|---|---|---|---|
daily_active_ | integer | Yes | Number of unique users who used the dedicated VS Code Agents window on the day. Aggregated enterprise and organization reports only. |
weekly_active_ | integer | Yes | Number of unique users who used the dedicated Agents window from Sunday through the report day, inclusive. Aggregated enterprise and organization reports only. |
monthly_active_ | integer | Yes | Number of unique users who used the dedicated Agents window from the first day of the calendar month through the report day, inclusive. Aggregated enterprise and organization reports only. |
used_vscode_agent | boolean | Yes | Whether the user used the dedicated VS Code Agents window during the reporting period. Enterprise-user and organization-user reports only. |
totals_by_vscode_ | object | Yes | Session and user-message totals for the dedicated VS Code Agents window. |
totals_by_vscode_ | integer | No | Number of distinct Agents-window sessions represented in the record. Required when totals_by_vscode_ is present. |
totals_by_vscode_ | integer | No | Number of user messages sent in the Agents window represented in the record. Required when totals_by_vscode_ is present. |
Agent apps metrics fields
Note
Agent apps are currently in public preview and subject to change.
The totals_by_3rd_party_agent array contains one entry for each recognized agent app used during the reporting period. Entries are grouped by agent_id, and integrations that map to the same agent are combined. Use agent_id as the stable grouping key and agent_name for display. The array is omitted when no recognized agent app activity is available during the reporting period.
These metrics come from server-side job activity. The nested user_initiated_interaction_count counts agent app job starts and is distinct from the top-level field with the same name, which counts explicit prompts from other supported telemetry.
| Field | Type | Nullable | Description |
|---|---|---|---|
totals_by_3rd_ | string | No | Display name of the agent app. The name can change, so use agent_id for grouping. |
totals_by_3rd_ | string | No | Stable identifier for the agent app. |
totals_by_3rd_ | integer | No | Number of user-initiated jobs started for the agent app during the reporting period. Each job start increments the count once. |
totals_by_3rd_ | integer | No | Sum of distinct, non-empty session counts for integrations mapped to the agent during the reporting period. Included only in aggregated enterprise and organization reports; omitted from per-user reports. |
Pull request activity fields
Important
Organization- and enterprise-level reports may show different totals due to differences in user deduplication and attribution timing. For guidance on interpreting pull request metrics across scopes, see GitHub Copilot usage metrics.
The pull_requests object appears in aggregated enterprise and organization reports, and in repository-level reports. It captures daily pull request creation, review, merge, and suggestion activity, including activity performed by Copilot cloud agent and Copilot code review.
| Field | Type | Nullable | Description |
|---|---|---|---|
pull_requests.total_ | integer | No | Total number of pull requests created on this specific day. Creation is a one-time event. Each pull request is counted only on the day it is created. |
pull_requests.total_ | integer | No | Total number of pull requests reviewed on this specific day. The same pull request may be counted on multiple days if it receives reviews on multiple days. Within a single day, each pull request is counted once, even if multiple review actions occur. |
pull_requests.total_ | integer | No | Total number of pull requests merged on this specific day. Merging is a one-time event. Each pull request is counted only on the day it is merged. |
pull_requests.median_ | number | Yes | Median time, in minutes, between pull request creation and merge for pull requests merged on this specific day. Median is used to reduce the impact of outliers from unusually long-running pull requests. Null when no pull requests were merged that day. |
pull_requests.total_ | integer | No | Total number of pull request review suggestions generated on this specific day, regardless of author. |
pull_requests.total_ | integer | No | Total number of pull request review suggestions that were applied on this specific day, regardless of author. |
pull_requests.total_ | integer | No | Number of pull requests created by Copilot cloud agent on this specific day. |
pull_requests.total_ | integer | No | Number of pull requests reviewed by Copilot code review on this specific day. A pull request may be counted on multiple days if Copilot code review reviews it on multiple days. |
pull_requests.total_ | integer | No | Number of pull requests created by Copilot cloud agent that were merged on this specific day. Each pull request is counted only on the day it is merged. |
pull_requests.total_ | integer | No | Number of pull requests that were both merged and reviewed by Copilot code review during the reporting period. |
pull_requests.median_ | number | Yes | Median time, in minutes, between pull request creation and merge for pull requests created by Copilot cloud agent and merged on this specific day. Null when no such pull requests were merged that day. |
pull_requests.median_ | number | Yes | Median time, in minutes, between pull request creation and merge, calculated only for pull requests reviewed by Copilot code review. Null when no such pull requests were merged that day. |
pull_requests.total_ | integer | No | Number of pull request review suggestions generated by Copilot code review on this specific day. |
pull_requests.total_ | integer | No | Number of pull request review suggestions generated by Copilot code review that were applied on this specific day. |
pull_requests.copilot_ | array | No | Aggregated counts of Copilot code review suggestions, broken down by the assigned comment type (for example, security or bug_risk). Each entry includes comment_type, total_copilot_, and total_copilot_. Always present but can be empty. |
Pull request review time fields
The pull_request_review_times array appears only in repository-level reports. It breaks down how long merged pull requests spent in three stages of review, so you can see whether pull requests are waiting for a first review, waiting on back-and-forth between reviewers, or waiting to be merged after the final review.
Each entry covers pull requests merged in the repository on this specific day. All durations are attributed to the merge day, even when the reviews happened on earlier days.
Which pull requests are counted
A pull request is included when a person opened it, it reached ready for review, and at least one other person reviewed it. Only human reviews are timed. Reviews from Copilot code review, from other bots, and from the pull request author are ignored, so a pull request reviewed by both a person and Copilot code review is still included, with its stages timed from the human reviews. Time spent in draft before the first review is not counted.
A merged pull request is excluded from pull_request_review_times when any of the following is true:
- It was created by a bot, including Copilot cloud agent.
- It never received a qualifying human review, including pull requests merged without any review.
- The time it became ready for review is unknown.
- Its timestamps are out of order. For example, its final review is recorded after its merge.
Exclusions are not reported for individual pull requests. Because pull_requests.total_merged counts every pull request merged that day, pull_request_review_times[].total_merged is usually lower. Compare the two values to see how many merged pull requests the durations cover.
Data availability
- Data builds forward from the release of these fields and is not backfilled.
- Pull requests that became ready for review before September 21, 2026 are excluded from this array, but still count toward
pull_requests.total_merged. - The array is empty (
[]) on days when the repository merged no qualifying pull requests. An empty array means no data for that day, not zero minutes.
| Field | Type | Nullable | Description |
|---|---|---|---|
pull_request_ | string | No | Who opened the pull requests in this entry. Currently always human. |
pull_request_ | string | No | Who reviewed the pull requests in this entry. Currently always human. |
pull_request_ | integer | No | Number of qualifying pull requests merged in the repository on this specific day. This counts only the pull requests described above, not all merged pull requests. |
pull_request_ | number | No | Median time, in minutes, from the pull request becoming ready for review to its first qualifying review. |
pull_request_ | number | No | 90th percentile time, in minutes, from the pull request becoming ready for review to its first qualifying review. |
pull_request_ | number | No | Median time, in minutes, from the first qualifying review to the final qualifying review. A pull request with a single qualifying review contributes a duration of 0, because its first and final reviews are the same event. |
pull_request_ | number | No | 90th percentile time, in minutes, from the first qualifying review to the final qualifying review. A pull request with a single qualifying review contributes a duration of 0, because its first and final reviews are the same event. |
pull_request_ | number | No | Median time, in minutes, from the final qualifying review to merge. |
pull_request_ | number | No | 90th percentile time, in minutes, from the final qualifying review to merge. |
Medians and 90th percentiles are exact values calculated with linear interpolation and rounded to two decimal places.
AI adoption phase fields
Copilot groups users into AI adoption phases based on their activity. Phase information appears in two places: the per-user ai_adoption_phase object, and the aggregated totals_by_ai_adoption_phase array. For the phase values, see Breakdown dimension values.
Classification logic
A user is classified into a phase based on the Copilot features they are engaged with. A user is engaged with a feature when they use it on at least two distinct days within the trailing 28-day window. Engagement is evaluated from the feature-level activity signals in the table below, not directly from the single-day used_* per-user fields or from code_acceptance_activity_count. Phases are evaluated from the top down, and a user is assigned the highest phase they qualify for.
| Phase | Engagement criteria |
|---|---|
| No Cohort (displayed as "Passive users" in the impact dashboard) | The user isn't engaged with any feature that qualifies for a phase. This doesn't mean the user is inactive. A user in this group can still be using Copilot regularly and consuming premium requests, but hasn't used a qualifying feature on at least two distinct days within the trailing 28-day window. The most common case is conversational use of Copilot Chat or agent mode, recorded as chat_panel_agent_, that never produces code_completion or agent_edit activity. Copying code out of a chat response also doesn't produce either signal. |
| Phase 1: Code first | Engaged with inline code completions (the code_completion value of the feature dimension) or with agent edits written directly to files (the agent_edit value of the feature dimension). |
| Phase 2: Agent first | Engaged with exactly one GitHub-based agent surface: Copilot CLI (the copilot_cli value of the feature dimension), Copilot cloud agent (used_copilot_), or Copilot code review (used_copilot_ or used_copilot_). Active and passive Copilot code review count together as a single surface. |
| Phase 3: Multi-agent | Engaged with the Copilot app (the copilot_app value of the feature dimension), or engaged with two or more of the agent surfaces listed for Phase 2. |
A user only needs to be engaged with a phase's own signals to reach that phase. A user doesn't need to independently meet Phase 1 criteria to reach Phase 2 or Phase 3, although in practice agent-surface usage often co-occurs with completions or agent edits.
Of the agent surfaces, only the first-party surfaces listed in the table affect a user's AI adoption phase. Activity from partner-built agent apps doesn't affect the phase. The same classification logic applies to enterprise and organization reports, including 1-day and 28-day reports.
Note
Because classification uses feature-level engagement, some activity doesn't affect a user's phase on its own. Using IDE chat (used_chat) or agent mode (used_agent) doesn't qualify a user for Phase 1 unless it produces code_completion or agent_edit activity.
For example, asking a question in agent mode without letting Copilot edit your files records chat_panel_agent_mode activity, not agent_edit. A user whose usage is entirely conversational in this way stays in the No Cohort group even though they are actively using Copilot and can still incur premium request usage. Likewise, code_acceptance_activity_count includes chat-based acceptances, such as "apply to file" and the Copy button, that aren't inline code_completion activity, so it isn't used for classification. For more about the feature dimension, see Breakdown dimension values.
Phase assignment is recalculated each day using the trailing 28-day window, so a user's phase can change from one day to the next as their activity within the window shifts. This is expected behavior and does not indicate a data error.
The per-user ai_adoption_phase object contains:
| Field | Type | Nullable | Description |
|---|---|---|---|
ai_adoption_phase.phase_ | integer | No | Numeric phase identifier (for example, 0 for "No Cohort"). |
ai_adoption_phase.phase | string | No | Human-readable phase name. |
ai_adoption_phase.version | string | No | Version of the adoption-phase model used (for example, v1). |
Each entry in the aggregated totals_by_ai_adoption_phase array contains two separate user counts:
total_engaged_usersis the number of users classified into the phase who were active on that individual day.users_in_phase_28dis the full population classified into the phase using the rolling 28-day window, as of that day.
Use users_in_phase_28d as the population denominator for rolling phase-level calculations. For example, to calculate pull requests merged per user over a 28-day period:
- Add the daily
total_pull_requests_mergedvalues. - Add the corresponding daily
users_in_phase_28dvalues. - Divide the first total by the second, then multiply the result by 28.
Do not use total_engaged_users as the denominator because it includes only users active on an individual day.
The field does not change the existing avg_* fields or their calculations, the phase classification rules, or a user's assigned phase. Neither user-count field identifies individuals.
When a phase is present in the rolling snapshot but has no activity that day, the report can include a synthesized entry with total_engaged_users set to 0, a positive users_in_phase_28d, and all activity metrics set to zero.
| Field | Type | Nullable | Description |
|---|---|---|---|
phase | string | No | Human-readable phase name. |
phase_number | integer | No | Numeric phase identifier. |
total_engaged_ | integer | No | Number of users classified into this phase who were active on the day. |
users_in_phase_ | integer | Yes | Complete rolling 28-day population classified into this phase as of the day. A positive value is the measured phase population, and 0 means the phase was measured and had no users. The field is omitted when the day predates this field or the enterprise or organization was absent from the phase snapshot. |
avg_user_initiated_ | number | No | Average user-initiated interactions per user in this phase. |
avg_code_generation_ | number | No | Average code generation activities per user in this phase. |
avg_code_acceptance_ | number | No | Average code acceptance activities per user in this phase. |
avg_loc_added | number | No | Average lines of code added per user in this phase. |
avg_loc_deleted | number | No | Average lines of code deleted per user in this phase. |
avg_pull_requests_ | number | No | Average pull requests reviewed per user in this phase. |
avg_pull_requests_ | number | No | Average pull requests created per user in this phase. |
avg_pull_requests_ | number | No | Average pull requests merged per user in this phase. |
total_pull_requests_ | integer | No | Total pull requests merged by users in this phase. Applies to the organization day and enterprise day aggregated reports. |
avg_pull_requests_ | number | No | Average of the per-user median minutes to merge for users in this phase. |
avg_pull_requests_ | number | No | Median time in minutes from pull request creation to first review, scoped to merged pull requests and attributed to the pull request's merge day. |
avg_pull_requests_ | number | No | Median number of review submissions (review cycles) per pull request, scoped to merged pull requests and attributed to the pull request's merge day. |
Breakdown dimension values
The breakdown objects above use dimension fields whose values come from fixed sets. These are field values, not separate fields. For example, agent_edit and the chat_panel_*_mode values are values of the feature field, not top-level fields.
The feature dimension identifies the Copilot feature or mode an activity is attributed to:
| Value | Description |
|---|---|
code_completion | Inline code completions. |
chat_inline | Inline chat in the editor. |
chat_panel_ask_ | Chat panel interactions with ask mode selected. |
chat_panel_edit_ | Chat panel interactions with edit mode selected. |
chat_panel_agent_ | Chat panel interactions with agent mode selected. |
chat_panel_plan_ | Chat panel interactions with plan mode selected. |
chat_panel_custom_ | Chat panel interactions with a custom agent selected. |
chat_panel_unknown_ | Chat panel interactions where the mode is unknown. |
agent_edit | Lines added and deleted when Copilot (in agent and edit mode) writes changes directly into your files in the IDE. Counts edits from custom agents as well. agent_edit is not included in suggestion-based metrics and may not populate suggestion-style fields, such as user_initiated_. |
copilot_cli | Activity attributed to Copilot CLI. |
copilot_app | Activity attributed to the Copilot app. |
others | Any feature not covered by the values above. |
The ide dimension identifies the IDE an activity occurred in. This is not an exhaustive list, but examples of observed values include vscode, visualstudio, intellij, eclipse, xcode, neovim, vim, emacs, and zed.
The model dimension identifies the AI model used for chat activity. Values include specific model identifiers (for example, gpt-5.4 or claude-sonnet-4.6), auto, unknown, and others. The auto value represents activity where auto model selection was used and the request was not attributed to a specific model.
The phase dimension identifies the AI adoption phase a user is grouped into: No Cohort, Phase 1, Phase 2, or Phase 3.