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

# Attendance

> See who worked their scheduled hours on a given day, and export it.

**Attendance** compares each operator's shift with the time they had the Help Desk open, one day at a time. An operator is a human teammate who can work tickets on this AI agent. Use it to answer questions like "who started late on Tuesday?" or "did anyone miss their shift?".

You find it under **Analytics → Helpdesk → Attendance**. The **Overview** tab next to it holds the ticket metrics described in [Analytics](https://chatbase.co/docs/user-guides/chatbot/analytics.md#helpdesk).

***

## Before you start

* **Help Desk is enabled** on the AI agent. Without it the page isn't available.
* **Your plan includes Analytics,** and your role can read Analytics. Owners, members and viewers can by default. Support associates can't.
* **Operators have shifts.** Attendance reads shifts and time off from [Scheduling](https://chatbase.co/docs/user-guides/chatbot/help-desk/scheduling.md). Operators without a shift still appear, but the schedule columns stay empty for them.
* **Record teammate activity is on.** It's off by default, so Attendance has no data until someone turns it on for the AI agent. See [How activity is recorded](#how-activity-is-recorded).

***

## How activity is recorded

While an operator has the Help Desk open in a browser tab, their browser reports to Chatbase once a minute. That report is the only source of attendance data. Chatbase doesn't track other websites or apps.

* **Logged in** means the Help Desk is open in at least one tab. A tab in the background still counts. When the reports stop for 2 minutes, because the tab closed, the laptop went to sleep or the network dropped, the operator counts as logged out from their last report. Closing the tab ends the session immediately. A gap of 2 minutes or less, such as a page reload, doesn't start a new session. The sessions on either side join, and the gap counts as logged in.
* **Ticket time** is time with a ticket open in the window the operator is using. If they switch to another app while the ticket stays visible, the ticket keeps counting for up to 10 minutes. If the ticket leaves the screen, because they minimized the window or hid the tab, it stops counting from that moment. Attendance ignores gaps shorter than 5 seconds.
* **Idle** starts after 10 minutes without any mouse, keyboard, scroll or touch input in the Help Desk. Idle time still counts as logged in. It isn't ticket time, so it lowers occupancy.

Chatbase records nothing until you turn on **Record teammate activity** on **Settings → Helpdesk → Members**. The switch is off by default and applies to every operator on that AI agent. Recording starts the next time each operator loads the Help Desk, and turning the switch off stops it within a minute. While recording is off, the Attendance tab shows "Activity recording is turned off for this agent" instead of the table, for past days too. Turning it off deletes nothing, so the history reappears when you turn it back on.

![Record teammate activity switch on the Members page](https://mintcdn.com/chatbase/18cct2wTwni0GNA0/user-guides/images/help-desk/attendance/record-activity.png?fit=max\&auto=format\&n=18cct2wTwni0GNA0\&q=85\&s=daabfd9faaae484f9a9f1740b2ebc1f5)

Chatbase keeps recorded activity for 13 months.

***

## Read the attendance table

![Attendance table grouped by team](https://mintcdn.com/chatbase/18cct2wTwni0GNA0/user-guides/images/help-desk/attendance/attendance-table.png?fit=max\&auto=format\&n=18cct2wTwni0GNA0\&q=85\&s=82ef398b89a229f47290f8dbaf16f090)

The controls at the top of the page choose what the table shows:

* **Timezone.** Every time on the page, and the day itself, uses this timezone. It starts as your browser's timezone, and your browser remembers the one you pick.
* **Day.** Use the arrows or the calendar to pick a day. Future days aren't selectable. A past day you pick stays selected if you reload the page, while a new tab opens on today.
* **Search.** Filter operators by name or email.

The table groups operators into one card per team, with the number of operators in the team beside its name. Someone in two teams appears in both. Operators who aren't in any team are in the **Unassigned** card at the bottom.

Most operators get one row. An operator gets several rows when more than one shift touches the day, for example the end of last night's overnight shift plus today's shift. Their first row reads **N shifts** and expands to **Shift 1**, **Shift 2**, and so on.

***

## Columns

A dash `—` means the value doesn't apply. Occupancy shows `0%` instead when the operator wasn't logged in. Durations round down to whole minutes. The ⓘ next to **Productive time**, **Occupancy**, **Adherence**, **Conformance** and **Utilization** shows how each one is calculated.

| Column | What it shows |
| - | - |
| **Operator** | The operator's name and email. |
| **Shift** | The name of the shift this row belongs to. |
| **Scheduled** | The part of the shift that falls on this day, for example `09:00 – 17:00`. An overnight shift splits at midnight: `22:00 – 23:59` on the day it starts and `00:00 – 06:00` on the next. **Not scheduled** means no shift falls on this day. |
| **Time scheduled** | How long the scheduled part is. |
| **Logged** | From the first login to the last logout on this row, for example `08:55 – 17:10`. |
| **Sessions** | Each continuous stretch the operator was logged in, one per line. Gaps of 2 minutes or less don't split a session. |
| **Time logged** | The total of all sessions. |
| **Productive time** | The part of time logged spent on tickets. See **Ticket time** in [How activity is recorded](#how-activity-is-recorded). |
| **Breaks** | Time between sessions that falls inside the scheduled hours. |
| **Late** | How long after the start of the scheduled part the first session began. |
| **Left early** | How long before the end of the scheduled part the last session ended. It appears only after that part has ended. |
| **Overtime** | Time logged outside the scheduled hours, before the shift and after it. |
| **Unplanned time off** | **Yes** when the shift has started and the operator never logged in for it. |
| **Planned time off** | **Yes** when time off from Scheduling covers a shift that would have fallen on this day. It gets its own row, separate from any shift the operator did work. Operators without a shift also show **Yes** on days their time off covers. |
| **Occupancy** | Productive time ÷ time logged. An operator logged in for 8 hours with 6 hours of productive time shows `75%`. |
| **Adherence** | Time logged inside the scheduled hours ÷ time scheduled. An operator on a `09:00 – 17:00` shift who was logged in from 08:00 to 16:00 shows `87.5%`, 7 of the 8 hours. It can't go above `100%`. |
| **Conformance** | Time logged ÷ time scheduled. Overtime counts, so it can go above `100%`. The operator in the Adherence example shows `100%`. |
| **Utilization** | Productive time ÷ time scheduled. With 6 hours of productive time on an 8-hour shift, it shows `75%`. |

**Adherence**, **Conformance** and **Utilization** need a schedule. They show `—` on rows without one, including planned time off, and until the scheduled part starts.

Sessions that overlap a shift, or come within an hour of it, belong to that shift, so logging in 20 minutes early shows as 20 minutes of overtime on the same row. Sessions further away get their own row with no schedule.

***

## Export to CSV

Click **Export CSV**, choose the days to include, and click **Download**. The range starts on the day you're viewing. Use the presets, such as **Last 7 days** or **Last month**, or pick any days from the last 13 months in the calendar. The presets count from your computer's date, so check the dates shown if the timezone you picked is already on a different day.

![Export attendance dialog with a date range selected](https://mintcdn.com/chatbase/18cct2wTwni0GNA0/user-guides/images/help-desk/attendance/export-dialog.png?fit=max\&auto=format\&n=18cct2wTwni0GNA0\&q=85\&s=2a412646592bc80b71d57edebb570061)

The file is `attendance-<date>.csv` for one day, or `attendance-<first day>-to-<last day>.csv` for a range. It uses the timezone you picked and has the table's columns plus **Date**, **Team** and **Email**. Every row starts with its **Date**. Its **Shift** column numbers the rows of operators with several shifts, and **Shift name** holds the shift's name. **Sessions** holds the number of sessions, times look like `09:00 to 17:00`, durations are in minutes, and percentages are plain numbers. Operators in several teams get one row per team, so you can filter the file by team.

***

## How a day is counted

* **The day runs midnight to midnight in the timezone you picked,** not the operator's timezone. A manager in New York and one in Cairo can see different numbers for the same operator on the same date.
* **Overnight shifts split at midnight.** Each day shows its own part, with its own **Late**, **Left early** and **Unplanned time off**. On a 22:00 to 06:00 shift, an operator who logs out at 23:00 shows **Left early** of 1 hour on the first day and **Unplanned time off** on the next. Which weekday's hours apply, and whether time off covers the shift, follow the day the shift starts.
* **Today is live.** An open session counts up to the current minute. **Unplanned time off** waits until the scheduled part has started, and **Left early** until it has ended. **Adherence**, **Conformance** and **Utilization** always divide by the whole scheduled part, so during a shift they climb toward their final value.

***

## Tips and edge cases

* **History starts when recording began.** Days before the first activity recorded on this AI agent never show unplanned time off, adherence, conformance or utilization, because there was nothing to compare against.
* **An open tab counts as logged in,** even if the operator walked away. The **Idle** rule lowers occupancy in that case, but time logged still grows.
* **Editing a shift changes past days.** Attendance computes the schedule from the shift as it is now. If you move a shift on Wednesday, Tuesday's **Late** and **Left early** change too.
* **Operators without a shift** show **Not scheduled**, their logged time, productive time and occupancy. The schedule columns, including **Adherence**, **Conformance** and **Utilization**, stay empty.
* **Two Help Desk tabs don't double count.** Time logged is the time at least one tab was open.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.