Automatically synchronise your Plex Watchlist with Radarr and Sonarr deletions.
Whenever a movie or series is removed in Radarr/Sonarr, PlexPulse instantly removes it from your Plex Watchlist β keeping your ecosystem neat, accurate, and clutter-free.
No more re-downloading removed content.
No more stale items in your Watchlist.
Removes titles from your Plex Watchlist when Radarr or Sonarr trigger:
MovieDeleteSeriesDelete
PlexPulse identifies the correct item using:
- TMDB ID
- TVDB ID
- IMDB ID
- File path fragments
- Fuzzy title matching
- Watchlist ID + fuzzy fallback
PlexPulse now loads your entire Plex library once at startup, creating a high-precision index of:
- TMDB β ratingKey
- IMDB β ratingKey
- TVDB β ratingKey
- File path fragments
- Cleaned titles
This massively reduces Plex API calls and speeds up matching.
A background thread refreshes the index every INDEX_REFRESH_HOURS (default 72).
You can also refresh manually:
GET /refresh
Check index size, memory footprint, and last refresh time:
GET /stats
PlexPulse only removes titles from your Plex Watchlist when:
- A full deletion event occurs in Radarr/Sonarr
- A matching Plex item is positively identified
It never touches your Plex library or files.
Built specifically for Synology, Unraid, Linux, macOS.
git clone https://github.com/MrCee/plexpulse.git
cd plexpulse
cp .env.example .env
nvim .env
Fill in:
- PLEX_BASEURL
- PLEX_TOKEN
- Library names
- Logging level (optional)
- INDEX_REFRESH_HOURS (optional)
docker compose up -d --build
Health check:
http://<ip>:8080/health
Enable only:
β On Movie Delete
URL:
http://plexpulse:8080/radarr
Enable only:
β On Series Delete
URL:
http://plexpulse:8080/sonarr
PlexPulse removes titles from your Plex Watchlist only when:
(Event: MovieDelete)
(Event: SeriesDelete)
Nothing else triggers cleanup β only full, intentional deletions.
PlexPulse syncs what you delete, keeping Plex aligned with your download manager.
At startup, PlexPulse scans your Plex libraries once, indexing:
- TMDB IDs
- IMDB IDs
- TVDB IDs
- File fragments from media items
- Cleaned titles
This index enables:
- Instant TMDB/IMDB/TVDB lookups
- Super-fast fuzzy matching
- Efficient path lookups
- Minimal Plex API calls
Index stats:
GET /stats
Example:
{
"built_at": "2025-11-18T00:52:57Z",
"tmdb": 783,
"imdb": 773,
"tvdb": 771,
"path_fragments": 464,
"titles": 785,
"memory_mb": 22.4
}
Runs every INDEX_REFRESH_HOURS (default: 72 hours).
Manual refresh:
GET /refresh
PlexPulse does not:
- Delete files
- Modify Plex library content
- Remove items directly from your library
- Trigger scans unless you explicitly enable it
- Change Radarr/Sonarr behaviour
It only removes items from Plex Watchlist, not your library.
When Radarr/Sonarr delete a file:
π Plex still shows it as βplayableβ until Plex itself detects the deletion.
Plex updates only when:
- Scheduled library scans run
- You manually press βScan Library Filesβ
- Plex auto-detects changes on disk
- A metadata refresh occurs
β‘ PlexPulse does not remove items from your Plex library.
β‘ PlexPulse cannot control or speed up Plexβs library scan schedule.
(Optional feature available on request:
βAdd Plex scan trigger support.β)
curl -X POST http://localhost:8080/radarr \
-H "Content-Type: application/json" \
-d '{
"eventType": "MovieDelete",
"movie": { "title": "Test", "tmdbId": 12345 }
}'
curl -X POST http://localhost:8080/sonarr \
-H "Content-Type: application/json" \
-d '{
"eventType": "SeriesDelete",
"series": { "title": "Test Show", "tvdbId": 54321 }
}'
PlexPulse never removes anything unless:
- Event type is a full deletion
- Matching succeeds
- Watchlist removal is confirmed
It does not touch files, your Plex library, or metadata.
- PRs welcome
- Matching logic expansions
- Indexing improvements
- Docker optimisations
MIT License β see the LICENSE file.
PlexPulse keeps your Plex Watchlist aligned with your real media library β exactly the automation Plex should have built in.
If you find PlexPulse useful, please consider β starring the repository!