Install the connector
Timetable export is optional. The latest release archive includes BurrowTime and its connector. With Go, install both commands and keep them on yourPATH.
go install github.com/fabean/BurrowTime/cmd/burrowtime@latest
go install github.com/fabean/BurrowTime/cmd/burrowtime-timetable@latestConnect your Timetable account
Create a personal token in Timetable Settings. Get your user ID fromGET /api/me with that token. BurrowTime saves the environment variable name, not the token. The default site URL ishttps://timetable.bluedroplabs.com.
export TIMETABLE_TOKEN='your-personal-token'
burrowtime timetable configure --user YOUR_TIMETABLE_USER_ID
burrowtime timetable projects
burrowtime timetable map 'client portal' TIMETABLE_PROJECT_UUIDFor another Timetable deployment, add --url https://your-hostto configure. Use --token-env NAME if your token lives in a different environment variable. The projects command lists accessible project IDs with their clients.
Preview, then upload
burrowtime timetable sync --today --dry-run
burrowtime timetable sync --today
burrowtime timetable statusSync selects completed entries from today by default. In a terminal, it suggests destinations for unmapped local projects, then lets you review descriptions, destinations, and durations before confirming. A dry run makes no uploads or receipt changes. For automation, map projects first, inspect a dry run, and pass --yes to upload.
Use --from YYYY-MM-DD --to YYYY-MM-DD for an inclusive local-date range, or --all for all completed history. Nothing syncs in the background, and local frames remain unchanged.
How entries appear in Timetable
Timetable receives exact start and end timestamps by default. BurrowTime sorts the frame's tags into its description: +PORTAL-42 becomesPORTAL-42. Timetable has no billable field in this API, so the export does not send one.
Rounding is off by default. If needed, set --rounding up and--increment 15m when configuring, or override rounding for one mapping. Rounding changes only the exported end time.
Retry safely
Every upload carries source=burrowtime and the frame's stable ID as external_id. If a response is lost after Timetable creates the entry, rerunning sync sends the same request and Timetable returns the existing entry. A changed body with the same ID causes a conflict, which needs manual review. Synced frames are skipped on later runs; changes to a synced local frame are flagged rather than uploaded again.
Timetable and Clockify can both receive the same local project. Their mappings and receipts are separate. Keep integration-sync.jsonwhen backing up or moving your BurrowTime data.
See the full connector referenceand Timetable API guide.