About ClientHours

ClientHours turns a calendar export into a timesheet. It was built for freelancers, consultants and anyone who bills from their calendar but cannot or will not install an add-on that reads it.

How it works

The page reads the file with your browser. A small engine parses the iCalendar format (RFC 5545), computes time zone offsets from the rules inside the file, expands repeating meetings, applies exceptions, and adds up hours per client. Every parsing rule and its source is written down in the engine's research notes.

What was checked

  • Every daily, weekly, monthly and yearly repeat example printed in RFC 5545 section 3.8.5.3 gives the dates the standard lists.
  • The time zone rules in Google-style and Outlook-style files give the same offset as the IANA time zone database for every hour from 2024 to 2027, for Los Angeles and Berlin.
  • The clock-change rules of RFC 5545 (a time that happens twice, a time that is skipped) give the standard's own New York examples.

What was not checked

The test calendars with timed, repeating and declined meetings were built by hand from the standard and the vendors' help pages. The tool has not yet been run on real exports of that kind from Google, Outlook or Apple. If a file gives a wrong number, the contact page takes a description (no file needed).

Limits

  • An event counts on the day it starts, in the time zone you pick. An event that runs past midnight is not split across two days.
  • All-day events are left out unless you set hours per all-day event. Then an event over several days gives one row per day, for the days inside your date range.
  • Declined meetings are left out only when you enter your own email address, and only for .ics files. The Outlook CSV has no declined, tentative or free status, so those tick boxes do nothing for it.
  • Client keywords match whole words, so "art" does not match "Party". A keyword with @ or a dot, like @acme.com, matches inside email addresses.
  • The "events shown as free" box leaves out events marked TRANSP:TRANSPARENT in the file. That this is what Google writes for events set to Free is not confirmed against a real Google export.
  • Repeat rules by the hour or minute, by week number, or by hour of the day are not expanded. Those series are listed as not counted. Calendar apps rarely write them.
  • A repeat that lands on a time skipped by a clock change (for example 2:30 on the night clocks go forward) is skipped, as the iCalendar standard says. Some calendar apps show it an hour later instead. The page names those dates.
  • "This and all later" changes written as RANGE=THISANDFUTURE are applied to the one meeting only, with a warning.
  • The Outlook CSV must have English column names. A CSV from a German, French or other localized Outlook is refused.
  • The Outlook CSV has no time zone. Its times are read as the wall-clock times of the computer that exported them.
  • Not tested against real exports of timed, repeating and declined events from Google, Apple or Outlook. The test files are built from the iCalendar standard and the vendors' help pages. Check the first timesheet against your calendar.
  • The Toggl Track, Harvest and Clockify import files follow those vendors' help pages and were not tested by importing into a real account.

Who runs it

An independent developer. The same person makes BooksReady and CatalogHop. No ads, no account, no tracking scripts.