Time Tracking
Track time spent on tickets with timers, manual entries, and reports.
Spedy includes built-in time tracking so your team can log how much time they spend on each ticket. Use live timers for active work or add manual entries after the fact. Time data flows into reports and can be synced with external tools like MOCO.
Getting started with time tracking
Time tracking must be enabled by an Admin in your organization settings. Once enabled, timer controls appear on tickets and in the sidebar.
To enable it, go to Settings > Time Tracking and turn on the time tracking feature.
Using timers
Starting a timer
There are several ways to start a timer:
- Open a ticket and click the Start Timer button
- Use the timer controls in the sidebar
Only one timer can run per ticket at a time. You can have up to 10 concurrent timers across different tickets.
Stopping a timer
When you stop a timer, Spedy creates a time entry with the elapsed duration. You can optionally add a description of what you worked on before stopping.
To stop a timer:
- Click the Stop button on the ticket or in the sidebar
- Optionally add a description of your work
- The time entry is saved automatically
Viewing active timers
All your running timers are visible in the sidebar. Each shows the ticket reference, elapsed time, and a quick stop button.
Manual time entries
If you forgot to start a timer or need to log time retroactively, you can add manual time entries.
- Open the ticket you worked on
- Go to the Time section
- Click Add time entry
- Enter the duration and an optional description
- Save the entry
Duration formats
Duration fields — both the manual entry form and the quick-adjust input in the sidebar time widget — understand natural durations, not just plain minutes:
- Plain numbers are minutes:
10books 10 minutes. - Units and combinations:
1h 30m,2d,2w— whered = 8h(workday) andw = 40h(work week). - Subtract with
-: in the sidebar quick-adjust, a leading minus subtracts from your most recent entry, e.g.-5(5 minutes) or-1h.
There is no longer a 6-minute minimum: 5m books exactly 5 minutes.
Estimated hours
When creating or editing a ticket, you can set an Estimated hours value. This helps your team plan capacity and track whether work is staying within budget. The ticket detail view shows a comparison of estimated vs. actual logged time.
Time reports
View time reports from the Time section in the sidebar. Reports show:
- Time logged per ticket
- Time logged per team member
- Time logged per board
- Comparison of estimated vs. actual hours
Use the Time Log view under Issues to see a filterable list of all time entries across your boards.
Per-project billability
Each project has a Billability section under Project Settings → Time & Budget where you can control how time entries are marked.
Billability per ticket type
A link takes you to the per-ticket-type configuration. There you set whether new time entries are billable or not billable by default for each ticket type (feature, bug, epic, etc.).
Mark all project time as not billable
Click Mark all entries as not billable to retroactively set every time entry in the project to "not billable". This is useful for internal projects where you decide after the fact that no time should be invoiced.
- Entries that are already locked or billed in MOCO are skipped. Spedy shows how many entries were changed and how many were skipped.
- Requires the manage all time tracking permission.
- If MOCO is connected, the changed entries are re-pushed to MOCO in the background.
Fixed-price billing
When a ticket is marked fixed price and carries a budget, every hour beyond the budget is automatically set to not billable. Both fields live in the ticket's Properties -- see Tickets → Budget and Fixed Price.
How it is calculated
Your time entries are counted against the budget in booking order:
- Entries that still fit into the remaining budget in full stay billable.
- The booking that crosses the line is split: the part that still fits stays billable (the original entry shrinks and ends at the boundary), the remainder becomes its own entry right behind it -- not billable and flagged as over budget.
- Everything booked after that is fully non-billable.
If either half would be shorter than a minute, no split happens and the whole booking is capped instead.
With no budget set, the ticket's estimate is used. If the ticket has neither budget nor estimate, nothing is capped.
What is left alone
- Entries already invoiced in MOCO are never re-flagged. They do count against the budget.
- Entries you set to "not billable" yourself stay as they are and consume no budget.
- Any explicit manual decision wins: if you switch an automatically capped booking back to billable, it stays billable.
- Time arriving via the MOCO webhook is not touched -- MOCO is the source of truth there.
Raising the budget or turning fixed price off
If you raise the budget later or turn the toggle off, the automatically capped entries are released again. Manually set entries stay unchanged.
When it recalculates
Recalculation runs automatically when time is booked (manually and on timer stop, including bulk bookings), when MCP drafts are approved, when a duration changes, when an entry is deleted, and when the budget, the estimate or the fixed-price toggle changes.
What you see on the ticket
Alongside the booked hours, the ticket's budget summary reports how many minutes are non-billable and how many are over budget. A note like "3h 20m over budget – not billable" appears under the fixed-price toggle as soon as something was capped.
Working with MOCO
With MOCO connected, Spedy mirrors the budget (hourly rate × budget hours) and the fixed-price flag onto the ticket's project. Split bookings land as two activities -- billable and non-billable cleanly separated, with no manual rework. The same happens when you flip an entry's billable flag by hand: the entry leaves its old activity and moves into the matching one.
MCP time approval
When AI agents track time via MCP tools (e.g. timers_stop), the entries are not booked directly. Instead, they are created as drafts (source: MCP, status: Pending) and only counted after approval.
View pending drafts
Go to Time → Approvals. There you see all MCP-tracked time entries awaiting approval. A count badge on the tab shows the number. The dashboard and sidebar also show indicators when approvals are pending.
Approve, adjust, or discard
For each draft, you have three options:
- Approve — accept the suggested duration and book the entry (also to MOCO if connected)
- Adjust + Approve — change the duration before approving, e.g. from 45 to 30 minutes
- Discard — delete the draft without booking
Use Approve all to approve all pending drafts at once.
MCP time factor
Under Settings → Time Tracking, you'll find the MCP time factor setting (default: 1.0, range: 1–10). This factor multiplies agent minutes before the draft is created.
Example: With a factor of 2.0, 30 minutes of agent work appear as 60 minutes in the draft. The original value is preserved on the entry and visible in the approval view.
Why an approval workflow?
Agent time is not the same as human time. The approval step gives you control over how much time is actually booked before it flows into budgets, reports, and external systems.
Timer reminders
If people forget to start a timer, time gets booked late — or not at all. Timer reminders let an Admin nudge individual team members on their working days whenever no timer is running.
Enabling reminders per team member
Go to Settings → Time Tracking. In the Timer reminders section you'll see a list of all team members, each with a toggle. Turn the reminder on for the people who should be reminded.
The section only appears when time tracking is enabled for the organization and you have the manage all time tracking permission. Customers don't appear in the list and are never reminded.
Choosing the weekdays
Once the reminder is on for a person, a weekday picker (Mon–Sun) appears next to their toggle. Monday to Friday are selected by default. Click a day to turn it on or off — reminders only fire on the selected days. At least one day must stay selected.
What the team member sees
On a configured working day, when no timer is running, the reminder shows up in three places:
- A hint toast ("No timer running") with a link straight to time tracking. It appears on login and, while work continues without a timer, comes back at a calm interval — not on every click.
- A red exclamation badge on the time-tracking widget in the sidebar, visible even when the sidebar is collapsed.
- A warning line inside the widget as a standing hint for the day.
As soon as a timer starts, all three disappear.
If the previous working day wasn't booked at all, the hint escalates to a warning ("Last working day's time is missing") asking the user to book it by today at the latest.
Missing-days view
On the time overview under Time, a card at the top lists every working day of the current month that has no booked time yet — so you can close gaps before the month is finalized. The card only shows when the reminder is on for you and there are actually open days.
MOCO integration
If your organization uses MOCO for billing and invoicing, you can sync time entries automatically. See Integrations for setup instructions.
Keyboard shortcuts
When editing a time entry, you can save from any field with Ctrl+Enter (Windows/Linux) or Cmd+Enter (macOS). A hint below the description field shows the correct shortcut for your operating system. Press Escape to cancel editing.
Settings
Admins can configure time tracking behavior in Settings > Time Tracking:
- Enable or disable time tracking organization-wide
- Budget alert thresholds -- set a percentage threshold (10-100%) to receive alerts when time entries approach the ticket's budget
- Time rounding -- configure how logged time is rounded:
- Rounding interval: 1, 5, 10, 15, 30, or 60 minutes
- Rounding method: up, down, or nearest
- Booking items -- manage predefined booking items that team members can select when logging time entries, for categorizing work (e.g., development, meetings, code review)
- Timer reminders -- enable a "no timer running" reminder per team member and pick the weekdays it fires on (default: Monday–Friday). See Timer reminders above.