User guide

Time Tracking

Looking for what it does rather than how to use it? Read the Time Tracking overview .

What it is

Time Tracking records work on tickets, projects, direct customers and escalation assignments, either by running a timer or by entering minutes after the fact. Logged time is reviewed by an administrator, and only approved billable time can be turned into an invoice.


A daily workflow that survives interruptions

Open My time in Platform, MSP or Organization. The timer bar stays visible while you navigate.

  1. Choose the ticket, project, customer or escalation and start a timer. A short note is enough. Only one timer runs per person, across tabs and portals.
  2. When attention moves, choose the next issue and Save current & switch. The previous session is saved and the next starts in one transaction. A failed switch retains the current timer.
  3. Use the optional 15, 30 or 60 minute check-in. Browser inactivity is a reminder to review, not evidence that someone stopped working. A timer over two hours requires explicit worked minutes before saving, including through the API. Stop and review before breaks; resume from the week’s list when returning.
  4. If funding or another issue blocks saving, enter worked minutes and a note, then Keep in review inbox. The clock is freed for your next task. The saved capture retains its original client, owner, start time and rate. It cannot be invoiced until the issue is resolved and it becomes pending time. Your inbox remains visible across weeks. If work will not be charged, choose Record as non-billable when saving it; keep the actual work record instead of discarding it.
  5. I forgot to track earlier records a date, minutes and a short explanation. Only enter work you can reasonably account for. Unfinished form contents survive navigation/reload in the same browser tab. Retried captures use a stable identifier to avoid duplicate entries.
  6. Before finishing the day, check your week, saved captures and gaps. Administrators review pending work, correct missing rates/currencies, then approve it. Recover unbilled time lists old pending and approved work across customers, with pages for the whole backlog. Create draft invoices from eligible approved entries, then review/send those invoices separately.

Timers and catch-up entries never charge a customer automatically. Internal organizations and non-billable projects remain non-billable. The employing MSP remains the owner when its technician enters a delegated client workspace. Platform and MSP branding do not create a second legal seller.

Escalation completion waits for running timers and saved captures to be resolved. Escalation captures stay on the assignment’s billing path: provider membership, assigned technician, agreed rates, funding and authorized effort remain enforced. The recovery page links to escalation completion and billing; it does not bill those minutes again as ordinary customer labour.

The mobile ticket timer accepts reviewed worked minutes and updated notes. Offline starts retain their original time until explicitly stopped; reconnecting does not replace them with a new clock. Offline captures are queued durably before the local timer is removed and carry a retry identifier. Offline entries resolve their billing owner and rate when synchronized, so review them before approval if the account context or rates changed while offline. The full daily workspace and saved-capture inbox are web surfaces.


Concepts

Concepts — reference table
ConceptWhat it is
Time entryA recorded block of work: a date, a duration in minutes, a description, and a billable flag. Attached to a ticket, project or customer; escalation time follows its assignment ledger.
Running timerA live clock owned by one person. Not a time entry until stopped. One per person at a time.
BillableWhether the work can be charged to the client. Internal rework is logged but marked non-billable.
ApprovedAn administrator has reviewed the entry. Approval locks it against editing and makes it eligible for invoicing.
InvoicedThe entry has been attached to an invoice. It can no longer be unapproved or deleted.
Hourly rateCopied onto the entry when it is created, from the person’s rate unless one is supplied. Stored per entry, so later rate changes do not rewrite past work.

The lifecycle

             ┌──────────────┐
   start ───▶│ timer running│──── discard ───▶ (nothing recorded)
             └──────┬───────┘
                    │ stop
                    ▼
              ┌───────────┐   approve   ┌──────────┐   invoice   ┌──────────┐
manual entry ▶│  pending  │────────────▶│ approved │────────────▶│ invoiced │
              └───────────┘◀────────────└──────────┘             └──────────┘
               editable,     unapprove    locked                  locked,
               deletable                                          cannot unapprove

A running timer is deliberately not a zero-duration time entry. If it were, the invoicing queries — which look for billable, approved, un-invoiced rows — could sweep up work that was still in progress.


Roles and permissions

