Find it at Optimize → Chat Analytics. It isn’t in the default sidebar for account users, so add it with Customize sidebar at the foot of the sidebar, or press Cmd/Ctrl+K and search for Chat Analytics. See Navigating Studio.
Headline Metrics
Total chats
Total number of chat conversations handled by the workspace in the selected period. It also counts chats a visitor was refused because your balance couldn’t cover a chat session; see Insufficient-Balance under Chat Outcomes.
Unique users
Count of distinct users who initiated a chat conversation with your agent.
Avg Turns taken
Average number of messages per chat, giving a sense of chat depth and complexity. Each message in the chat’s transcript counts as one turn, so it counts messages from the visitor, the AI agent and any live agent, along with handoff notices, rather than question-and-answer pairs.
Resolution rate
Percentage of chats that ended as Contained or Transferred, out of all chats in the selected period. Chats the visitor abandoned, chats that ended in an error and chats refused as they opened lower it. A chat handed to a human agent counts as resolved, so for the share the AI handled on its own, read Contained under Chat Outcomes.
User satisfaction
Percentage of rated chats that the AI judged as handled correctly, with no failure by the agent. It reflects how well the agent handled the chat, not the visitor’s mood. See Customer Satisfaction (CSAT), which describes the same score for calls.
Charts
Chat Volume by Day
chart
A stacked bar chart plotting the number of chat conversations for every calendar day in the selected period. Each bar is segmented by outcome type (Contained, Transferred, User-Abandoned, Error and Insufficient-Balance), making it easy to see both total volume and the composition of outcomes on any given day. The amber Insufficient-Balance segment, and its entry in the legend, are drawn only when a day in the period has a refused chat. Hover over a segment to inspect its exact count. The caption All times in … shows the time zone used to assign chats to days.
Chat Outcomes
chart
A pie chart that breaks down the final disposition of each conversation:
- Contained – the AI agent handled the conversation through to the end without escalating it to a person. This includes a visitor who read the answer and then simply closed the tab, which for chat is ordinary self-service. Chats whose disposition you have marked as contained also count here.
- Transferred – the conversation was escalated and reached a human agent. A handoff that failed and fell back to the AI is not counted here; the conversation is classified on how it actually ended.
- User-Abandoned – the visitor walked away from the conversation mid-thread rather than finishing it — for example, abandoning it and starting a fresh one instead.
- Insufficient-Balance (amber) – a visitor was refused as the chat opened because your balance couldn’t cover a chat session, so the chat never started. It is never counted as resolved. A refusal doesn’t arrive through live updates, so it appears after you select Refresh or reload the page. See Chat History for how these attempts are listed.
- Error – the conversation ended due to a system or processing error. A chat refused for a reason other than your balance is counted here too.
Reclassified in release 2.5.0 — chat conversations used to be judged by the rules written for phone calls, so a visitor who closed the tab was recorded under a caller-hangup outcome and displayed as Hangup. Those conversations now display as Contained, both here and in the Disposition column of your chat conversation history, and because they are no longer treated as escalations they have also been removed from the Transfer Dispositions breakdown below.This applies to historical conversations as well as new ones, so both charts can look different for periods you have already reviewed.
Transfer Dispositions
chart
A secondary pie chart that breaks down transferred conversations by the disposition (Freshchat channel) the AI selected when escalating. This helps you understand which channels are receiving the most escalations and whether your disposition descriptions are routing correctly.The percentages here are calculated over genuinely transferred conversations only. Visitors who closed the tab no longer appear in this chart at all, and a successful escalation keeps the disposition the agent chose rather than having it overwritten.
Containment Management
A transfer normally shows as Transferred. If one of your transfer dispositions means the AI agent dealt with the chat, mark it as contained so those chats show as Contained instead.1
On the Transfer dispositions card, select Manage containment. The Manage contained dispositions drawer opens.
2
Type the disposition name in Add disposition (the example reads More_Info) and select Add, or press Enter. Type the name exactly as it appears in the chart, because matching is exact.
3
To stop counting a disposition as contained, select Remove beside it. Once the list has more than five entries, a Filter dispositions box helps you find one. Select Close when you’re done.
Manage containment only changes whether those chats are labelled Contained or Transferred, in both Chat outcomes and Chat volume by day. It doesn’t change your Resolution rate, because every transfer already counts as resolved.The list belongs to the workspace, so everyone using Chat Analytics in it sees the same list, and a change re-labels past chats as well as new ones. It applies to chats only; Call Analytics and Email Analytics keep their own lists. Each change is recorded in Audit Logs.
Handoffs now expire. A chat handed to a human closes itself after four hours with no messages, or twenty-four hours from the handoff, whichever comes first. Conversations that previously sat open indefinitely therefore start appearing as completed, timed-out conversations — see Chat Escalation.In the agent’s Handoff → Chat editor the abandon outcome is labelled User Abandoned, and Chat History and Chat Analytics show it as User-Abandoned (with a hyphen). Voice screens still label the equivalent outcome Caller-Hungup. These chat labels are display names only: a chat export records the stored value, Caller-Hungup, in its Disposition column, so keep matching on that for these chats.A chat where the visitor never wrote anything is a separate case. Chat History lists it as User Abandoned, with a space, and an export records it as User Abandoned too, because that is the value stored for it. It is not stored as Caller-Hungup. See Chat History.
Chat History
Optimize → Chat History lists your chat conversations so you can review them one by one. Finished chats appear in the normal list, and the list refreshes in place when you change a filter or a search rather than blanking while it reloads.Chat History is in the default sidebar. If it isn’t listed, add it with Customize sidebar at the foot of the sidebar, or press Cmd/Ctrl+K and search for Chat History. See Navigating Studio.
Using the list
Chat History opens on Last 7 Days with no filters switched on. The agent filter, time range, Filters menu and Refresh are in the header above the list. The search box and Export are at the top of the list.- Search — type a chat ID (the value in the ID column), an agent name or a session ID. Matching is partial and ignores case. Search also checks the disposition as it is recorded, so a chat shown as User-Abandoned is recorded as Caller-Hungup, and one shown as Contained may be recorded as Hangup.
- Agents — show chats for one or more agents. The menu reads All agents until you pick some.
- Time range — choose Today, Last 7 Days, Last 30 Days or Custom Range, with the same Use UTC switch as Chat Analytics. Chats are listed by when they started. See Time Range Filtering.
- Filters — open Filters to switch on Pinned Only, User dissatisfied, Action Errors or In-progress Only. The number beside Filters shows how many are on.
- Refresh — reloads the list for your current time range and filters.
- Export — queues a CSV of your chats, as described below.
switch
Only the chats you have pinned. Select the pin at the left of a row to pin it, or Pin inside the chat’s drawer. Pins are personal to you; teammates keep their own pinned lists.
switch
Only chats the AI marked Dissatisfied. Each row shows a thumbs-up or thumbs-down beside the ID once the AI has judged the chat; hover it to read User satisfied or User dissatisfied.
switch
Only chats where an action received an error response (a status of 400 or higher) from the service it called. Open the chat and switch on Action Logs to see which one.
switch
Only the chats that haven’t finished yet. See Following chats that are still going.
A visitor who can’t start a chat because your balance can’t cover a chat session still leaves a row. Its Status is a red REJECTED, its Disposition is INSUFFICIENT_BALANCE (or SYSTEM_ERROR when the refusal wasn’t about your balance), its Message Count is 0 and its Cost is -. The visitor still sees Something Went Wrong. One row is recorded for each IP address every 10 minutes, so a visitor who keeps retrying doesn’t fill the list, and refusals from before 14 October 2026 weren’t recorded. A refused chat is never billed.
Chats are charged from the visitor’s first message, not when the widget opens. A chat where the visitor never wrote ends as User Abandoned at $0.00**. If your balance can't cover the chat by that first message, the message isn't answered, the visitor sees **Something Went Wrong**, and the chat ends with **INSUFFICIENT_BALANCE** as its **Disposition** at **$0.00. A chat that ends in an error is refunded and also shows $0.00, but errored chats from before 14 October 2026 keep the charge they were given.
Select View, or anywhere on a row, to open a side drawer titled Chat Details. The Session ID is at the top with a copy button, next to a Pin / Unpin button. Below it, the Summary is the AI-generated synopsis, with a Summary language chip and a Satisfied or Dissatisfied label, followed by the Transcript. Switch Action Logs on to see the actions your agent ran during the chat alongside the messages.
Export
Select Export to queue a CSV of your chats. The export runs in the background, so nothing downloads straight away. Studio shows Starting export job… and then Export job started! You will be notified when it’s ready for download. When the job finishes, download the file from Manage → Data Exports. That page isn’t in the default sidebar, so add it with Customize sidebar or press Cmd/Ctrl+K and search for Data Exports. See Call History → Export for the steps, which are the same. The export covers the chats that match your time range, agent selection and Pinned Only. Chats refused as they opened are included, with REJECTED in the Status column and INSUFFICIENT_BALANCE or SYSTEM_ERROR in Disposition. The search box, User dissatisfied, Action Errors and In-progress Only aren’t applied. If no chats match, the job finishes without a file.Following chats that are still going
Open Filters and turn on In-progress Only to list just the chats that haven’t finished yet. The switch is off by default, and while it’s on it counts toward the number shown on the filter badge. Each chat in the list is marked IN_PROGRESS (or ERROR if it hit a problem) and shows its agent, its start date and its Message Count.- When a chat appears: as soon as the widget greets the visitor, before they type anything.
- When a chat leaves the list: when it ends, which happens when:
- the visitor starts a new session,
- about ten minutes pass after they close the tab (a visitor who comes back before then picks up the same chat; see When a Chat Ends),
- the AI agent ends the conversation itself,
- a handoff to a human agent ends, or
- 24 hours go by with no message from the visitor or the agent.
Live updates
With In-progress Only on, the list updates itself within a few seconds of a chat starting, ending or gaining a message, so statuses and message counts stay current. While a transcript is open the list waits, and it catches up as soon as you close the transcript. If live updates are interrupted, the list still refreshes at least once a minute.Real-Time Updates
While the selected period includes the present (Today, Last 7 Days, Last 30 Days, or a custom range that hasn’t ended), the Chat Analytics dashboard updates live as new conversations complete. A green pulsing Live badge above the headline metrics, at the left of the page, confirms that live updates are active.- Pause live — select the button beside the badge to freeze the view. This is useful when reviewing a specific snapshot without the numbers shifting. The badge changes to Live updates paused.
- Resume live — select it to reload with the latest data and re-enable live updates.
Time Range Filtering
Use the time range menu at the top of the page to focus on a specific window. The page opens on Last 7 Days.
To use a custom range, select Custom Range, set the Start Time and End Time (each has a date and a time, down to the millisecond), then select Apply. Apply stays unavailable until the start is before the end. Cancel closes the panel and keeps the range you had. You can’t choose a date in the future.
Days and times follow your browser’s time zone. To use UTC instead, switch on Use UTC under Time zone in the same menu. The menu shows which zone is in use, and so does the All times in … caption on the Chat volume by day chart.
Chats are counted by when they ended, so a chat that starts just before midnight and ends just after it counts on the later day.
All charts and headline metrics update together when the range changes.
Where to go next
Call Analytics
View the equivalent analytics dashboard for your voice channel.
Chat Escalation
Configure how and when your AI agent escalates to Freshchat.