Google Data Studio – Custom Toggl Time Tracker Connector

Google Data Studio - Toggl Time Tracker Connector - joshuatz

Project status: Final stages

Source code: https://github.com/joshuatz/gds-toggl-connector

Installation:

This is not yet live; when it is published I will update this post with the link to install it. In the meantime, if you would like to notified when this goes live, you can fill out a form here.

Once this connector is live, the installation process should be as easy as clicking a link, and then copying and pasting your Toggl API user token into the setup page.

Google Data Studio - Toggl Connector - Installation Page

Background:

I currently use a service called “Toggl”, an online time tracking software, to keep tabs on how I spend my time; both for personal and business purposes. I’m not alone; with 1.6+ million users and over 70,000 businesses enrolled, Toggl is definitely a popular time tracker. As a detail oriented, technology-obsessed person, I also have been milling around the idea of building a personal “dashboard” using Google Data Studio (GDS), where at a glance I could see how much time I had worked on various projects in the current week, how many website visitors this site got, and things like that. For those unfamiliar, Google Data Studio is a (free) online reporting and visualization platform, similar to Tableau or Microsoft Power BI. It lets you create and share interactive reports and widgets that pull from multiple massive data sources.

Toggl would be a big part of this personal dashboard, but I was disappointed to find that they did not have a “connector” available to pull in data from Toggl into Google Data Studio. However, being who I am, and loving a challenge, I thought this was a great opportunity to see what went into creating a data connector, and try my hand at creating it from scratch.

Implementation:

Having just recently tried out TypeScript and being impressed with how it worked and kept large complex codebases tidy, I figured this would make a good first project to try it with. So the first part of this project was simply to get TypeScript to play nicely with Google Apps Script (the engine that powers GDS connectors), which was its own ordeal, and has a write-up here. After I had figured that out, it wasn’t actually all that difficult to build out, although I ran into a lot of “gotchas” and strange undocumented bugs of the GDS connector library, which I have written up here.

Google Data Studio - Toggl Connector - Side by Side with Code

Of course, the main crux of the connector is fetching results from the Toggl API and then translating the results into GDS formatted rows. The Toggl API is well documented, but unfortunately does not have TypeScript definitions available, so that was another thing that I had to code out from scratch.

I have not yet deployed this connector in an “official” capacity, but once I have and it has been approved, I will update this post.

Marketing Applications:

I filed this project under “marketing” for several reasons. For one, this shows my skills working with data sets and data transformation, both of which are a key part of the digital marketing eco-system. Google Data Studio is also, primarily, a marketing dashboard service, and I could have just as easily have built this as a connector for Tableau instead of GDS.

Finally, Toggl itself can be very useful for marketing-specific businesses. For example, an advertising agency might use the “client” grouping feature to track their billable time per client, then pull the data into a GDS report that combines the time spent per client with KPIs, to prove the value of their time and encourage clients to request more billable hours. Or, for a business that does not bill by the hour, or an in-house department, you could use it to track what type of tasks are burning more time and pull insights like “QA for creatives is taking 2x as long this month as last month; is that something we need to look into with our design department?”.

 

Leave a Reply

Your email address will not be published. Required fields are marked *