From experience
How I track freelance hours on Mac (after trying everything)
I run 3-5 projects at a time on my Mac. I've been through several time tracking setups. Most lasted a few weeks. Here's what happened with each one, and what I use now.
March 2026
The gap I found
At some point I compared my tracked hours against my Mac's screen time. I was logging about 24 billable hours per week. Screen time said I was working around 32. The difference was small stuff I never started a timer for: emails, short calls, quick code reviews between meetings.
Not all 8 hours were billable. Some was admin, some was getting coffee, some was spacing out. But several hours per week were real client work that never made it onto an invoice.
I don't think the problem was discipline. It's that pressing a start/stop button doesn't fit how my days actually go. I switch between clients constantly. The button approach assumes you work in neat blocks, and I don't.
What I tried
Toggl Track
Used it perfectly for 8 days. On day 9, a client called with an urgent bug. I fixed it in 20 minutes without starting the timer. Same thing happened the next day with someone else. By week three I was opening Toggl at 5pm trying to remember what I'd done since lunch. At that point the numbers were basically made up.
Timing (automatic app tracking)
This was better. Timing runs in the background and records every app I use. No buttons. The problem showed up later: I use VS Code, Chrome, and Slack for every client. Timing would say "3 hours in VS Code" with no idea which client it was for. Every evening I had to sort entries into the right project. That nightly session became the new thing I skipped. Two months of that before I stopped.
A spreadsheet
Google Sheet with 30-minute blocks. Fill in what you did at the end of each block. It worked for about two weeks until I got into a 3-hour flow state and came out with 6 empty rows. Filling those in from memory isn't much better than guessing.
macOS Spaces + per-Space tracking
I was already using Spaces loosely. Then I tried giving each client their own desktop. If the timer just followed which desktop I was on, there would be nothing to press and nothing to categorize. I built a tool for this (which eventually became SpaceJump). That was six months ago and I haven't gone back.
Why the Spaces approach stuck
Every other system asks you to do something extra. Press a button. Sort entries. Fill in a row. The Spaces approach works the other way: you were going to switch desktops anyway, and the tracking is a side effect of that.
It also helps with focus. When your screen only shows one client's stuff, you're not getting pulled into someone else's Slack channel. That wasn't why I set it up, but it might be the bigger benefit.
Setup (takes about 15 minutes)
Open Mission Control (swipe up with three fingers, or press F3). Add desktops with the "+" button. I use five: one per client, one for admin, one personal.
On each desktop, open only that client's stuff. Their repo, their Slack channel, their browser tabs. Right-click apps in the Dock and set Options → "This Desktop" to pin things that should stay put.
macOS labels them "Desktop 1, Desktop 2, Desktop 3" which isn't helpful. I use SpaceJump to give each one a name and color that shows in the menu bar.
Turn on time tracking. From that point on, every desktop switch gets logged with timestamps. Idle detection pauses it when you step away. End of the week, export to CSV, copy into invoice.
Set up keyboard shortcuts: System Settings → Keyboard → Keyboard Shortcuts → Mission Control. Ctrl+1 through Ctrl+5 for instant switching. Or use SpaceJump's picker: hit ⌘+0, type a few letters of the client name, press Enter.
What my end-of-week export looks like
| Space | Date | Duration |
|---|---|---|
| Acme Corp | Mar 3 | 4h 22m |
| Acme Corp | Mar 4 | 6h 05m |
| StartupX | Mar 3 | 2h 45m |
| StartupX | Mar 5 | 5h 10m |
| Agency Y | Mar 4 | 1h 30m |
I copy per-client totals into my invoice. Exact hours, exact dates. No more guessing at the end of the day.
Before and after
With manual tracking, I logged about 24 hours per week. With the Spaces setup, I log about 30. I'm not working more. I'm just not losing the small chunks anymore. The remaining 2-hour gap between tracked time and screen time is real admin: checking email, making coffee, staring out the window.
That's 6 hours per week I was doing but not billing. At any reasonable freelance rate, that matters.
Some things people ask
What about the same browser for multiple clients?
Use separate windows, not tabs. Client A's tabs in one window on their Space, Client B's in another window on theirs. macOS keeps windows on their assigned Space. Just don't put two clients' tabs in the same window.
Quick Slack replies?
I switch to the client's Space before replying, even for something that takes 30 seconds. Those add up, and they're the hours I was losing before. Plus their context is right there.
Doesn't this only work if you use Spaces?
Yes. If you keep everything on one desktop, this won't help. But if you're freelancing with multiple clients and not using Spaces, try it for a week. It's a built-in Mac feature that most people ignore.
Last updated: March 2026