# Inbox (client timesheets)

> Office guide: receive client timesheets by email or upload, let TimeTracking read them, and review what it could not apply automatically.

URL: https://timetracking.tech/developers/help/office/inbox
Last updated: 2026-10-24

Clients often send hours as Excel, CSV, PDF or a plain email. "Inbox urenstaten" (Inbox) reads them and records the hours as client hours ("Opdrachtgever (mail)"). Clear rows are applied automatically; uncertain rows wait for you.

Developer details: [Inbound email](https://timetracking.tech/developers/data-in/inbound-email).

## Set up

1. **Your inbox address** is shown at the top of "Inbox urenstaten": `uren+<your-organisation>@in.timetracking.tech`. Ask clients to send timesheets there, or forward them yourself.
2. **Link the client's email domain.** In "Opdrachtgevers" (Clients), fill "E-maildomeinen voor urenmails" (email domains for timesheet mails), e.g. `vdl-montage.nl`. Only mail from these domains is read automatically.
3. **Employee numbers help.** Rows are matched to people by employee number first, then by name. Make sure "Personeelsnummer" is filled in "Medewerkers".

## What is read

| Sent as | Result |
|---|---|
| `.xlsx`, `.csv` | Read directly. Long lists (one row per person per day) and week grids (columns ma/di/wo… or dates) both work |
| Photo or PDF | Read with AI, on paid plans only, max 5 per email |
| Plain email text ("Jan 32 uur") | Weekly totals per person, compared with the app hours |
| Old `.xls` | Not read: ask the client for `.xlsx` or `.csv` |

Recognised column names include "naam"/"medewerker", "personeelsnummer", "datum", "uren"/"totaal", "begin"/"van", "eind"/"tot", "pauze".

## Document statuses

| Status | Meaning |
|---|---|
| "Ontvangen" (received) | Being processed |
| "Verwerkt" (processed) | All rows applied |
| "Te controleren" (to check) | Some rows need you |
| "Quarantaine" (quarantine) | Not read: sender domain belongs to no client, or the sender could not be verified (forged sender protection) |
| "Mislukt" (failed) | File could not be processed |

## Review rows

1. Open "Inbox urenstaten". Rows under review show the extracted name, date and hours and why they were not applied (low confidence, no matching person, "Weektotaal wijkt af" = weekly total differs from the app).
2. For each row choose the person ("Kies medewerker…"), check date and hours, and click "Vastleggen" (apply). The hours are recorded as client hours for that day.
3. Or click "Negeren" (ignore) when the row is not relevant (totals line, someone not yours).
4. If client hours differ from the employee's hours, a conflict appears in the weekly overview. Solve it there ([Weekly close](https://timetracking.tech/developers/help/office/weekly-close)).

## Upload by hand

Got a file outside email? Use "Bestand handmatig uploaden" (upload file manually): choose the client, "Week (maandag)" (week, Monday) and the file ("Bestand (.xlsx, .csv, foto of PDF)"), then "Uitlezen" (read). Same processing as email.

## Common problems

| Problem | Fix |
|---|---|
| Mail in quarantine: domain belongs to no client | Add the domain under "E-maildomeinen voor urenmails"; ask the client to resend or upload the file by hand |
| Mail in quarantine: sender not verified | The client's mail server failed authentication (DMARC). Upload the file by hand |
| Hours on the wrong week | Mail without dates is placed in last week (Mon–Wed) or this week (Thu–Sun). Upload by hand with the right week |
| Person not recognised | Add the employee number to the client's sheet, or check the name spelling in "Medewerkers" |
| PDF not read | AI reading needs a paid plan |

## Automate it

List and apply review items over the API: `GET /inbox`, `POST /inbox/items/{id}/apply`, `POST /inbox/items/{id}/ignore` ([API reference](https://timetracking.tech/developers/api/reference)), or `tt inbox` in the [CLI](https://timetracking.tech/developers/tools/cli#tt-inbox).
