> ## Documentation Index
> Fetch the complete documentation index at: https://docs.timetracker.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Rates settings

> Set billable and cost rates for each person in TimeTracker settings – the rates roster, the manage dialog, effective dates, rate history and who may see cost.

Rates live at **Settings** → **Rates** (`/{slug}/settings/rates`), under the **Billing & rates** group in the settings sidebar. This is where you set what each person's hour is worth.

<Note>
  **Billable rate vs cost rate.** A billable rate is what you **charge** the client. A cost rate is what the person **costs** you. Margin is the gap between them. Sarah Lin at $100 billable and $45 cost earns Northwind \$55 of margin an hour.
</Note>

## Before you start

You need the **Manage rates** capability (`rate.manage`). Without it the **Rates** item does not appear in the sidebar, and opening the URL shows *"You don't have access to Rates"*.

Seeing rates is a **capability** question, not a plan question:

| Capability         | What it allows       | Who holds it by default       |
| ------------------ | -------------------- | ----------------------------- |
| `rate.manage`      | Set and remove rates | Owner, Admin, Project Manager |
| `rate.viewBilling` | See billable rates   | Owner, Admin, Project Manager |
| `rate.viewCost`    | See cost rates       | Owner, Admin                  |

Cost rates are private pay information. A Project Manager can set rates and read billable rates, but never sees a cost figure – the **Cost rate** column and the **Cost** tab are not built for them at all, so no cost number reaches their screen.

<Info>
  On the **Free** plan, setting a **cost** rate is blocked. It belongs to the Pro `profitability` feature. Billable rates stay free to set, and cost, revenue and margin already recorded stay readable on Free. See [/billing/free-vs-pro](/billing/free-vs-pro).
</Info>

## The page

The page is titled **Rates**, with the description *"What each person's time is billed at, and what it costs you."*

It holds one card, **Person rates**, described as *"Each person's billing rate and cost, effective from a date. Changing a rate never rewrites time already recorded."*

## The rates roster

The card holds a table with one row per member, showing the rate in force **today**.

| Column           | Shows                                                                                          |
| ---------------- | ---------------------------------------------------------------------------------------------- |
| **Member**       | Avatar, name and role label. Click the header to sort by name                                  |
| **Billing rate** | The billable rate in force today, as amount and currency. Reads **Not set** when there is none |
| **Cost rate**    | The cost rate in force today. Present only if you hold `rate.viewCost`                         |
| (row action)     | A **Rate actions** menu with one item, **Manage rates**                                        |

Above the table is a search box, *"Search people…"*, which filters by name. Below it are the usual page controls: rows per page, the page number, and **Previous** and **Next**.

While the rates load the table shows a loading state. If the workspace has no members yet, the table says so and points you at inviting a teammate.

<Tip>
  The roster is the fastest way to find gaps. Scan the **Billing rate** column for **Not set** – those people track time that is worth nothing on an invoice.
</Tip>

## Set a person's rate

<Steps>
  <Step title="Open the person">
    Click the row action at the end of their row, then **Manage rates**. A dialog opens with their name as the title, and a subtitle giving their role and reminding you that each change appends a new dated rate.
  </Step>

  <Step title="Choose the kind">
    **Billing** is the default tab. **Cost (internal)** is a second tab, shown only if you hold `rate.viewCost`.
  </Step>

  <Step title="Read what is in force">
    The tab leads with the current figure, for example **100.00 USD**, and the line *"per hour, since 1 Jan 2026"*. A future change appears below it with a **Scheduled** badge.
  </Step>

  <Step title="Fill in the new rate">
    **Rate / hour** takes a non-negative decimal such as `120` or `85.50`. **Currency** defaults to the workspace base currency. **Effective from** defaults to today.
  </Step>

  <Step title="Click Add rate">
    You see *"Billing rate saved."* or *"Cost rate saved."* The new row appears in **Rate history**, and the roster shows it the moment its date arrives.
  </Step>
</Steps>

