billable.dev

Turn your git log into an invoice

Your commit history is a timestamped, self-described record of the work you did. Billable's importer turns it into invoice line items: paste the output of git log, get one line per day with your commit subjects as the description, set the hours and rate, done. It runs entirely in your browser. Nothing is uploaded.

Open the git log importer

How the importer works

The parser reads pasted git log output and detects the format on its own. It handles the default git log format (medium, full, and fuller variants), --oneline, branch decorations like (HEAD -> main, origin/main), --graph gutter characters, and ISO, RFC 2822, or default-style date strings. Merge commits — "Merge branch 'main'" and friends — are filtered out automatically, because they describe plumbing, not billable work.

Parsed commits are grouped by day, oldest day first, and each day becomes one draft line item. The description is built from your actual commit subjects:

Development — Aug 5 (4 commits): fix auth redirect loop; add webhook retry; harden signature check; deploy staging

Long days get truncated sensibly with an ellipsis rather than dumping forty subjects into one cell. Each day gets a prefilled hours suggestion — a floor of one hour, capped at an eight-hour workday — which exists to be corrected, not trusted. You set the real hours per day and one hourly rate, then add everything to the invoice. From that point on they're ordinary line items: edit, reword, merge, reorder, delete.

A worked example

Say you run this for last week (example output, shortened):

$ git log --since="2026-08-03" --until="2026-08-07" --oneline
9f3c2ad add retry with backoff to webhook worker
41b7e02 harden webhook signature verification
c88d10f fix auth redirect loop on expired session
7a92f4e migrate invoice PDFs to new template
2d05c1b add currency formatting for EUR and GBP
e63a99b fix rounding error in tax calculation

Paste the default-format version of that log (which carries dates) into the importer and you get draft line items like:

  • Development — Aug 4 (3 commits): fix rounding error in tax calculation; add currency formatting for EUR and GBP; migrate invoice PDFs to new template — 3 hrs suggested
  • Development — Aug 6 (3 commits): fix auth redirect loop on expired session; harden webhook signature verification; add retry with backoff to webhook worker — 3 hrs suggested

Bump Aug 6 to five hours because the auth bug ate the afternoon, set your rate, add to invoice. The whole thing takes under a minute, and the result reads like work a client can verify — because it is.

Step by step

  1. Run git log (default format) or git log --oneline for the billing period. Bounding with --since/--until and filtering with --author=you@ on shared repos keeps the output clean.
  2. Open the generator with the importer open (or click "Import git log" in the tool) and paste the output.
  3. Click Parse commits. Commits are grouped by day into draft line items with your subjects as descriptions.
  4. Set the hours for each day — the prefilled numbers are suggestions, not measurements — and your hourly rate.
  5. Add to invoice, then edit like any other line items. Print to PDF when the rest of the invoice is ready.

Commits are evidence, not hours

One thing this tool deliberately does not do: convert commit counts into billed time. A one-commit day can be eight hard hours of debugging; a twelve-commit day can be two hours of tidy refactoring. Plenty of billable work never touches the repo — calls, review, reading unfamiliar code. The git log supplies the description and the day grouping, which are the tedious parts; the hours come from your judgment or your time tracking. Any tool that pretends otherwise is generating fiction with your name on it. The reasoning behind that stance — and the manual method, if you'd rather wrangle the text yourself — is in the longer write-up: Turning Your Git Log Into an Invoice (and a Timesheet).

Why bill from your commits at all

Hourly invoices live or die on their line items. The client is paying for time they didn't observe, so the descriptions carry the trust. "Development — 16 hours" invites questions; "fix auth redirect loop; add webhook retry" answers them in advance, with wording written at the moment of the work rather than reconstructed on invoice day. It's also faster: the Friday ritual of staring at a blank timesheet becomes a paste and a parse. The surrounding invoice — numbering, dates, tax, terms — is covered in the developer invoice template guide.

FAQ

Which git log formats does the importer accept?
Two: the default `git log` output (including the medium, full, and fuller variants) and `git log --oneline`. It also copes with the mess that rides along — branch decorations like (HEAD -> main, origin/main), --graph gutter characters, and ISO, RFC 2822, or default-style dates. Merge commits are dropped automatically, since “Merge branch 'main'” is noise on an invoice.
Are my commit messages uploaded anywhere?
No. The parser is client-side JavaScript running in your browser — the same as the rest of Billable. Commit messages often contain project details a client or employer would consider confidential, so they never leave your machine. There is no server to send them to.
Does it turn commit counts into billed hours?
No, and it shouldn't. Commit count is evidence of what you did, not a measure of how long it took. The importer prefills a conservative suggestion per day (one hour minimum, capped at an eight-hour workday) purely as a starting point — you set the real hours for each day before anything is added to the invoice.
Can I edit the line items after importing?
Yes. Every generated item becomes a normal, fully editable line item: reword the description, change hours or rate, merge days, delete, reorder. The import drafts the invoice; you finish it.
What happens with --oneline output, which has no dates?
Commits without dates can't be grouped by day, so they land in a single combined line item with all the subjects joined. If you want day-by-day grouping, paste the default `git log` format instead — it carries the dates.
Does the git log import cost anything?
No. It's part of the free tool, along with printing to PDF, saving invoices in your browser, and CSV/JSON import and export. There's an optional Pro tier (from $4/mo) for branding, templates, and estimates, but the importer isn't gated behind it.

Your week is already written down.

Paste a log and watch it become an invoice — free, no account, and your commits stay on your machine.

Import your git log