invoicing
How to invoice from timesheets without losing hours or arguing with clients
A step-by-step method for turning timesheets into accurate invoices: billable rules, approval, unbilled hours, line grouping, and automating each period.
By SparkDesk team
If you bill by the hour, your invoice is only as good as your timesheets. Hours that never get logged are revenue you gave away. Hours that get logged but never billed are worse, because you did the work, recorded it, and still did not get paid for it. And hours billed without a review step are how you end up in a long email thread about why “internal sync” appears on a client invoice.
This guide covers a general method that works in any tool, then shows how SparkDesk handles each step.
The method, in seven steps
1. Decide what is billable before anyone logs time
Write down the rules once, and share them with the team:
- Which activities are billable (design, development, strategy calls) and which are not (internal meetings, sales calls, rework caused by your own mistakes).
- The rate for each project, and whether rates differ by role or task.
- The minimum increment (for example, 15 minutes) and whether you round.
- How travel and expenses are handled.
Most invoicing disputes start here, not at the invoice. A client who agreed to the rules up front rarely argues with an invoice that follows them.
2. Log time against the right project and task
Time should be logged daily, against the specific project and task, with a short description a client could read. “Homepage hero revisions, round 2” is useful. “Work” is not. Use a timer for focused work and manual entries for the rest.
3. Close the period and approve timesheets
At the end of each billing period (weekly, every two weeks, monthly), someone reviews the hours before they go anywhere near an invoice. The reviewer checks for:
- Entries on the wrong project or task.
- Non-billable work marked billable.
- Missing descriptions.
- Unusually large entries that deserve a question.
Approval is the gate. Only approved hours should be eligible for an invoice.
4. Pull every unbilled, approved hour for the client
This is where hours usually go missing. The safest approach is to invoice from a list of “approved and not yet billed” entries rather than re-reading timesheets. Anything left on that list after invoicing is a reminder that something is still owed.
5. Choose how to group the lines
Clients read invoices differently. Pick a grouping that matches the relationship:
| Grouping | Best for |
|---|---|
| One line per task | Most clients; shows where time went without overwhelming detail |
| One line per time entry | Clients who audit hours, or regulated work |
| One line for all hours | Retainer-style relationships where the total is what matters |
| One line per rate | Projects with several roles at different rates |
6. Review, adjust and send
Read the draft as the client will. Write down anything you discount so it is visible rather than silently removed. Attach a PDF, and use the same layout, terms and notes as the last invoice so clients recognize it.
7. Mark the hours as billed and record payment
Each billed entry should be marked as invoiced so it cannot be billed twice. When the client pays, record the payment against the invoice so your outstanding balance stays accurate.
A worked example
Here is a fictional example. A 3-person design studio bills a client monthly at a rate of 120 per hour (in whatever currency they invoice in).
- In September the team logs 46 hours on the client’s project.
- 3.5 hours are internal planning and marked non-billable.
- The project lead approves the timesheets for the remaining 42.5 billable hours.
- The invoice groups them by task: brand guidelines (18 hours), landing page design (16.5 hours), revisions (8 hours).
- Total: 42.5 hours at 120 equals 5,100, before tax.
If one designer’s timesheet is still waiting on approval at month-end, those hours stay on the unbilled list and can be added to the next invoice. Nothing is lost.
How SparkDesk does it
SparkDesk keeps projects, time, timesheets and invoices on the same client record, so each step above is a screen, not a spreadsheet.
Logging and approving time
Team members log time with a timer, manually or as a start and end range, against a project or task. Each entry carries a billable flag. Projects carry their own billing rate and budget.
Timesheets can require approval before hours are invoiced. Approvers review them in the approvals hub and either approve or return them with a comment. Until a timesheet is approved, its hours are not eligible for an invoice. The project’s Time tab shows unbilled hours, hours still waiting on approval and hours ready to invoice, so you can see at a glance what is holding up billing.
Generating the invoice from unbilled hours
There are two ways to bill hours manually:
- From the project’s Time tab, Invoice unbilled time creates a draft invoice from the approved, billable hours that have not been invoiced yet.
- From an invoice you are editing, the Unbilled hours picker lets you choose a project and pick specific time entries to add as line items.
Either way, you end up with an invoice you can review before it goes anywhere, and the hours are linked to the invoice lines so they no longer show up as unbilled. You review the draft, then send it by email with a PDF attached. When the client pays, you record the payment and its method. SparkDesk records payments; it does not collect them online.
Billing every period with a Flow
If you invoice the same clients every week or every month, you can hand the whole cycle to a Flow. SparkDesk includes a template called “Client timesheet and invoice (per period)”:
- Clip the Flow to the client’s project with the client’s cadence: weekly, every two weeks, twice a month or monthly.
- At the end of each period, the Flow opens the project timesheet and creates the invoice from the logged hours.
- Set Invoice layout to Clone last invoice to reuse its layout, terms, notes and settings, with dates moved to the new period.
- Choose whether each invoice is saved as a draft, issued, or issued and sent to the project’s contacts.
A clip can also run a few days before the period ends, which is useful for reminding the team to finish their timesheets. If a period was missed, Run for a past period backfills it. The Flows documentation covers the setup in detail.
Recurring invoices offer a similar option without a Flow: turn on Add the project’s unbilled hours, and each new invoice adds approved, billable hours not yet invoiced, grouped one line per task, one line per time entry, or one line for all hours.
Asking an AI assistant to do it
With SparkDesk’s MCP server connected to Claude or another assistant, you can ask in plain language: “Create a draft invoice for the Harbor project from its unbilled hours.” The assistant calls invoice_generate_from_hours, which builds a draft from the project’s unbilled, invoice-eligible time, and it can only do so if your role allows creating invoices. Read more in using Claude with your CRM via MCP.
Common mistakes to avoid
- Invoicing from memory. Always bill from the list of unbilled entries, never from a recollection of what the team did.
- Skipping approval when you are busy. The weeks you are busiest are the weeks entries go on the wrong project.
- Changing the invoice format every month. Consistency helps clients approve invoices faster.
- Not tracking time on fixed-fee work. Even if you do not bill hourly, hours tell you whether your quotes are right. If you bill in stages instead, see progress billing for service businesses.
See the projects and time tracking features for more detail.
Try it on your next billing period
Set up one project, log a week of time, approve it and generate the invoice. Start a 14-day free trial, no card needed.