Anyone with `rate.manage` may do this. In Northwind Studio that is Maya Ellis (Owner), Tom Whitfield (Admin) and Priya Raman (Project Manager) – though Priya only ever sees the **Billing** tab.

## The manage dialog in full

| Control                 | What it does                                                  |
| ----------------------- | ------------------------------------------------------------- |
| **Billing** tab         | The rate you charge clients for this person's time            |
| **Cost (internal)** tab | What this person costs you per hour. Needs `rate.viewCost`    |
| Current rate block      | The amount, currency, and the date it took effect             |
| **Scheduled** line      | A future-dated rate, with its amount and start date           |
| **Rate / hour**         | The amount. Non-negative decimal                              |
| **Currency**            | An ISO currency code. Defaults to the workspace base currency |
| **Effective from**      | The date the rate starts applying                             |
| **Add rate**            | Saves. Reads *"Saving…"* while it writes                      |

Every save **appends**. Nothing is overwritten, so the old rate stays readable and keeps applying to the dates it covered.

### Schedule a rate change in advance

Set **Effective from** to a future date. The row saves straight away and carries a **Scheduled** badge, but it prices nothing until its date arrives.

This is the safe way to handle an annual increase. Enter it in December, effective 1 January, and nothing changes until the new year.

### Currencies

The **Currency** picker offers ISO 4217 codes and always includes the workspace base currency, which is set at **Settings** → **General**. Each rate row carries its own currency, so a contractor billed in EUR can sit beside staff billed in USD. Northwind Studio's base currency is **USD**.

## Rate history

Below the editor sits the **Rate history** card: *"Every rate, newest first."* Past rates are never rewritten, so historic time keeps the rate it was billed at.

When you may see cost, the card shows two labelled tables, **Billing** and **Cost (internal)**. Otherwise only the billing table is built.

| Column             | Shows                                                          |
| ------------------ | -------------------------------------------------------------- |
| **Rate / hour**    | The amount and currency                                        |
| **Effective from** | The date it starts. A future row carries a **Scheduled** badge |
| (row action)       | A remove button, if you may manage rates                       |

Empty tables read *"No billing rate set yet."* or *"No cost rate set yet."*

### Remove a rate

Removing a rate is for a mistyped amount or a scheduled change you no longer want. Click the remove button on the row. A confirmation modal names the exact rate and date, and states what changes:

* Time already tracked keeps the rate it was recorded at.
* New work dated in that window uses the next earliest rate instead, and the modal names it.
* If there is no earlier rate, the person has no rate for that period until you add one.

Confirm with **Remove rate**. You see *"Rate removed."*

<Warning>
  A removed rate cannot be restored. Removing a **cost** row also needs `rate.viewCost` and the Pro `profitability` feature – you may not delete a figure you are not allowed to see.
</Warning>

## The same rates from a person's record

The same block appears on a person's own record under **Settings** → **Team Members**, in their **Rates** section, followed by their rate history. It reads and writes exactly the same data as this page, so the two cannot drift.

Reading it needs `rate.viewBilling`. Without it the section says you do not have permission to see pay rates.

## How a rate is chosen

This page sets the **person** rate, which is one input of several. A task rate, a project rate and a client default rate can all outrank it, and time entries keep a snapshot of the rate they were priced at.

The full precedence order is on [/rates/how-rates-are-chosen](/rates/how-rates-are-chosen). Cost is simpler: a person's cost rate is always the workspace-level one, because there is no project or task cost override.

## Example

Northwind Studio, base currency USD:

| Person                                | Billable | Cost | Margin per hour |
| ------------------------------------- | -------- | ---- | --------------- |
| Sarah Lin (Member, senior designer)   | \$100    | \$45 | \$55            |
| Jonas Bergman (Member, developer)     | \$120    | \$60 | \$60            |
| Ana Ferreira (Contractor, copywriter) | \$80     | \$55 | \$25            |

Sarah tracks 3 hours on "Homepage wireframes" for Bluebird Coffee – Website Redesign. At $100 an hour the entry is worth **$300\*\* to the project. At $45 an hour it costs Northwind **$135\*\*. The margin on those 3 hours is **\$165**.

