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

# Recurring retainers

> Set a monthly retainer budget in TimeTracker. Learn how a monthly budget refills each calendar month, where the period boundary falls, and how alerts re-arm.

A **monthly** budget refills at the start of each calendar month. A **one-time** budget does not – it is a single pool for the life of the project.

Use monthly for retainers, where the client buys the same amount of time or money every month.

## What a retainer budget does

Bluebird Coffee pays Northwind Studio for 40 hours a month, ongoing. That is not one 40-hour pool that runs out in week two. It is a fresh 40 hours every month.

A monthly budget models exactly that:

* utilisation is measured against the monthly amount
* the alert ladder – 50%, 75%, 90%, 100% – arms fresh each month
* going over in March has no effect on April's pool

A one-time budget is the opposite. One pool. When it is gone, it is gone.

|             | One-time                               | Monthly                                      |
| ----------- | -------------------------------------- | -------------------------------------------- |
| The pool    | A single ceiling for the whole project | The same ceiling, every calendar month       |
| Alerts      | Each rung fires once, ever             | Each rung fires once **per month**           |
| Best for    | Fixed-fee builds, capped scopes        | Retainers, ongoing support, managed services |
| Overrunning | Permanent – the project stays over     | Resets next month                            |

## How to set one up

The **Resets** control only appears when the project's **Billing method** is **Retainer**. That coupling is deliberate: a monthly reset only makes sense on work that is sold monthly.

<Steps>
  <Step title="Set the billing method first">
    In project **Settings**, find the **Billing method** card. Choose **Retainer** and save it. Its description reads "How this project bills its client. A retainer lets the budget reset every month."
  </Step>

  <Step title="Open the Budget card">
    The **Resets** dropdown is now visible, because the Budget card reads the **saved** billing method. An unsaved switch does not reveal it.
  </Step>

  <Step title="Choose the budget type and amount">
    For Bluebird's retainer: **Total hours**, `40`.
  </Step>

  <Step title="Set Resets to Monthly">
    The helper text confirms: "A monthly retainer resets its budget at the start of each calendar month."
  </Step>

  <Step title="Save">
    Click **Set budget**. A toast confirms **Budget saved.**
  </Step>
</Steps>

## Where the month boundary falls

The month boundary is **midnight on the 1st, in your workspace timezone**.

That timezone matters. A workspace in New York and a workspace in Singapore roll over at different real-world moments.

### A concrete example

Northwind Studio's workspace timezone is `America/New_York`.

| Moment                      | Which month it falls in |
| --------------------------- | ----------------------- |
| 31 March, 11:00 PM New York | **March**               |
| 31 March, 11:59 PM New York | **March**               |
| 1 April, 12:00 AM New York  | **April**               |
| 1 April, 12:30 AM New York  | **April**               |

If the same workspace were set to `Asia/Singapore`, the rollover would happen twelve hours earlier in UTC terms – but still at local midnight on the 1st for the people using it.

<Note>
  The boundary is a calendar month, not a rolling 30 days and not your billing anniversary. A retainer that starts on the 15th still resets on the 1st.
</Note>

## Example – a month in the life of a retainer

**Bluebird Coffee – Monthly Retainer. 40 hours, monthly.**

The rungs for a 40-hour pool:

| Rung | Hours    |
| ---- | -------- |
| 50%  | 20 hours |
| 75%  | 30 hours |
| 90%  | 36 hours |
| 100% | 40 hours |

**March**

| Date     | Event                          | Total logged | Utilisation | Alert          |
| -------- | ------------------------------ | ------------ | ----------- | -------------- |
| 6 March  | Sarah logs 8h of design tweaks | 8h           | 20%         | –              |
| 12 March | Jonas logs 14h of fixes        | 22h          | 55%         | **50% fires**  |
| 20 March | Sarah logs 9h                  | 31h          | 77.5%       | **75% fires**  |
| 26 March | Jonas logs 6h                  | 37h          | 92.5%       | **90% fires**  |
| 30 March | Sarah logs 7h                  | 44h          | 110%        | **100% fires** |

Check the arithmetic: 8 + 14 = 22; 22 ÷ 40 = 55%. Then 22 + 9 = 31; 31 ÷ 40 = 77.5%. Then 31 + 6 = 37; 37 ÷ 40 = 92.5%. Then 37 + 7 = 44; 44 ÷ 40 = 110%.

March ends 4 hours over. The health chip is red and the 100% alert has been sent to Priya and the workspace owners.

**April**

At midnight on 1 April, New York time, the pool refills.

| Date     | Event                | Total logged | Utilisation | Alert               |
| -------- | -------------------- | ------------ | ----------- | ------------------- |
| 1 April  | –                    | 0h           | 0%          | Ladder re-armed     |
| 9 April  | Ana logs 11h of copy | 11h          | 27.5%       | –                   |
| 17 April | Sarah logs 12h       | 23h          | 57.5%       | **50% fires again** |

The 50% alert fires again in April, even though it fired in March. That is the point of a monthly budget. Each rung fires once **per month**, not once per project.

March's 4-hour overrun does not carry into April. The retainer is a fresh promise every month.

