Utilization Tracker
Utilization stops being a guess on the Monday you find out, and becomes a number you saw on Friday.
Running Harvest? Use
utilization-tracker-harvestinstead — same report, read from the API rather than a sheet somebody re-keys.
What it does
Reads the trailing 7 days from your TimeLog sheet and reports, per person:
- total hours, billable hours, utilization against your target, and realized revenue at the logged rate
- a firm total line
- anyone below target, and anyone over capacity — the second one matters as much as the first
- hours rolled up by client, so you can see where the week actually went
It also counts rows it had to skip because the date or hours would not parse, rather than silently dropping them.
No AI in this workflow at all
Utilization is a number a partner acts on — a conversation with someone about their week, or a decision to hire. It gets computed in python from logged hours and a rate card, or it does not get produced. There is no model in this pipeline and no estimate anywhere in it.
The honest limit
This measures logged time. Hours nobody entered are invisible to it, so a low utilization number means one of two things: a slow week, or an unlogged one. It is a prompt to go and ask, not a verdict on anybody.
If logging is the actual problem, the fix is upstream — pair this with timesheet-collector or the timesheet-reminder workflow, which chases only the people who have not submitted and only on their working days.
Setup
1. Google Sheet
Tab TimeLog with this header:
| person | date | client | engagement | hours | billable | rate |
|---|---|---|---|---|---|---|
- One row per time entry
billable:yes/no(y,true,1andbillableall count as yes)rate: the billing rate for that line. Blank means the line earns 0, which is what you want for internal time- Dates in
YYYY-MM-DD
2. Credential + contact
Replace the placeholders:
- <<GOOGLE_WORKSPACE_CREDENTIAL>> — Google Workspace credential with Sheets read scope
- <<TIMELOG_SHEET_ID>> — the sheet ID from its URL
- <<UTILIZATION_TARGET>> — the target percentage, e.g. 65
- <<WEEKLY_CAPACITY_HOURS>> — hours in a full week, e.g. 40
- <<PRACTICE_LEAD_PUBLISHER>> — who receives the report
3. Schedule
Weekly, Friday afternoon or Monday morning. Daily works if you are actively managing a crunch.
Customization
- Window.
WINDOWin thecomposetask, in days. 28 gives you a monthly view. - Target and capacity. The two placeholders above. Set capacity to the billable-day reality, not the contractual one — a 40-hour week with 5 hours of internal meetings has a capacity of 35 for this purpose.
- Per-person rates. Rate lives on the time entry rather than on the person, so a consultant billed at a different rate on a fixed-fee engagement is just a different rate in that row.
- Realization vs utilization. This reports realized revenue at the logged rate. To compare against standard rates, add a second rate column and print both.
Source
workflow.iml