Ask HN: What are good self hosted time tracking software for consultants?

79 points by thepra ↗ HN
Or is there a list of them somewhere?

96 comments

[ 3.2 ms ] story [ 148 ms ] thread
Any spreadsheet :)

The advantage being that you can always stick a random formula in for whatever you want to find out right now and you didnt need before.

It wont generate your invoices But Î find that a minor problem. How many customers do you invoice per month anyway?

If you faff around with macros for a bit, it can generate invoices too :)
This is what I've always done. Spreadsheets do everything I need.
I just add a second sheet that is basically a copy & paste invoice. By the 2nd or 3rd invoice it hardly took me more than a minute.
I once integrated IFTTT with google sheets to automatically add a line to a spreadsheet when I entered and exited work. And then made some more pages in the sheet in order to have it all neat and orderly for timekeeping. A huge advantage was that I could correct small mistakes whenever I wanted, so it didn't matter much if the integration itself was a bit spotty.
With a few intermediate sheets and FILTER, UNIQUE, SUMIFS, and VLOOKUP, you can have it generate invoices too.
I use SUMIF at least. But i paste the totals in word processor docs.

It's my 1st of the month morning coffee ritual. Pretty good for morale.

A word document with an embedded excel table (or equivalent in any other office suite) works well enough.
org-mode in Emacs. On a headline representing a task or event, `C-c C-x C-i` to clock-in, `C-c C-x C-o` to clock-out. The agenda view includes what you've clocked in to during each day, and from it, `R` can give you a clock report for the timeframe that the agenda view is showing.
I also use org to clock my hours. The clocktable makes it even better to aggregate/report your hours. You can look at a 1-month block separated by week (I report my hours weekly) with the granularity you want. A very versatile tool!

https://orgmode.org/manual/The-clock-table.html

And then you can give each headline a uniq id, write some elisp, call (server-start) and add a lot of

    org-protocol://clock-in?id=12345678-90ab-cdef-afb2-91ad9c6049c9
actions to your StreamDeck to clock into tasks without actually having to find them in your org file.
Clocking in an out of any headline in the document tree is a great feature.
I‘m using Tyme 3 and am totally happy with it.
I find that it doesn't matter which app you use because at the end of the day you need the discipline to update your time tracking when starting and ending your work time.

That's my biggest issue. I work in a chaotic way.

Yes, see ManicTime [0], Timing [1] and ActivityWatch [2] for that.

They passively record what you do, on computer and phone, and at the end of the day (or when invoicing is due) allow you to link what you did to projects.

Use ManicTime if you're mostly on Windows, Timing appears to be good if you're mostly on OS X, and ActivityWatch takes the same approach in an open-source cross-platform project.

I have ManicTime set to record a screenshot every 15 seconds, and record window title and document paths on every app switch. Invoicing still takes time, but knowing what you did and when helps to take all the guesswork out of it, especially for chaotic days.

[0] https://www.manictime.com/ [1] https://timingapp.com/ [2] https://activitywatch.net/

