freelancingmultiple clientsproject trackinginvoicingguide

How to track time across multiple clients as a freelancer

Juggling four clients in a single afternoon makes manual timesheets hopeless — you'd spend more time logging than working. Here's how to keep each client's hours separate automatically, so every minute lands on the right project and the right invoice.

Per-client time lanes for Acme, Beta and Gamma — tracking time across multiple clients automatically

The multi-client problem

Solo freelancers rarely work one client at a time. A normal afternoon is Acme's
API for 40 minutes, a quick fix on Beta's site, an hour back on Acme, then a
call and some research for a new Gamma project. With a manual timer you'd be
starting and stopping four or five times an hour — and the moment you forget
once, two clients' time blurs together and someone gets mis-billed.

The fix isn't more discipline. It's making the project the thing that's
tracked, not the timer.

Step 1: give each client a project

Create one project per client (or per engagement, if a client has several).
Each project is where that client's time, totals, and invoices live. Projects
link to a client record and a rate, which is what makes per-client billing work
later.

Step 2: map work to projects once

This is the setup that makes everything automatic. For each project, you define
what counts as that client's work:

  • Watch paths. Point the desktop client (macOS, Windows, Linux) at the
    directories for that client — ~/code/acme/ to the Acme project, ~/code/beta/
    to the Beta project. Editing a file under a path routes that time to the right
    project with no action from you. On a server, the Linux CLI does the same over
    SSH.
  • URL patterns. In the browser extensions (Chrome, Firefox, Edge, Safari),
    map URLs to projects: github.com/acme-co/* and Acme's staging domain to
    Acme; Beta's admin panel to Beta. Research and web-app work get routed too.

You do this once per client. After that, switching between them during the day
needs zero timer management — opening a different repo or tab starts the correct
session on its own.

Watch paths and URL patterns on the left — code directories and domains — mapped by connecting lines to Acme, Beta and Gamma projects on the right

Step 3: let the day route itself

Now the messy afternoon sorts itself out:

  1. You edit a file in ~/code/acme/. A session opens on Acme.
  2. You jump to Beta's site to check a bug. A separate session opens on Beta.
  3. You go back to Acme's repo. Acme picks up again.
  4. You break for a call. After the idle window (default 15 minutes with no
    in-scope activity) the open session closes, so the gap isn't billed to
    anyone.

Each block landed on the right client without you touching a stopwatch. If two
threads genuinely overlap and you want to be deliberate, pause/resume is one
click.

Step 4: see where the week actually went

On the dashboard you get per-client and per-project totals, plus a calendar and
reports view. This is the part that's almost impossible to reconstruct by hand
across several clients: at a glance you can see Acme took 11 hours this week,
Beta took 3, and the new Gamma scoping ate an afternoon — before you've written
a single invoice.

A this-week-by-client dashboard panel with horizontal bars: Acme 11h 02m, Beta 3h 08m, Gamma 3h 55m, each ready to invoice at its own rate

Step 5: invoice each client separately

Because every session is already tagged to a project, and each project links to
a client and a rate, you generate a per-client invoice from exactly that
client's captured hours. No untangling a shared timesheet, no deciding after the
fact which of Tuesday's blocks were Acme's. Each client's line items come
straight from the time that routed to their project.

What it doesn't ask of you

No per-switch timer babysitting. No screenshots or keystroke logging — capture
is file paths and URLs, auditable in plain text. And if you're moving over from
a spreadsheet or another tracker, CSV import brings your existing per-client
history in so nothing is lost.

The takeaway

Multi-client tracking breaks when it depends on you remembering which timer is
running. Map each client's repos and URLs to a project once, let the right
session start itself as you move between them, and bill each client from the
hours that already routed to them. The afternoon can be as fragmented as it
really is — the timesheet stays clean.

Frequently asked questions

How does my time get split between clients automatically?

You map each client's directories and URL patterns to a project once. After that, editing files under a path or visiting a matching URL routes that time to the right client's project with no manual switching.

What if I switch between clients several times an hour?

That's the case automatic tracking handles best. Each switch into a different repo or tab starts the correct session on its own, so there's no timer to start and stop every few minutes.

Can I see how much time each client took this week?

Yes. The dashboard shows per-client and per-project totals, plus calendar and reports views, so you can see where the week went before writing any invoices.

Can each client be billed at a different rate?

Yes. Each project links to a client and a rate, so you generate a separate invoice per client from the hours that routed to their project.

I already track clients in a spreadsheet — can I bring that in?

CSV import brings your existing per-client history in, so past entries sit alongside the automatically captured sessions.