Slack analytics to dashboard
Slack member analytics, read as the grid it is.
Download the member analytics CSV from the Slack admin analytics page and drop it here. The critical thing about that file is its shape: one row per member per day, so the same person appears many times and nothing can be counted by row. Messages are summed across rows, unique people are counted distinctly, billable seats drive the cost panel, and guest accounts are separated from full members.
Prefer the full explorer? Open the app, or start from the generic dashboard builder.
It is a grid, and grids do not count people
Every mistake made with this file comes from the same place: it looks like a member list and it is actually a daily grid. Each row is one member on one day, so a ninety-day export of a two hundred person workspace is eighteen thousand rows, and two hundred of them describe the same person. Count rows and you have counted member-days. Average messages_posted across rows and you have the average per person per day, which is a legitimate number but not the one anyone asked for.
The number people usually want is per person over the period, which means summing within a member and then averaging across members. That is two steps in the right order, and doing them in the wrong order gives a different answer that still looks reasonable. This page groups by the member identifier first and offers per-day and per-period views as separate, clearly labeled panels so the two never get confused.
How to export from Slack analytics
- Confirm you are a workspace admin Analytics is admin-only. If the menu item is missing you do not have the role, and no amount of searching the settings will produce it.
- Open the analytics dashboard Click the workspace name, then Tools & settings, then Analytics. The Members tab is the one with per-person data; Channels is a different export with a different shape entirely.
- Set the date range The picker at the top controls what the export covers. Take at least a full month, because weekly seasonality in Slack activity is strong enough that a seven-day window is close to meaningless.
- Click Export and choose the member data Slack offers per-member and per-channel exports. The member CSV is the one this page reads, and it comes down directly rather than by email.
- Drop the CSV here Rows are grouped by member first, billable seats are counted, guests are split out, and the per-day against per-period distinction is made explicit.
Deactivated members still appear for the days they were active, which is correct and occasionally confusing. Their last_active_date tells you when they stopped, so a departure shows up as a member whose rows simply end mid-range.
Try with sample Slack analytics data (the same columns, 96 rows, no upload needed).
What the dashboard shows
Every panel below is built from a column that is actually in the export, named the way Slack analytics names it.
- Active members over time. Distinct members with any activity per day, which is the adoption number, not the seat number and not the message count.
- Billable seats and cost. is_billable_seat counted per day, multiplied by your per-seat price, which turns an activity file into a spend conversation.
- Messages by destination. messages_posted_in_channel against messages_posted_in_dm, which says a great deal about whether your workspace is actually collaborating in the open.
- Desktop against mobile. days_active_desktop and days_active_mobile side by side, useful when deciding whether a workflow can assume a keyboard.
- Guests against members. account_type as a filter applied before every average, since guests are typically far less active and drag every per-user figure down.
- Feature adoption. slash_commands_used, search_count and files_added_count per member, which is where you find the handful of people who drive most integration usage.
date,user_id,email_address,display_name,account_type,is_billable_seat,days_active,days_active_desktop,days_active_mobile,messages_posted,messages_posted_in_channel,messages_posted_in_dm,reactions_added,files_added_count,slash_commands_used,search_count,last_active_date
Reading Slack member analytics without fooling yourself
- One row per member per day. Row counts are member-days, not people. A ninety-day export of a mid-sized workspace runs to tens of thousands of rows describing a few hundred humans.
- Messages cannot be summed to people. Summing messages_posted gives total messages, which is fine. Dividing it by the row count gives messages per member-day, which is not what anyone means by messages per person.
- days_active counts days, not sessions. Opening Slack once at nine in the morning and living in it all day both register as one active day. It is an attendance measure, not an engagement one.
- Guests distort every average. Single-channel and multi-channel guests are far less active than full members. Leave them in a per-user average and adoption looks worse than it is, sometimes dramatically so on a workspace with many external collaborators.
- is_billable_seat is the cost driver. It is not the same as being active. A member can be billable and near-silent, which is exactly the row you want to find before your renewal conversation.
- Deactivated members linger. They appear for the days they were present and then their rows stop. A member count taken from the first day of the range differs from one taken on the last, and both are correct.
Slack analytics is a well-built export that answers a narrow question honestly. Treat it as a daily grid, group by member before you compute anything about people, and keep guests out of your averages. Then the seat-cost view becomes the most useful panel in it.
Frequently asked questions
Why does my member count look far too high?
Because you are counting rows, and each row is one member on one day. A ninety-day export of a two hundred person workspace has eighteen thousand rows. Count distinct values of user_id instead, which gives you people. This page does that grouping before it computes anything member-related, and shows both the member-day count and the distinct member count so the difference is visible.
How do I get average messages per person?
Sum messages_posted within each user_id first, then average those totals across members. Doing it the other way, averaging across all rows, gives messages per member-day, which is a smaller number that also looks plausible. The order matters and the two are frequently confused. The dashboard labels the per-day and per-period figures separately so you can see which one you are reading.
What does days_active actually measure?
The number of days on which the member did anything at all in Slack. It is not sessions and not time spent. Someone who opens Slack once each morning and someone who has it open continuously both score the same. Treat it as attendance. The desktop and mobile variants are more interesting, since a member who is mobile-only usually cannot be expected to do heavy work in the tool.
Should I include guest accounts in my analysis?
Not in per-user averages. Single-channel and multi-channel guests are typically external collaborators who visit occasionally, so including them drags every engagement average down and makes internal adoption look far worse than it is. Use account_type to filter them out for adoption questions, and count them separately when you are looking at how much external collaboration you actually do.
Can I work out what Slack is costing us?
Yes, through is_billable_seat. Count the distinct members flagged as billable, multiply by your per-seat price, and you have your run rate. The more useful move is to cross that flag against activity, which finds billable seats with almost no messages posted. Those are the accounts worth reviewing before a renewal, and they are surprisingly easy to accumulate.
Is a workspace-wide email list safe to load here?
It is, because nothing leaves the browser. That said, this export is essentially your entire staff directory joined to individual behavioral data, which makes it one of the most sensitive files an admin can generate. It is worth handling carefully wherever it goes. On this page it is parsed in the tab, charted from memory, and gone when you close it.
Related tools
See seats, activity and cost in one view
96 rows in the real member analytics shape: several days per person, guests mixed with full members, billable flags, and a member whose rows stop partway through.
Open the sample Slack analytics dashboard