> ## 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.

# Rate snapshots

> A time entry freezes the rate that applied when it was recorded, so changing a rate later never rewrites history, restates a budget, or changes a sent invoice.

Every time entry stores the rate it was priced at. Change a rate tomorrow and yesterday's numbers stay exactly where they were.

## What a snapshot is

When a time entry is saved, TimeTracker resolves the rates for that person on that date and copies three values onto the entry:

| Value         | What it is                       |
| ------------- | -------------------------------- |
| Billable rate | The winning billable rate        |
| Cost rate     | The person's cost rate           |
| Currency      | The currency of the winning rate |

Those three values are then fixed. Nothing re-reads the rate table for that entry again.

## Why it matters

An invoice is a legal document and a budget is a commitment. If a rate change could reach backwards, three things would break at once:

* An invoice you already sent would stop matching the numbers behind it.
* A closed month's revenue would move.
* A project you delivered under budget could quietly go over it.

Snapshots make all three impossible.

## Before and after – a concrete example

Sarah Lin bills at **\$100/hour**. In March she tracks time on Bluebird Coffee – Website Redesign.

**March – rate is \$100/hour**

| Date      | Hours  | Rate on the entry | Billable value |
| --------- | ------ | ----------------- | -------------- |
| 10 Mar    | 4      | \$100             | \$400          |
| 17 Mar    | 6      | \$100             | \$600          |
| 24 Mar    | 5      | \$100             | \$500          |
| **Total** | **15** |                   | **\$1,500**    |

Daniel invoices that \$1,500 at the end of March.

**1 April – Maya raises Sarah's rate to \$125/hour**

She adds a new row: `125.00 USD, effective 1 Apr 2026`.

**After the change**

| Date   | Hours | Rate on the entry | Billable value |
| ------ | ----- | ----------------- | -------------- |
| 10 Mar | 4     | **\$100**         | **\$400**      |
| 17 Mar | 6     | **\$100**         | **\$600**      |
| 24 Mar | 5     | **\$100**         | **\$500**      |
| 3 Apr  | 4     | \$125             | \$500          |

March is untouched. The March invoice still says \$1,500. April prices at the new rate.

Without snapshots, the March rows would silently become `15 × $125 = $1,875` – \$375 that was never invoiced and never agreed.

## What is snapshotted, and what is not

| Snapshotted on the entry | Re-read live                                 |
| ------------------------ | -------------------------------------------- |
| Billable rate            | The task and project a description points at |
| Cost rate                | The person's name and avatar                 |
| Currency                 | Whether the entry is approved or invoiced    |

## Invoices snapshot too

The same rule runs one level up. An invoice stores its own totals, its tax lines, its exchange rates and its "bill from" block at the moment it is created.

| Change you make later          | Effect on an existing invoice                                                     |
| ------------------------------ | --------------------------------------------------------------------------------- |
| Raise a person's rate          | None                                                                              |
| Edit the client's default rate | None                                                                              |
| Edit your company address      | None – see [/invoicing/invoice-sender-details](/invoicing/invoice-sender-details) |
| Add a new exchange rate        | None – see [/invoicing/taxes-and-currency](/invoicing/taxes-and-currency)         |

## What a rate change actually does

It changes which rate applies to work recorded **from its effective date onward**. That is the whole effect.

<Steps>
  <Step title="You add a dated rate">
    A new row joins the person's rate history.
  </Step>

  <Step title="Existing entries are untouched">
    They keep the figures they were saved with.
  </Step>

  <Step title="New entries resolve fresh">
    Each new entry looks up the rate in force on its own date, then freezes it.
  </Step>
</Steps>

## Removing a rate is also safe

Deleting a row from **Rate history** does not re-price anything. The confirmation modal says so plainly:

> Time already tracked keeps the rate it was recorded at.

What changes is which rate applies to new work dated in that window. The modal names the rate that takes over, or warns you that the person will have no rate for that period until you add one.

## What if I really do need to re-price?

There is no bulk re-price button, and that is deliberate. Options, in order of preference:

<Steps>
  <Step title="Fix the rate first, then record">
    The cleanest path. Set the correct dated rate before the work is tracked.
  </Step>

  <Step title="Adjust the invoice">
    If the work is already invoiced and the amount is wrong, issue a credit note or void the invoice and raise a corrected one. See [/invoicing/void-an-invoice](/invoicing/void-an-invoice).
  </Step>

  <Step title="Re-enter the time">
    For a small number of entries that are not yet invoiced, delete and re-enter them once the correct rate is in place.
  </Step>
</Steps>

## Permissions

Snapshots are not a permission, but who can see them is:

| Value on an entry                | Capability needed              |
| -------------------------------- | ------------------------------ |
| Billable rate and billable value | `rate.viewBilling`             |
| Cost rate and cost               | `time.viewCost` (Owner, Admin) |

An entry's cost figure is removed before it reaches anyone without the cost capability. See [/rates/rate-permissions](/rates/rate-permissions).

## Common questions

<AccordionGroup>
  <Accordion title="I set a rate after the work was tracked. Why is the entry still unpriced?">
    Because the entry was priced when it was saved, and there was no rate at that moment. Set the rate, then re-enter the affected time.
  </Accordion>

  <Accordion title="Can I backdate a rate so old entries pick it up?">
    You can set a past effective date, but it will not re-price entries that already exist. It only affects entries created from now on that are dated in that window.
  </Accordion>

  <Accordion title="Does approving or invoicing time change its rate?">
    No. Approval and invoicing change the entry's status, never its money.
  </Accordion>

  <Accordion title="What if someone edits an entry's hours after a rate change?">
    Editing an entry recalculates its value from the rate stored on it, not from the current rate table.
  </Accordion>

  <Accordion title="Do budgets recalculate when I change a rate?">
    Only for new work. Budget consumption is built from the values stored on entries.
  </Accordion>

  <Accordion title="Is the rate history kept forever?">
    Yes, unless you remove a row yourself. Rows are added, never rewritten.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Symptom                                          | Cause                                            | Fix                                                     |
| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------------- |
| A new rate did not change old entries            | Snapshots – working as designed                  | Nothing to fix                                          |
| An entry has no money value at all               | No rate resolved when it was saved               | Set the rate, then re-enter the time                    |
| An invoice total disagrees with today's rate     | The invoice snapshotted its own totals           | Compare against the rate that applied on the work dates |
| Two entries on the same day have different rates | One was recorded before a rate change, one after | Check the exact save order in the entry list            |

## Related guides

<CardGroup cols={2}>
  <Card title="How rates are chosen" icon="list-ordered" href="/rates/how-rates-are-chosen">
    What gets snapshotted.
  </Card>

  <Card title="Set a person rate" icon="user-pen" href="/rates/set-a-person-rate">
    Adding a dated rate.
  </Card>

  <Card title="Billable rates" icon="dollar-sign" href="/rates/billable-rates">
    What you charge.
  </Card>

  <Card title="Cost rates" icon="wallet" href="/rates/cost-rates">
    What an hour costs you.
  </Card>

  <Card title="Void an invoice" icon="ban" href="/invoicing/void-an-invoice">
    The correction path for issued invoices.
  </Card>

  <Card title="Invoice sender details" icon="building" href="/invoicing/invoice-sender-details">
    The same snapshot rule for your company block.
  </Card>
</CardGroup>
