Skip to main content

Sync IMDb watchlist (TV only) into Sonarr

Project description

IMDb Watchlist to Sonarr Sync

Automatically sync TV shows from your IMDb watchlist to Sonarr. This script fetches all TV shows from your IMDb watchlist and adds them to Sonarr with your preferred quality profile and monitoring settings.

Python 3.9+ Code style: black Linting: ruff Type checked: mypy Security: bandit

Features

  • Full Pagination Support - Processes entire IMDb watchlist (6000+ items)
  • Secure Configuration - API keys stored in .env file (never committed)
  • Smart Filtering - Only processes TV shows (series, mini-series, TV movies)
  • Duplicate Detection - Skips shows already in Sonarr
  • Direct IMDb Lookups - No external APIs needed (except Sonarr)
  • Dry-Run Mode - Test safely without making changes
  • Professional Logging - Timestamped, configurable log levels
  • Connection Pooling - Efficient HTTP requests with session reuse
  • Exponential Backoff - Automatic retry with smart backoff strategy
  • Type Safe - Full type hints and mypy compliance
  • Production Ready - Comprehensive error handling and validation

Quick Start

1. Install Dependencies

# Clone the repository
git clone <repository-url>
cd imdb_watchlist_to_sonarr

# Create virtual environment
python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

2. Configure Your Settings

# Copy the example configuration
cp .env.example .env

# Edit with your actual values
nano .env  # or vim, code, etc.

Required settings in .env:

SONARR_URL=http://localhost:8989
SONARR_API_KEY=your_sonarr_api_key_here
IMDB_WATCHLIST_URL=https://www.imdb.com/user/urXXXXXXX/watchlist/

3. Run the Script

# Test without making changes (recommended first run)
python3 imdb_watchlist_to_sonarr.py --dry-run

# Or use make for convenience
make dry-run

# When ready, run for real
make run

Usage

Basic Commands

# Dry run (safe, no changes made)
make dry-run

# Live run (adds shows to Sonarr)
make run

# Show version
make version

# Show all available commands
make help

Advanced Options

# Process only first 3 pages (for testing)
python3 imdb_watchlist_to_sonarr.py --dry-run --max-pages 3

# Verbose logging
python3 imdb_watchlist_to_sonarr.py --dry-run --verbose

# Override quality profile
python3 imdb_watchlist_to_sonarr.py --quality-profile "Ultra-HD" --dry-run

# All options
python3 imdb_watchlist_to_sonarr.py --help

Configuration

.env File (Recommended)

All settings can be configured in .env:

# Sonarr Configuration
SONARR_URL=http://localhost:8989
SONARR_API_KEY=your_api_key
SONARR_ROOT_FOLDER=/Volumes/public/Television
SONARR_QUALITY_PROFILE=HD-1080p
SONARR_MONITOR=all

# IMDb Configuration
IMDB_WATCHLIST_URL=https://www.imdb.com/user/urXXXXXXX/watchlist/

# Script Behavior
DRY_RUN=false

See CONFIGURATION.md for complete documentation.

Getting Your Configuration Values

Sonarr API Key:

  1. Open Sonarr → Settings → General → Security
  2. Copy the API Key

IMDb Watchlist URL:

  1. Go to IMDb → Your Watchlist
  2. Copy the URL from your browser
  3. Format: https://www.imdb.com/user/urXXXXXXX/watchlist/

Development

Setup Development Environment

# Install development dependencies
make install-dev

# Run all quality checks
make check-all

# Format code
make format

# Run tests
make test

Code Quality

This project maintains high code quality standards:

  • Linting: ruff (0 errors)
  • Formatting: black (100-char lines)
  • Type Checking: mypy (strict mode)
  • Security: bandit scanning
  • Testing: pytest with coverage

Run all checks:

make check-all

Architecture

Data Flow

  1. Fetch IMDb Watchlist → Parse JSON from NEXT_DATA block
  2. Filter TV Shows → Extract tvSeries, tvMiniSeries, tvMovie
  3. Paginate → Process all pages (250 items each)
  4. Check Sonarr → Skip shows already in library
  5. Lookup in Sonarr → Direct IMDb ID lookup (no TVMaze needed)
  6. Add to Sonarr → With quality profile and monitoring settings

