Skip to content

Request an integration

Tell us which system you want to connect. We review every request weekly and publish a step-by-step guide or build the connection.

Integrations

Matrix of every system TimeTracking connects to, with honest status (Live, Recipe, Planned), mechanism and data direction.

Last updated: · Markdown version

TimeTracking does not ship native connectors for third-party systems, apart from the export presets listed as Live below. Every other integration is built on the same public building blocks:

  • REST API: https://app.timetracking.tech/api/v1, authenticated with an organisation API key (Authorization: Bearer tt_live_…). See Authentication and the API reference.
  • Webhooks: signed POST requests when something happens (hours submitted, approved, exported, period locked, …). See Webhooks overview.
  • Export mappings: approved hours, leave and expenses rendered as a payroll file (CSV/TXT). See Export mappings.
  • Inbound email: clients mail timesheets (CSV, XLSX, PDF, photo, plain text) to the organisation's inbox address. See Inbound email.
  • Tools: the tt CLI, the MCP server and the Claude Skill.

Status definitions

Status Meaning
Live Shipped as a feature in TimeTracking. You configure it; no code needed.
Recipe Works today without changes to TimeTracking, by combining the REST API, webhooks, an export mapping and/or an iPaaS tool (Zapier, Make, n8n). The guide gives the exact steps. You (or your integrator) own the glue code or scenario.
Planned Not achievable today without unreasonable effort, or a native feature that is on the roadmap. No date is promised.

All per-system guides below are Recipes, except SD Worx, which has a Live concept preset. Native app listings (Zapier/Make marketplace apps), OAuth2 marketplace apps, native calendar sync and a bulk export feed for BI are Planned.

API v1.1 (live) added what two-way syncs need: upsert by external ID (PUT /{people|clients|placements}/by-external/{source}/{ref}), GET/PATCH/DELETE by id, batch endpoints, cursor pagination with updated_since, GET /days and GET /claims range reads, export runs and files via the API, more webhook events with delivery logs, test, replay and secret rotation, and the Idempotency-Key header. See the changelog.

Still Planned: OAuth2 for marketplace apps, native iPaaS apps, a BI bulk feed, export-mapping CRUD via the API (mappings are editable by admins in the dashboard), a sandbox with test keys, and SDKs.

Building blocks (Live)

System Category Status Mechanism Direction Guide
REST API Platform Live HTTPS + JSON, API key In and out API reference
Webhooks Platform Live Signed POST, 21 events, delivery log, test, replay, secret rotation Out Webhooks
tt CLI Tool Live Node CLI over the REST API In and out CLI
MCP server Tool Live stdio MCP server over the REST API In and out MCP
Claude Skill Tool Live Agent Skill (uses CLI or MCP) In and out Claude Skill
Inbound email Data in Live Client mails timesheet to org inbox In Inbound email
Master data CSV import Data in Live POST /import or dashboard upload In CSV import
Generic CSV export (+ XLSX/JSON download) Data out Live Preset preset-generic; committed files via GET /exports/runs/{id}/file; XLSX/JSON download in the dashboard Out Presets
SD Worx concept preset Payroll Live (concept) Preset preset-sdworx; wage codes are placeholders Out SD Worx

System matrix

