DEV Community

Brittany Bonds
Brittany Bonds

Posted on

How I turn messy time logs into an hours-by-client sheet

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

  1. The raw dump (CSV export, screenshots, calendar print, notes app list, voice memo transcript)
  2. Client name list (even rough nicknames — you will normalize later)
  3. Billing unit (hour / 15-min / day) and rounding rule they already use
  4. Timezone and date range for this pass
  5. Anything non-billable they want tagged separately (admin, sales, learning)

The pass order that saves time

  1. Normalize the dump — one row per block: date, start/end or duration, raw label, source.
  2. Map labels to clients — collapse nicknames, project codes, and Slack channel names into a client column.
  3. Convert to hours — compute duration; apply their rounding rule once, consistently.
  4. Split mixed blocks — if one entry spans two clients, cut it; do not guess silently.
  5. Flag problems — overlaps, missing dates, 0-duration rows, "misc" that ate half the week.
  6. Build the sheet — detail tab + client summary + grand total.
  7. 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)