Enterprise-grade automation for syncing your Simkl "Plan to Watch" lists to Overseerr, automatically triggering downloads via your *ARR stack.
✅ Smart Filtering: Only syncs items marked as "Plan to Watch" - not completed or currently watching ✅ Dual Media Support: Movies and TV shows ✅ Enterprise Architecture: Built on ListSync framework ✅ Production Ready: Comprehensive error handling and logging ✅ Flexible Execution: CLI with dry-run mode, selective sync options
# Clone and setup
cd /home/brian/list-sync
python3 setup_simkl.pyThe setup will guide you through:
- Creating a Simkl developer app
- Getting API credentials and access token
- Configuring Overseerr connection
- Testing all connections
# Sync everything (movies + shows)
python3 simkl_sync.py
# Dry run (see what would be synced)
python3 simkl_sync.py --dry-run
# Sync only movies
python3 simkl_sync.py --movies
# Sync only TV shows
python3 simkl_sync.py --showsAdd to crontab for automatic daily sync:
# Daily sync at 2 AM
0 2 * * * cd /home/brian/list-sync && python3 simkl_sync.py >/dev/null 2>&1- Connects to Simkl API using your credentials
- Fetches watchlists filtering for
status = "plantowatch" - Submits requests to Overseerr for each item
- Overseerr triggers Radarr/Sonarr to download content
- Content appears in your Plex library automatically
All settings are stored in .env.simkl:
# Simkl API Configuration
SIMKL_CLIENT_ID=your_client_id
SIMKL_CLIENT_SECRET=your_client_secret
SIMKL_ACCESS_TOKEN=your_access_token
# Overseerr Configuration
OVERSEERR_URL=http://your_overseerr_host:5055
OVERSEERR_API_KEY=your_api_key
OVERSEERR_REQUESTER_USER_ID=1
# Sync Configuration
SYNC_INTERVAL_HOURS=24
LOG_LEVEL=INFO- Go to https://simkl.com/settings/developer
- Create new app:
- Name:
ListSync Integration - Description:
Automated sync for Simkl watchlists - Redirect URI:
urn:ietf:wg:oauth:2.0:oob
- Name:
- Copy Client ID and Secret to setup script
Simkl API → ListSync Provider → Overseerr API → Radarr/Sonarr → Downloads
- Provider:
/list_sync/providers/simkl.py- Core integration logic - Sync Script:
simkl_sync.py- Production sync execution - Setup Script:
setup_simkl.py- Configuration and authentication
Movies: Only syncs items with status = "plantowatch"
TV Shows: Only syncs items with status = "plantowatch"
Excluded:
completed- Already watchedwatching- Currently watchingdropped- Abandoned showspaused- Paused shows
# Check your Simkl lists
python3 simkl_sync.py --dry-runItems must be marked as "Plan to Watch" in Simkl, not just added to watchlist.
# Re-run setup to refresh tokens
python3 setup_simkl.py- Verify Overseerr is accessible
- Check API keys in
.env.simkl - Ensure *ARR services are running
simkl_sync.py- Main sync scriptsetup_simkl.py- Configuration setup.env.simkl- Configuration filelist_sync/providers/simkl.py- Provider implementationarchive/- Development files (archived)
The integration follows ListSync patterns and can be extended or customized as needed. All logging goes to console for easy monitoring and debugging.
Enterprise-grade Simkl integration - ready for production deployment.