Agent Metrics
See how Agent Metrics tracks workload, response and resolution times, availability and activity for every human and AI agent, and how to read it.
Overview
Agent Metrics shows how each human agent and AI agent on your team handles conversations: how much work they take on, how fast they respond and resolve, how long they are online, and what actions they take in Revora.
To open it, go to Reports in the left sidebar and select the Agent Metrics tab. The report has three sub-tabs:
| Sub-tab | What it answers |
|---|---|
| Performance | How much did each agent handle, and how fast? |
| Engagement | How long was each agent online, away or offline? |
| History | What exactly did each agent do, and when? |
Filters at the top of the page
| Filter | What it does | Applies to |
|---|---|---|
| Channel selector (e.g. All Channels) | Limits the data to conversations from one or more channels, such as WhatsApp, Messenger or Email. | Performance |
| Date range | Sets the period for the report. Summary cards compare it with the previous period of the same length. | All sub-tabs |
| Business Hour Only | When on, only activity inside your workspace’s configured business hours is counted. | Performance, Engagement |
Performance: summary cards
Four cards at the top of the Performance tab give a team-wide view for the selected date range and channels.
| Card | What it shows |
|---|---|
| Avg. First Response Time | Average wait between a conversation being assigned to an agent and that agent’s first reply. |
| Avg. Resolution Time | Average time from an agent’s latest assignment on a conversation to that conversation being resolved. |
| Avg. Response Time | Average time agents took to answer each customer message. |
| Total Sales | Conversion rate: the share of conversations that led to an order. |
Reading the % change
Each card compares the current period with the previous period of the same length (for a 7-day range, the 7 days before it). The percentage is signed by improvement, not by whether the number went up or down:
- Green / + means performance got better.
- Red / − means performance got worse.
For time metrics, lower is better. For Total Sales, higher is better.
| Example card | This period | Previous period | Shown as | Meaning |
|---|---|---|---|---|
| Avg. First Response Time | 5m 30s | 4m 30s | −22.22% (red) | Agents took longer to reply. |
| Avg. Resolution Time | 2h 00m | 4h 00m | +50.00% (green) | Conversations were resolved faster. |
| Total Sales | 2.40% | 2.00% | +20.00% (green) | More conversations led to an order. |
Performance: Agent Performance Metrics table
The table lists every human agent and AI agent with one row each, so you can compare workload, speed and outcomes side by side. Scroll right to see all columns. A -- means there was no activity of that type in the period.
Example view (demo data):
| Agent | Assigned | Replied | Resolved | Handover | Reassigned | Reopened | Avg. First Response Time | Avg. Response Time |
|---|---|---|---|---|---|---|---|---|
| Support AI Agent | 2,140 | 2,095 | 310 | 402 | — | — | 5s | 6s |
| Sara Khan | 520 | 610 | 645 | 38 | 214 | 3 | 4m 12s | 2m 40s |
| Omar Haddad | 480 | 552 | 590 | 22 | 190 | 6 | 6m 05s | 3m 18s |
| Lina Farouk | 12 | — | — | 4 | — | — | — | — |
Numbers in a row don’t have to add up. For example, Resolved can be higher than Assigned, because an agent also resolves conversations they received by transfer (Reassigned) or that belong to a teammate.
Column definitions
Count columns count events. Time columns are averages. Total Sales is a sum. An event is included when it happened inside the selected date range.
| Column | What it means | Example | Credited to |
|---|---|---|---|
| Assigned | New conversations given to the agent. Transfers are not included. | Agent A is assigned a new conversation → Assigned +1 for A. An unassigned conversation that A assigns to themselves → Assigned +1 for A. A transfers it to B → B’s Assigned does not change (B gets Reassigned +1 instead). | The agent the conversation was assigned to |
| Replied | Conversations the agent replied to, counted once per agent per conversation. Private notes don’t count. | A replies to a conversation → Replied +1 for A. A sends 5 more messages → no change. A assigns it to B and B replies → Replied +1 for B. | The agent who replied |
| Resolved | Conversations the agent closed, whoever they were assigned to. | A resolves their conversation → Resolved +1 for A. Supervisor S resolves B’s conversation → Resolved +1 for S, not B. | The agent who resolved |
| Handover | Conversations the agent passed to another agent or group. | A transfers a conversation to B → Handover +1 for A. An AI agent escalates to A → Handover +1 for the AI agent. | The agent who gave it away |
| Reassigned | Conversations the agent received by transfer from someone else. | A transfers to B, or an admin moves A’s conversation to B → Reassigned +1 for B. B transfers it back to A → Reassigned +1 for A, Handover +1 for B. | The agent who received it |
| Reopened | Resolved conversations that were opened again. | A resolves a conversation. The customer comes back and S reopens it, assigning B → Reopened +1 for B. If S reopens it with no assignee → Reopened +1 for S. In both cases A, who resolved it, gets no Reopened count. | The agent picked at reopen; otherwise the user who reopened it |
| Avg. First Response Time | Average wait from the agent getting a conversation to their first reply. | A is assigned at 10:00 and replies at 10:02 → 2m. A transfers to B at 10:10, B replies at 10:11 → 1m for B. A replies to a second conversation in 30s → A’s average = (120 + 30) ÷ 2 = 1m 15s. | The agent who replied |
| Avg. Response Time | Average time the agent took to answer each customer message. | Customer writes at 10:00, A replies at 10:01 → 60s. Customer writes at 10:05, A replies at 10:05:20 → 20s. A sends another message at 10:05:40 → not timed. A’s average = (60 + 20) ÷ 2 = 40s. | The agent who replied |
| Avg. Resolution Time | Average time from the latest assignment to resolution, for conversations the agent closed. | A is assigned at 10:00 and resolves at 10:30 → 30m. Another conversation is transferred to B at 10:20 and B resolves at 10:30 → 10m for B. | The agent who resolved |
| Avg. CSAT | Average customer rating on the agent’s conversations, using the latest rating per conversation. | A’s two conversations are rated 4 and 5 → 4.50. A customer rates 2, then changes it to 4 → only 4 is used. | The agent assigned when the rating was given |
| Total Orders | Orders placed while the conversation was assigned to the agent. | A customer orders while assigned to A → +1 for A. After a transfer to B, the customer orders again → +1 for B. | The agent assigned when the order was placed |
| Total Sales | Money value of those orders. | A’s conversations bring a $25 order and a $15 order → Total Sales = 40 for A. | The agent assigned when the order was placed |
Narrowing and exporting the table
- Agents: show only the agents you pick.
- Groups: show only agents in the groups you pick.
- Aggregation: choose how rows are broken down.
- Default: one row per agent with totals for the whole period.
- Daily Aggregation: one row per agent per day, to track daily trends.
- Hourly Aggregation: one row per agent per hour, to see performance within each hour.
- Export: download the table as it is currently filtered and aggregated.
How response and resolution times are measured
Every reply and resolution records a duration. Each average in the table is the mean of those durations. Human agents and AI agents are timed slightly differently for the first response.
| Event | Human agent | AI agent |
|---|---|---|
| First reply (Avg. First Response Time) | Reply time − the time the conversation was assigned to the agent | Reply time − the time the conversation was created. Only counted for the conversation’s very first response. |
| Reply (Avg. Response Time) | Reply time − whichever is later: the customer’s last message or the agent’s assignment time | Same rule as human agents |
| Resolve (Avg. Resolution Time) | Resolve time − the agent’s latest assignment time | Same rule as human agents |
Two things follow from this:
- A human agent’s clock starts when the conversation reaches them, not when the customer first wrote. Time spent with the AI agent or in a queue is not counted against them.
- Only the first reply to each customer message is timed. Follow-up messages sent before the customer writes again don’t lower the average.
Engagement tab
The Engagement tab shows how long agents spent in each availability status, so you can check coverage and attendance. The channel selector does not apply here, because status belongs to the agent rather than to a channel.
| Status | Meaning |
|---|---|
| Active | The agent’s status was Online. |
| Away | The agent set themselves to Away, for example to take a break. |
| Offline | The agent was logged out or set to Offline. |
Summary cards
Total Active Duration, Total Away Duration and Total Offline Duration add up the time across all agents in the period. Because they are totals across agents, they can exceed the length of the date range: 10 agents online for 8 hours each on one day add up to 3d 8h. Each card shows the change against the previous period of the same length.
Engagement Reports chart
The line chart plots total Active, Away and Offline time per day across the date range, in minutes. Hover over a day to see its exact totals. Use Export to download the chart’s data.
Agent Engagement Overview table
One row per agent shows their time in each status for the period. Example view (demo data):
| Agent | Total active duration | Total offline duration | Total away duration | Total breaks taken | Occupancy |
|---|---|---|---|---|---|
| Sara Khan | 2d 4h 10m | 4d 19h 05m | 45m | 3 | 98.58% |
| Omar Haddad | 1d 22h 05m | 5d 1h 55m | 0 mins | — | 100.00% |
| Support AI Agent | 7d 0h 00m | 0 mins | 0 mins | — | 100.00% |
| Column | What it means |
|---|---|
| Total active duration | Time the agent was Online. |
| Total offline duration | Time the agent was logged out or Offline. |
| Total away duration | Time the agent was set to Away. |
| Total breaks taken | Number of times the agent switched to Away. |
| Occupancy | Share of the agent’s logged-in time spent Online: Active ÷ (Active + Away). Offline time is not included. |
In the demo row above, Sara’s occupancy is 3,130 min ÷ (3,130 + 45) min = 98.58%.
As on the Performance tab, you can filter by Agents, switch between Default, Daily and Hourly aggregation, and Export the table. Use the page controls at the bottom to move through longer agent lists.
History tab
The History tab is an activity log of what each agent, human or AI, did in Revora, newest first. Use it to trace who changed a conversation, when, and from where.
Example view (demo data):
| Agent | Date Time | Connector | Action | Connector Type | Event | Remarks | IP Address | Browser Details |
|---|---|---|---|---|---|---|---|---|
| Omar Haddad | Oct 14, 2026, 10:29 AM | — | read | content | export | Datalab entries for lab_id: 1045 from 2026-10-01 to 2026-10-14 sent to [email protected] | — | — |
| Support AI Agent | Oct 14, 2026, 10:19 AM | ticket | update | agent | — | [email protected] assigned to agent [email protected] | 203.0.113.10 | Python/3.13 aiohttp/3.13.5 |
| Sara Khan | Oct 14, 2026, 9:46 AM | ticket | update | content | hide | hidden comment: “Please DM us your order number” | — | — |
| Column | What it means |
|---|---|
| Agent | The human or AI agent who performed the action. |
| Date Time | When the action happened. |
| Connector | The item the action was performed on, such as a ticket (conversation). |
| Action | The kind of operation, such as read or update. |
| Connector Type | What part of the item was affected, such as the assigned agent or the content. |
| Event | The specific event, such as export or hide, where one applies. |
| Remarks | A plain-language description of what happened, such as who a conversation was assigned to or what was exported and where it was sent. |
| IP Address | The IP address the action came from, when recorded. |
| Browser Details | The browser or client used. Actions made through an API or integration show the client library instead of a browser. |
Filtering and sharing
- Filter the log with Agents, Connector, Actions, Connector type and Event to find a specific change quickly.
- Send Metrics via Email sends the log for the current filters to your email address.
Reviewing one agent’s performance: a supervisor’s guide
To judge one agent fairly, read their workload, speed, quality, sales and availability together rather than any single column. This section shows which columns answer which question and how to combine them.
Set up the view
- Pick the date range you want to review, for example last week.
- On the Performance tab, use the Agents filter to select the agent. To compare them with peers, also select their teammates or use Groups.
- Turn on Business Hour Only if you want to judge them only on the hours they were expected to work.
- Keep Default aggregation for the period’s totals and averages. Switch to Daily or Hourly to spot bad days or slow hours.
- Open the Engagement tab with the same agent and date range to see how long they were available.
- Use the History tab to look into a specific conversation or action.
Which columns answer which question
| Question | Columns to read | How to read them |
|---|---|---|
| How much work did they take on? | Assigned + Reassigned | Assigned is new conversations; Reassigned is conversations transferred to them. Together they are the agent’s total incoming workload. They never overlap, so you can add them. |
| How much did they actually work on? | Replied | Conversations they replied to at least once. Compare with their incoming workload to see if anything went untouched. |
| How much did they close? | Resolved | Includes conversations they closed for teammates, so it can be higher than their incoming workload. |
| How much did they pass on? | Handover | Conversations they transferred away. A high number can mean correct routing or avoiding hard cases; check History to tell which. |
| How fast did they pick up? | Avg. First Response Time | Time from assignment to their first reply. Measures how quickly customers hear from them. |
| How fast did they keep the conversation going? | Avg. Response Time | Time to answer each customer message. Measures responsiveness during the conversation. |
| How fast did they finish? | Avg. Resolution Time | Time from their latest assignment to resolution. |
| Were customers happy? | Avg. CSAT, Reopened | CSAT is the customer’s rating. Reopened shows reopened conversations handed to this agent, not reopens of their own resolved work. |
| Did they drive sales? | Total Orders, Total Sales | Orders and order value placed while the conversation was assigned to them. |
| Were they available? | Engagement tab: Total active duration, Total away duration, Total breaks taken, Occupancy | Context for all of the above: an agent online 20 hours can’t be compared directly with one online 40 hours. |
Ratios worth calculating
The report shows raw counts. These ratios make agents with different workloads comparable.
| Ratio | Formula | What it tells you |
|---|---|---|
| Incoming workload | Assigned + Reassigned | Total conversations that reached the agent. Use this as the base for the ratios below. |
| Reply coverage | Replied ÷ incoming workload | Share of their conversations they responded to. Low coverage means conversations were left waiting or passed on unanswered. |
| Handover rate | Handover ÷ incoming workload | Share of their conversations they transferred away. |
| Resolution rate | Resolved ÷ incoming workload | How much they close relative to what they receive. It can exceed 100% when they close teammates’ conversations. |
| Reopened share | Reopened ÷ incoming workload | Share of the agent’s workload that came from reopened conversations. It does not measure the quality of their own resolutions: when a conversation they resolved is reopened, the count goes to whoever picks it up, not to them. |
| Average order value | Total Sales ÷ Total Orders | Typical value of orders from their conversations. |
| Conversations per active hour | Replied ÷ active hours (Engagement tab) | Throughput adjusted for how long they were online. |
Combining rows correctly
With Daily or Hourly aggregation, or when you export several periods, you may want one total for the agent.
- Add up count columns: Assigned, Replied, Resolved, Handover, Reassigned, Reopened, Total Orders, Total Sales, and the Engagement durations and breaks.
- Don’t add up or simply average the average columns: Avg. First Response Time, Avg. Response Time, Avg. Resolution Time and Avg. CSAT. A quiet day with one reply would count as much as a busy day with 100. To get the true average for a period, set that date range and use Default aggregation instead.
- Don’t add Resolved to Assigned or Reassigned: Resolved overlaps with both, so adding them double-counts conversations.
Worked example (demo data)
Sara Khan, 7 days, Default aggregation:
| Assigned | Reassigned | Replied | Resolved | Handover | Reopened | Avg. First Response Time | Avg. CSAT | Total Orders | Total Sales | Active time |
|---|---|---|---|---|---|---|---|---|---|---|
| 520 | 214 | 610 | 645 | 38 | 3 | 4m 12s | 4.60 | 42 | 3,150 | 52h 10m |
- Incoming workload: 520 + 214 = 734 conversations.
- Reply coverage: 610 ÷ 734 = 83%. About 1 in 6 conversations that reached her got no reply from her; check whether they were handed over (38) or left waiting.
- Handover rate: 38 ÷ 734 = 5%.
- Resolution rate: 645 ÷ 734 = 88%.
- Reopened share: 3 ÷ 734 = 0.4% of her workload came from reopened conversations.
- Average order value: 3,150 ÷ 42 = 75.
- Conversations per active hour: 610 ÷ 52.2 = about 11.7.
Together: Sara handled a heavy load, closed most of it, took on few reopened conversations, and kept customers satisfied. The one thing to follow up is the 17% of conversations she didn’t reply to.
FAQ
Why is an agent’s Resolved count higher than their Assigned count? Assigned only counts new conversations. Resolved also includes conversations the agent received by transfer, and ones they closed on behalf of a teammate.
Why does the AI agent’s first response time show only a few seconds? The AI agent replies almost as soon as a conversation is created. Its first response is timed from creation, and only for the conversation’s very first reply.
Does time spent with the AI agent make my human agents look slower? No. A human agent’s response and resolution clocks start when the conversation is assigned to them.
Why does an AI agent show Handover but no Assigned? An AI agent that only escalates conversations to humans records a Handover each time, but may not be assigned conversations directly.
Why don’t the summary cards match an average of the rows? The cards average every individual reply or resolution across the team. Agents who handled more conversations carry more weight than in a simple average of rows.
Why is Total Active Duration longer than my date range? It adds up the active time of every agent. Divide by the number of agents for a rough per-agent figure, or use the Agent Engagement Overview table.
Why is the channel selector greyed out on the Engagement and History tabs? Availability and activity logs belong to the agent, not to a channel, so they can’t be split by channel.
Why doesn’t a reopened conversation count against the agent who resolved it? Reopened is credited to the agent the conversation is assigned to when it’s reopened (or to the person who reopened it, if no one is assigned). The agent who originally resolved it gets no Reopened count.