Skip to main content

TimeTree Exporter

PyPI Python 3.x License Downloads Buy Me A Coffee

A Tool for Exporting TimeTree Calendar and Converting to iCalendar Format (.ics) (RFC 5545 compatible, with selected RFC 7986 properties)
This script works by scraping the TimeTree web app and converting the data to iCal format. (The .ics file can then be imported into other calendar apps such as Google Calendar, Apple Calendar, Outlook Calendar, etc.)

[!Warning] This is an independent, community-built project and is not affiliated with or endorsed by TimeTree, Inc. It uses unofficial, reverse-engineered TimeTree web APIs, which may change or stop working at any time without notice. As a result, the tool could break unexpectedly. Please use it responsibly—sending too many requests in a short period may lead to rate limiting, temporary blocks, or other restrictions from TimeTree.

Installation

[!Note] Timetree Exporter requires Python 3.10 or later.

If you are on mac, you can install it using brew:

brew install eoleedi/tap/timetree-exporter

You can also install it using uvx, pip, or pipx:

pip install timetree-exporter

Usage

timetree-exporter -o path/to/output.ics

This will prompt you to enter your TimeTree email and password and select the calendar you want to export.

Then, you can import the ics file to your calendar app.

[!Note] 💡 You are advised to import the ICS file into a separate calendar (e.g., Google Calendar) so that if anything goes wrong, you can simply delete the calendar and reimport it.

Advanced Usage

  • Specify your email address using the -e option.

    timetree-exporter -e email@example.com
    
  • Specify the calendar code using the -c or --calendar_code option.

    timetree-exporter -c calendar_code
    

    Note: Find the calendar code in the URL of the calendar page or when running the script without the -c option.

  • Export a public calendar by id without signing in.

    timetree-exporter --public-calendar -c public_calendar_id
    

    Note: Public calendar events use TimeTree's public API and may not include labels, alerts, recurrences, or UUIDs. Public calendar metadata such as source links, images, and colors is exported with RFC 7986 properties like SOURCE, IMAGE, and COLOR when available. Calendar apps that only implement RFC 5545 may ignore these optional fields.

  • You can pass your email address and password with environment variables. (usually for automation purposes)

    export TIMETREE_EMAIL=email@example.com
    export TIMETREE_PASSWORD=password
    
  • Create separate ICS files for each label with a custom output directory.

    timetree-exporter --split-by-label
    

    This creates individual ICS files for each label (e.g., timetree_work.ics, timetree_personal.ics).

  • Include private event comments.

    timetree-exporter --include-comments
    

    Comments are fetched from TimeTree's event activities endpoint and exported as iCalendar COMMENT properties, prefixed with the author name when available.

    To change the number of concurrent requests used while fetching comments, pass --num-workers.

    timetree-exporter --include-comments --num-workers 5
    

    The default is 10.

    [!Caution] This option is disabled by default because it makes one or more extra TimeTree requests per event. It can be slow for large calendars and may trigger TimeTree rate limits.

  • Include images attached to private events.

    timetree-exporter --include-images --num-workers 2
    

    Images are saved beside the ICS output in timetree_images/, grouped by event UUID. The timetree_images.json file maps each image to its event UUID, title, start date, object key, and relative path. Existing image files are skipped, so the export can be run again safely. This option applies only to private calendars and makes additional activity and image requests.

Limitations

  • TimeTree labels include both a category name and a color. When using --split-by-label, each category is saved as a separate ICS file.
  • Label color information is preserved in the ICS output, but Google Calendar does not apply those event colors when importing ICS files. If you rely on colors to organize events, you may need to check historical color information in TimeTree.
  • TimeTree event notes are exported as the iCalendar DESCRIPTION. Private event comments are only exported when --include-comments is used.

Development

For development setup and contribution details, see DEVELOPMENT.md.

Support

If you think it's helpful, kindly support me!

"Buy Me A Coffee"

Metadata

Release files for timetree-exporter 0.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for timetree-exporter 0.9.0
File Size Uploaded
timetree_exporter-0.9.0.tar.gz 25.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for timetree-exporter 0.9.0
File Interpreter ABI Platform
timetree_exporter-0.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 50.2 kB

Release files / timetree_exporter-0.9.0.tar.gz

Download URL timetree_exporter-0.9.0.tar.gz
Size 25.0 kB
Tags Source
SHA-256 checksum
How to use checksums
30a4e31a7d56b03ccc022ea9e75f3696e680128d127797b5e048cde71e21533b
BLAKE2b-256 checksum
How to use checksums
545498cf22711f2fed3f60030a4ca9f5a47970f50329cf04097094d1aa9dd9ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / timetree_exporter-0.9.0-py3-none-any.whl

Download URL timetree_exporter-0.9.0-py3-none-any.whl
Size 25.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e6d2748d403a82abd8523c36d0a99b402e3fc79088a65b78eb81488206925087
BLAKE2b-256 checksum
How to use checksums
152352399237f859062f845885c535432667cc55487a3d434e0e2ab7b1c7aa7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.9.0 This release

2 release files

0.8.0

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page