[Project Share] Fast Toggl Timers with Tasker

In my life, I want to be consistently reminded of the way I’m intending on spending my time. I find it reminds me to be present and intentional. Life is full of distractions and this helps me remember that I want to be focused on one thing at a time. I found the existing Toggl app on Android requires ~10 or more clicks to add a new timer with projects and descriptions, and the notifications for my current timer aren’t good enough for me. So I whipped up this system with Tasker, described below. I made this video highlighting the system today as I realized it’s worth sharing. I’ve been using this for ~2 weeks, and I find it far easier than the android app or web app. Sorry for the poor audio.

Features of this system:

  • My lock screen shows a permanent notification with my active timer’s project, description, and the amount of time that has lapsed
  • I have a permanent notification with the same info
  • Clicking either of those notifications shows an alphabetical list of my projects to switch to
  • Adding descriptions are also dead simple. One is auto-suggested or I can instantly start typing a new one.

I built an imgur gallery with descriptions stepping through everything on imgur if you prefer or are on mobile. I’ve added it all here too:

Photo 1: My lock screen

My lock screen


In my life, I want to be consistently reminded of the way I’m intending on spending my time. I find it reminds me to be present and focused. Life is distracting and this helps me remember that I want to be focused on one thing at a time.
The format is: [Elapsed time] minutes on [Project]
[Description]
Double-tapping the notification will bring you to straight to photo 3.
The next image shows my home screen - so I just unlocked the phone in this case.

Photo 2: My Android homescreen

My Android homescreen


The toggl icon on the left the next image, the toggl icon on the right is the official toggl app.
Sidebar: All these icons open custom actions, the content of which is dynamic based on what should be most useful to me. Maybe a post for another time.
The next screen shows what happens when I click the toggl icon on the left.

Photo 3: My list of projects

My list of projects


It’s a scrollable, alphabetical list of all my Toggl projects. One click starts the entry, and brings you to the next screen.
This list is automatically updated by chaining together Toggl > IFTTT > Zapier > Autoweb. If I were a better man it would be simpler, and describing that process is out of scope for me right now.
The next screen shows what happens when I click any project in this list.

Photo 4: Add a description default

Add a description default


After selecting a project, I am brought to this screen to quickly add a description, or just accept the default description. In this case “High level work”. I’m filling in the description field with a variable in Tasker so that I can later suggest better descriptions dynamically.
The next image shows the description I added for my time making this : )

Photo 5: My description now

My description now


My current description : )

Photo 6: Response toast

Response toast


I like to see a toast after I start a new timer. It confirms what I added and that it was successful. Helps me notice if I’m having network issues.

Photo 7: Toggl main app

Toggl main app


Here you can see the timer we started in the prior images. For illustration only - I rarely open the toggl app on mobile.

Photo 8: Lock screen again, with this entry

Lock screen again, with this entry


The timer we started in the prior images, on the lockscreen.

You’ll need a few things to import this for your use. (1) AutoWeb setup with the Toggle API, (2) the Snackbar Tasker Plugin for showing a nicer UI, and (3) Autotools for date formatting.