Maya Ellis and Tom Whitfield see all three columns. Priya Raman sees the billable column only. Daniel Okafor (Finance) does not hold `rate.viewBilling` by default, so rates are not part of his settings sidebar at all.

## What happens next

| Downstream    | Effect                                                                               |
| ------------- | ------------------------------------------------------------------------------------ |
| Time entries  | Each new entry is priced with the rate in force on its date, and keeps that price    |
| Budgets       | Money budgets consume billable value, so a rate change moves how fast a budget burns |
| Profitability | Revenue minus cost gives margin. A missing cost rate leaves margin blank             |
| Invoices      | Billable time carries the rate it was recorded at onto the invoice line              |

## Common questions

<AccordionGroup>
  <Accordion title="Does changing a rate re-price old time?">
    No. A time entry keeps the rate it was recorded at. A new rate applies to work dated from its effective date onward. See [/rates/rate-snapshots](/rates/rate-snapshots).
  </Accordion>

  <Accordion title="Why can I not see the Cost rate column?">
    You do not hold `rate.viewCost`. By default only Owner and Admin do. The column is not built for anyone else, so there is nothing hidden to reveal.
  </Accordion>

  <Accordion title="Why was my cost rate refused?">
    Setting a cost rate needs the Pro `profitability` feature. On Free the save fails with a message saying Profitability requires the Pro plan. Billable rates still save.
  </Accordion>

  <Accordion title="Can I set a different rate for one project?">
    Yes, but not here. A project can override a person's billable rate on the project's own settings. See [/rates/project-and-client-rates](/rates/project-and-client-rates).
  </Accordion>

  <Accordion title="Can two people be billed in different currencies?">
    Yes. Every rate row carries its own currency.
  </Accordion>

  <Accordion title="Where does the currency list come from?">
    Standard ISO currency codes, plus the workspace base currency so it is always selectable.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Message or symptom                                                                 | Cause                                                | Fix                                                                             |
| ---------------------------------------------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------- |
| *"That rate won't work. Enter an amount that isn't negative, like 120 or 120.50."* | The amount is negative or not a plain decimal        | Enter digits with at most one decimal point, and no currency symbol             |
| *"That isn't a currency code we recognise. Pick one from the list."*               | An unsupported currency                              | Choose a code from the picker                                                   |
| *"Profitability requires the Pro plan. Upgrade to continue."*                      | Setting a cost rate on Free                          | Upgrade, or set the billable rate only                                          |
| *"Pick a valid effective date."*                                                   | The date field is empty or malformed                 | Choose a date from the picker                                                   |
| A rate saved but the roster still says **Not set**                                 | The rate is future-dated                             | The roster shows today's rate. Check **Rate history** for the **Scheduled** row |
| A person's billable value looks wrong                                              | A project or task rate is overriding the person rate | See [/rates/how-rates-are-chosen](/rates/how-rates-are-chosen)                  |
| **Rates** is missing from the sidebar                                              | You do not hold `rate.manage`                        | Ask an owner or admin                                                           |

## Related guides

<CardGroup cols={2}>
  <Card title="Set a person rate" icon="user-pen" href="/rates/set-a-person-rate">
    The same task, step by step.
  </Card>

  <Card title="How rates are chosen" icon="list-ol" href="/rates/how-rates-are-chosen">
    Task, project, person and client precedence.
  </Card>

  <Card title="Cost rates" icon="wallet" href="/rates/cost-rates">
    What a person costs, and who may see it.
  </Card>

  <Card title="Rate permissions" icon="lock" href="/rates/rate-permissions">
    The cost firewall in full.
  </Card>

  <Card title="Profitability and margin" icon="chart-line" href="/budgets/profitability-and-margin">
    Where cost rates are actually used.
  </Card>

  <Card title="Free vs Pro" icon="badge-check" href="/billing/free-vs-pro">
    What the profitability feature gates.
  </Card>
</CardGroup>
