General Overview
What is the User Analytics dashboard in ChatGPT Enterprise and Edu?
The revamped User Analytics dashboard can be accessed in the Manage workspace console in the Analytics tab. It provides more comprehensive data on usage, adoption, and engagement than the original analytics tab.
This improved dashboard gives Admins a high-level view of how ChatGPT is being used across your organization—use it to track adoption and engagement, understand usage patterns for top tools and GPTs, and identify use cases and user trends.
Who can access it?
Only ChatGPT Enterprise owners and admins can access the User Analytics dashboard. Users in a Member role do not see organization-level metrics.
What types of usage & metrics are displayed?
The User Analytics dashboard shows high-level user and GPT usage across your workspace. Additionally, it allows you to export weekly and monthly User Engagement and GPT Engagement reports that you can merge with other data sources for more advanced insights.
What is the frequency and timing of data refresh?
The data refreshes at least once every 24 hours. Use the last updated date in the dashboard to confirm.
How do I export data from the analytics page?
An “Export” button in the top-right corner allows you to download data in monthly or weekly format, in CSV format, for further analysis.
Is this the same as the Compliance API?
No, the Compliance API is not an analytics feature.
It provides access to logs and metadata from your ChatGPT Enterprise workspace that you can consume directly or via eDiscovery, DLP, and SIEM tools, and is designed for Workspace Owners who need to consume the raw inputs and outputs from ChatGPT for compliance, security, and data privacy use cases..
The Compliance API returns user inputs and outputs, including system generated / injected messages that ChatGPT writes to itself (e.g. user wants you to be more concise).
Metrics and Dimensions
Overview Tab
Unique Active Users
This metric indicates the number of distinct users who have logged in and sent at least one message during the selected timeframe. It’s a key measure of adoption and retention.
Total Messages Sent
This is the overall count of user-initiated messages (whether to ChatGPT or custom GPTs), showing general engagement volume. This is measured by models used.
GPT Messages Sent
This metric counts messages specifically sent to custom GPTs, revealing how much your organization leverages custom GPT instances.
Tool Messages Received
This covers messages or “product responses” tied to integrated tools (e.g., DALL·E, Canvas, Data Analysis). Tool outputs are tracked since user inputs are not clearly identifiable.
Users Tab
Headline metrics (Seats, Claimed, Active, Pending)
These appear at the top of the Users tab, defined below.
Seats Purchased
The total number of licenses procured.
Claimed Seat
The count of users who have accepted their license by logging in.
Active Users
The number of users actively sending at least one message during the timeframe.
Pending Invites
The number of outstanding invitations that have not been accepted.
Users Table
Each row shows a user’s name/email, total messages, GPT messages, and tool messages.
User's Name/Email
Identifies the user.
Total Messages
The overall number of messages sent by the user.
GPT Messages
The count of messages generated by GPT.
Tool Messages
The count of messages generated by tools.
Clarification
GPT messages and Tool messages are tracked separately and do not sum to Total Messages. In other words, “Tool messages” do not roll up under “Total messages”.
How can I find the most active and least active users?
To find the most active users you can sort by usage (most active or least active) or search for a specific user. This can help influence identification of champions or opportunities for training.
Please note a user with a changed email may appear as a new record. In other words, if the user has a new email address they are an entirely separate record / row.
How do I track individual users’ usage over time?
You can see a user’s total messages in the “Users” tab. If you need historical trends, export data periodically.
GPTs Tab
Headline metrics (Total GPTs, GPTs Created This Month, GPTs Active)
These appear at the top of the GPTs tab.
Total GPTs
This is the total number of custom GPTs in your workspace.
GPTs Created This Month
This metric shows how many new GPTs were created in the selected timeframe.
GPTs active
This indicates how many GPTs had at least one user message during the chosen period.
GPTs Table
The table displays each GPT’s name, creator, total messages, and active users.
Common GPT-Related Questions
Admins can sort to find the top GPTs by usage or identify GPTs that had no usage in the timeframe.
Date ranges & Filtering
Choosing a time range
Owners/Admins can monthly views using the date picker. For the data export it is weekly or monthly.
Why don’t I see today’s data?
The data refreshes every 1–24 hours, typically landing within a 6–12 hour range, with a 24-hour SLA. Use the last updated date in the dashboard to confirm.
Comparisons to previous periods
User Analytics displays the percentage increase or decrease when comparing the selected period to its prior equivalent (e.g., +11% month-over-month).
How do I compare this month’s active users to last month?
Select the monthly view and check the top-level active user metric or the percentage increase/decrease.
Data discrepancies & troubleshooting
Why does User Analytics differ from the Compliance API logs?
The Compliance API reflects raw logs (input/output) for security and compliance purposes, whereas User Analytics aggregates usage data.
Why does the sum of GPT + tool messages not equal total messages?
Some messages are standard ChatGPT interactions (not tool or GPT-specific), so they’re in “Total” but not in either subset.
Why am I seeing negative or zero values?
A newly created GPT with no usage or a sharp drop between periods can yield very low or negative percentage changes.
Interpreting the graphs
Stacked bars can represent token categories, while line charts show daily trends. Tooltips reveal date-specific counts.
Latency or missing data
User Analytics may be delayed by roughly 24 hours.
System errors or not seeing the dashboard
Owners/Admins should confirm they have the correct ChatGPT Enterprise entitlement. If the tab is missing or errors persist, open a conversation with OpenAI Support and include your workspace ID in your details.
Limitations
Can you schedule data exports?
No, but we may offer this in the future.
What limitations are there for customers who have Data residency for ChatGPT?
These customers will not be able to see GPT messages on the Overview tab, the GPT tab itself, or be able to export / download the GPT report
Is real-time data available?
Currently no; data refresh is daily rather than real-time. The data refreshes at least once every 24 hours. Use the last updated date in the dashboard to confirm.
Can I drill down by department or segment?
Not in the initial release. More detailed segmentation may require exporting data and combining with external data sources.
Can I view historical data beyond X months?
Data retention may limit how far back you can go. You can go back 12 months.
Can I customize the visuals or dashboards?
Not currently. For more advanced visualizations, you can export the data and use external tools.
Adoption & engagement best practices
How to increase adoption based on these metrics?
Teams often conduct training, “office hours,” or champion successful GPT use cases to boost adoption. A best practice to increase adoption is to encourage webinar and training attendance.
How to interpret trends (spikes or drops)?
Look for factors like user onboarding surges, feature releases, or holiday seasons impacting usage.
Exporting data for presentations
We recommend using the exported data which you can transform into your own charts, dashboards, or reports.
Data Export - column definitions
User export – column definitions
⚠️ Every column name listed below in this section, except last_day_active, is either a metric in period, or a dimension as of period end.
Column name | Definition |
cadence | The time granularity of a given data export: Monthly, Weekly, Partial Monthly, Partial Weekly. Weeks are calculated from midnight UTC Sunday through 23:59:59 UTC Saturday. Partial period represent the current (and incomplete) period. Some pre-computed fields are not available for partial periods. |
period_start | The starting date for a given report |
period_end | The ending date for a given report. Note that this date will be in the future for partial periods |
account_id | The account_id associated with a given report |
public_id | The public_id associated with a given user |
name | The name associated with a given user. Note that this will be blank for pending users |
The email address associated with a given user | |
role | User-entered role for a given user |
user_role | Denotes if a user is a user, admin, or owner as of period end** |
department | User-entered department for a given user |
groups | A map object containing all groups a user is part of as of period end** |
user_status | Denotes if a user is enabled, deleted, or pending as of period_end** |
created_or_invited_date | The date the user’s account was provisioned for enabled or deleted users. For pending users, this is the earliest, non-expired invitation a user received. |
is_active | true if the user has ever sent at least one message in the given period |
first_day_active_in_period | The first day a user is active (e.g. sent a message) in the given period |
last_day_active_in_period | The last day a user is active (e.g. sent a message) in the given period |
last_day_active | The last day a user is active (e.g. sent a message) in this, or any prior period |
messages | Overall number of messages sent by the user in the period |
messages_rank | Relative position of the user in a list sorted by messages (1 = most) |
model_to_messages | JSON map showing {model_name: message_count} (e.g., {"o3": 5, "4o": 16})* |
gpt_messages | Total messages the user sent to any custom GPT in the period |
gpts_messaged | Number of distinct custom GPTs the user messaged in the period* |
gpt_to_messages | JSON map of {gpt_id: message_count} for each custom GPT the user messaged* |
tool_messages | Count of messages that invoked a tool (e.g., Deep research, Search, Image Gen, Canvas) |
tools_messaged | Number of distinct tools the user invoked* |
tool_to_messages | JSON map of {tool_name: message_count} (e.g., {"Image Gen": 6, "Deep research": 2})* |
project_messages | Messages the user sent inside any Project |
projects_messaged | Number of distinct Projects the user contributed to* |
project_to_messages | JSON map of {project_id: message_count} for each Project* |
projects_created | Total Projects the user created |
*Denotes that this metric is not available for partial periods. Custom aggregations (distinct counts, map objects) are only pre-computed at fixed time intervals (e.g. weekly and monthly) and are not available for partial period reports.
**Or the latest available date for partial periods
Tools referenced by the full user export
(These names populate inside tool_to_messages when you run a complete-period export.)
Canvas
Used to edit documents and code in a structured interface. Messages represent interactions (creation, querying, deletion) with Canvas
Code
DALL·E
Used to generate images from prompts. Messages represent image generation or variation
Data analysis
Used to inspect, analyze, and visualize structured data (e.g. csvs). Messages represent data manipulation– upload, inspect, filter, plot, or summarize
Deep research
Used to run interactive multi-part queries, often using other tools (such as Retreival). Messages represent deep research task launch and intermediate steps (e.g. search, analyze, report)
GPT Editor
Used to modify or configure custom GPTs. A message represents edit actions (e.g name change, profile picture upload)
GPT External API Actions
Used to execute external API calls via agent tools. A message represents calls to external APIs
Image Gen
Used to generate or edit imaged directly in ChatGPT. A message represents image creation or editing
Legacy search
Used to search over an internal knowledge base. A message represents documents being searched, found, or opened. Note: Legacy Search and Search execute similar functionality, but are via different infrastructure and methods– at present, “legacy” is a bit of a misnomer and this tool is still used
Memory
Used to store long-term, structured memories about a user. A message represents a memory being written, read, updated, or deleted
Retrieval
Used to search internal knowledge. A message represents a query being made or when sources are injected into context
Search
Used to search over internal or external sources. A message represents any search-related activity
Tasks
Used to execute a multi-step plan. A message represents a task (or subtask) start, update, or completion
(If you run a full-period export, these names will populate inside tool_to_messages.)
GPT export – column definitions
Tools represented in the GPT report: None.
(The file tracks GPT activity only; no per-tool counts or names appear.)
Column name | Definition |
cadence | The time granularity of a given data export: Monthly, Weekly, Partial Monthly, Partial Weekly. Weeks are calculated from midnight UTC Sunday through 23:59:59 UTC Saturday. Partial period represents the current (and incomplete) period. Some pre-computed fields are not available for partial periods. |
period_start | The starting date for a given report |
period_end | The ending date for a given report. Note that this date will be in the future for partial periods. |
account_id | The account_id associated with a given report |
gpt_id | The id of a given custom GPT |
gpt_name | The name of a custom GPT as of period end** |
config_type | The status of a custom GPT as of period end**. Live = published, Draft = created but not published. |
gpt_description | The description of a custom GPT as of period end** |
gpt_url | The URL of a custom GPT |
gpt_creator_public_id | The public id associated with the creator of a custom GPT |
is_active | Indicates that someone messaged this custom GPT during the period |
first_day_active_in_period | The earliest day a custom GPT was active in the period |
last_day_active_in_period | The latest day a custom GPT was active in the period |
messages_workspace | Count of messages sent to this GPT within your workspace. (Official GPTs can exist in many workspaces, so this figure is workspace-specific) |
unique_messagers_workspace | Count of individual users in the workspace who sent ≥ 1 message to this GPT in a given time period* |
gpt_creator_email | The email associated with the creator of a custom GPT |
*Denotes that this metric is not available for partial periods. Custom aggregations (distinct counts, map objects) are only pre-computed at fixed time intervals (e.g. weekly and monthly) and are not available for partial period reports.
**Or the latest available date for partial periods