TinyHub
← The build log
Running the practice

From timesheet to invoice: closing the loop without double entry

The gap between 'I tracked my hours' and 'I sent the invoice' is where evenings disappear. Here's how to make the timesheet and the invoice the same source of truth — so billing is a review, not a rebuild.

You tracked your hours all month. You should be able to bill in five minutes. Instead, invoice day means exporting a CSV from one tool, retyping lines into another, cross-checking against your calendar, and second-guessing whether that Wednesday block was really billable. The hours existed the whole time — you’re just moving them by hand, and every hand-off is a chance to drop or fat-finger a number.

That gap between tracked and invoiced is pure overhead. Here’s how to close it.

Why the loop stays open

The timesheet and the invoice usually live in two different tools that don’t talk. So you become the integration: re-entering, reformatting, reconciling. Three taxes come with that:

The loop stays open because the two ends were never connected. Close the connection and the overhead disappears.

The principle: track once, in billable shape

The fix isn’t a better invoice template. It’s tracking your time in a shape that’s already an invoice line. If every block carries three things at capture time —

  1. which client it belongs to,
  2. which task or project it was, and
  3. whether it’s billable

then the invoice is just those blocks, filtered to one client and grouped. No transcription, because nothing moves between tools. The timesheet is the draft invoice.

That front-loads a tiny bit of discipline (see time tracking across clients) and removes a big monthly chore. It’s a good trade: seconds when you’re already in the task, versus hours at month-end when you’d rather be done.

A billing day that takes minutes

  1. Filter to one client, for the period. Every billable block for the month, in one list.
  2. Group into line items. By project or task, so the client sees “Website — 12h,” not forty raw timers. Itemised-but-summarised is the sweet spot: clear enough to trust, not so granular it invites nitpicking.
  3. Scan for anything odd. A suspiciously long block, a mislabel, a “was that really billable?” This is a review, not a rebuild — it’s fast because the data’s already right.
  4. Generate the invoice from those same blocks. Numbers match your timesheet because they are your timesheet.
  5. Mark the period billed so nothing gets invoiced twice next month.

Non-billable time still deserves tracking

Bill only what’s billable — but track more than that. Those admin, sales, and internal blocks aren’t on any invoice, yet they’re the clearest picture of where your unbillable time actually goes. Tracked (and flagged non-billable), they tell you your real effective rate and which clients quietly eat hours you never charge for. That’s a pricing conversation you can only have with data.

Closing the loop

When your timer already knows the client, the task, and the billable flag, the invoice stops being a separate act of data entry and becomes a filtered view of work you already recorded. That’s the whole idea behind TinyHub’s time and billing: track once, inside the right client’s workspace, and let the invoice assemble itself from what’s there.

If invoice day is the worst day of your month, it doesn’t have to be.

Follow the build

Occasional notes on building TinyHub in the open — what shipped, what's next. No spam, ever.

Stored in the EU, used only for TinyHub updates. Unsubscribe anytime.

You're in. Next build note lands in your inbox.