Caution
I no longer actively maintain this project. See here for details. It should continue to work, but I might not respond to help issues and will not develop any requested features. Since this is open-source software, PRs are welcome.
A Microsoft Power Automate flow to synchronize Outlook 365 calendars or Google calendars. All synchronization combinations are supported:
- Outlook 365 <-> Outlook 365 (within the same tenant, or across different tenants)
- Outlook 365 <-> Google
- Google <-> Google
Note
This flow requires that you pay for the Power Automate Premium plan because the flow makes HTTP requests using the Premium-only HTTP
action!
If you are looking for a solution that works with the free plan of Power Automate, see https://github.com/MShekow/outlook-calendar-sync (Outlook 365 <-> Outlook 365) and https://github.com/MShekow/outlook-google-calendar-sync (Outlook 365 <-> Google). There is no version that supports Google <-> Google synchronization.
Download the most recent zip archive of the flow:
- To synchronize Outlook 365 with Google: download
- To synchronize Outlook 365 with Outlook 365: download
- To synchronize Google with Google: download
If you want to clean/delete all blocker events:
- For Google, download this helper PowerAuto flow
- For Outlook 365, download this helper PowerAuto flow
Please see this blog post for details and usage instructions.
- The SharePoint-based HTTP action (which was used by default because it was free) was replaced with the Premium
Http
action. Reason: the SharePoint HTTP action no longer supports URLs that point to non-SharePoint servers - Note: the v0.3 Power Automate flow is fully compatible with the v0.2.1 sync helper service! No corresponding v0.3 release is necessary for the sync helper service.
- New setting to configure End-to-end encryption of uploaded / downloaded mirror files (Power Automate action "Setting: cal1 upload or cal2 download encrypt or decrypt password (optional)")
- You can now use GitHub.com repositories as mirror file server
Initial release.
- New feature: endpoint
/compute-actions
supports a new optional headerX-Disable-Past-Event-Filter
which can be set to "true". In this case, the algorithm considers all submitted events, disabling the default behavior where it only considers cal 1 / 2 events for whichevent.start >= <now>
holds
- New feature: support for GitHub.com repositories for uploading and downloading mirror files. Files are created as regular commits to the repository
- New feature: endpoints
/retrieve-calendar-file-proxy
and/extract-events
now support the headerX-Data-Encryption-Password
, encrypting / decrypting data downloaded from (or uploaded to) the location specified in theX-File-Location
header
Initial release.
If you want to self-host the sync helper service, Docker is recommended. There is a Docker compose stack available.
To build the image and run the service, type docker compose up -d
To stop and clean up the service, type docker compose down
If you want SSL termination (e.g. using the free SSL certificates provided by Let's Encrypt), you need to put a reverse proxy (HTTP) server in front of the sync helper service. The reverse proxy then does the SSL termination. See e.g. here for how to achieve this with Traefik, or here for how to use Nginx.
The Python-based sync helper service uses Poetry for package management. To avoid conflicts between the dependencies of Poetry and the dependencies of this project, you should either install Poetry by other means (e.g. with Brew), or use separate (virtual) environments, e.g. as follows (for UNIX):
python3 -m venv .poetry
to create Poetry's virtual env./.poetry/bin/pip install -r requirements-poetry.txt
to install Poetry into that venvpython3 -m venv .venv
to create the project's venvsource .venv/bin/activate
to activate the project's venv./.poetry/bin/poetry install --with test
(optional additional argument:--sync
) to install/reinstall the dependencies with Poetry
Run pytest tests
to run all unit or integration tests defined in the tests
folder.