Guide · 9-minute read
How to invoice hourly work cleanly.
Hourly invoicing is one of the easiest things to make harder than it needs to be. The math is straightforward; the friction is in inconsistent line items, surprising clients, and chasing payment after send. This guide walks through how to invoice cleanly.
Last updated May 27, 2026
Three invoice models, pick one as the default
Time-derived: every line is tracked hours × project rate. Clean when all work was tracked. The risk is forgetting flat fees that didn't get tracked.
Flat-fee: every line is a manually-entered description, quantity, and unit price. Clean for milestone-based or retainer billing. The risk is forgetting tracked work that should also be billed.
Mixed: tracked time pulls in as time lines; manual lines layer on for retainers, expenses, milestones, or anything you didn't track. This is the right default for most freelancers and small agencies — the spreadsheet path leads here anyway, so just start here.
Line item anatomy
A clean hourly line has four parts: description (what you did, in plain language the client recognizes), quantity (hours, with two decimal places), unit price (the project rate), and amount (computed). A clean flat-fee line replaces hours with a unit label ('engagement', 'milestone', 'monthly retainer') and quantity 1.
Avoid: cryptic project codes the client doesn't recognize, abbreviations only your team uses, line items with no description, or a single line item for the whole month ('Services rendered — $4,500'). Clients pay invoices they understand faster than invoices they don't.
Discount and tax, in that order
Apply discount first, tax second. Math: subtotal − discount = taxable amount; taxable amount × (1 + tax rate) = total. This is the universal convention; if your local tax rules differ, encode the difference in the tax rate (a 'discount before tax' system is fine for nearly every jurisdiction).
Show the discount as its own line so the client can read it. Hidden 'auto-discounts' embedded in line items create reconciliation work later — both for you and for their accountant.
Payment terms — Net what?
Net 15 (payment due 15 days after invoice date) is increasingly the default for service work. Net 30 is the corporate default and what enterprise clients usually expect. Net 7 is reasonable for retainers paid in advance.
Set the term per client when you onboard them — most billing tools have a 'default payment terms' field on the client record. Then due-date computation is automatic on every invoice and you don't have to remember.
Locking what you've sent
Once you send an invoice, the line items, the bill-to address, and the rates should be frozen for good. If your client renames their company next month, your old invoice still says the old name — that's correct behavior. The client's copy and your copy match. Always.
Tools that let you edit sent invoices are the wrong tools for this. The right model: sent = immutable. If you actually need to change a sent invoice, cancel it and reissue with a new number. The audit trail is preserved.
PO numbers when the client requires them
Corporate clients often require a purchase order number on the invoice. Add it to the client record once ('this client requires a PO'); the invoice form surfaces a PO field on those clients only, and the number prepends to the notes section.
Don't sneak it into a generic 'notes' or 'reference' field — accounts payable teams scan for it in predictable places, and a misplaced PO is the most common reason an invoice sits in a queue for 60 days.
Getting paid
Most invoice tools route payments through their own processor — funds sit with the tool for a few days, then transfer to you. This is fine for casual users; it's frustrating for businesses that need predictable cash flow.
Stripe Connect direct charges flip the model: funds settle directly to your Stripe account at the moment of payment. The billing tool never holds the money. Hoursmith uses this model on Studio and above; check whatever tool you're evaluating for the same property.
Following up without being annoying
The right cadence is one reminder around the due date, and one more 7-14 days after. Anything more frequent and you train clients to ignore your emails; anything less and balances drift to 90+ days.
A polite tone is more effective than an angry one. 'Just a friendly reminder, this invoice is due [date]. Let me know if anything's blocking it on your end' beats 'PAYMENT OVERDUE' in every population we've ever surveyed. Save the strong language for the third reminder, if it gets there.
How Hoursmith does it
How Hoursmith does it
Hoursmith's invoice builder defaults to the mixed model — pull every billable un-invoiced entry from a client, layer flat-fee lines on top. Discounts apply before tax automatically. Due date pre-fills from the client's default payment terms.
Sending freezes line rates and the bill-to snapshot for good. PO numbers surface as a field only on clients you marked as 'requires PO'. Online payment (Studio+) routes via Stripe Connect direct charges — the money lands in your own Stripe account, not ours.
Overdue reminders (Studio+) send through your BYO email if you've configured one, so they arrive from your domain. Manual offline payments (wires, checks) record the same way as online payments — single accounting path.