More FeaturesTime tracking

More Features

Time tracking

Track billable hours with a timer or manual entries, per client, and turn unbilled time into a draft invoice in one step.

Coming April 2027

This feature ships in April 2027. This page describes how it will work; details can change before release.

Time tracking is for anyone who bills by the hour. Start a timer when you begin work, or add an entry afterwards, and each entry is saved against a client with its rate. When it is time to bill, Invoice unbilled time turns everything not yet invoiced into a draft invoice, one line per project or per day. Billed entries are then locked and linked to the invoice, so no hour is billed twice and none is forgotten.

How it works

A time entry records:

FieldMeaning
ClientWho the work was for. Required.
MemberWho did the work.
Project tagAn optional free-text tag, for example "Website redesign", used to group lines on the invoice.
DescriptionWhat you did.
Start and end, or durationA timer fills start and end; a manual entry can give just a duration.
RateThe hourly rate, resolved when the entry is created and stored on it.
BillableWhether the time should be invoiced. Entries are billable by default.

Hourly rates

You can set an hourly rate at three levels:

  1. Member: this person's rate.
  2. Client: what you charge this client.
  3. Business: the default for the business.

When an entry is created, the most specific rate that applies is used and stored on the entry. Changing a rate later does not change entries you already logged, so the amount you see today is the amount that will be invoiced.

The timer

Start the timer from the app or ask your AI assistant. Each member can have one running timer at a time; starting a new one is refused until the running one is stopped. Stopping it saves the entry with its start and end time.

Projects are tags

There is no separate projects module. The project tag is enough to group time on invoices and in lists. Mileage and payroll are not tracked.

Track time in the web app

1

Open Time

Time is in the app sidebar, under Work.

2

Start the timer or add an entry

Pick the client, add a project tag and description if you like, then start the timer. For past work, add a manual entry with the date and duration instead.

3

Stop the timer

The entry is saved with its rate and billable flag. You can still edit it until it is billed.

Invoice unbilled time

1

Choose Invoice unbilled time

Pick the client. You see every billable entry not yet on an invoice.

2

Choose how to group

Group by project (one line per project tag) or by day (one line per day). The business default is set in settings.

3

Review the draft invoice

A draft invoice is created. Each line's amount is time multiplied by rate, computed exactly in integer minor units. Billable expenses for the same client are added as lines too, with their markup.

4

Send it

Send the invoice as usual. The entries are now locked and linked to the invoice.

Invoicing unbilled time always creates a draft. Nothing is sent to your client until a person confirms the send, unless an automation you set up is allowed to send automatically.

Through the API and MCP

ActionEndpointMCP tool
Log a finished entryLog timelog_time
Start or stop the timerStart a timer, Stop the timervia log_time
List entriesList time entries
Edit or delete an entryUpdate a time entry, Delete a time entry
See what is not billedList unbilled timelist_unbilled_time
Make the draft invoiceInvoice unbilled timeinvoice_unbilled
curl -X POST "https://api.freeinvoiceautomation.com/v1/time-entries" \
  -H "Authorization: Bearer $FIA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: time-2027-04-12-design" \
  -d '{
    "client_id": "0193f2a1-0c11-7d2e-9a40-1b2c3d4e5f60",
    "project_tag": "Website redesign",
    "description": "Homepage layout",
    "started_at": "2027-04-12T09:00:00Z",
    "ended_at": "2027-04-12T11:30:00Z",
    "billable": true
  }'

With MCP or the AI agent you can simply say what you want:

Log 2.5 hours for Acme today on the website redesign.
Invoice Acme for last week's time.

An automation such as "every Monday, invoice Client X for last week's time entries" uses exactly these capabilities, and creates a draft each week.

Webhooks send time_entry.created when an entry is saved.

Rules and edge cases

  • Billed entries are locked. Once an entry is on an invoice, it cannot be edited (API error time_entry_locked). To correct billed time, change the invoice by revision or issue a credit note.
  • One running timer per member.
  • Rates are frozen per entry. The rate stored on an entry is the one used when it is invoiced.
  • Non-billable time is kept for your records and never added to an invoice.
  • Your own entries and others'. With time.log you log and edit your own entries; editing or deleting other members' entries needs time.manage.

Errors

CodeWhen
time_entry_lockedThe entry is billed and linked to an invoice.
conflictA timer is already running for you.
validation_failedMissing client, or neither a start and end nor a duration.
permission_deniedYour role lacks the key for the action.
business_out_of_scopeThe client belongs to a business you cannot reach.

Permissions

ActionPermission keyDefault roles
View time entries and unbilled timetime.viewOwner, Admin, Editor, Viewer, Accountant
Log time, run the timer, edit your own entriestime.logOwner, Admin, Editor
Edit or delete other members' entriestime.manageOwner, Admin
Invoice unbilled timedocuments.createOwner, Admin, Editor

See Roles and permissions.