Performance

  • Connection Pooling: Reuses HTTP connections for efficiency
  • Exponential Backoff: Smart retry strategy (1s → 10s)
  • Batch Processing: Processes 50 shows at a time with progress indicators
  • Optimized Lookups: Direct Sonarr IMDb lookups (~40% faster than TVMaze)

Documentation

Security

This project follows security best practices:

  • ✅ API keys stored in .env file (not in code)
  • .env in .gitignore (never committed to git)
  • ✅ Input validation for URLs and API keys
  • ✅ No secrets in shell history or process lists
  • ✅ Security scanning with bandit (0 issues)
  • ✅ Optional system keyring support

See CONFIGURATION.md for security best practices.

Requirements

  • Python 3.9+
  • Sonarr v3+ with API access
  • IMDb watchlist (public or private with cookie)

Dependencies

  • requests - HTTP library
  • python-dotenv - Environment variable management

Development Dependencies

  • ruff - Fast Python linter
  • black - Code formatter
  • mypy - Static type checker
  • bandit - Security scanner
  • pytest - Testing framework

Troubleshooting

Script can't find .env file

Make sure .env is in the project root directory (same directory as the script).

API key validation fails

Ensure your Sonarr API key is at least 10 characters and correct.

No shows found

  • Verify your IMDb watchlist URL is correct
  • Check that you have TV shows (not just movies) in your watchlist
  • For private watchlists, add IMDB_COOKIE to .env

Shows not being added

  • Check Sonarr logs for errors
  • Verify quality profile name matches exactly (case-sensitive)
  • Ensure root folder path exists and is writable

For more help, see CONFIGURATION.md.

Contributing

Contributions welcome! Please ensure:

  1. All tests pass: make check-all
  2. Code is formatted: make format
  3. Type hints are complete: make type-check
  4. Security scan passes: make security-check

License

This project is provided as-is for personal use.

Changelog

v1.0.0 - 2025-10-25

Major Features:

  • Full IMDb watchlist pagination support
  • Direct Sonarr IMDb lookups (no TVMaze dependency)
  • Secure .env configuration
  • Professional logging system
  • Type-safe codebase with full mypy compliance

Performance:

  • Connection pooling with requests.Session
  • Exponential backoff retry mechanism
  • 40% faster than original implementation

Developer Experience:

  • Comprehensive Makefile with 20+ commands
  • Complete documentation suite
  • Zero linting/type errors
  • Security scanning integration

Security:

  • Input validation for all user inputs
  • .env file support with .gitignore protection
  • Optional system keyring integration
  • Bandit security scanning (0 issues)

See IMPROVEMENTS.md for complete list of enhancements.

Acknowledgments

Built with modern Python best practices and enterprise-level code quality standards.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

imdb_watchlist_to_sonarr-1.0.0.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

imdb_watchlist_to_sonarr-1.0.0-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file imdb_watchlist_to_sonarr-1.0.0.tar.gz.

File metadata

  • Download URL: imdb_watchlist_to_sonarr-1.0.0.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for imdb_watchlist_to_sonarr-1.0.0.tar.gz
Algorithm Hash digest
SHA256 df3ff752c36144e527cdc1fd254acc09709dfb1980ff6e4c6b82273fd74a43ea
MD5 97c1108f1816398654b28914db21c4fa
BLAKE2b-256 9f1eeebc02f6b95b7eff6c07f00fee3dd6fa57dc21fe5eaabbaa26297b7adb62

See more details on using hashes here.

File details

Details for the file imdb_watchlist_to_sonarr-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for imdb_watchlist_to_sonarr-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1b7b1458eac226c07a32da85b993dbb2a7ff7c341471f848cdcad6525a23a8d1
MD5 676f6193a8e0726b5e3cc99788c3af91
BLAKE2b-256 06620fc6a56b1b1d3ce544d6577adedaa3d7f07a6f15c5bfa2697984b04a63aa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page