System Category Status Mechanism Direction Guide
SD Worx Payroll Live (concept preset) Export preset preset-sdworx (placeholder wage codes) TimeTracking to SD Worx SD Worx
Loket Payroll Recipe Export file (generic preset or custom mapping) TimeTracking to Loket Loket
Nmbrs Payroll Recipe Export file, or API script / iPaaS TimeTracking to Nmbrs Nmbrs
AFAS Payroll / HR Recipe Export file, or API script (AFAS UpdateConnector) TimeTracking to AFAS AFAS
Visma Raet (Youforce) Payroll / HR Recipe Export file (variable wage data import) TimeTracking to Visma Raet Visma Raet
Easyflex Staffing payroll Recipe Export file (hours import) TimeTracking to Easyflex Easyflex
Mysolution Staffing ERP Recipe Upsert by external ID + GET /days, or export file Both Mysolution
Planbition Planning Recipe Upsert by external ID, batch claims, GET /days Both Planbition
DATEV Payroll (DE) Recipe Export file (ASCII import) TimeTracking to DATEV DATEV
Personio HR Recipe Upsert by external ID, GET /days, leave webhooks Both Personio
Exact Online Accounting / payroll Recipe API script / iPaaS, export file TimeTracking to Exact Exact Online
Bullhorn ATS / CRM Recipe PUT …/by-external/bullhorn/{id} + batch; hours back via GET /days Bullhorn to TimeTracking (master data); hours back optional Bullhorn
Carerix ATS / CRM Recipe PUT …/by-external/carerix/{id} + batch; hours back via GET /days Carerix to TimeTracking; hours back optional Carerix
Recruitee ATS Recipe Recruitee webhook + PUT …/by-external/recruitee/{id} Recruitee to TimeTracking Recruitee
OTYS ATS / CRM Recipe PUT …/by-external/otys/{uid} + batch OTYS to TimeTracking OTYS
HubSpot CRM Recipe HubSpot workflow webhook + upsert by external ID; totals via GET /days HubSpot to TimeTracking; status back HubSpot
Salesforce CRM Recipe Flow / Apex callouts to PUT …/by-external/salesforce/{id}; hours via GET /days Salesforce to TimeTracking; hours back Salesforce
Pipedrive CRM Recipe Pipedrive webhook + upsert by external ID Pipedrive to TimeTracking Pipedrive
Google Calendar Calendar Recipe (native sync Planned) shift.published webhook + iPaaS + Calendar API TimeTracking to Google Google Calendar
Microsoft 365 / Outlook Calendar Recipe (native sync Planned) shift.published webhook + iPaaS + Microsoft Graph TimeTracking to Outlook Microsoft 365
Slack Chat Recipe Webhooks + relay + Slack incoming webhook TimeTracking to Slack Slack
Microsoft Teams Chat Recipe Webhooks + relay + Teams Workflows webhook TimeTracking to Teams Teams
Zapier iPaaS Recipe (native app Planned) Webhooks by Zapier + Code by Zapier Both Zapier
Make iPaaS Recipe (native app Planned) Custom webhook + HTTP module Both Make
n8n iPaaS Recipe (native node Planned) Webhook node + Crypto node + HTTP Request Both n8n
Power BI BI Recipe (bulk feed Planned) Power Query over GET /days, /leave, /expenses, /exports/runs (read-only key, cursor pagination) TimeTracking to Power BI Power BI
Looker Studio BI Recipe (bulk feed Planned) Apps Script over GET /days into Google Sheets TimeTracking to Looker Studio Looker Studio

Constraints that apply to every recipe

Facts about the API today. Each guide repeats the ones that matter.

  • Keys and scopes. read keys act as a read-only accountant: every GET works (lists, by id, /days, /claims, /exports/runs, /leave, /expenses, /shifts, /inbox), but no writes, and export preview (POST /exports) returns 403 "API key is read-only". write keys act as an office user. admin keys (implies write) also manage webhooks (create, list, delete, deliveries, test, replay, rotate secret), lock periods, manage kiosk devices and list/revoke API keys. No key can create API keys or change office roles (403 "Not available with an API key"); write keys get 403 "Admin role required" on admin endpoints.
  • External IDs. PUT /{people|clients|placements}/by-external/{source}/{ref} creates or updates by your system's id (source matches [a-z0-9_-]{1,40}, ref ≤ 120 chars, URL-encoded). The response has created: true|false. Placements accept personExternalRef / clientExternalRef of the same source.
  • Updates are full replaces. PUT …/by-external/…, PATCH /{resource}/{id} and POST with id replace the whole record: omitted optional fields become null.
  • Deactivate, not delete. DELETE /people/{id} and DELETE /placements/{id} set active: false. DELETE /clients/{id} only works for clients without placements (else 409).
  • Batches. POST /{people|clients|placements|claims}/batch with {items:[…]} (1–500). One bad row never aborts the batch; read results[].ok.
  • Incremental reads. Lists accept limit (1–500), cursor, updated_since and return {items, next_cursor}. Hours: GET /days?from&to&status&updated_since and raw GET /claims.
  • Retries. Send Idempotency-Key (8–200 chars) on POST/PUT/PATCH/DELETE; replays (24 h) return the stored response with idempotent-replayed: true. Honoured on every authenticated write, including export commit, approvals and period lock. See Idempotency.
  • Webhooks. 21 events, delivered by a job every 5 minutes; 7 attempts in total (first run, then +1m, +5m, +30m, +2h, +6h, +12h). Payloads carry IDs only (for example person.updated {personId} or {personId, active:false}); person.*, placement.* and client.* fire on every API create/update path. See Retries.
  • Rate limit. 600 requests per minute per key (fixed calendar-minute window). Above that: 429 with Retry-After: 60. See Rate limits.

Build an integration with Claude

Every guide ends with a copy-paste prompt. More prompts: Prompts.