Time Tracking That Agencies Actually Bill From, Not Just a Stopwatch
Imagine a small dev agency's project lead trying to close out a retainer client's month. She's got a rough sense of how much time the team put in, a few sticky notes, and one dev who "thinks it was about 30 hours but wasn't really tracking it." That's not a billing number. That's a guess dressed up as one.
A lot of time-tracking tools solve the wrong problem. They make it trivially easy to start a timer and trivially easy to forget you started it, or to log time in a format that has no idea which project it belongs to, whether it's billable, or what it should show up as on an invoice six weeks later. The stopwatch works. The billing doesn't.
Three ways to log time, because agency work doesn't happen one way
Nobody works the same way for eight straight hours. Some tasks are start-stop-focus work where a running timer actually makes sense. Some are quick, done-before-you'd-finish-starting-a-timer tasks that are better logged after the fact. And some people genuinely work better in short bursts with enforced breaks.
SparkyProjects supports manual entry, a start/stop timer, and Pomodoro-style logging, and — this matters for a small agency watching every line item on its own subscription — all three are free on every plan tier. There's no "upgrade to unlock the timer" moment waiting for you. You pick whichever mode fits the work in front of you, entry by entry, not as a company-wide policy decision.
A manual entry needs a project, and — if it's worth attributing to a specific piece of work rather than the project as a whole — a task within it, along with hours, a date, whether it's billable, and an optional note. That's genuinely the whole form. No custom fields nobody fills in, no mandatory categorization scheme that only makes sense to whoever designed it.
The part that actually makes it "for billing," not just "for logging"
The billable flag on each entry is doing more work than it looks like. Every hour logged carries an explicit yes/no on whether it's billable, which means at invoicing time nobody has to reconstruct that judgment call from memory — it was made once, at the moment the work happened, by the person who actually did it. That's the difference between time tracking as a diary and time tracking as a billing input.
It also means reports split cleanly. A fixed-price project's time entries tell you about margin, not invoiceable hours — you already agreed to a number regardless of how long it actually takes. A time & material project's billable entries are the invoice, more or less directly. Mixing those two questions on one chart tells you nothing useful; keeping the billable flag on the entry itself is what makes it possible to ask each question separately later.
Time entries get locked, and that's a feature
Here's something that surprises people coming from a looser tool: once a time entry is part of a submitted timesheet, it's locked. You can't quietly edit an hour count after the fact, even your own. If a number needs fixing, the timesheet has to be rejected first, which unlocks the entries underneath it for correction and resubmission.
That sounds like friction until you think about what it's protecting. A billing number that anyone can silently edit after a client invoice has already referenced it isn't really a record — it's just the current opinion. Locking entries once they're submitted means the number on a report today is the same number it'll be in a dispute three months from now, unless there's an actual reject-fix-resubmit paper trail showing why it changed.
What this looks like day to day
Back to the project lead closing out that retainer month: instead of sticky notes, she opens Time, switches to "Everyone" (assuming she has permission to view all time, not just her own), and sees every entry — project, task, date, duration, billable status, and whether it came from a manual entry, a timer, or a Pomodoro session — already there, because each person logged it as they went instead of reconstructing it from memory at month's end. The retainer's utilization against its monthly hour allowance is a report away, not a spreadsheet she has to build herself.
How to do this in SparkyProjects
Open Time from the sidebar, choose Manual, Timer, or Pomodoro depending on how you're working right now, and log the hours against the right project (and task, if it matters at that level of detail). Mark it billable or not as you go — don't leave that decision for later. If you need to see the whole team's time rather than just your own, use the "Everyone"/"Mine" toggle, permissions allowing. And if an entry needs correcting after it's part of a submitted timesheet, that has to go through a reject first — see how submission and approval work as a full loop in our earlier post on that.
Full plan details, including what's included at each tier, are on the SparkyProjects features page.
None of this is complicated. It's just the difference between a tool that records what happened and a tool that happens to have a start/stop button. A small agency living off billable hours needs the former, even when the latter is easier to build.