Short answer: Track time on the client's own record or task, set billable once per client, and at month end invoice the client's billable hours. Keep each invoice as a row under the client, so you can see which hours are paid. In Teamo, an invoice template fills in the hours, rate and amount for you.
Disclosure: I co-founded Teamo and Opsters, the agency Teamo was built out of.
Why do billable hours go missing between the timer and the invoice?
Hours usually get lost in three places:
- The time was never tracked. Someone answered a client email or fixed a small bug and didn't start a timer, because the timer lives in another app.
- The time was tracked against the wrong thing. An entry that says "Calls" or "Admin" can't be billed to anyone, because nobody knows which client it was for.
- The time was tracked but never invoiced. At the end of the month, someone adds up hours from a timesheet export by hand, and entries fall through.
Step 1: Where should each client's time live?
Keep each client as one record in one list, with their projects, tasks and invoices under it. Time is then tracked on something that already belongs to a client, so every hour has an owner.
In Teamo, a client is a record in a module (for example "Clients"), and the work sits under it as activities (tasks, deliverables) and details (smaller steps). Time can be tracked on any of the three levels, and an entry tracked there knows which client it belongs to.
Step 2: How do you decide what is billable without thinking about every entry?
Most of a client's work is either billable or not. Set that as a default, so people only have to think about the exceptions.
In Teamo, billable is a default you set at four levels: the module, the client record, the activity and the detail. The most specific one wins. You can set "Billable: Yes" on the Clients module, then switch one client on a fixed fee to "No", and one task within a billable client (an internal fix, say) to "No" as well. A new time entry takes the default of whatever it is tracked on, and the person can still flip it on the entry itself.
For what to count as billable in the first place, see Billable vs non-billable time: what counts and how to track it.
Step 3: Where should the timer be?
Put the timer on the task itself, so starting it takes one click.
In Teamo there is a play button on every record, activity and detail row. One click starts a timer on that item. While it runs, you can type what you're doing and change whether it's billable, right on the running timer. If you forget the timer, add the time afterwards from the item's Time tab or from Log Time.
If you start a timer before you know what it's for (a call that turns into client work, for example), the entry can stay unlinked and be linked to the right client later.
Step 4: When should you review timesheets?
A weekly look catches mistakes while people still remember what they worked on: an entry on the wrong client, a timer left running over lunch, a call marked non-billable that should have been billable.
In Teamo, the Timesheet tab shows each person their week. Owners can fix their own entries, and admins can fix anyone's, log time for a member who forgot, or move an entry to the right client. Admin changes to someone else's entry are recorded, and the owner is notified.
Step 5: How do you get one client's billable hours for the invoice?
At invoice time, you need one list: this client, this period, billable time only.
In Teamo's Reports tab (admins only), filter by the client's record, set Billable to Yes and pick the date range. Group the summary by task or by person if the client wants a breakdown, then export it as Excel (durations as numbers you can multiply by a rate) or as a PDF the client can read.
Or skip the email: a client portal can show the client their own logged hours, billable only, with a date range they can change.
Step 6: How do you create the invoice in Teamo?
A simple hourly invoice doesn't need a separate invoicing tool. Teamo doesn't take payments, so if you need that, or your accountant wants invoices in QuickBooks or Xero, see the end of this step. In Teamo, each invoice is its own row under the client, and its document fills itself in from that row:
- Add an Invoices group under the clients, so every invoice is a row with its own Hours, Rate, Amount (a formula that multiplies the two), Status (Draft, Ready to send, Sent, Paid) and a document column for the invoice itself.
- On the client, add a Billable hours last month column (a time tracked sum column, set to billable time only and the period Last month), so you see what to bill at a glance.
- Write one invoice and save it as a template. Type
{to add variables: the client's name from the client record, and the number, date, hours, rate and amount from the invoice row. - Each month, add an invoice row under the client, enter the hours from Billable hours last month, and start its document from the template. Every invoice keeps its own numbers, so last month's invoice doesn't change when new hours come in.
- Export it as PDF or Word and send it, or turn on the document's public link and send the link.
Then set the invoice's status to Sent, and to Paid when the money arrives. The hours on paid invoices are what the retainer setup below adds up, so the client's record shows both the work and what has been billed for it.
To send invoices without opening them, connect Make.com to Teamo. When an invoice's status changes to "Ready to send", Teamo's webhook tells Make.com, which reads the invoice through Teamo's API, turns it into a PDF and emails it to the client.
If your invoices live in an accounting tool such as QuickBooks or Xero, connect it to Teamo through the API, directly or with Make.com, so billable hours reach it without retyping; our team can help set that up. Or build the invoice there from the Excel export.
How do you track hours against a retainer?
Compare the hours the client has paid for with the billable hours you've worked, on the client record itself. At Opsters, our automation agency, we use three columns on each client:
- Total hours paid: a roll-up of the hours on the client's invoices with the status "Paid".
- Time tracked: a time tracked sum column, set to count billable time only.
- Difference: a formula that subtracts time tracked from hours paid.
The difference shows, for every client, whether they have hours left or you've worked more than they paid for, without adding anything up by hand. We describe the whole setup in Inside an automation agency: from signed deal to paid invoice without losing track.
How do you do this without Teamo?
The method works with any tools, as long as you keep the same three rules: time is always tracked against a client, billable is decided per client, and invoices are built from a filtered report.
With a separate time tracker, create one project per client in the tracker, name the projects exactly like the clients in your CRM, and set the billable default per project. At month end, filter the tracker's report by project and billable, export it, and build the invoice. The weak point is keeping the client list in the tracker and the CRM in sync, and seeing paid invoices next to the hours, which means a spreadsheet or a lookup between two tools.
FAQ
Should I track time per client, per project or per task? Track it on the most specific item the work belongs to, usually the task, as long as that task sits under a client. You can then report per client, per project or per task from the same entries.
How do I make sure every billable hour gets invoiced? Invoice from a report filtered to one client, billable time only and the invoice period, instead of adding hours up by hand. Review timesheets weekly, so wrong or missing entries are fixed before the report is pulled.
Can Teamo create invoices? Yes, as a document. Each invoice is a row under the client, and an invoice template's variables fill in the client's name and the invoice's hours, rate and amount, and you export it as PDF or share its public link. If you use QuickBooks, Xero or another accounting tool, Teamo connects to it through its API, and the Teamo team can help set that up.
How do I handle a client on a fixed fee? Set that client's billable default to No. The team still tracks time on their work, so you can see whether the fixed fee covers the effort, but the time stays out of billable reports.
What if someone forgets to start a timer? They add the time afterwards on the item's Time tab or in Log Time, with the start and end or just the duration. An admin can also log it for them.