The mid-hours checklist I use so an hours-by-client sheet stays honest
The same Tuesday block pasted from Calendar and Toggl, both summed. Client B work folded into Client A's day because the channel name looked similar. "About three hours somehow" locked as 3.0. Two overlapping Zoom blocks counted as six hours for one person. A Misc bucket that ate half the week. Last month's export still greening this invoice. That is not mid-hours truth. Mid-hours is where folklore becomes a fake hours sheet — double-counted blocks, client mashups, vibe hours, overlap inflate, unassigned dumping, and a pretty total pretends the dump agreed with itself.
I am a freelancer admin helper. I turn messy time logs into a clean hours-by-client sheet. I am not a CPA, bookkeeper, lawyer, or tax advisor — and this is not financial, tax, legal, bookkeeping, or invoicing advice. It is the checklist I run mid-hours (and again before anyone treats the sheet as what was actually worked) so the hours-by-client sheet stays honest while logs are still arriving.
(If you want the full messy time logs → hours-by-client sheet workflow, see my earlier post: How I turn messy time logs into an hours-by-client sheet. This one is the second-pass checklist so double-counted blocks, client mashups, vibe hours, overlap inflate, unassigned dumping, and stale week resurrection do not quietly rewrite what was actually worked.)
What "honest" looks like mid-hours
- Every real block is one row — Calendar + Toggl of the same span are merged, not two billable lines
- Client mapping is evidenced (or labeled ask / guess / TBD) — similar channel names are not automatic merges
- Hours are numbers from start/end or duration — not vibes locked as 3.0
- Overlaps on the same person/day are flagged once — not summed twice
- Unassigned / Misc stays a small labeled bucket — not a dumping ground that eats the week
- Source note + date range exist — superseded or out-of-window exports are labeled stale, not still greening this invoice
- Nothing invented beyond what the dump supports — guessed fill-ins and phantom clients are not hours
If the only “hours sheet” you have is a confident Total and a folder titled “Tuesday was somehow Client A,” mid-hours honesty has already slipped.
The mid-hours checklist (run it before / while you clean)
Use this against the dump (Calendar export, Toggl/CSV, Slack timestamps, screenshots, notes app lists, voice memo transcripts, prior week sheet if any) before you paste everything into a pretty template and call the sheet invoice-ready.
1. Inventory the time dump
- [ ] Soft scope is named (this client set / this week window / this capture) — out-of-scope noise stays out or flagged
- [ ] Every source is listed once: file/export, capture date, person if known, notes
- [ ] Duplicate blocks of the same span under two sources (Calendar + Toggl, Slack + sticky) are labeled duplicate — not two billable rows for one span
- [ ] Superseded or out-of-window exports are labeled stale — not resurrected as this mid-hours sheet
- [ ] Anything clearly non-billable they want tagged stays tagged — do not invent it back into client totals
2. Lock clients, durations, and range before you trust the sheet
- [ ] Every client cell has evidence or is labeled ask / guess / TBD — remembered "that was definitely Client A" folklore is not the map
- [ ] Date range is locked or ask — mashup weeks stay labeled, not both greening one invoice
- [ ] Duration follows start/end or a named rounding rule — vibe hours stay guess / ask
- [ ] Billing unit and timezone are named once
- [ ] Skim test: you can answer “who worked what for whom, and what is still uncleared?” without reopening the dump
3. Kill double-counts / mashups / vibe hours / overlap inflate
- [ ] Same span under two sources is one row — not two open billable lines
- [ ] Overlapping blocks on the same person/day are flagged once — not summed as full duration twice
- [ ] Mixed-client blocks are split or labeled ask — do not rewrite Client B’s hour as Client A’s
- [ ] Missing client / Misc stays missing / ask or a small labeled bucket — do not invent filler so totals look full
- [ ] Assumptions are labeled assumption — do not rewrite them as settled hours
- [ ] Open questions stay open — do not mark them closed because the sheet looked tidier
- [ ] Invented fill-in hours the dump never supported stay guess / ask — not locked as the week’s total
- [ ] Stale export that belongs to another window stays stale — not still greening this invoice
4. Park open asks, tidy-sheet lies, and superseded notes
- [ ] Phantom clients and uncleared owners are either evidenced or labeled guess / ask / TBD — not locked because the page looked thin
- [ ] Open asks (unclear client, unclear duration, mixed-span blur, stale dump vs this window) sit in one list — not scattered across threads
- [ ] Superseded or canceled lines are archived once so they do not still look live
- [ ] Anything still incomplete stays incomplete — do not greenwash a mid-hours dump into a finished invoice sheet
Soft CTA
If you want the time logs cleaned into an hours-by-client sheet for you: messy logs in, invoice-ready sheet out in 24 hours — $12 on Gumroad. Code ADMIN12 takes $2 off. Full catalog: shop · GitHub Pages.
Not financial, tax, legal, bookkeeping, or invoicing advice. I organize the time dump; you own rates, invoices, and how you use the sheet.
Top comments (0)