I don't know if shameless plugs are allowed here (sorry if not!), but I have an open source project for Mac that's aimed at exactly this problem. Every ~10 minutes (configurable), it pops up an unobtrusive prompt to ask you what you're working on right now. It then has some basic reporting and aggregating functionality. It's not specifically targeted for consulting / invoicing (I made it because I often ended my day wondering what the heck I'd done all day), and it's sometimes a tad rough around the edges, but it could help. https://whatdid.yuvalshavit.com / https://github.com/yshavit/whatdid

(I'm newish to HN, so please let me know if this message is inappropriate!)

For my specific work flow I was actually thinking of scraping all my git repos to see my activity. Because I'm always working in a git repo, or mostly.

I actually already did try using some sort of recursive git status/log viewer that I can't remember the name of now. Didn't keep it up but I think a program that scrapes my git repos, and perhaps aggregates with other activity logs, would be the best fit.

Ah, gotcha — my app won't help with that, then, sorry! :-)
I went back and forth between a couple of them -- Kimai2 and InvoiceNinja, back when Ninja was still on v4. Ultimately, every time tracking system does things a little differently, and after switching back and forth again, I've settled back on InvoiceNinja v5 (https://invoiceninja.com/).

If all you need is time tracking, Kimai2 and several others will do the job just fine. But I've found in my line of work that it's useful to be able to produce formal quotes and invoices for tracking purposes. Ninja lets you do all of that, no extensions or modules required, and all of the components are integrated with each other (quotes can be converted to invoices, projects, or both, invoicing can be done by task or by project, expenses can be included in invoices, etc.) and it also features a very nice automated emailing system for client invoice/quote notifications and even a guest frontend for them to log into.

So all in all, I've found InvoiceNinja to be extremely useful and can't recommend it enough.

Ninja is not self-hosted is it?
It definitely is! They have hosted options but the project is fully open source and they have thorough self-hosting instructions.
Is there a reason you need time tracking and invoice generation to be connected? In my case I need a monthly invoice that just needs the total hours worked for that month. It's always 8 hours times number of days worked.
I've been using this for eons:

https://play.google.com/store/apps/details?id=com.dynamicg.t...

There's a feature limited free version. Lots of options to track times, jobs, breaks, options for how to deal with day roll over, etc. Unfortunatly Google forced them to break/disable the location tracking feature (despite that it was only doing using the information on-device) - which was super handy to 'clock in/clock out' when arriving at a site.. There's no server, but several backup options to some services or on-device storage.

(comment deleted)
Back when I did hourly reporting I used http://timingapp.com/. It tracks what applications and windows are open and then you connect those to tasks/projects/etc later, which was a must for me since I always forgot both to do time reporting and what I had been working on.
(I am not associated with Timing, just a happy user)

I tried a few time tracking apps, and none come close to Timing. It's easy to use, gets regular updates, it's easy to setup projects and define rules (such that you don't have to track by hand). Has a handy integration with calendar, you can directly book meetings.

Maybe of interest for others: It's Mac only and paid (OP didn't specify preferences, so might be fine)
I’ve mostly just been using spreadsheets and building formulas/macros to calculate revenue, etc. It works and doesn’t have tons of features most apps do.
ManicTime [0] passively records your computer and phone activity in minute detail.

This makes it great for consultants, i.e. people working for multiple clients every day. You can focus on making your clients happy, and at the end of the day (or week, or month), still accurately assign time spent on each project.

ManicTime:

  - Takes a screenshot every X seconds,
  - Records window titles, document paths, urls,
  - Records phone call metadata, phone location, foreground phone app (Android only).
ManicTime has a very intuitive zoomable timeline interface to assign screenshots and other recorded activity to projects. Everything is stored offline. If you want, a free to use self-hosted server ManicTime server helps with backup and multi-device synchronisation.

ManicTime works best on Windows and with Android, although an OS X client exists.

Pricing: 67 USD for a one year license (so: no subscription that holds your data hostage). ManicTime is not free, but knowing what you did and when (down to the minute) gives it a quick ROI.

[0] https://www.manictime.com/

I wrote a small ruby cli tool, which I use since over 5 years for all my freelance and consulting jobs:

https://github.com/pstaender/punched

To let it sync with other computers I let it store the files in nextcoloud (they are only plain text files). There is just basic functionality, but you can also set different hour rates per project and let it show the total sum of hours for a project.

timewarrior.org

Not associated, but a big fan. Console based, so easily scriptable. Use it not for consulting but time tracking between projects.

Another vote for TimeWarrior.

As a huge bonus, if you started using or currently use TaskWarrior (console based task management), it integrates seamlessly and will track time spent on a task for you.

It's an awesome, open source, extremely robust, and well thought out little ecosystem.

I always use a text file, one per client: date, number of hours that day, and a description of what I did. I round up to the nearest quarter hour.
I have been very happy with Daily Time Tracking, dailytimetracking.com (Mac)

What is great about is that it just polls you every n minutes (based on your preferences), and then you just: Press the 'V' button (if you are working on the same as before – our Shift+Ctrl+S) OR Write in the new task that you are working on OR Select an earlier task from a dropdown menu. Time is then automatically added to the task chosen. Then you can just see the total of time spent on each task or export the data to CSV, JSON etc.

Not affiliated in any way, but has been working great for me.

My own nonota: https://github.com/matheusd/nonota

CLI TUI, just a list of tasks, track time across them or manually add the time. Backing is a yaml file, so you can adjust if needed.

Runs anywhere you can use Go to compile to.

Funny enough, I've been considering a mini content series on modelling one in Postgres and then using different low-code tools for cross-platform engagement. Would this be of any interest? I guess this is the right group to ask.