Keep your time in order

How do you spend your time? Track all your activities without being tracked. Try it.

zeiten.io provides a free service to track the time you spend. It is easy, intuitive, and doesn't track you in any way. It works equally well for a single user and for a whole team.

User Management

There is no user management. In fact, we don't know who you are or how many trackers you created. This also means that there is no login required. Simply start using the service.

Time Trackers

To start, choose 'New tracker' on https://zeiten.io or on this page. The id of the new tracker is appended to the URL (e.g. https://zeiten.io/UxKgH2). This URL uniquely identifies your tracker.

When you wish to create a new tracker, simply choose 'Create new' in the menu 'Time trackers'.

The URLs of all trackers you visited with your browser are stored in a cookie. If you have cookies enabled, this list is shown in the menu 'Time trackers'. The most recently used tracker is automatically opened when you visit the main page again.

To remove a tracker from this list, click the crossed-out bookmark next to it. The tracker and its entries stay on the server, and visiting its URL adds it to the list again. 'Delete current tracker' deletes the tracker with all its entries.

Please be aware that, since we do not track you, we also don't know which trackers you may have accessed. If you lose the URL, then it is not possible to return to a particular tracker.

A Time Entry

An entry in a tracker consists of its date, a duration, some tags, and a free-form text. That's it. If no filter is specified, all entries are shown for a tracker. This is the default if a tracker is visited.

Tags and comments are optional, date and duration are mandatory.

The duration can be entered in different formats. Allowed formats are shown below. Note that the format must match. Allowed units are hours (h), minutes (m), and seconds (s).

  • 2h 15m, or 1h30m for 1 hour 30 minutes
  • 11:30-15:30
  • 1.5h for 1 hour 30 minutes
  • 8-12, 13-17: the ranges add up

Use lowercase h, m, s once each in that order. Spaces are optional. Decimal hours and minutes use a dot and must resolve to whole seconds. Amounts may exceed 24 hours. Separate clock ranges with commas; each range must end after it starts on the selected day. 24:00 means the end of that day. Saving normalizes amounts and keeps the endpoints of ranges.

Entries can be edited and removed by clicking the icon next to the entry itself.

Anonymous Trackers

Menu 'Time trackers' provides an option 'Anonymous trackers'. This can be selected to prevent a cookie from being written. If there is an existing cookie, it is removed.

Please remember to save the URL for your trackers before selecting this option.

However, it is a useful feature when using e.g. a public computer.

Filter

A filter can be specified in menu 'Filter' in order to limit the time entries that are shown in a tracker. Some filters are provided by default, and can be extended with custom filters.

Choose 'Define custom filter' to define your filter. A filter can limit entries by start and end date, or by a keyword. The keyword searches both the tags and the descriptions.

A custom filter can be stored with a name. It is then available later from the menu. Choose a name that no other filter in this tracker uses, or edit the existing filter. However, it is often useful to simply define a filter, apply it, and then export the view, without storing the filter.

Export

Choose a format under 'Export current view' in menu 'Filter'. The export holds all rows that the page currently displays, so it respects the applied filter. To export all rows, clear all filters.

'CSV' downloads comma separated values, e.g. for an Office program, with the columns Day, Duration, DurationSeconds, Tags and Comment, newest entry first. 'PDF' downloads a timesheet to print or send, with the total of the view.

'JSON' downloads the entries for programs, in the document that the API answers:

{
  "tracker": {"id": "AbCdE", "title": "Roche 2026"},
  "start": "2026-09-01",
  "end": "2026-09-30",
  "total_seconds": 55800,
  "entries": [
    {
      "id": 27579,
      "day": "2026-09-29",
      "duration": "8:00 - 12:00, 13:00 - 16:30",
      "duration_seconds": 27000,
      "tags": ["SynergyPlus"],
      "comment": "- Solution train sync"
    },
    {
      "id": 27583,
      "day": "2026-09-30",
      "duration": "8h",
      "duration_seconds": 28800,
      "tags": ["SynergyPlus", "PDT"],
      "comment": "- Order checks\n- PDT working slot"
    }
  ]
}
FieldMeaning
tracker.id The ID from the address.
tracker.title The title of the tracker, empty for an untitled tracker.
start, end The first and the last day of the period as YYYY-MM-DD, which shows the dates of an expression. Without a start or an end, they name the day of the first or the last listed entry, and null when no entry is listed.
total_seconds The sum of duration_seconds of the listed entries.
entries The selected entries, from the oldest day to the newest, and within a day in the order they were saved.
id A number that identifies the entry.
day The date of the entry as YYYY-MM-DD.
duration The normalized duration, such as 8h or 8:00 - 12:00, 13:00 - 17:00.
duration_seconds The length of the entry in seconds. Programs compute with this field.
tags The tags of the entry in the order the user typed them, each once.
comment The comment as plain text, which may contain line breaks.

API

Programs can read the entries of a tracker as JSON. Replace ID with the last part of the tracker's URL:

https://www.zeiten.io/api/trackers/ID/timesheet?start=2026-09-01&end=2026-09-30

The API reference describes the parameters, the answer and the errors.

Sharing

The simplest way to share a tracker is to copy the URL and send it through your preferred channel. This makes it easy to use the same tracker on different browsers, different devices, or in a team. Like with any URL, you can of course bookmark it and share it through your browser's sync capabilities.

License

zeiten.io is provided as-is without any warranties. zeiten.io or its authors are not responsible or liable for any loss or damage of any kind during or after the usage of the service.