These tools provides a streamlined way to sync and manage time entries across multiple platforms, including Toggl, Wrike, Clockify, Jira and Google Sheets. This tool retrieves time entries from various platforms, processes them, and enables efficient project and task tracking across these applications.
This is a technical project which requires you to understand the APIs of the services you are using. Don't execute commands blindly.
credentials.json
Here's how I use this project.
This workflow uses Google Sheets as a review step, giving me control before syncing data to other platforms.
credentials.json
for integration (see instructions below)To install Time-Sync-Tools, follow these steps:
# Clone the repository
git clone https://github.com/GabLeRoux/time-sync-tools.git
# Navigate into the project directory
cd time-sync-tools
# Install dependencies
pip install -r requirements.txt
Copy the .env.example
file to .env
:
cp .env.example .env
Update the .env
file with your specific API keys for Toggl, Wrike, Clockify, OpenAI, etc.
This project uses a yaml configuration file located at config.yaml
to store Jira configuration details.
cp config.yaml.example config.yaml
Then update the config.yaml
file with your Jira configuration details. You can have multiple jira configurations.
python main.py toggl get_time_entries --start_date=YYYY-MM-DD --end_date=YYYY-MM-DD
python main.py toggl add_time_entry --description="DESCRIPTION" --start_time="YYYY-MM-DDTHH:MM:SS" --end_time="YYYY-MM-DDTHH:MM:SS"
python main.py wrike list_all_projects
python main.py wrike list_all_folders
python main.py wrike get_all_tasks
python main.py wrike get_task_by_id --task_id=YOUR_TASK_ID
Manage timelogs (list, create, delete) for tasks. See commands for details.
python main.py clockify get_time_entries --start_date=YYYY-MM-DD --end_date=YYYY-MM-DD
python main.py clockify add_time_entry --description="DESCRIPTION" --start_time="YYYY-MM-DDTHH:MM:SS" --end_time="YYYY-MM-DDTHH:MM:SS"
python main.py openai find_closest_match --search_param="SEARCH_TERM" --options="option1,option2,option3"
python main.py openai find_closest_match --search_param="SEARCH_TERM" --options="option1,option2,option3" --model="MODEL_NAME"
credentials.json
credentials.json
.credentials.json
in the root directory of your project or specify the path in your google_sheets.py
file.Synchronizes time logs from Google Sheets to Jira. Use the Jira project key as the client name.
python main.py google_sheets sync --client="jira_project_key_from_config"
Replace jira_project_key_from_config
with your configured Jira project key.
Retrieves data from the specified sheet title within a Google Sheets document.
python main.py google_sheets fetch_data_from_sheet --title="SHEET_TITLE" --spreadsheet_id="YOUR_SPREADSHEET_ID"
Replace SHEET_TITLE
and YOUR_SPREADSHEET_ID
with your specific values.
Syncs task data from Wrike to Google Sheets by creating or updating a specific sheet.
python main.py google_sheets sync_wrike_to_sheets --spreadsheet_id="YOUR_SPREADSHEET_ID"
Replace YOUR_SPREADSHEET_ID
with your Google Sheet ID.
Transfers data from Google Sheets to Wrike, creating time logs based on the provided data. Use --dry_run=True
for testing without making changes in Wrike.
python main.py google_sheets sync_sheet_to_wrike --title="SHEET_TITLE" --spreadsheet_id="YOUR_SPREADSHEET_ID" --dry_run=True
Replace YOUR_SPREADSHEET_ID
and SHEET_TITLE
with the appropriate values in each command. Use --dry_run=True
for testing mode to validate data without making changes in the target platform.
python main.py jira log_time_to_task --task_id="TASK_ID" --start_datetime="YYYY-MM-DD HH:MM:SS" --time_spent_seconds=SECONDS --comment="COMMENT"
⚠️ Warning: This operation permanently deletes worklogs. Always use --dry_run=True first to verify the affected entries.
python main.py jira delete_all_worklogs_for_user_on_given_day --date="YYYY-MM-DD" --dry_run=True
This project uses uv
to manage dependencies and development tasks.
# install uv (see https://docs.astral.sh/uv/getting-started/installation/)
curl -LsSf https://astral.sh/uv/install.sh | sh
# create a virtual environment
uv venv --python=3.11
# activate the virtual environment
source venv/bin/activate
# compile the requirements
uv pip compile requirements.in -o requirements.txt
# install the requirements
uv pip sync requirements.txt
pytest
uv tool run ruff check --select I --fix .
uv tool run ruff format
Contributions are welcome!
Don't expect support. This is a personal project. You can still open issues if you want, but I might not have time to help you.