Timesheets and billable hours in a web agency
In a web agency the hour is the unit of production, and the only thing that ever reaches an invoice. Yet most agencies cannot say what share of the hours they pay for is billable. Below: how timesheets and billable hours work in a web agency — utilisation rate, role-based rates, the path from timesheet to invoice, and what the law expects on file.
From hours to invoice, in short
- Log time against a project and a deliverable, never against “miscellaneous”.
- Mark every hour billable or non-billable as you log it, not at month end.
- Apply the rate of the role that actually did the work, not an agency-wide average.
- Approve the monthly timesheet — it becomes the supporting document behind the invoice.
- Generate the invoice from the approved hours and send it through RO e-Factura.
Utilisation rate: the number nobody calculates
Utilisation is the share of billable hours in the hours you pay for. Calculate it per person, per month: it tells you whether the agency is producing or just busy.
Worked example: a developer has 168 paid hours a month and 96 of them are billable — the rest goes to internal meetings, quoting, hiring and learning. Utilisation is 57%.
For an 8-person agency with 118,000 lei of monthly costs and an average rate of 150 lei an hour, break-even is 98 billable hours per person, i.e. 58%. At 96 hours you are losing 2,800 lei a month — with everybody flat out.
- Keep non-billable hours in categories: internal, quoting, warranty, learning.
- Utilisation above 80% sustained for months is not performance — it is incomplete logging, or burnout.
- Warranty hours (fixes after delivery) are non-billable, but attribute them to the project that caused them.
- Quoting is a cost of sale: measure it, so you know what a won quote actually costs you.
Table: role-based rates and what they bring in
An agency-wide average rate hides the one thing you need to see: who did the work. The table shows monthly revenue at 100 billable hours, per role.
Hourly rate per role and revenue at 100 billable hours
| Role | List hourly rate | Revenue at 100 hours |
|---|---|---|
| Junior | 90 lei | 9,000 lei |
| Mid-level | 150 lei | 15,000 lei |
| Senior | 200 lei | 20,000 lei |
| Account manager | 180 lei | 18,000 lei |
| Senior logged at the junior rate | 90 lei billed | 11,000 lei lost |
Supporting documents: accounting law and e-Factura
An invoice that says only “web services — 12,000 lei” is hard to defend. Romanian accounting law (Legea 82/1991) requires every transaction to rest on a supporting document, and for billed hours that document is the approved monthly timesheet.
Since 1 July 2024, B2B invoices between companies established in Romania must be sent through the RO e-Factura system (OUG 120/2021, extended by Legea 296/2023). In practice the invoice goes out in a structured format, while the hours breakdown stays in the agency's records and in the monthly client report.
- Keep the approved timesheet — project, role, date, hours — behind every invoice line.
- Break the invoice down by project or deliverable, not into one empty line.
- Send the B2B invoice through RO e-Factura and keep proof of transmission.
- Keep the hours on file after payment too — in an audit or a dispute, the timesheet is your only argument.
Common mistakes
- Filling the timesheet in on Friday from memory: you lose 10% to 20% of the real hours.
- One average rate for the whole agency: you never see who is working below rate.
- Non-billable hours dumped on a project with no category: the project looks unprofitable, with no explanation.
- Invoicing from estimates instead of logged hours: the gap becomes a permanent gift.
- Time tracking separated from invoicing by a monthly CSV export — the exact place hours go missing.