Case Study: Toggl Invoicing PDF Generation

Toggl is a fantastic yet really simple time tracking application that allows the user to start and stop a timer, add notes, attach them to clients and projects, and generate reports.

Client

For this project, we were our own client.  This is a solution we built to streamline our own internal operations process at Fulcrum Dynamic.  Fulcrum Dynamic is a custom software development and consulting agency.  We provide solutions for our clients using technology.  Our primary expertise is in web development with Node, PHP, JS, and Python.

Problem

We had been using Toggl for our time tracking, in order to accurately bill clients for hourly work. However, reports generated by Toggl were not quite sufficient to use as an invoice.  They did not include pricing, billing information, or our company branding.  It just did not look very professional.  We tried exporting the data to a spreadsheet template, but that was time-consuming and inefficient.

Solution

In order to generate better-looking invoices more efficiently, we decided to write a script that would parse our Toggl reports and generate nicely formatted invoices in HTML and PDF formats.  The script is built in Ruby and runs on the command line.  It reads from a YAML config file to specify the address and client information.  It can read CSV files exported from Toggl, or pull a date range from Toggl’s reporting API.  We also later added a second script that can export time tracking info from Toggl via their API and upload it to Freshbooks through their API.

We decided to make all the scripts available for free on GitHub.  You can take a look and try to modify them for your needs here: github.com/eimajenthat/toggl-invoice

Results

This script was a first step in automating our billing and invoicing processes.  We continued to innovate and iterate on the process and built a solid foundation that allowed us to scale the business from a one-man show to a distributed team of over 6 engineers and other staff members.

Posted in Case Studies and tagged , , , , .