toggl-to-sqlite
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.9+
- ✅ Modern Tooling - Built with uv, ruff, and automated versioning
How to install
With uv (recommended)
$ 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.9+
- uv (recommended) or pip
Setup with uv (recommended)
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.9 or higher
- Valid Toggl account with API access
Metadata
Release files for toggl-to-sqlite 0.9.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| toggl_to_sqlite-0.9.0.tar.gz | 58.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| toggl_to_sqlite-0.9.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 69.8 kB
Release files / toggl_to_sqlite-0.9.0.tar.gz
| Download URL | toggl_to_sqlite-0.9.0.tar.gz |
|---|---|
| Size | 58.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cc51b1b3f5bb25d17a4ff10ab63ee15679bdc74192900f5637beec66d7a40ba5
|
|
BLAKE2b-256 checksum How to use checksums |
bfbaecdec02986f9d1200ed6789e3ad857564917b6153ac95666181a4928e6f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 15, 2025.
Transparency logRelease files / toggl_to_sqlite-0.9.0-py3-none-any.whl
| Download URL | toggl_to_sqlite-0.9.0-py3-none-any.whl |
|---|---|
| Size | 11.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4c2b72cae89f10136d6b761f783884b730fc224eb8aa89a01f29d526589a8d91
|
|
BLAKE2b-256 checksum How to use checksums |
18a62b364660257c7979414b739c832e827fbbc44aaaa41259a45190555af91b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 15, 2025.
Transparency log