Create a SQLite database containing data from your Toggl account.
  • Python 98.4%
  • Just 1.6%
Find a file
dependabot[bot] 0ed5e62498
pip prod(deps): bump the python-packages group with 2 updates (#86)
Bumps the python-packages group with 2 updates: [ruff](https://github.com/astral-sh/ruff) and [ty](https://github.com/astral-sh/ty).


Updates `ruff` from 0.17.1 to 0.17.2
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.17.1...0.17.2)

Updates `ty` from 0.0.90 to 0.0.91
- [Release notes](https://github.com/astral-sh/ty/releases)
- [Changelog](https://github.com/astral-sh/ty/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ty/compare/0.0.90...0.0.91)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.17.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-packages
- dependency-name: ty
  dependency-version: 0.0.91
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-packages
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-11-01 03:54:25 -08:00
.github ✅ Add Python 3.15 to the testing matrix (#85) 2026-10-11 08:53:22 -07:00
build/lib/toggl_to_sqlite [pre-commit.ci] auto fixes from pre-commit.com hooks 2026-08-09 06:07:26 -07:00
docs pip prod(deps): bump the python-packages group with 8 updates 2026-09-01 09:17:59 +00:00
src/toggl_to_sqlite ⬆️ upgrade depenedencies 2026-10-21 08:59:44 -07:00
tests style: apply ruff formatting to since logic implementation 2025-06-15 09:39:38 -07:00
.coveragerc fix: apply ruff formatting and update workflow 2025-06-15 08:43:30 -07:00
.gitignore fix: apply ruff formatting and update workflow 2025-06-15 08:43:30 -07:00
.isort.cfg Added infrastructure for easier contributing 2022-01-05 19:55:46 -08:00
.readthedocs.yaml clean up 2023-07-09 13:13:06 -07:00
bump-version.py ✨ Add security/docstring/type-check hooks and migrate to prek (#82) 2026-10-11 08:49:43 -07:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2021-10-31 07:33:04 -07:00
contributing.md chore: linting and formatting 2022-01-10 18:27:05 -08:00
justfile ✨ Add security/docstring/type-check hooks and migrate to prek (#82) 2026-10-11 08:49:43 -07:00
LICENSE Initial commit 2021-03-06 15:15:38 -08:00
mkdocs.yml clean up 2023-07-09 13:13:06 -07:00
prek.toml ✨ Add security/docstring/type-check hooks and migrate to prek (#82) 2026-10-11 08:49:43 -07:00
pyproject.toml ✅ Add Python 3.15 to the testing matrix (#85) 2026-10-11 08:53:22 -07:00
README.md 🔥 remove Python 3.9 2026-06-06 08:52:36 -07:00
setup.cfg chore: linting and formatting 2022-01-10 18:27:05 -08:00
uv.lock pip prod(deps): bump the python-packages group with 2 updates (#86) 2026-11-01 03:54:25 -08:00

toggl-to-sqlite

PyPI GitHub changelog Tests License Python Code style: ruff pre-commit.ci status

Save data from Toggl to a SQLite database using the modern Toggl API v9.

Features

  • ✅ Toggl API v9 - Uses the latest Toggl API for maximum compatibility
  • ✅ Complete Data Export - Time entries, workspaces, and projects
  • ✅ Flexible Date Ranges - Fetch all data or specify custom date ranges
  • ✅ SQLite Storage - Portable, queryable database format
  • ✅ 100% Test Coverage - Reliable and well-tested codebase
  • ✅ Modern Python - Supports Python 3.10+
  • ✅ Modern Tooling - Built with uv, ruff, and automated versioning

How to install

$ uv add toggl-to-sqlite

With pip

$ pip install toggl-to-sqlite

Usage

You will need to first obtain a valid API token for your toggl account. You can do this by running the auth command and following the prompts:

$ toggl-to-sqlite auth
You will need to get your API Token from this page

https://track.toggl.com/profile

Once you have your API Token enter it at the command line.

Authentication tokens written to auth.json

Now you can fetch all of your items from toggl like this:

$ toggl-to-sqlite fetch toggl.db

NB! By default toggl-to-sqlite only fetches data from the 25 previous days. As an alternative you can specify to get time_entries since a specific date. You do this by specifying the since option:

$ toggl-to-sqlite fetch -s 2021-03-13

You can choose to get only time_entries, projects, or workspaces by speciying a type in the argument like this.

To get ONLY your workspaces:

$ toggl-to-sqlite fetch -t workspaces toggl.db

To get your workspaces and projects:

$ toggl-to-sqlite fetch -t workspaces -t projects toggl.db

The default is to get all three of time_entries, projects, and workspaces

toggl-to-sqlite --help

Usage: toggl-to-sqlite [OPTIONS] COMMAND [ARGS]...

  Save Toggl data to a SQLite database

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  auth   Save authentication credentials to a JSON file
  fetch  Save Toggl data to a SQLite database

Using with Datasette

The SQLite database produced by this tool is designed to be browsed using Datasette. Use the datasette-render-timestamps plugin to improve the display of the timestamp values.

Development

This project uses modern Python tooling for development.

Prerequisites

  • Python 3.10+
  • uv (recommended) or pip
git clone https://github.com/ryancheley/toggl-to-sqlite
cd toggl-to-sqlite
uv sync --extra test

Setup with pip

git clone https://github.com/ryancheley/toggl-to-sqlite
cd toggl-to-sqlite
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -e ".[test]"

Running tests

# With uv
uv run pytest

# With pip
pytest

Code quality

This project uses ruff for linting and formatting:

# With uv
uv run ruff check .          # Linting
uv run ruff format .         # Formatting

# With pip
ruff check .
ruff format .

Version management

Versions are automatically managed using git tags:

# Create a new version
git tag v0.9.0
git push origin v0.9.0

# Or use the bump script
python bump-version.py patch  # 0.8.2 -> 0.8.3
python bump-version.py minor  # 0.8.2 -> 0.9.0
python bump-version.py major  # 0.8.2 -> 1.0.0

See CONTRIBUTING.md for more information on contributing to this project.

Requirements

  • Python 3.10 or higher
  • Valid Toggl account with API access