I was a business owner who wasted a lot of time manually entering timesheets for my staff into Xero. I decided to build a tool to fix this as we were not the only ones facing this problem. Not only is it faster, it also eliminates a lot of errors.

What it does

Uploads a CSV file and validates it against data in Xero (including Earnings Rates and Tracking Codes). You can the select the validated timesheets to create/update in Xero and then create the Pay Runs (before posting them in Xero).

How I built it

It is a browser based app built with Laravel / mysql / PHP.

Challenges I ran into

Getting the Xero API to work was at times complicated, especially with the API restrictions and latency - but we were able to find ways to make it work after a few creative solutions.

Accomplishments that I'm proud of

What we thought initially would be a relatively simple process became a lot more complicated once we had some real users test it with their data. We added a number of features (earnings rates, tracking codes, pay runs, totalling multiple rows), which took time, but makes the UpSheets better to use and more appealing to a greater audience. We have also done a lot of optimisation to make large uploads faster. Instead of a generic download file, we let the user download one with their own data, which makes it far easier for them to understand and use.

What I learned

So many things. A huge amount about the Xero API, but also the additional requirements of creating a Saas app with multi-tenancy and various metrics required for operation and billing.

What's next for UpSheets - Xero TimeSheet Upload


  • Adding Leave, Deductions & reimbursements uploads.
  • Expanding to other countries (currently available in Australia only)

You can see a video on the landing page or link below

Built With

Share this project: