Last updated November 6, 2026
To track billable hours by project, give each project its own code before work starts, make every time entry name one project, record the date, person, task and hours, and mark each entry as billed when it reaches an invoice. Totals per project then show what's been worked, billed and left unbilled.
The general rules for recording hours are in how to track billable hours. This guide covers what changes when the project is the unit you report on.
Why track billable hours by project rather than by client?
Tracking billable hours by project matters because one client can have several jobs on different terms, and a client-level total hides what each one is doing. Here's an invented example: a client has a fixed-fee website project with a 40-hour budget and a support arrangement billed by the hour. In one month you log 60 hours for that client.
By client, 60 hours looks like a good month. By project, it's 52 hours on the website, which is 12 over a budget nobody will pay for, and only 8 hours you can bill. Those call for different conversations, and a client total prompts neither.
How do you set up a project for time tracking?
Set up a project for time tracking by writing one short record for it before anyone logs an hour. This is all a small firm needs:
| Field | Example | What it decides |
|---|---|---|
| Code | P-105 | What people type on each entry. See project numbering |
| Client | Alder Foods | Whose invoice it goes on |
| Billing basis | Time and materials, capped | Whether the hours are billed or only measured |
| Rate | €110 an hour | What each billed hour is worth |
| Hours budget | 80 | The early warning |
| Status | Open | When it says Closed, nobody should log to it |
Status does more than it looks. Without it, people keep logging to the last project they remember, and hours land on a job that was invoiced and closed in June.
What goes in a project time entry?
A project time entry needs the date, the person, the project code, the task, the hours, a billable flag and, later, the invoice number. Two rules keep it honest:
- One entry, one project. If a day covered three projects, it's three entries.
- No code, no guessing. Work that belongs to no project goes on an internal code, never on the nearest open project.
Keep non-billable project time too, such as rework or an internal review, flagged as such. You can't charge it, but it's part of what the job took. The rules for that flag are in billable vs non-billable hours.
How do you see billed and unbilled hours per project?
See billed and unbilled hours per project by keeping one running table, one row per project, rebuilt from your time entries each month. In this invented table, every row must satisfy one sum: worked equals billed plus written down plus unbilled.
| Project | Rate | Hours budget | Worked | Billed | Written down | Unbilled | Budget left |
|---|---|---|---|---|---|---|---|
| P-104 Audit | €90 | 60 | 52.5 | 40.0 | 1.5 | 11.0 | 7.5 |
| P-105 Rebrand | €110 | 80 | 78.0 | 64.0 | 0 | 14.0 | 2.0 |
| P-106 Support | €75 | none | 17.25 | 17.25 | 0 | 0 | n/a |
Each column tells you to do something:
- Unbilled: P-104 has €990 of work waiting to be invoiced (11 hours at €90) and P-105 has €1,540 (14 at €110). That's €2,530 of work you've done and not asked for. If you carry it in your accounts, it belongs on a WIP report.
- Budget left: P-105 has used 97.5% of its hours. If it's capped, warn the client before you reach 80, and get any extra agreed first.
- Written down: P-104 gave away 1.5 hours. That's nothing on one project. The same reason recurring across ten projects means your estimates need work, as write-down vs write-off explains.
On a fixed-fee project the Billed column doesn't apply, because the invoice bills the fee or a stage of it. Keep Worked and Budget left, and use the guide to budget against actual hours.
How do you stop project hours being billed twice or missed?
Stop project hours being billed twice or missed by writing the invoice number on each entry when it's billed, and running the sum above before every billing round. An entry with a number has been billed. An entry without one hasn't, and it's still there next month.
Fix mistakes in order of how far they've travelled. Before billing, recode the entry to the right project. After billing, leave the entry alone and correct the invoice properly, with a credit note or a corrected invoice, because the time record should keep agreeing with what you sent.
Tracking hours per project in ERPFlow
ERPFlow doesn't have a timer or timesheets today. Time tracking, including converting tracked time into invoices, is coming soon. It also has no project rates or budgets, no per-person time reports and no billed flag on hours, so the running table above stays in your spreadsheet.
What ERPFlow does do today is keep hours against a project. How projects work has the full tour:
- The project: a project is a board with columns you name. Link it to a customer and it appears on that customer's record.
- The hours: each card has a time spent field, typed in as hours and minutes. The project list totals cards and time spent for each project, archived cards included, and the customer's Projects tab totals them across boards.
- The limits: a card holds one figure, with no date and no split by person, so use one card per task or per billing period.
- Keeping billed and unbilled apart: add columns such as "To invoice" and "Invoiced" and move cards across. The board doesn't total a column, but the CSV export gives each card's project, column and time spent in minutes, which a spreadsheet can add up.
- Billing it: card time doesn't become invoice lines. Read the total, then on the invoice pick a service that has your hourly price and type the hours as the quantity. You can link the invoice to the project under Linked documents.
Unlimited projects are on every plan, though the Free plan caps cards at 10 in total, archived ones included.