How Time Entries Become Invoice Line Items
In this article
Logging time and billing for it are two separate actions, connected by a single field: which invoice a time entry is attached to. Understanding that one relationship explains most of what you need to know about how tracked hours turn into invoice line items, why an entry can only be billed once, and what "billable" actually controls.
What a Time Entry Actually Stores
Each logged time entry records a description of the work, the number of hours, an hourly rate, the date the work was done, whether it's billable at all, and — critically — which invoice group it's attached to, if any. That last field starts empty. A freshly logged entry isn't connected to any invoice; it just sits in your time log as a record of work done, waiting to be billed or not.
The "Billable" Flag Doesn't Mean "Already Billed"
It's easy to conflate these two ideas, but they're independent. Marking a time entry as billable just means it's eligible to be included on an invoice — it's a filter, not a status. An entry can be billable and still sitting completely unbilled weeks later if you haven't gotten around to invoicing that client yet. Conversely, a non-billable entry — internal admin time, a goodwill fix you're not charging for — is excluded from that filter entirely, so it never shows up as a candidate when you're building an invoice from tracked hours, no matter how much time has passed.
How Entries Get Attached to an Invoice
When you're ready to bill tracked time, you select the entries you want to include and mark them against a specific invoice group ID in a single action. This writes that invoice group ID directly onto each selected time entry — the entries themselves become the record of what got billed where, rather than the invoice separately tracking which entries it pulled from. Once an entry has an invoice group ID attached, it's no longer sitting in the unbilled pool; the next time you go to build an invoice from tracked hours, that entry won't appear as available, because it's already spoken for.
Why This Prevents Double-Billing
Because the invoice group ID lives on the time entry itself, not on some separate join table that could fall out of sync, there's no scenario where the same hour of work gets attached to two different invoices by accident through the normal billing flow. If you try to bill a client for tracked hours and an entry was already marked against a previous invoice, it simply won't be in the list of what's available to select — the system doesn't need to cross-check for duplicates after the fact, because the entry's own record already reflects that it's spoken for.
What Happens If You Need to Un-Bill an Entry
If an invoice gets voided or you need to move a time entry to a different invoice, the fix is to clear the invoice group ID off that entry, which returns it to the unbilled pool. This is a manual correction rather than something that happens automatically when an invoice is deleted or its status changes — the time entry doesn't know, on its own, that the invoice it was attached to no longer exists or was cancelled, so it's worth checking your time log after voiding an invoice that had tracked hours billed against it.
Hourly Rate Is Captured at Entry Time, Not Invoice Time
The rate stored on a time entry is set when the entry is logged, not pulled fresh from your current rate settings when you eventually invoice it. If you raise your hourly rate next month, entries logged last month under the old rate still bill at the old rate when you get around to invoicing them — the rate travels with the entry, not with the client or the invoice.
Frequently Asked Questions
Can I bill time entries from multiple dates on one invoice? Yes. There's no requirement that entries share a date, a week, or any particular grouping — you select whichever unbilled, billable entries you want, regardless of when they were logged, and mark them against the same invoice group in one action.
What happens to a time entry if I delete the client it's associated with? The entry's link to that client is set to empty rather than the entry itself being deleted, so your historical time log and billing record stay intact even if the underlying client record is removed later.
Does marking an entry non-billable after it's already been invoiced do anything? No — the billable flag only affects whether an entry shows up as a candidate for a future invoice. It has no effect on an entry that already has an invoice group ID attached; that entry is already billed regardless of how the billable flag is set afterward.
Related Articles
Client Statement vs. Accountant Report: What's the Difference
Two reports pull from the same data but serve opposite purposes — one is safe to hand to a client, the other very much isn't.
How the Reusable Service Catalog Speeds Up Invoicing
Why editing a rate in your service catalog never rewrites invoices you've already sent, and how the save-or-update logic actually works.
What's Actually Inside Your Account Data Export
A full breakdown of what the account data export includes, what it deliberately leaves out, and how it's generated on demand.
How the Accounts Receivable Aging Report Buckets Your Invoices
The exact day thresholds, currency grouping, and client-matching logic behind the aging report — and what it deliberately excludes.
How Discounts Are Applied Before Tax on Your Invoices
Tax is calculated on the discounted amount, not the original subtotal — a discount reduces your tax bill too, not just the price the client pays.