Inbox (client timesheets)
Office guide: receive client timesheets by email or upload, let TimeTracking read them, and review what it could not apply automatically.
Last updated: · Markdown version
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.
Set up
- 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. - 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. - 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
- 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).
- 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.
- Or click "Negeren" (ignore) when the row is not relevant (totals line, someone not yours).
- If client hours differ from the employee's hours, a conflict appears in the weekly overview. Solve it there (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), or tt inbox in the CLI.