## How the alert dedup works

TimeTracker records a rung as fired so it cannot fire twice for the same pool.

* On a **one-time** budget, the record is per project and rung. The 75% alert fires once, ever.
* On a **monthly** budget, the record is per project, rung **and month**. The 75% alert fires once in March, once in April, once in May.

Crossing the same rung twice inside one month – for example if hours are deleted and re-logged – does not send a second alert.

Dismissing an alert from the in-app list never re-arms it. Dismissing is only about tidying your own list.

## What monthly does not do

| It does not…                    | Because                                                                                               |
| ------------------------------- | ----------------------------------------------------------------------------------------------------- |
| Delete last month's time        | Every entry stays. Only the measurement window moves.                                                 |
| Roll unused hours forward       | A 40-hour month where you used 25 does not become a 55-hour April. Each month is measured on its own. |
| Change invoicing                | Invoices are built from approved billable time, not from the budget.                                  |
| Reset the project's total spend | The all-time totals are still there. Reports can window on any range you choose.                      |
| Bill the client automatically   | A retainer budget is a measurement, not a charge. Someone still builds the invoice.                   |

<Warning>
  Unused hours do **not** carry over. If your contract promises rollover, you are managing that outside the budget – a monthly budget always measures the current month against the full monthly amount.
</Warning>

## Money retainers

A retainer can be money instead of hours.

**Bluebird Coffee – Monthly Retainer, \$6,000 a month.**

Set **Budget type** to **Total money**, the amount to `6000`, and **Resets** to **Monthly**. Utilisation is then approved cost against \$6,000, refilling each month.

Remember the difference: a money retainer counts **approved** cost, so it lags until timesheets are approved. An hours retainer counts every hour the moment it is logged. On a retainer, where the client is watching the burn in near real time, the hours version is usually the more useful signal.

See [hours vs money budgets](/budgets/hours-vs-money-budgets).

## Permissions

| Action                                                  | Capability                 | Roles that hold it                                |
| ------------------------------------------------------- | -------------------------- | ------------------------------------------------- |
| Change the billing method to Retainer                   | `project.manage`           | Owner, Admin, Project Manager                     |
| Set Resets to Monthly                                   | `budget.manage`            | Owner, Admin, Project Manager                     |
| Receive retainer alerts                                 | –                          | Project managers plus workspace Owners and Admins |
| Change the workspace timezone that decides the boundary | `workspace.updateSettings` | Owner, Admin                                      |

## Common questions

<AccordionGroup>
  <Accordion title="Why can I not see the Resets dropdown?">
    The project's saved billing method is not **Retainer**. Change it in the Billing method card, save, then reopen the Budget card.
  </Accordion>

  <Accordion title="Can I reset weekly or quarterly?">
    No. The two options are **One-time** and **Monthly**.
  </Accordion>

  <Accordion title="What if my retainer runs from the 15th to the 14th?">
    The budget resets on the 1st regardless. To measure a non-calendar cycle, use a report with a custom date range instead.
  </Accordion>

  <Accordion title="Do unused hours roll into next month?">
    No. Each month is measured against the full monthly amount, starting from zero.
  </Accordion>

  <Accordion title="Does the overrun from last month affect this month's health?">
    No. Health reads the current period's utilisation. A red March does not make April red.
  </Accordion>

  <Accordion title="Which timezone decides the boundary?">
    Your workspace timezone, set in workspace settings. It is not each person's own timezone, so the whole team sees the same month boundary.
  </Accordion>

  <Accordion title="Will I get the same alert email every month?">
    Yes, if you cross the same rung again. That is intentional – it is a new month and a new pool.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Problem                                   | Cause and fix                                                                                                          |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| **Resets** is missing                     | The billing method is not Retainer, or it was changed but not saved.                                                   |
| Utilisation did not reset on the 1st      | Check your workspace timezone. If it is far from your local time, the rollover may have already happened or not yet.   |
| An alert fired twice in one month         | Check whether the project has both a money and an hours ladder in play. They are tracked separately, so both can fire. |
| No alert fired in the new month           | The rung has not been crossed yet in the new period. The counter started at zero.                                      |
| Last month's hours still show in a report | Correct. Reports window on a date range you choose. The monthly reset only affects budget utilisation.                 |

## Related guides

<CardGroup cols={2}>
  <Card title="Set a project budget" icon="pen-to-square" href="/budgets/set-a-project-budget">
    Where the Resets control lives.
  </Card>

  <Card title="Budget alerts" icon="bell" href="/budgets/budget-alerts">
    How the ladder re-arms each month.
  </Card>

  <Card title="Hours vs money budgets" icon="scale-balanced" href="/budgets/hours-vs-money-budgets">
    Choosing the unit for a retainer.
  </Card>

  <Card title="How budgets work" icon="gears" href="/budgets/how-budgets-work">
    What counts toward the pool.
  </Card>

  <Card title="Dates, times and timezones" icon="clock" href="/concepts/dates-times-and-timezones">
    Where the workspace timezone is set.
  </Card>

  <Card title="Project settings" icon="sliders" href="/projects/project-settings">
    Changing the billing method.
  </Card>
</CardGroup>