Roles and permissions — reference table
ActionCustomerPower UserMSP TechnicianOrg AdminMSP AdminPlatform Admin
Log time / run a timerAPI●●●●●
Edit or delete own pending timeAPI●●●●●
Approve / unapprove time———●●●
Invoice ticket time——●●●●
Invoice project T&M time——●●●●

● = available in the interface · API = permitted by the API but not surfaced in any portal · — = refused

Time tracking is a staff function, surfaced in the MSP and Organization portals. The end-user portal has no time-entry or approval screens.

Approving is a role set, not a rank. Solidlio’s role hierarchy ranks MSP technician above organization administrator, so a simple “minimum role” test would have admitted every technician — the people whose own time is under review. Approval is restricted to an explicit set: platform administrator, MSP administrator, organization administrator.

Administrators can approve their own time. A one-person MSP has nobody else to do it, and blocking it would leave that time permanently un-invoiceable.

Invoicing routes use the standard requireMinRole floor, which is why MSP technician appears there — it outranks organization administrator in the hierarchy.


Walkthroughs

Run a timer on a ticket

  1. Open the ticket — Tickets → <ticket> → Time (MSP portal) or the Time Entries panel on the ticket (Org portal).
  2. Optionally type what you are working on, and set Billable.
  3. Press Start timer. The clock runs server-side, so it survives a page reload, a different browser, a move between the MSP and Org portals, or a switch to the mobile app.
  4. When you finish, press Stop & log. The elapsed minutes become a time entry, rounded up to at least one minute.
  5. Press Discard instead if the time should not be recorded at all.

Only one timer runs per person. Starting a second returns a conflict rather than silently replacing the first — the elapsed work is yours, not the system’s to discard. If a timer is running on another ticket, the panel says so and names it.

Run a timer on mobile

  1. Open the ticket in the Solidlio mobile app and select the Time tab.
  2. Press Start timer, optionally describing the work and setting Billable.
  3. Press Stop & log to record it, or Discard to throw it away.

It is the same timer as the web: a clock started at your desk appears here, and one started here can be stopped from the browser. With no connection the clock still runs, stored on the device; when the app reconnects it reconciles using the original start time rather than restarting from zero. If a timer was started offline and never reached the server, stopping it writes the time entry directly instead of trying to stop a timer the server has never heard of.

Log time manually

  1. Open the ticket and press Log Time.
  2. Enter the date, the duration in minutes, and a description.
  3. Set Billable as appropriate.
  4. Save. The entry appears in the ticket’s time list and in Time Approvals.

Log time against a project

  1. Open the project — Projects → <project> → Billing.
  2. Press Log time.
  3. Enter the date, minutes, description, and whether it is billable.
  4. Save. It goes to Time Approvals like ticket time.

Approve time

  1. Go to Operations → Time Approvals (available in both the MSP and Org portals).
  2. The default filter shows everything awaiting approval. Toggle Billable only to focus on chargeable work.
  3. Review each row: who, what, how long, and which ticket or project.
  4. Press Approve on a row, or Approve all N shown to work through the filtered set.

Bulk approval runs one row at a time and stops at the first failure, naming the entry it stopped at — so a partial run never leaves you guessing which ones went through.

  1. To correct a mistake before approval, press Edit to change the date, minutes, description, or billable flag, or Delete to remove it.
  2. To reopen an approved entry, press Unapprove. This fails once the entry has been invoiced.

Invoice ticket time

  1. Go to Clients → <client>.
  2. The Bill unbilled time panel previews every billable, approved, un-invoiced entry for that organization.
  3. Raise the invoice. Each entry is billed at its own stored hourly rate, and is stamped with the invoice so it cannot be billed twice.

Invoice project time (T&M)

  1. Open the project’s Billing tab. The tiles show Hours logged, Ready to invoice, and Awaiting approval.
  2. Press Invoice unbilled time. This is offered only for TIME_AND_MATERIALS and HYBRID projects; other billing types are rejected.
  3. Use the stored entry rates, or explicitly supply the agreed project rate for this invoice. An effective project resource allocation rate is captured when work is recorded; otherwise the person rate is captured.
  4. Raise the invoice. Only billable, approved, un-invoiced time is included — the dialog warns you when billable time is still awaiting approval.

