Set up internal time tracking in HaloPSA without wrecking morale
A practical walkthrough for MSP owners who want to see where non-billable hours go in HaloPSA, without turning the team against them
The short version
This tutorial shows how to set up internal time tracking in HaloPSA using a dedicated internal ticket type, quick time entries and built-in categories, plus how to surface it on a reporting dashboard. It also covers the practical warning behind the setup: how you frame this to your team decides whether it becomes useful data or a morale problem.
What you'll take away
-
Two ways to log internal time
You can run a live timer while you work or log time reactively after the fact from the time sheet icon.
-
Log Break Time exists but tread carefully
HaloPSA lets you track lunch and breaks too, but forcing every minute logged risks annoying your engineers.
-
One agent can log time for a whole meeting
Selecting multiple agents on a single quick time entry means a meeting coordinator can log attendance time for everyone at once, so nobody has to fill in their own sheet.
-
The built-in category field is not optional
Because the display extra fields setting only exposes the built-in category and contract fields, any custom reporting on internal time has to use Category 2, not a bespoke field.
-
A dedicated internal ticket type keeps billing safe
Marking the internal ticket type as not billable and excluded from SLA stops a mistaken remote support entry from charging your own company.
-
The warning that opens the whole video
Connor is explicit that tracking everything, including toilet breaks, is a fast way to make your team hate you, and that you need a clear reason before you roll this out.
Key insights from the episode
-
Set the ticket type used for logging time to a dedicated internal type in Configuration, Time Management, Time Logging.
-
Turn off end user visibility on the internal ticket type so only agents can raise it.
-
Exclude the internal ticket type from SLA tracking and mark it not billable to stop accidental client charges.
-
Enable display extra fields and allow selection of multiple agents so category dropdowns and group time entries work.
-
Use Category 2 for time categories such as professional development, meeting, admin or research, since custom fields are not exposed in quick time entries.
-
Build reports by filtering on category is not null, or on a specific category value, to isolate non-ticket internal time.
-
Restrict allowed values and statuses on the internal ticket type so agents can only close it or log internal time, avoiding a full workflow build.
-
Decide why you are tracking internal time before you roll it out, and sell it as a benefit rather than surveillance.
Questions people actually ask
How do I track internal time in HaloPSA?
Click the time sheet icon in the top right, start or stop a timer, then log the time as work time against an internal ticket type. You can also log it reactively after the fact using the same quick time entry screen.
What ticket type should I use for internal time in HaloPSA?
Create a dedicated ticket type, for example called Internal, and set it as the ticket type used for logging time in Configuration, Time Management. Mark it as not billable and excluded from SLA so it never gets charged to a client or breaches a service level.
Can one agent log time in HaloPSA on behalf of the whole team?
Yes. Enabling allow the selection of multiple agents in the time logging settings lets one person, such as a meeting coordinator, log the same time entry for everyone who attended, rather than each person logging it individually.
Why does HaloPSA only let me use the built-in category field for internal time?
The display extra fields setting in Time Management only exposes the built-in category and contract fields on quick time entries. Custom fields are not available here, so any reporting on internal time categories has to be built against Category 2.
Is tracking internal time in HaloPSA a good idea for an MSP?
It can be, but only if you have a clear reason, such as identifying tasks worth automating or spotting training gaps. Forcing agents to log every minute of the day, including breaks, tends to damage morale rather than improve reporting.
How do I stop internal time entries from being billed to a client in HaloPSA?
On the internal ticket type, set the default customer or site for time entries to your own internal company and mark the ticket type as not billable. This stops a mistaken selection like remote support from generating a charge.
Full transcript
3,281 words
Read full transcript
Collapse
Full transcript
3,281 words
Connor: £499,000 no, £22,000, now that is a nice car. Let me just check the bank account super quick. Ah, God damn it, I just need a little bit more money. How am I going to achieve that? I've got it. If I make my team track everything they do and then stop them doing anything that isn't billable time, I think I can afford this Ferrari. Let me go tell them now.
Hi Robbie. I've just set up an amazing mechanism in HaloPSA. You can now track your time for everything that you do, when you go to the toilet, when you get a cup of coffee, any training, development, literally everything, mate. You can have 100% timesheet completion. It's going to be amazing, be amazing for my bank account when he stops doing all that YouTube and makes me some money. Let's wait and see what his response is, shall we?
A few moments later. Yeah sounds good Connor. Do you need me to tell if it's a number one or a number two? Do you want a consistency rating?
What? You don't like the idea? Sounds absolutely awful. No thank you. How the hell am I going to afford my Ferrari now?
Whilst the intro was mildly facetious, I do want to start this video with a serious point. I'm about to show you a mechanism or a way of tracking internal time in HaloPSA that you might think on the surface is a fantastic idea and go tell all your techs straight away. However, the preface of this recording, I suppose, is just be very conscious about what it is you're trying to get out of this and how you're going to deliver this to your team.
A suggestion from me is you need to understand why you're doing it and then sell it as a positive. For instance, I would now like you to track all of your time when you're spending half an hour or more doing a certain thing because that way we could find ways to automate it or improve efficiency, or we can hire someone to reduce that headache.
So what am I talking about today? We're chatting about tracking internal time in HaloPSA and this can be anything you want it to be. This can be documentation, this could be making cups of tea if you're the new apprentice. I'm joking, it's 2024. Um, it could be checking backups, it could be I don't know, a million things that you could do at your MSP, but you need to understand the point of it.
So with that being said, let me go and show you what the outcome can look like and then I'm going to show you how to do it.
So for anyone new here, my name's Connor Fagan. We are Renada Solutions and we provide elegant solutions to technical problems. Let's jump in to internal time tracking.
So as you can see in front of your screen right now, this is a dashboard we've recently created called Agent Insights and the idea being is we can track a bunch of different metrics against our staff. Now the real power of this for me, because I don't really advocate KPI-driven services—is we'll have that debate another day—is the ability to just kind of bench engineers against each other. Let's say you have four level ones and let's say you think someone is, you know, not pulling their weight. Having this dashboard, you can look at the data and go Connor Fagan is only logged six hours this week and it's all training. Why isn't he helping the guys open or close tickets? Oh, he is opening and closing tickets, but he's clearly not logging his time.
So this dashboard is just a representation of what we can do with the data, basically. And now I'm going to show you how we can track or even input, should I say, internal time.
So there's two ways to do it that we've come up with. The quick and easy way and then the not so quick and easy way. I know, highly eloquent.
So the first thing I want to do is click this little timesheet icon in the top right over here and then what I'm going to do is just close this timer and I'm going to click start a new timer. So the mechanism could be you tell your team whenever you start doing some training, click the timer, let it tick through while you're doing it, and once you finished training, go ahead and click stop. Alternatively, you can do this, you know, reactively where you can just stop and start it straight away.
And then you can do a few things. So you can log your time to a ticket. We're not really going to go through that right now today. This is basically updating time in an existing ticket. I don't particularly advocate doing it here, to be honest. Um, log as work time—that's what we are going to be using today. And I might as well show you log break time as well just so you can see it.
So I'm just going to click log as work time. I'm just going to do the following: I have spent 30 minutes learning how to code the Matrix and I am Connor Fagan.
What you can even do with Robbie is also select Lobby. Now this is clever because if you have a meeting, let's say you have a team meeting, someone can log the team meeting time for everyone in the team. So rather than everyone having to go to their timesheet and add that they've been in a meeting, the meeting coordinator, if you will, could say I'll log the time for this one, don't you guys stress about it. I'm going to add in that we had a meeting today and what it was about. You could even if you wanted to include the minutes in here.
Um, user—let's say you're doing this for someone. So let's say I'm learning how to do this for X, you could do that. Um, I don't really recommend doing this. I mean, you can. Let's say we're checking backups for a client, you could log here that we are checking backups for a client. However, I like to do that from scheduled ticket so we have this maintenance task that we do repeatedly.
So I'm just going to leave that there. Then we're going to add our time entry method. So this is again something to be conscious about. We could do the start time and hours—so at 10:00 a.m. I spent 30 minutes checking backups or doing documentation. Or at 10:30 I spent the last half an hour checking backups, IE 10:00 a.m. till 10:30. Or if that's blowing your little marbles, start time and end time. I started at 10:00, finished at half 10. Simple.
If you travelled anywhere you can type in your distance travelled. I travelled nowhere so I'm not going to put anything in there. Um, unfortunately we can't get rid of charge right here but it does default to no charge. You could say I did remote support and you could bill it. Again, I don't really like this quick time mechanism for doing billable work. You kind of want to follow a process, right?
And then the last little bit, the little bit of elegance if you will, is the time category. So you can actually start categorising here what time you've done. And if you remember back slightly on that dashboard I showed you, there was different columns. One of them was training time. Um, so we could have a category in here called training or we've called it professional development where you could log that and say I've spent 30 minutes in the Neo to code the Matrix with Robbie and that was 30 minutes time for both of us. That is, by the way, so we both get half an hour timesheet entry for professional development.
Save. What you'll see is that'll appear on your timesheet. Mine's a little bit messy, but you'll see it down here so when adding—we was learning how to code the Matrix and I spent 30 minutes learning how to code the Matrix—and then it's logged a 30-minute time entry.
And you'll see it's logged it as a QuickTime event to the ticket type internal. We'll focus on that in a minute. You'll also notice if I go to service desk and if I just go to all tickets that have been closed, you'll see one's also been logged here against no agent. However, it has added Robbie as the time entry person. So when you're reporting on this, it will show you that Robbie has logged 30 minutes against this ticket, which is fantastic.
The other way, if you desire, is you can make a new ticket. I'm just going to log it against myself. I'm going to select the ticket type internal. I'm just going to say um, ongoing training. I'm going to create it today at 11:00 a.m. and this is for professional development. I'm just going to assign this ticket to myself and submit it.
What you can then do is you can log internal time—30 minutes doing professional development. Job done, away we go. And this could be just you know a bit of a timesheet you keep running for a few days. Um, I try and get away from having one master timesheet ticket just because everything's kind of all in one place and is a little bit risky for me, but that's the idea. We can log quick time in Halo to capture what we're doing internally. And again, just air on the side of caution. Make sure you're selling this to your team. If you like the idea, make sure you're not making them log every single thing they do throughout the day. Of course, just get everyone's backs up and it will be a disaster.
So how have we done all this? What are all the moving pieces? Well, let's start with the foundation. So let's go to config and I'm going to type in search features here: time. And you'll see three time managements. They all go to the same place. You just got to pick which one you fancy. Now I am a fan of the left one, I must admit. And what you can do is you can go down to um, time logging. Um, and what you can do is you can allow agents to log time. Great.
The ticket type used for logging time, well I want that to be internal. We've made a new ticket type for this. The default customer or site for time entries, well that's going to be internal. So I want it to log to us. Um, I'm not going to make it mandatory to select a user. I don't want at this point in time the ability to pick different ticket types. I want this to be a hard and fast mechanism. If you're doing internal time, log it this way. If you're doing anything else, log it this other way.
Um, display extra fields. That's really important. That's so we can have that category dropdown of internal time. Um, and allow the selection of multiple agents. Again, quite important because if you did want to log a team meeting or a group activity, you can do that from one time entry sheet.
And away you go. Then what we need to do is go to configuration, tickets and ticket types and make a new ticket type. Now I've already got one here called Internals. I'm just going to go ahead and click on that. And then I recommend we do a few of the following settings. So I'm just going to click edit in the top left.
Now the first thing I want to say is yep, I want this to be visible to our agents, and yes, agents can log new tickets with this type. Um, but we don't really want end users to log this ticket type, so untick that. And everything else can just be left as it is.
On the defaults tab, I recommend excluding this from SLA. We don't want our SLA tracking against this ticket type. And also, what you might want to do is say that this ticket is not billable, so if you do select remote support by mistake, you're not going to start billing your own company for 30 minutes of remote support.
Um, on the form, there's nothing I've done on here. We can leave all that as it is. And on the field list, I've added a few fields here. So I want summary, the date we made it, time category, which is Category 2, we'll go through that in a minute, details, agent, and time taken. Um, the layout can just be default. Allowed values, you can if you want restrict stuff here so you know, we've said it's either closed or in progress or you can log internal time or you can quick close the ticket.
Um, everything else can just be left. And you can even restrict it to a customer if you want, so only Renada Solutions can log this ticket.
So the main things are: make sure you can log it internally, make sure you exclude SLA, make sure you say it's not billable down here. Ignore the forms tab, add the fields that you want when doing this, and on the allowed values, you can allow these few actions. So rather than putting on a workflow and having to define all that logic, you can just say you can close it or you can log internal time. And then you can restrict the statuses as well if you want.
In terms of the field list, sorry, the time category—the category 2—I've leveraged built-in categorisation. Now that's really important. We unfortunately have to use the built-in categories, and that's because that setting—uh, I'll show you very quickly. Go back to time. Not Tom. Don't know who Tom is. Time management. Scroll down that setting for um, display extra fields. This only includes category and contract fields. And what that means is this only includes the built-in category fields. So if you did want to start pulling data from them, um, quick timesheets, you're going to have to leverage them unfortunately.
And then I'll just put a few in here. You can go wild with these: admin, meeting, other, professional development, and research. You can add in more stuff here if you like the idea of it.
Um, and then that's basically it. We can then, once you've done that ticket type, go back to our time sheets. Time management. Sorry, timesheets are slightly different but we'll get into that another day. Um, and make sure that you select the internal ticket type here that you want to use when logging it. Then all you've got to do is click on the timesheet in the top right, click start new timer, stop the timer, and log it as a work time.
The break time, by the way, is used for logging breaks. So lunchtime or break time. And you can put in here, you know, I had a 30-minute lunch. If you want to track that. But again, try and not force time logging for every single thing you do. It will send your engineers insane.
Um, and that's it. That, that's literally as simple as that. When we're looking at the dashboard in that we had as well, the Agent Insight, so um, this one here, I've got training time here. Well, I'm about to expose myself for this video quickly, but basically um, if you are building reports around this, one of the things that you'll want to do is um, base it on the category. So I've basically said show me where the category is not null. Well, you could actually say show me where the category is equal to professional development or whatever you desire. So you can actually SQL that in as well. And it just means you can include or exclude this from other timesheets or other reports you've got, um, or you can leverage it in a report like this to show you what time your staff are doing that isn't on tickets.
And that's it for today. I hope this helps. Again, I I don't want to keep reinforcing this point but just be careful when doing this. Make sure for the right reasons. Make sure you're actually going to get tangible data out of it. If you're making your guys log time for the sake of logging times so you can report it, um, you might get some adverse effects from it.
Um, I've tried KPIs in the past and actually found it had a negative um, impact on my desk because people are competing on analytics all the time. So I've I've decided now professionally that I don't run KPI-driven services. We do have metrics we can report against and we can monitor, but it's mainly to see who isn't and who is pulling their weight. If we need to do a bit training to bump up our resolution times or if we're not spending enough time and, you know, training on that as well.
I've been Connor Fagan. I hope you find some value in this video. If there are any questions, put them down below. We will try and respond as soon as we can. As always, keep safe, have a lovely day, and I'll see you all soon. Bye-bye.
Author
Related tutorials
Our Core Services
Offering support to enable sustainable success for your organisation.