For a while now I’ve been beeminding my time spent doing various activities (from learning to productive work etc.).
Because I wanted precise timing, I chose to use Toggl as my timer, so that I could synchronize it with Beeminder automatically.
It is possible to integrate Toggl and Beeminder using Zapier, but ran I into a bunch of problems when I did that: the Zapier integration will fail if you edit your time entries (changing the amount of time spent or changing Toggl projects), isn’t very quick to update Beeminder (runs every 15 minutes), and most importantly the free plan at Zapier only allows 100 “tasks” per month, which meant that I had to upgrade to their paid plan ($20 a month!!!) as it is very easy to run more than 100 Toggl timers per month.
Anyway, I looked for a direct Toggl to Beeminder integration and wasn’t able to find one so… I made one!
It should fix every single issue I just described and doesn’t require a Zapier account, just a personal computer, hope you guys like it!
Let me know if you find any issues ;).
Wow, this is impressive. I haven’t tried how it works yet (because I am not currently using Toggl), but I appreciate your sharing of this integration a lot. Toggl was what I started tracking my time with several years ago, and later I turned to other options. I have recently started using Gleeo solely because it appeared on the Beeminder’s future integrations list So now perhaps I can switch back to toggl and not wait for that official integration
From what you described above as the “issued fixed”, I understand that it also understands some retrospective changes in toggl entries? Like synching the entries from android? (Ok, maybe I should better just run and try)
Glad some other people were having similar issues!
Yes basically if you make any change to the time entries within 24 hours it should be reflected in Beeminder. For instance if you forgot to assign a project to an entry and do it later, you’re guaranteed that it will be reflected in Beeminder (which wasn’t the case with the Zapier integration). Even if you edit the time for an entry (within 24 hours) Beeminder will be updated to the new time.
I use Toggl both on desktop and Android and haven’t had any problem with my script (also note that I’ve been using the script for a few weeks and just cleaned it up and put it on github today, so it should be pretty stable).
I actually had starting writing something to do exactly this and never quite finished it. Thanks for posting! Can’t wait to try it.
Thanks for this! I was recently starting to look in to tracking time so this will help a lot.
I finally got around to trying this out: great job!
The only additional thing I’d want is to be able customize the Beeminder data comment, e.g. to include project or the Toggl comment. That’ll be helpful for logging several projects into one aggregate Beeminder goal (e.g. a “work” or “study” goal).
I’ll probably be able to hack this myself in the source by changing the strings, but it’d be nice to be able to configure it in the cfg file, too.
Thanks so much for making this! This is already a big help for me.
This is exactly what I’ve been looking for.
Adrien, does this script still work? I’m not having any luck with it (on windows)
The script definitely still works, but I only ever tested it on Mac unfortunately, so I’m not surprised that there are some issues with Windows…
Unfortunately not sure if I can help much with that right now, but let me know if you figure something out.
Thanks for letting me know. I wanted to make sure it was all still fine before I spent too long trying to figure it out. (Not too familiar with Python yet)
Which version of Python are you running? I’ve read that can have an impact, too.
I’ll circle back if I have a win.
Got it working.
The script works fine on Windows… turns out Toggl was the culprit. I deleted all my old Projects and my other Workspace (I’d say that’s the most likely cause).
Anyway, seems to be working perfectly now.
Thanks for sharing.
Thank you so much for this script. I’d resisted ditching my old timer (aTimeLogger2) because I prefer it a lot over Toggl, but this script seemed too good to pass up, and that turned out to be completely right. Between this and IFTTT, my workflow has been made a tonne easier and more frictionless.
How does this handle end times after midnight? Does it just submit it as whatever Beeminder considers to be “today”?
I don’t suspect I will EVER run into this issue, but I guess this means if I’m coming up on the end of the Beeminder day (4:00am), I should stop any tasks and then restart them after the day transitions? I’m guessing if I stopped it after 4:00am, it would put all that time on the next day.
This script is insanely useful, thank you for putting in the time! I’ve had the idea to create something like this for awhile, but I had no way to beemind it with Toggl to make sure it got done…
The script does not know about what beeminder considers “today”. The time it gives for its data points is always the current time whenever it finds the data point, which generally is within 1 minute of it being completed (not started).
In other words, yes, if the end of your beeminder day is coming up and you really want that time to count for the current day, you should stop your timer and restart it.
Also note that although the script will let you edit timers within 24 hours, the same rules apply and it does not know how to delete a data point. In particular, if you had a timer for 3 minutes on Monday, and edit it to being 2 minutes on Tuesday, you will have the following data in beeminder:
- Monday, 3 minutes
- Tuesday, -3 minutes
- Tuesday, 2 minutes
Hope this makes sense.
Hey, I had a bit of a problem this afternoon with an entry not getting recorded into Beeminder (but when I deleted it, the deletion was recorded). Is there a way I can figure out what happened based on the logs or anything so I can make sure things are set up all right?)
I’ve been loving this, by the way. Not having to enter my time manually is great.
This looks fantastic – thanks for making it @adrienle!
Was running out of zaps fast…
Does anyone know how I might change the comment posted to beeminder to be the description of the Toggl task?
Eg. right now it posts
From toggl_beeminder but would want it to pass along the ‘description’ value from Toggl.