My iOS Time Tracking Control Station
Automating my time tracking tools using Shortcuts, Toggl API, and Python.

Time tracking is a frightfully wonderful thing; It’s hard to do (as those missing bars in my header image shows) but the perspective you can gain from even moderate tracking is rewarding and sobering. Human minds are not designed to be an accurate log of the flow of time, and in a lot of circumstances it’s frustratingly counterintuitive. The droning tasks of Monday afternoon can feel like an eternal 15 minutes, while the super awesome yet purely aesthetic work on Tuesday morning can feel like a speedy hour. I could go on great lengths trying to persuade you to do some sort of time tracking (and if you are looking for that kind of content, I recommend the great conversation with Myke and CGP Grey on time tracking), but that’s not the point of this story, Today I am sharing with you my sort of time tracking.
If you’ve been doing Time Tracking, you have probably been presented with the plethora of app options there are to accomplish this task. I happened across Toggl Track around 4 years ago, and haven’t really looked back. While toggl is amazing, I found their iOS app difficult to use, particularly the early versions of the app. The app had it’s bugs, but overall it always felt like I was taking a lot of steps to start a simple timer, so I decided to automate using shortcuts! (thank you app developers for making APIs and Shortcuts 🙏 ). Eventually over the years I had a large, but messy, compilation of actions I used to keep the timer ticking. Then out of complete disregard for my time Apple blessed us with widgets who integrate beautifully with shortcuts.
This is when my Time Tracking Control Station was born.
The Design

The idea was to bring my reporting and data entry widgets together to create a “Time Tracking” page on my iPhone. I separated my widgets into three sections:
- Passive Reporting — Reports that I generate at regular interval and do not need to update on demand. These shortcuts live at the top and let me dig into and see my regular reporting. These reports are how I like to regularly evaluate my time usage. I don’t particularly need to access these every day, so they live on the least active zone for that reason.
- Active Reporting — Reports that provide on demand data with specific input parameters. These reports let me dig into specific period of time or entries so I can see how specific projects or tasks are tracking. I use these pretty frequently to get data on a specific time period or activity.
- Data Entry — Tools to manage time entries and the active timer. These tools let me start the timer with my regular entries or add a timer after-the fact if I forgot. These I use multiple times a day, so they live right at the bottom where they are easy to click.
The post today will only cover an overview of the each section and what it contains, but I’ll be writting a few how-tos as a follow up if you want to use some of these tools yourself! Why? A hell bent desire to increase the total bars in the next report.
Passive Reporting
Time in the Last Three Months

“Time in the Last 3 Months” is a simple bar chart showing me my total hours logged in the last 3 months by week. This gives me a high level summary of my overall productivity (I know . . . things look bad, but while hours logged is highly correlated with productivity the relationship is not entirely straightforward). This chart is created using Charty, Pythonista, and Shortcuts. The backend of this chart (and some of the other tools in this station) is driven by a collection of toggl API functions I assembled into an iOS Analytics Environment. My next piece will go over all the details of this environment, so I’ll leave the suspense for now (though for those curious individuals, the code is available on github).
Period-Over-Period Report

The Period-over-Period report lives in my Bear Notes app, and is my “flagship” reporting product (It also makes up a significant portion of the beige bars in the charts 😥 ). It provides me a detailed week-over-week and month-over-month view broken down by the different endeavors I embark on. Here is where I can see what I’m spending my time on and what tasks contributed the most. The assets for the report are generated through my personal ubuntu server and is triggered by an ssh call in the iOS shortcut. The shortcut then gathers the assets using secure shellfish sftp connections, and builds a new Bear note. It got complicated . . . and I’ll be writing a follow-up running over this shortcut in detail.
Screen Time Report (Because why not?)

Active Reporting
Last Period Report

The last period report gives me a summary of my hours logged by project along with all the entries in a specified period (ending in the current day). This lets me get a glimpse of where the day went on demand. This report is entirely built in shortcuts (It also makes up a big chunk of the beige bars 🙈 ). You can check out and install this shortcut now over at thecodebeast.com. (Huge shout out to macstories.net who without their shortcut archive none of this would be possible)
Search Entries

Search entries is by far my favorite active reporting tool. With a tap I can scour through all my entries matching any keyword over a period of a time. This let’s me track how much time I’ve lent to reading, or practicing guitar, or any other task like that. The backend for this shortcut is also driven by the iOS analytics environment I mentioned above, and will be covered in the follow-up piece.
Data Entry
Timers on Timers on Timers

This part of the control staion uses toggls prebuilt shortcuts to start unnamed timers for each of my projects. This makes it easy to start timers when I’m no where near my computer. Ideally, I’ll go back and spcify the task, but any time logged is better than no time logged.
Add Time Entry

Add data entry was a crucial component to my tracking flow. Forgetting to start a timer is time tracking’s trickiest challenge. This widget lets me add time entries quickly when I forget to start a timer. I use this often to log my reading time using screen time data since I mostly use kindle. You always want to use a time when you can (it’ll be more accurate then your estimate of the time), but to err’ is human. I will be posting some documentation for this shortcut soon over at thecodebeast.com as well (all you’ll need is toggl).
If you’ve made it this far, I hope I didn’t scare you from time tracking. The point was to show off how I’ve automated some toggl actions using iOS to make it easier on myself, but everyone has to start from what’s easiest to do. Even if you just just peruse through your screen time once in a while, you’ll find out something about where the day goes.
I also hope some of these projects might show you what is possible on iOS with a little programming and a lot of time! As I mentioned throughout the piece, I’ll be writing some more detailed follow-ups for the Period-Over-Period report and the Toggl iOS Analytics Environment on here. You can also check out some documentation on the shortcuts I’ll be posting throughout the month over on thecodebeast.com.