Source: The project description for importing into Tasker
Profiles
Profile: Anon (9)
Event: Display On
Enter: Toggl Check For Timer (7)
A1: AutoWeb Web Service [ Configuration:API: Toggl
API Action: Get current time entry Timeout (Seconds):120 ] 
A2: Wait Until [ MS:0 Seconds:1 Minutes:0 Hours:0 Days:0 ] If [ %awresponsecode Set ]
A3: AutoTools Toast [ Configuration:Text: No Toggl timer 🤤
Text Size: 14
Icon Size: 30
Corner Radius: 30
Padding: 16,4,16,4 Timeout (Seconds):60 ] If [ %pid !Set ]
A4: Variable Set [ Name:%index To:%Tgl_pid(#?%pid) Recurse Variables:Off Do Maths:Off Append:Off ] 
A5: Variable Set [ Name:%durmin To:floor((%TIMES+%duration)/60) Recurse Variables:Off Do Maths:On Append:Off ] 
A6: AutoNotification [ Configuration:Title: %durmin minutes on %Tgl_name(%index)
Text: %description
Action on Touch: touched
Icon: app-icon:com.toggl.giskard
Status Bar Icon: device_access_time
Status Bar Text Size: 16
Background Color: #FF616161
Colorize Background: true
Id: 1
Priority: 0
Visibility: Public
Separator: , Timeout (Seconds):20 ] 


Profile: Anon (10)
Event: Sleep [ Configuration:Sleep tracking started ]
Enter: Anon (2)
A1: Perform Task [ Name:[Function] Toggl Start Timer Priority:%priority Parameter 1 (%par1):151325462 Parameter 2 (%par2):Sleep as Android started to track sleep; Tasker Return Value Variable: Stop:Off ] 


Profile: Anon (11)
Time: From 9:00AM every 5m Till 12:00AM
State: Display State [ Is:On ]
Enter: Toggl Check For Timer (7)
A1: AutoWeb Web Service [ Configuration:API: Toggl
API Action: Get current time entry Timeout (Seconds):120 ] 
A2: Wait Until [ MS:0 Seconds:1 Minutes:0 Hours:0 Days:0 ] If [ %awresponsecode Set ]
A3: AutoTools Toast [ Configuration:Text: No Toggl timer 🤤
Text Size: 14
Icon Size: 30
Corner Radius: 30
Padding: 16,4,16,4 Timeout (Seconds):60 ] If [ %pid !Set ]
A4: Variable Set [ Name:%index To:%Tgl_pid(#?%pid) Recurse Variables:Off Do Maths:Off Append:Off ] 
A5: Variable Set [ Name:%durmin To:floor((%TIMES+%duration)/60) Recurse Variables:Off Do Maths:On Append:Off ] 
A6: AutoNotification [ Configuration:Title: %durmin minutes on %Tgl_name(%index)
Text: %description
Action on Touch: touched
Icon: app-icon:com.toggl.giskard
Status Bar Icon: device_access_time
Status Bar Text Size: 16
Background Color: #FF616161
Colorize Background: true
Id: 1
Priority: 0
Visibility: Public
Separator: , Timeout (Seconds):20 ] 


Profile: Anon (12)
Event: AutoRemote [ Configuration:new toggl project ]
Enter: Toggl Get Projects (3)
A1: Spreadsheet Query [ Configuration:Query Zapier and Tasker database Timeout (Seconds):20 ] 
A2: [X] Flash [ Text:%Tgl_Headers Long:Off ] 
A3: Array Set [ Variable Array:%Tgl_pid Values:%pid() Splitter:, ] 
A4: Array Set [ Variable Array:%Tgl_name Values:%name() Splitter:, ] 
A5: Array Set [ Variable Array:%Tgl_wid Values:%wid() Splitter:, ] 


Profile: Anon (13)
Event: AutoNotification [ Configuration:Event Behaviour
Filter: touched ]
Enter: Toggl List Projects (4)
A1: Bottom Sheet [ Configuration:Title: 
Items: %Tgl_name()
Commands: %Tgl_pid() Timeout (Seconds):100 ]
A2: Perform Task [ Name:[Function] Get Description From User Priority:%priority Parameter 1 (%par1):High level work Parameter 2 (%par2): Return Value Variable:%description Stop:Off ] If [ %bs_command !~ Dismissed ]
A3: Perform Task [ Name:[Function] Toggl Start Timer Priority:%priority Parameter 1 (%par1):%bs_command Parameter 2 (%par2):%description;Mobile Return Value Variable: Stop:Off ] If [ %bs_command !~ Dismissed ]
A4: Flash [ Text:%description;Mobile Long:Off ] If [ %bs_command !~ dismissed ]


Tasks

A1: Spreadsheet Query [ Configuration:Query Zapier and Tasker database Timeout (Seconds): ] 
A2: [X] Flash [ Text:%Tgl_Headers Long: ] 
A3: Array Set [ Variable Array:%Tgl_pid Values:%pid() Splitter: ] 
A4: Array Set [ Variable Array:%Tgl_name Values:%name() Splitter: ] 
A5: Array Set [ Variable Array:%Tgl_wid Values:%wid() Splitter: ] 



A1: Bottom Sheet [ Configuration:Title: 
Items: %Tgl_name()
Commands: %Tgl_pid() Timeout (Seconds): ] 
A2: Perform Task [ Name:[Function] Get Description From User Priority: Parameter 1 (%par1):High level work Parameter 2 (%par2): Return Value Variable: Stop: ] If [ %bs_command !~ Dismissed ]
A3: Perform Task [ Name:[Function] Toggl Start Timer Priority: Parameter 1 (%par1):%bs_command Parameter 2 (%par2):%description;Mobile Return Value Variable: Stop: ] If [ %bs_command !~ Dismissed ]
A4: Flash [ Text:%description;Mobile Long: ] If [ %bs_command !~ dismissed ]



A1: Variable Query [ Title: Variable:%description Input Type: Default: Background Image: Layout: Timeout (Seconds): Show Over Keyguard: ] If [ %bs_command !~ Dismissed ]
A2: [X] AutoTools Dialog [ Configuration:Dialog Type: Input
Title: Description
Title Alignment: Center
Text Size: 20
Text Color: #FFFFFF
Button Text Color: #D32F2F
Input Type: Text
Input Line Color: #E53935
Output Variable: attext
Dim Background: true
Top Margin: 16
Bottom Margin: 16
Bottom Buttons Images: app-icon:com.toggl.giskard,icon-pack://com.marcotls.icons.h2o.free/adhell
Bottom Buttons Top Margin: 16
Bottom Buttons Bottom Margin: 16
Cancelable: true
Turn Screen On: true Timeout (Seconds): ] 
A3: Return [ Value:%description Stop:On ] 



A1: Spreadsheet Query [ Configuration:Query Zapier and Tasker database Timeout (Seconds): ] 
A2: [X] Variable Set [ Name:%Tgl_Headers To:%columnheaders() Recurse Variables: Do Maths: Append: ] 
A3: [X] Flash [ Text:%Tgl_Headers Long: ] 
A4: [X] Variable Set [ Name:%Tgl_wid To:%wid() Recurse Variables: Do Maths: Append: ] 
A5: [X] Variable Set [ Name:%Tgl_cid To:%cid() Recurse Variables: Do Maths: Append: ] 
A6: Array Set [ Variable Array:%Tgl_pid Values:%pid() Splitter: ] 
A7: Array Set [ Variable Array:%Tgl_name Values:%name() Splitter: ] 
A8: Array Set [ Variable Array:%Tgl_wid Values:%wid() Splitter: ] 
A9: [X] Variable Set [ Name:%Tgl_id To:%id Recurse Variables: Do Maths: Append: ] 



A1: AutoWeb Web Service [ Configuration:API: Toggl
API Action: Get current time entry Timeout (Seconds): ] 
A2: Wait Until [ MS:0 Seconds:1 Minutes:0 Hours:0 Days:0 ] If [ %awresponsecode Set ]
A3: AutoTools Toast [ Configuration:Text: No Toggl timer 🤤
Text Size: 14
Icon Size: 30
Corner Radius: 30
Padding: 16,4,16,4 Timeout (Seconds): ] If [ %pid !Set ]
A4: Variable Set [ Name:%index To:%Tgl_pid(#?%pid) Recurse Variables: Do Maths: Append: ] 
A5: Variable Set [ Name:%durmin To:floor((%TIMES+%duration)/60) Recurse Variables: Do Maths: Append: ] 
A6: AutoNotification [ Configuration:Title: %durmin minutes on %Tgl_name(%index)
Text: %description
Action on Touch: touched
Icon: app-icon:com.toggl.giskard
Status Bar Icon: device_access_time
Status Bar Text Size: 16
Background Color: #FF616161
Colorize Background: true
Id: 1
Priority: 0
Visibility: Public
Separator: , Timeout (Seconds): ] 



A1: Variable Split [ Name:%par2 Splitter:; Delete Base: ] 
A2: Variable Set [ Name:%par2 To:High-level Mobile Recurse Variables: Do Maths: Append: ] If [ %par2 !Set ]
A3: AutoWeb Web Service [ Configuration:API: Toggl
API Action: Start time entry Timeout (Seconds): ]
A4: Wait [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ] 
A5: Perform Task [ Name:Toggl Check For Timer Priority: Parameter 1 (%par1): Parameter 2 (%par2): Return Value Variable: Stop: ]

or you can import directly from TaskerNet.
I hope you enjoyed!
Mark

3 Likes

Hi Mark,

this is really cool. I tried to set this up, but I can’t get it to work. Do you have a guide anywhere?
You seem to query a spreadsheet in the Toggl Get Projects task, but I don’t get why or what spreadsheet that should be. I don’t have a lot of experience with these things so I’d be grateful for any hints you could provide. Thank you

Hey Max!
I’m really glad you like it, and even more glad you tried to implement it!
I haven’t made a step-by-step guide, this was the most documentation I’ve done up to this point. If there’s broader interest, I can.
You’re 100% right I have a spreadsheet as a kind-of-database, and I totally forgot to add it to my original post. I made a copy of my spreadsheet here, that I’m using Autoremote to pull down to the phone. That sheet gets filled by Zapier so that it can be auto-updated when I add new projects in Toggl. That step isn’t required, only convenient - the sheet can be manually made. Feel free to +comment in that sheet if it’s unclear, but I only use columns ‘pid’, ‘wid’, and ‘name’.

Why keep my projects in a sheet in the first place? Because I also use it in a Faster Toggl tool that I built in Keyboard Maestro for the Mac : ) And I wanted to know that my list of projects was the same everywhere, could be added-to from anywhere, etc. Just seemed easy.

Good luck with this, and boy I’d love to know if you get it working! I’ll set up a better filter in my inbox for emails from this forum, so I can reply faster in the future : )