Turn Tracked Hours Into an Invoice
Paste your billable hours, set an hourly rate and client details, and get a formatted invoice with line items, tax, discount and totals. Everything runs locally in your browser.
About this tool
Timesheet to Invoice turns billable-hours notes into a formatted invoice. Paste one line per item using description | hours, description | hours | rate, YYYY-MM-DD | description | hours, or YYYY-MM-DD | description | hours | rate.
Hours can be decimal (3.5), hours/minutes (2h 30m), clock-style duration (2:30), or a start-end range (09:00-12:30, 9am-5pm). The tool prices each line, optionally rounds billing time up to an increment, applies a discount before tax, computes a due date from payment terms, and renders Markdown, plain text, CSV, or JSON.
Example input:
2026-08-03 | Landing page copy | 3.5
2026-08-04 | Bug fixes | 2h 30m
2026-08-05 | Client call | 09:00-10:15
At $120/hour, the example totals 7.25 hours, a $870.00 subtotal, and a $870.00 amount due before any tax or discount.
Limits and edge cases
- Maximum pasted timesheet size is 1,000,000 bytes and 500 billable rows.
- Rows are split with
|or tabs; commas are safe inside descriptions because CSV input is not required. - Per-row rates override the default hourly rate.
- Billing increments round each row up after parsing. Use
0to bill exact tracked time. - A blank issue date omits automatic due-date calculation. A due date you enter manually always wins.
- This produces text invoices only. It does not create PDFs, accept payments, store client records, or send email.
FAQ
Can I use different hourly rates on the same invoice?
Yes. Add a fourth field to a dated row or a third field to an undated row, such as 2026-08-03 | Rush support | 1.5 | 180. Rows without their own rate use the default hourly rate.
How does rounding work?
The rounding setting is a billing increment in minutes. If you choose 15, a 16-minute row bills as 30 minutes, while an exact 15-minute row stays at 15 minutes.
Can this merge repeated tasks?
Yes. Keep one line per entry, merge rows with the same description, or merge rows by service date. Merging happens before rounding so a grouped row rounds once.
Is this a legal invoice system?
No. It is a deterministic formatting helper. Review the output, add any legally required business or tax details, and keep your own accounting records.
Developer & Automation Access
Run it from the terminal
Same engine as this page, headless — via the gizza CLI:
gizza tool timesheet-to-invoice "2026-08-03 | Landing page copy | 3.5
2026-08-04 | Bug fixes | 2h 30m
2026-08-05 | Client call | 09:00-10:15"New to the CLI? Get gizza →
Open it by URL
Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:
https://gizza.ai/tools/timesheet-to-invoice/?entries=2026-08-03%20%7C%20Landing%20page%20copy%20%7C%203.5%0A2026-08-04%20%7C%20Bug%20fixes%20%7C%202h%2030m%0A2026-08-05%20%7C%20Client%20call%20%7C%2009%3A00-10%3A15&rate=120¤cy=%24&business=Ada%20Consulting%0A12%20Harbour%20Road%0Aada%40example.com&client=Globex%20Ltd%0AAccounts%20Payable%0A88%20Market%20Street&invoice_number=INV-001&issue_date=2026-08-14&due_date=2026-09-13&payment_terms=30&tax_label=VAT&tax_rate=0&discount_percent=0&round=0&group_by=entry¬es=Payment%20by%20bank%20transfer%20to%20IBAN%20GB00%20EXMP%200000%200000.%0ALate%20payments%20accrue%202%25%20per%20month.&format=markdownMachine-readable descriptor: tool.json — title + parameters JSON Schema for agents.
