Clio's 2025 Legal Trends Report puts the average law firm's utilization rate at 38%. In an eight-hour day, the average lawyer captures three billable hours. These are people whose entire profession revolves around recording time, who use software designed for nothing else, and who still lose money they can point at every month.
Freelancers and contractors are not better at this. We're just worse at measuring how bad we are, because nobody publishes a report about it.
The reflex explanation is discipline — you forgot to hit start, be better. I don't buy it, and I have said so before: I don't have the discipline for a manual stopwatch, and I don't know anyone who genuinely does. The deeper problem is that the day doesn't arrive in billable-shaped blocks. A client pings at 3:10 and you spend nineteen minutes in their repo. You read a spec over coffee. You take the call in the car, then spend half an hour afterwards writing up what was decided. By Friday, none of that is a memory with a duration attached to it. It's a vague sense that the week was busy.
So you round. And people round down, because billing an hour you can't defend feels like stealing and losing one feels like nothing.
Capture and billing are two different jobs
I want to be straight about this, because I've said it before and it hasn't changed: an automatic tracker is not an invoicing tool. Timex doesn't know your clients, your rates, your retainer structure, or which of Tuesday's hours are write-offs. If your workflow lives in Harvest or Toggl or a legal practice system, keep it there. The project picker exists for a reason.
What's missing from that stack isn't a better timer. It's evidence. Your invoicing tool records what you told it. Nothing in the loop records what actually happened, so there's nothing to check the story against — and an unchecked story drifts in one direction.
That's the job Timex is doing here. It runs in the background at second-by-second resolution and writes every app, window title, and browser domain into one SQLite file on your Mac. Nothing to start, nothing to stop. It's honest about idle: two minutes without input and it stops counting, so a lunch break doesn't quietly become billable. At the end of the week you have a record of the week — not a reconstruction of it.
The reconcile pass: fifteen minutes before you invoice
Here's the whole workflow. It's short on purpose; anything longer than this doesn't survive contact with a Friday afternoon.
1. Export the file. In Timex: gear icon → Database → Export. You get a small .zip. (The live file is at ~/Library/Application Support/io.muvon.timex/timex.sqlite if you'd rather grab it directly.)
2. Drop it on the timesheet PDF tool. It runs entirely in your browser tab — sql.js opens the database locally, nothing is uploaded. Pick a period: last 7 days, last 30, or a custom range that matches your billing cycle.
3. Filter to one client. In the filter box, put one term per line — anything that shows up in an app name or a window title. A client's project folder, a repo name, their domain, the prefix on their Jira tickets. Everything that doesn't match drops out. The tool shows you "X of Y sessions" so you can see the filter biting instead of trusting it.
4. Clamp the hours if you need to. There's a time-of-day window — set 09:00 to 18:00 and the 11pm curiosity session stops inflating the total. Optional, but it makes the number one you'd defend in a conversation.
5. Set your rate and generate. You get a one-page summary — total hours, days worked, daily average, billable amount — plus a per-day breakdown, top apps, and the session log underneath it. (That detailed list is capped at 500 rows — roomy for a week, tight for a busy month; narrow the filter or shorten the range if you need every line.) Send the client the PDF. The .sqlite never leaves your Mac, which matters more than it sounds like; I'll come back to that.
6. Compare it to what you were about to invoice. This is the actual point of the exercise. If your timer says 4.0 hours on Wednesday and the log says 5.4, go look at the difference. Sometimes it's real work you never started a timer for. Sometimes it's a browser tab you left open in their repo while you ate lunch — the log is not the invoice, it's the input.
Watch that delta for a month and you'll know your personal under-billing rate. Almost nobody does. It's one of those numbers that sits right next to your actual income and quietly eats it.
Make the filter work: put the client's name where your Mac can see it
The filter is only as good as what your window titles say, and that part is on you. It costs nothing and it changes everything:
- Name the project folder after the client, not
new-site-final. The folder name rides in your editor's title bar and your terminal's. - Prefix branches with the client or ticket key.
acme-412-checkout-fixis a searchable billing record;fix-stuffisn't. - Give documents real names. "Acme — discovery call notes" beats "Untitled 3".
- Keep client work in a browser profile or a window whose tabs stay on their domain.
Do that for one week and the filter goes from "roughly right" to "this is the invoice". It's the same discipline a project picker demands, except you spend it once when you name a thing instead of forty times a day at a timer.
What the log can't see
Being useful here means being clear about the holes.
It doesn't know what's billable. A file open in the client's repo could be work or could be a tab you forgot. You decide; the log just refuses to let you decide from memory.
It doesn't see off-screen work. Phone calls, whiteboards, the twenty minutes in the shower where you actually solved the thing. If a meaningful part of your work happens away from the Mac, this covers the part that doesn't, and you add the rest by hand — which is a much smaller act of memory than reconstructing the whole week.
The idle gate cuts both ways. After 120 seconds with no keyboard or mouse input, the tracker closes the segment and stops until you're back. That's what keeps lunch off the invoice. But it also means an hour spent watching a client's recorded call with your hands off the keyboard lands in the file as idle. The log under-counts that kind of work by design. Add it back by hand and it's still the smaller correction.
It doesn't do rounding rules, minimums, or multi-rate splits. That's your invoicing tool's job, and it's good at it.
And it can't retroactively track a week you didn't record. This is the one real cost: the tool has to be running before you need it. It's also why it isn't a timer — a timer you forget to start is worth nothing, and a tracker you forget about is worth exactly as much as one you remember.
The confidentiality problem nobody mentions
Here's the part that should decide this for anyone under an NDA.
Your window titles are client work product. Not metadata — the actual thing. Matter names. Deal code names. Candidate names in a recruiting doc. Acme-acquisition-model-v7.xlsx. A cloud time tracker takes that stream and ships it to a vendor's servers, where it sits under their retention policy, their breach surface, and their terms of service. You almost certainly signed something with your client that this contradicts, and neither of you noticed, because "time tracker" doesn't sound like a data processor.
Timex uploads nothing. One file on your disk, no account, no telemetry, nothing to opt out of. The timesheet PDF is generated in your browser from a file you dropped there yourself. What reaches your client is a PDF you looked at first.
For most people that's a preference. If you handle other people's confidential matters for a living, it's closer to a requirement — and it's the argument I'd lead with if your firm asks why you're not using the cloud tool everyone else uses.
What the delta is worth
Do the arithmetic on your own numbers, because they're the only ones that matter. One recovered hour a week at $150 is $7,800 a year. Half an hour is $3,900. Against a tracker that costs $49 once, the thing has to find you twenty minutes — total, ever — to have paid for itself.
I'm not going to promise it finds you an hour a week. It might find you nothing, in which case you've learned that your estimates are honest, which is worth knowing too. (If you want to test that separately, the estimate vs actual tool will give you your personal multiplier over a few weeks.)
What I'll promise is that the number stops being a guess. You'll invoice a figure you can point at. When a client asks what the 6.2 hours on the 14th were, you'll have the session log instead of a feeling.
Timex is $49 once for three of your Macs — no subscription, for reasons I've written about at length. The trial is 100 hours of tracking with no account and no card, which is about twelve working days. Enough to run one full billing cycle and see your own delta before you decide.
Download it, or brew install muvon/tap/timex. Then invoice from the file — not from Friday-afternoon memory.
— DK