A week of work trapped in Calendar, Toggl screenshots, Slack timestamps, and "I think Tuesday was Client A" notes is not billable yet. It is a pile.
Here is the workflow I use when someone dumps messy time logs and wants a clean hours-by-client sheet back before they invoice.
What "good enough" looks like
- Every billable block lands on a named client (or "unassigned")
- Hours are numbers you can sum, not vibes
- Date + short description so the client can recognize the work
- Totals by client and a grand total on one skim
- Gaps and overlaps flagged so you do not double-bill by accident
Intake checklist
- The raw dump (CSV export, screenshots, calendar print, notes app list, voice memo transcript)
- Client name list (even rough nicknames — you will normalize later)
- Billing unit (hour / 15-min / day) and rounding rule they already use
- Timezone and date range for this pass
- Anything non-billable they want tagged separately (admin, sales, learning)
The pass order that saves time
- Normalize the dump — one row per block: date, start/end or duration, raw label, source.
- Map labels to clients — collapse nicknames, project codes, and Slack channel names into a client column.
- Convert to hours — compute duration; apply their rounding rule once, consistently.
- Split mixed blocks — if one entry spans two clients, cut it; do not guess silently.
- Flag problems — overlaps, missing dates, 0-duration rows, "misc" that ate half the week.
- Build the sheet — detail tab + client summary + grand total.
- Hand back with open questions — anything that would change the invoice if answered wrong.
Sheet sections that work
| Tab / section | What goes here |
|---|---|
| Detail | Date, client, hours, description, source |
| By client | Client, total hours, % of week |
| Flags | Overlaps, unassigned hours, odd outliers |
| Notes | Rounding rule used, timezone, open questions |
Common traps
- Leaving project codes uncleared so the client cannot read the invoice
- Mixing billable and non-billable without a tag
- Rounding each tiny fragment differently so totals drift
- Dropping "quick Slack help" that was actually billable
- Shipping a pretty chart with no row-level detail the client can dispute calmly
Soft handoff
When the sheet is done, send:
- The hours-by-client spreadsheet (detail + summary)
- A one-line list of unassigned or flagged hours
- One suggested next step (invoice as-is, answer mapping questions, or send the next week's dump)
That is the whole job. No full bookkeeping engagement required for a weekly cleanup pass.
I do this as a 24-hour DFY service for freelancers and small businesses ($12 for messy time logs → hours-by-client sheet). Shop: https://brittanybonds.gumroad.com/l/hourssheet — code ADMIN12 for \$2 off. Full catalog: https://brittanybonds.gumroad.com/ and https://brittany-bonds.github.io/
Top comments (0)