Configuration

Configuration — reference table
SettingWhereEffect if unset
Person’s hourly rateThe person’s profileEntries remain reviewable, but invoicing is held until an agreed rate is entered. Missing rates are identified in the review and recovery screens.
Entry hourly rateSupplied when creating timeFalls back to the person’s rate at the moment the entry is created.
Billable flagPer entry, per timerDefaults to billable.
Project billing typeProject settingsOnly TIME_AND_MATERIALS and HYBRID can invoice logged time.
Project bill rateEntered per invoice runOptional explicit override; without it, stored entry rates are used and missing rates hold invoicing.

Plan tiers

Time tracking carries no plan gate. Every capability described in this guide is available on every plan. Logging, timers, approval and invoicing are not restricted by subscription tier.


Troubleshooting

Troubleshooting — reference table
MessageCause
A timer is already running. Stop it before starting another.One timer per person. Stop or discard the running one first.
Either ticketId or projectId is requiredA time entry or timer must attach to a ticket or a project.
Cannot modify approved time entriesUnapprove it first — and it must not be invoiced.
Cannot delete approved time entriesSame: approval locks the entry.
Cannot delete invoiced time entriesThe entry is on an invoice. Credit the invoice instead.
Cannot unapprove invoiced time entriesApproval cannot be withdrawn after billing.
Approving time requires an organization or MSP administratorThe caller is a technician, power user, or customer. Ask an administrator.
Customer-portal users cannot approve timeApproval is a staff function.
No billable, approved and un-invoiced time entries foundThe project has time, but none of it is simultaneously billable, approved and un-invoiced. Check the Awaiting approval tile.
Time invoicing is only available for T&M or Hybrid billing projectsFixed-price projects bill from billing milestones instead.
Timer not found (404) when stoppingYou can only stop your own timer.

Limits and known behaviour

  • One running timer per person. Enforced by a unique constraint, not by convention. There is no way to run two clocks at once.
  • Timers round up. A timer stopped after 30 seconds records one minute. Zero-duration entries would be invisible in every total.
  • A stopped timer is always unapproved. The timer is not a route around the approval gate.
  • Assets cannot be timed. Time entries have no asset link.
  • Editing is minutes-based. Durations are entered and stored as whole minutes, not start/end clock times.
  • Rates and owner/currency are snapshotted. Timers capture their rate at start; manual project entries use the allocation effective on the work date. Changing a person rate does not reprice saved history. Missing rates and currency conflicts hold invoicing.
  • Project T&M invoicing uses stored entry rates, with an optional explicit agreed-rate override. Only the selected approved entries are consumed when billing from recovery.
  • Approval is per entry. There is no timesheet-period submission or multi-step approval chain.
  • Mobile covers the timer, not approval. The mobile app runs and stops timers on tickets; approving and invoicing are web-only.
  • Manual project time entry is web-only. Mobile logs time against tickets.
  • No plan gating. Time tracking is not restricted by subscription tier.

Accounting evidence and boundaries

A saved timer retains original start/end timestamps and confirmed minutes. Its work date uses the start timezone (one session belongs to its starting calendar day). Elapsed minutes round up to whole minutes; short sessions are at least one minute. Review before approval when rounding or interruptions affect the claim. One minute at $150/hour produces $2.50 before tax, without rounding to 0.02 hours. Services revenue classification, seller tax configuration and payment terms carry through to draft invoices.

Approved commercial facts are locked at the database boundary. Unapprove unbilled time before correcting it; invoiced entries cannot be unapproved, reassigned or edited. Ticket merges retain approved/invoiced time on the original ticket and keep the merge relation as history. Concurrent invoice requests claim the entries atomically; a losing request cannot leave a duplicate draft.

Historical entries without an ownership snapshot remain visible under the existing tenant scope. Historical missing rates require explicit review; the system does not silently replace them with a technician’s current rate. Browser check-ins require an open page and are optional; they are not background push reminders or automatic activity surveillance.

Questions this guide did not answer?

Ask us. You will get a reply from someone who uses the product every day.

Book a demo Contact us

A walkthrough focused on the IT work you manage.