Features Industries Customer Service AI Pricing Blog Log in Start for free
Productivity

How to Bill by the Hour Without a Spreadsheet: Billable Hours in Practice

If you sell hours, you lose money in three places: hours not logged, hours with the wrong rate and hours forgotten at month-end close. A simple method to log, value and close the month, for the client and for people paid by the hour.

People who sell hours lose money in three places, and none of them is the hourly rate. They lose it on the hour nobody logged, on the hour logged at the wrong rate, and on the hour left out of the month-end close. Each failure is small. Added up, they exceed a utility bill every month, and the spreadsheet that was supposed to prevent this is usually the source of the problem.

The method below has four steps, in order: log, price, close, and get paid or pay. It works for an agency, a consultancy, a software house, and any operation that charges for time, whatever the tool. When we talk about Tasskee, we stick to what the Hours module does.

Step 1: log, on the task and on the day

The most expensive mistake is logging at the end of the week, from memory. The person remembers half and rounds the rest. The rule that works: the entry is born on the task the person worked on, on the day they worked, with a short note about what they did.

  • On the task, not in an outside spreadsheet. An hour tied to a task has an origin: if the client questions it, you open the task and show it.
  • With a note. "Contact form adjustment" explains more than "2h."
  • Weekly review. Anyone who logs little shows up right away. Fixing it on Friday costs five minutes; fixing it on close day costs an argument.

In Tasskee, logging hours and the My hours screen are on the Start plan. Each person sees their own hours, with no amounts on the screen, which avoids embarrassment and leaking sensitive information.

Step 2: price, with a rule and not off the top of your head

Pricing means giving each hour the right rate. In a business with few clients, a simple table is enough. When the rate varies by client and by type of work, manual calculation becomes a source of error.

The two amounts that matter

  • What you charge the client. By project and by task type. Development may be worth more than support; warranty work may be "do not bill."
  • What you pay the people who work. For those paid by the hour, it's the payout amount. For the permanent team, it's an internal cost, used only to calculate margin.

In Tasskee, the most specific rule wins: project and type, then project, then organization and type, then organization. Each rate change requires an effective date, and shows a preview of the effect before saving. Whatever has already gone into a close keeps the rate from that time, so a new adjustment doesn't rewrite the past. And an hour with no rate defined doesn't slip through silently: it stays out of the close, with a warning, until someone sets the price.

Step 3: close, with a cutoff date

Closing means turning a client's open hours into a billing document, up to a cutoff date. Three precautions:

  1. Pick a fixed date. "Through the last business day" or "through the 25th." A close without a routine gets pushed to later.
  2. Check the preview before confirming. It shows hours and amount per task. This is where the mistake shows up.
  3. Lock what was closed. An hour corrected after billing is the origin of disputes.

In Tasskee, the close gets a sequential number, freezes the rate of each hour, and locks the entries against editing. The document comes out as a PDF or CSV, with detail per task, and you choose whether the client sees only the total per task or each entry. Cost and internal rate name never appear on it. The invoice (nota fiscal) is recorded in the close, but Tasskee does not issue invoices: you issue it in your own system and store the number in the close.

Step 4: get paid and pay

On the client side

Once issued, the close goes into the "issued, receivable" queue, and you mark it as received when the money lands. That way, what's outstanding doesn't get lost in an email thread.

On the side of people paid by the hour

For the freelancer and the contractor paid by the hour, the statement works as the mirror of the close: through the cutoff date, with the preview per task, and with the contractor's receipt or invoice when marking it as paid. The person sees their own statements and what they're owed, and never the amount charged to the client. The two queues are independent: an hour may be billed to the client and still payable to the professional, or the other way around.

Close the month without opening the spreadsheet

Log on tasks, set the rates, and generate each client's close and each contractor's statement. The 15-day trial unlocks everything, no credit card.

Explore the Hours module

A numerical example

A small agency, with a website project for a client. The numbers are made up, but the math is what you'd do. In the month, the following were logged:

PersonHoursBilled to clientPaid to professional
Designer (freelancer)42 hR$ 120/h = R$ 5,040R$ 70/h = R$ 2,940
Developer (freelancer)58 hR$ 160/h = R$ 9,280R$ 95/h = R$ 5,510
Total100 hR$ 14,320R$ 8,450

The month's margin is R$ 14,320 minus R$ 8,450, or R$ 5,870, about 41% of the amount billed. Now, the three leaks the method prevents:

  • Unlogged hours. If the developer forgot 5 hours in the month, that's R$ 800 the agency worked but didn't bill (5 × R$ 160), and R$ 475 the contractor wouldn't receive (5 × R$ 95).
  • Hours at the wrong rate. Suppose the developer's agreed rate went up from R$ 160 to R$ 180 on the 1st, but the spreadsheet kept the old amount. Over 58 hours, the difference is R$ 1,160 (58 × R$ 20). With the effective date and the impact preview, the adjustment takes effect when it should.
  • Warranty hours billed by mistake. If 6 hours of fixing errors in your own work are marked "do not bill," they stay in the cost (R$ 570 in payouts), but drop out of the billing. The month's real margin falls to R$ 5,300 (R$ 5,870 minus R$ 570), and you see the cost of the warranty instead of hiding it.

A month's routine, in five dates

A good method is one that fits into a routine. A simple suggestion for those who close once a month:

  • Every Friday: each person checks their own hours for the week. Five minutes, on the My hours screen.
  • The 20th: the manager looks at hours with no rate defined and tasks with no entries even though they moved forward.
  • The 25th: preview of each client's close, with a per-task check.
  • Last business day: generate the closes, send them to the client, and record the invoice issued.
  • The 5th: generate the statements for people paid by the hour and pay them, attaching the receipt.

The dates are just an example: what matters is that they're always the same, so the team and the client know when to expect what. A predictable rhythm also helps in the conversation with a client who questions an hour, because the close always arrives on the same day and in the same format.

What Tasskee does and doesn't do

  • Does: time logging on tasks, rates by project and type, close for the client (PDF and CSV), statement for people paid by the hour, recording of the invoice and payment number, and margin per project per month.
  • Doesn't: issue invoices, track electronic time clocks, or calculate CLT payroll (Brazil's formal employment payroll).
  • Plan: logging hours and My hours are on Start; Analysis, Rates, To bill, and To pay are on Pro and Max.
  • Permissions: seeing the billed amount, seeing the cost, setting rates, and closing are four separate permissions.

Before you start

If your operation still bills with a spreadsheet, the per-project hours spreadsheet template is a good starting point for defining which columns matter. To understand the concept behind it, the timesheet guide explains the variations. And for an agency that mixes many clients, see how to organize 20 clients at the same time.

Contact us