JWillum products

Free guide · JWillum products

How to turn Toggl, Clockify or Harvest time entries into Xero or Wave invoice lines

Turn Toggl Track, Clockify or Harvest time entries into Xero or Wave invoice lines, one line per client and project.

Published · Updated

At the end of the month you have a few hundred time entries in Toggl Track, Clockify or Harvest and need to bill them in Xero or Wave. Typing invoice lines by hand is slow and error-prone. Dumping every entry onto an invoice gives the client 200 lines of "Meeting, 0.25h". What you usually want is one line per client and project (or per task), with total hours × rate, imported as a draft invoice you can check before sending.

Here's how to do it with a spreadsheet.

Step 1: Export the detailed report

  • Toggl Track: Reports → Detailed → export CSV.
  • Clockify: Reports → Detailed → export CSV.
  • Harvest: the detailed time report → export CSV.

Use the detailed export (one row per time entry), not a summary PDF. Keep an untouched copy.

Step 2: Keep only billable time

If there's a Billable column, filter to billable entries. Then check the date range: an entry from the last day of the previous month is easy to bill twice.

Step 3: Convert durations to decimal hours

Trackers often show 1:30:00. Invoices need 1.5. In Excel or Sheets, a duration in cell D2 converts with =D2*24 (format the result as a number). If the export already has decimal hours, use that column.

Step 4: Group and total

Build a pivot table with Client and Project as rows (add Task if you bill per task) and sum of hours as the value. Each row of the pivot becomes one invoice line.

Step 5: Apply rates

Add a rate for each line, from the tracker's rate column if it has one, or from your own rate card. Watch for mixed rates: if one project has entries at 100 and 90, a single total will be wrong. Split those into separate lines per rate. Then calculate amount = hours × rate.

Step 6: Lay it out for your accounting software

Xero (Invoices → Import) expects its own Sales Invoice CSV template:

  • Download the template from Xero and keep its columns (leave unused ones blank rather than deleting them).
  • Repeat ContactName and InvoiceNumber (and the dates) on every line of the same invoice.
  • Use one date format consistently, amounts with a . decimal and no currency symbols, and fill in AccountCode and TaxType to match codes that already exist in Xero.

Wave (via Wave Connect) has no fixed public template. The headings come from your own Prepare Input Sheet (Extensions → Wave Connect → Upload → Invoices), where yellow means required. Match those headings exactly. Consecutive rows with the same Customer become one invoice; a blank row starts a new invoice for the same customer.

Step 7: Set up, import as drafts, review

Before importing, create the contacts/customers, products, tax rates and account codes the file refers to. Import, then review every draft (hours, rates, tax, invoice numbers) before approving.

Doing it faster: Tracker Invoice Lines

Tracker Invoice Lines is a single offline HTML file that does Steps 2–6. Drop in a detailed Toggl, Clockify or Harvest CSV and it recognizes the tracker from the headers, asking you to map columns if it isn't sure. It then:

  • groups by Project, Project+task or Client only, with Billable only on by default
  • applies the CSV rate or your saved rate card
  • warns about mixed rates, with an optional Split mixed rates setting
  • marks missing rates or clients as ERROR in the preview

Choose Xero (full Sales Invoice import template), Wave-ready, or a Generic quantity × rate sheet, set your invoice prefix, dates, due days and codes, and download the CSV.

It doesn't create or email PDF invoices, connect to Xero or Wave, or set up contacts or tax rates for you. For Wave, rename headings if validation asks you to. Timesheet data never leaves your device.

→ Tracker Invoice Lines

Related tools

  • Getting an export ready for your accountant? BooksExport Clean tidies QuickBooks Online and Xero exports into one clean CSV.
  • Paid through Stripe? StripeClear Journal turns Stripe balance exports into a balanced QuickBooks journal CSV.
Tracker Invoice Lines$8 one-time · runs offline in your browser · no account
Get it on Gumroad — $8

Official documentation

The tool for this job

This guide is also published on Gumroad.