The Zendesk Time Tracking app helps support managers gain visibility into the actual time spent across all your customer service interactions within a ticket. The app tracks the time spent on each ticket update, and stores this with the ticket. With Explore, you can create calculated metrics that contain this information, and use them to produce reports. Use this article to learn how to set up custom time tracking metrics and produce three sample reports.
In this article:
Choosing the approach
As with any other Support ticket data, there are two approaches for analyzing the time tracking app data.
Ticket handling time
The first approach is to look at the handling time per ticket. It can be used to analyze agent performance when the ticket is handled mostly by the same agent and for reporting on time your team spent supporting a specific end-user or organization.
If you choose to go with this approach the best place to create your queries is the Support: Tickets dataset. To do so you can create two simple calculated metrics based on the Total time spent (sec) metric and use them to report on the handling time per ticket alongside the native time metrics.
Metrics that can be created to support this approach are:
- Ticket handling time (min)
- Ticket handling time (hrs)
Update handling time
The second approach is to look at the handling time per update. It is the best way to report on the agent performance and it is suitable for the complex workflows where the same ticket is handled by multiple agents.
For this approach, the calculated metrics and queries should be created in the Support: Ticket Updates dataset based on the data stored in the Changes - Previous value and Changes - New value attributes. You can use the NUMBER() function to transform the text attribute values into numbers.
Metrics that can be created to support this approach are:
- Update handling time (min)
- Update handling time (hrs)
Creating the metrics
If this is the first time you've created a calculated metric, see Creating standard calculated metrics and attributes.
To create the metric
Repeat the following general procedure to create each custom metric. Use the metrics configuration sections below to find the information you'll need to create each one.
- In Explore, click the query (
) icon.
- In the Queries library, click New query.
- On the Choose a dataset page, click Support > Tickets > Support: Ticket updates, then click New query. Query builder opens.
- From the calculations menu (
), click Standard calculated metric.
- On the Standard calculated metric page, enter a name for your calculated metric from the list below, for example Update handling time (min).
- In the Formula field, enter or paste the formula you want from the metrics configuration sections below:
Note: The formulas in this article won't work if the user profile is set to a non-English language. If your user profile in Explore isn't in English, follow the instructions in this article to make the formula work: How can I convert Explore formulas from English into another language?IF ([Changes - Field name] = "Total time spent (sec)")
If you are creating the Update handling time (min) metric, the Standard calculated metric menu would look like this:
THEN
IF ([Changes - Previous value]=NULL OR [Changes - Previous value]="")
THEN NUMBER([Changes - New value])/60
ELIF (REGEXP_MATCH([Changes - New value], "[0-9]+") AND REGEXP_MATCH([Changes - Previous value], "[0-9]+"))
THEN(NUMBER([Changes - New value])-NUMBER([Changes - Previous value]))/60
ENDIF
ENDIF - If your user profile language is not in English replace the attribute names in the formula with attributes in your language. For example, in German the formula will look like this:
- When you are finished, click Save.
- In the Metrics panel, click Add.
- From the list of attributes, expand the Calculated metrics folder, find your calculated metric, then click the pen icon next to it.
- From the Options menu of the Standard calculated metrics page, choose Edit aggregators.
- Set the metric's default and visible aggregators. If you are creating the Update handling time (min) metric the aggregator menu looks like this:
- Continue creating the calculated metrics as shown below.
Metrics configuration
Metric name: Ticket handling time (min)
This metric should be created in the Support: Tickets dataset. It returns the time spent by agents per ticket, calculated in minutes.
Copy and paste this formula into the formula field of your standard calculated metric:
VALUE(Total time spent (sec))/60
Supported aggregators when you use this metric in a query: SUM, AVG, MIN, MAX, MED
Metric name: Ticket handling time (hrs)
This metric should be created in the Support: Tickets dataset. It returns the time spent by agents per ticket, calculated in hours.
Copy and paste this formula into the formula field of your standard calculated metric:
VALUE(Total time spent (sec))/60/60
Supported aggregators when you use this metric in a query: SUM, AVG, MIN, MAX, MED
Metric name: Update handling time (min)
This metric should be created in the Support: Ticket updates dataset. It returns the time spent by agents per ticket update, calculated in minutes.
Copy and paste this formula into the formula field of your standard calculated metric:
IF ([Changes - Field name] = "Total time spent (sec)")
THEN
IF ([Changes - Previous value]=NULL OR [Changes - Previous value]="")
THEN NUMBER([Changes - New value])/60
ELIF (REGEXP_MATCH([Changes - New value], "[0-9]+") AND REGEXP_MATCH([Changes - Previous value], "[0-9]+"))
THEN(NUMBER([Changes - New value])-NUMBER([Changes - Previous value]))/60
ENDIF
ENDIF
Supported aggregators when you use this metric in a query: SUM, AVG, MIN, MAX, MED
Metric name: Update handling time (hrs)
This metric should be created in the Support: Ticket updates dataset. It returns the time spent by agents per ticket update, calculated in hours.
Copy and paste this formula into the formula field of your standard calculated metric:
IF ([Changes - Field name] = "Total time spent (sec)")
THEN
IF ([Changes - Previous value]=NULL OR [Changes - Previous value]="")
THEN NUMBER([Changes - New value])/60/60
ELIF (REGEXP_MATCH([Changes - New value], "[0-9]+") AND REGEXP_MATCH([Changes - Previous value], "[0-9]+"))
THEN(NUMBER([Changes - New value])-NUMBER([Changes - Previous value]))/60/60
ENDIF
ENDIF
Supported aggregators when you use this metric in a query: SUM, AVG, MIN, MAX, MED
Example 1: Ticket handling time by ticket ID
In this example, you'll produce a list of tickets with their handling time and some additional attributes.
Before you start, ensure you've created the custom metrics shown previously.
- In Explore, click the query (
) icon.
- In the Queries library, click New query.
- On the Choose a dataset page, click Support > Tickets > Support: Tickets, then click New query. Query builder opens.
- Now, add your metrics. In the Metrics panel, click Add.
- From the list of metrics, choose Calculated Metrics > Ticket handling time (min) ,then click Apply.
- In the Rows panel, add the attribute you want to report against the metrics. Click Add.
- From the list of attributes, expand Ticket, and then choose Ticket ID.
- Expand Assignee, and choose Assignee name.
- Expand Requester, and choose Requester name.
- Expand Time - Ticket solved, and choose Ticket solved - Date.
- Click on one of the Time - Ticket solved, then Date range and select the time period you wish.
- From the visualizations menu (
), choose Table.
Example 2: Ticket handling time by month and organization
In this example, you'll produce a chart showing total ticket handling time and average ticket handling time by month and organization.
Before you start, ensure you've created the custom metrics shown previously.
- In Zendesk Explore, click the query (
) icon.
- In the Queries library, click New query.
- On the Choose a dataset page, click Support > Tickets > Support: Tickets , then click New query. Query builder opens.
- Now, add your metrics. In the Metrics panel, click Add.
- From the list of metrics, choose Calculated metrics > SUM(Ticket handling Time (hrs)) and AVG(Ticket handling time (min)), then click Apply.
- From the visualizations menu (
), choose Line.
- Click the AVG(Ticket handling time (min)) metric you just added, then select Dual.
- In the Columns panel, add the attribute you want to report against the metrics. Click Add.
- From the list of attributes, choose Time - Ticket created > Ticket created - Year and Ticket created - Month, then click Apply.
- Click the Ticket Created - Month, then Date range and select the time period you want.
- In the Rows panel, add the attribute you want to have in the row selector. Click Add.
- From the list of attributes, choose Ticket organization > Ticket organization name, then click Apply.
- Click the Ticket organization name, and choose the organizations you want to look at.
- You can adjust the chart colors, labels and more in the chart configuration menu (
).
You'll end up with a chart that looks like this:
Example 3: Update handling time by agent
In this example, you'll generate a graph showing agents with the top ten average handling time.
Before you start, ensure you've created the custom metrics shown previously.
- In Zendesk Explore, click the query (
) icon.
- In the Queries Library, click New query.
- On the Choose a dataset page, click Support > Tickets > Support: Ticket updates, then click New query. Query builder opens.
- Now, add your metrics. In the Metrics panel, click Add.
- From the list of metrics, choose Calculated metrics > AVG(Update handling time (min)), then click Apply.
- In the Columns panel, add the attribute you want to report against the metric. Click Add.
- From the list of attributes, choose Updater > Updater name, then click Apply.
- In the Filters panel, add the attributes that will refine the results. Click Add.
- From the list of attributes, choose Updater > Updater role, then click Apply.
- Click the Updater role attribute you just added and select Admin and Agent from the menu.
- In the Filters panel, click Add
- From the list of attributes, choose Time - Ticket update > Update - Date, then click Apply.
- Click the Update - Date filter you just added, then click Date range and select the time period you want to show.
- From the visualizations menu (
), choose Bar.
- To show only the top ten users, in the result manipulation menu (
), click Top/bottom. On the Top/bottom page, select Top, then set the number to 10.
- Adjust colors, labels and other customizations in the chart configuration menu (
).
You'll end up with a chart that looks something like the following:
102 Comments
Hey Jim,
You can actually use the Time Tracking app with Insights as well. We have a list of useful time tracking recipes here: Insights Recipes Reference
We also have a separate Time Tracking recipe: The metrics you need to be measuring specifically for Insights as well.
Let me know if you run into any issues :)
Cheers!
This app is really interesting- we outsource work to a team of light agents overseas for certain tasks and are interested in keeping better track on our end of hours we are billed for. Does this app track time for light agents, and is this something that could be a good tool for this type of use case?
Hi Erica,
Yes, the app works for light agents. For more information about how to set up and use the app, see these articles:
- https://support.zendesk.com/hc/en-us/articles/203662506-Setting-up-the-Time-Tracking-app-Professional-and-Enterprise-
- https://support.zendesk.com/hc/en-us/articles/203691196-Using-the-Time-Tracking-app-Professional-and-Enterprise-
Thanks,
David
I created both the metrics above, Ticket Handling Time and Update Handling Time
When looking at the time tracking app, I see a huge discrepancy between the ticket handling time (min) and both the time indicated in the app as well as where I believe the ticket was solved first.
What is the time that is being pulled for ticket handling time? I assume it's the date ticket created - date ticket first solved, but i'm not seeing that being the case.
Does that also include the time the agent was not physically looking at the request? The time tracking app is set up only to add time when the agent is viewing the ticket.
My goal is to isolate the time one of my agents on average takes to complete a single request.
Amino Assistant (Larry), my understanding is that handling time is basically the total time spent working the ticket (tab opened/being viewed and worked- and you can auto pause if you want when navigating away from the ticket). Depending upon your settings it will be different from the ticket created to solved- it's time handled.
My understanding is that 'time spent on updates' is a segment of handling time (meaning handling time includes updates) but I'm not sure if that is correct and I'm interested to have confirmation there.
So it would not make sense to add those together for total handle time, it's simply time spent updating the ticket.
I am trying to find a way to relate time tracking to ticket tags.
This way we can match agent efficiency, IE Time spent on specific subjects/tags.
Does anyone have a way to do that?
Hey Jared,
You should be able to just use a Tag filter in your existing query or create a calculated metric to only show tickets that contain that tag. More information in the following article: Explore: Reporting with tags
Let me know if that doesn't get you the results you're looking for!
Hi team-
I just wanted a quick clarification on what is included in the "handling time." Someone previously mentioned that it is "between the time the agent opens a ticket, and clicks on submit," so I was curious about a few things:
Thanks!
Hi Duggan,
I've found that it counts the time against only the active ticket tab within zendesk.
If you have 3 tabs open; A,B, and C, if you leave ticket tab A open on your screen, the clock will pause on tabs B and C, but continue on A.
If you leave zendesk ticket tab A loaded and active, it will count time, even if you are on another web browser tab. Agents need to be careful, as we tend to see ticket times of 16 hours logged when people leave a tab open overnight and just lock their PC!
Closing the web broswer tab will reset any unlogged time.
Hope that helps!
I find that when using Total time spent (sec) the time does not get counted until the ticket is solved and the time is only attributed to the user assigned to the ticket.
Is there a way to sum up the time logged for a given data range regardless of ticket status and who is assigned the ticket?
I have a quick question as our time tracking seems to be intermittent as of March 2020.
We previously had all of the above metrics set up in both Insights and Explore, they were working flawlessly and we were able to track update handling time, by agent, for both light agents and standard agents.
However, since March of 2020, our light agent time tracking doesn't seem to be working but I do see the occasional 1-2 minutes tracked from light agents here and there in March and April.
I've also checked to ensure the light agents are in fact logging in to Zendesk to make these updates and not just responding via email etc.
Any guidance here would be appreciated. Im not sure what changed as of March 2020
Hello, Here is where I am stuck. I report back on how many hours we spend on each client a month. I have no issue getting those hours to show up. My issue is that an agent can spend an hour in April on an issue and another hour in May. Especially as the month closes. When I pull May's report, the ticket doesn't show up because it was created in April. I also track total time spent per agent. Same issue. The hours get logged in the month the ticket was created, not based on when they spent the time working on them. Example: If I create a ticket April 30th and spend 1 minute on it, and spend 10 hours on May 1, the report says I spent 10 hours on that ticket in April because thats when it was created. Makes tracking billable hours impossible. Maybe I am using the wrong data or metric for the date ranges?
Hi! I've created the "Handling time per agent" bar chart as per the instructions. I was wondering if there's a way to overlay the average handling time for the team over the individual average handling times to compare how each agent performs compared to the average handling time across the whole team?
Hello Sophie Harris,
You can accomplish this by adding a fixed calculated metric. I'll share an article below that goes into detail on how to implement this in your Explore instance. Let us know if you have any questions setting this up, and we'll be happy to help.
Adding fixed calculated metrics
Best regards.
I have the same query as Nick DeSpain above:
I find that when using Total time spent (sec) the time does not get counted until the ticket is solved and the time is only attributed to the user assigned to the ticket.
Is there a way to sum up the time logged for a given data range regardless of ticket status and who is assigned the ticket?
Can you please provide some guidance?
Hey Jason
I eventually got help from @... on a separate ticket and ended up with a query I think is getting us what we want. No complaints so far.
So we set up the query like this:
- Created Update handling time (min) metric
- Create new query - Choose a dataset: Support -> Ticket Updates -> Support: Ticket updates
- Use Update handling time (min) in Metrics
- Use Updater name in Rows
- Use Update - Timestamp in Filters (example: 'this week')
- Use Updater name in Filters (this was easiest for me to pick out my team from all potential updaters)
- On the right choose Visualization and pick Table
Now to see more detail and see time logged for each ticket that week you can:
- Click on the minutes of an agent and choose Decompose
- Then choose Ticket ID
What I've seen is that using this approach will give me time logged by a agent for each ticket for this week, regardless who is assigned the ticket and regardless of ticket status.
Hope that helps!
How do you create a custom metric to show resolution time or resolution time brackets in the Support: Ticket Updates explore? I would like to solve for a case where I want to know the % of tickets solved within 24 hours for tickets that have had comments by specific users/groups.
Hi Jordan Lee,
You could add the metric "Agent comments" or "Ticket updated w/ comment" and the attribute "Update ticket group" to your explore report, and filter by the "Update ticket group" if you want to see a specific group. You can also filter by the "Ticket Solved" time attribute for the specific time the ticket was solved.
If you visualize this report as a pie graph it will automatically present these values as percentages, but if you want to use a table view, you can follow the steps listed here to add percentages to your report!
I hope this answers your question!
I'm trying to put a report in place similar to "Example 2: Ticket handling time by month and organization" but it is not giving me what I need as it is based on the Creation date of a ticket
I need to deliver monthly reports on time spend per ticket so I'd need to find a way to report on effective time spend (time logged with time tracker app) per month per organisation.
We need to report on the time spend within a certain month (several months) even if in other months time has been spend already and/or the ticket was created months ago.
Not the creation time/date but the time logging per month is the focus
Is there a way to do this?
It looks like John has a similar (the same) issue
https://support.zendesk.com/hc/en-us/articles/360022186134/comments/360004705893
Thanks
Hi Patrick Proesmans
I'm not sure if this gets exactly to what you are looking for, but there is an attribute option for Update - Month. With that you could use the Total Ticket Time (SUM(Update Handling Time)) as the metric. It would look something like this:
Hi Chris Bulin

Thanks for your reply but I'm afraid this is not working.
First of all I don't have "Update - Month" as an attribute?
I have "Ticket Updated - Month"
Secondly, using "Ticket updated - Month" it seems it doesn't work for tickets with updates in different months. It lists the ticket in the last month with the update and then just shows all time logged on the ticket.
That is not what I need.
I need the time logged on a ticket within a certain month. I'm sure that data is in the database somewhere because when hoovering over the time entries of the app it shows in a popup the date a time entry is done.
The query would need to give all time entries done with the app per month per ticket.
Can you please review if there's an option to query the time tracker app entries
Thank you
Patrick Proesmans thanks for that extra information! I think you may be in the Support:Tickets dataset rather than the Support: Ticket Updates dataset. The Time Tracking metrics should be used with the Updates dataset. You can click on the little cloud icon on the left to see a list of your datasets.
Chris Bulin
Thanks will give it a try
Hi,
We have multiple agents that are helping respond on other agents tickets and when trying to create a report to see how much time each individual agent spent on the ticket, it is not reporting accurately. It's showing accurately for the assignee agent just not for the supporting agents. Do you have any suggestions/recommendations on how we could get visibility into this?
Thanks!
Hi Michelle,
If you're using the report (or variant thereof) in example 1 above, you may get what you're looking for by recreating it in the Ticket updates dataset (instead of Tickets) and using the Updater Name instead of the Assignee Name.
Please let me know if you need more direction than that, hope it helps.
Edit: You would also want to have an Updater Role filter that excludes End-user updates.
So I've tried to recreate what you have as Example 3 in the article.
When I publish it to the custom dashboard, I need a time filter to go along with it. What is the difference between “Support: Ticket updates [default] – Update” and “Support: Ticket updates [default] –Ticket updated”? The latter is returning values for agents I am certain did not update tickets on the particular date chosen. The former seems more accurate, but now I don't trust myself.
Hi Eugene Orman,
I have a question. How do we track Handling time for the specific ticket updates with custom text field changes. Because I see that Field changes are tracked before and after the update. But how is this connected to the Timetracking app data?
William Reed, in most of the cases the right time attribute for the Ticket updates dataset is the 'Update'. 'Ticket updated' attribute refers to the last update on the ticket but 'Update' refers to each update in the ticket.
Andrei Kamarouski, Handling time metrics simply calculate the difference between the previous and new value of the Total time spent field for each update. Do you want to track this metric for the specific ticket updates? If so how do you define them, do you have an example?
Hi Eugene Orman,
Our Zendesk has custom ticket fields and needs to calculate the time spent on the ticket updates when those fields had specific historical values (they change over time), not just for the current value of the fields. How do we get this?
Hey Andrei,
I reached out to one of our Explore experts and it looks like they'll need to take a look at your account to see if this is possible. I'm going to create a ticket on your behalf and assign it over to them so they can assist further.
Cheers!
Please sign in to leave a comment.