This document describes how to correctly configure Plex, Radarr, and Sonarr to work with PlexPulse.
It focuses on operator setup and delete semantics, not architecture.
For system design and guarantees, see the main README.md.
PlexPulse is reactive, not controlling.
- PlexPulse does not delete files
- PlexPulse does not decide what Radarr/Sonarr delete
- PlexPulse does not modify Plex libraries
- PlexPulse reacts to outcomes, not intentions
Radarr and Sonarr decide:
- what to delete
- whether files are removed
- how items are unmanaged
PlexPulse observes:
- Plex library state
- Arr deletion intent
- Then reconciles Watchlist state safely
Keep this distinction in mind while configuring.
PlexPulse requires:
- A Plex Server Token (for library observation)
- A Plex Account Token (for Watchlist removal via Discover)
Ensure these are correctly set in your .env.
No special Plex settings are required beyond:
- Normal library access
- Account Watchlist enabled
PlexPulse:
- Queries Plex libraries via API
- Removes Watchlist items via Plex Discover API
- Never deletes media
- Never alters library configuration
If Plex still reports an item, PlexPulse treats it as present, regardless of Arr activity.
Radarr is a core integration.
It provides:
- Movie deletion intent
- Immediate Watchlist cleanup signals
In Radarr:
- Go to Settings → Connect
- Click Add → Webhook
- Configure as follows:
| Setting | Value |
|---|---|
| URL | http://<plexpulse-host>:8080/webhook/radarr |
| Method | POST |
| On Delete | ✅ Enabled |
| On Movie File Delete | ❌ Disabled |
| On Movie File Delete (Upgrade) | ❌ Disabled |
Save the webhook.
Radarr allows multiple deletion modes.
PlexPulse does not enforce these — you do.
| Radarr Action | Effect | PlexPulse Reaction |
|---|---|---|
| Delete Movie + Files | Movie removed from disk and Plex | Watchlist removed immediately (if resolvable) |
| Delete Movie (keep files) | Movie removed from Radarr only | Plex still reports item → no Watchlist removal |
| Unmonitor | No deletion | No effect |
| Manual file deletion | Plex decides | PlexPulse reacts after baseline |
👉 Recommendation
If your intent is full removal, ensure Radarr deletes:
- the movie
- the files
- the Plex-visible media
PlexPulse reacts only after Plex no longer reports the item.
Radarr provides:
movie.tmdbId
PlexPulse maps this to:
tmdb://<tmdbId>
This identifier is used for:
- Watchlist resolution
- Ledger intent annotation
Sonarr is also a core integration.
It provides:
- Series deletion intent
- Immediate Watchlist cleanup signals
In Sonarr:
- Go to Settings → Connect
- Click Add → Webhook
- Configure as follows:
| Setting | Value |
|---|---|
| URL | http://<plexpulse-host>:8080/webhook/sonarr |
| Method | POST |
| On Delete | ✅ Enabled |
| On Episode File Delete | ❌ Disabled |
| On Episode File Delete (Upgrade) | ❌ Disabled |
Save the webhook.
Sonarr deletion behaviour is more nuanced than Radarr.
| Sonarr Action | Effect | PlexPulse Reaction |
|---|---|---|
| Delete Series + Files | Series removed from Plex | Watchlist removed immediately |
| Delete Series (keep files) | Files remain | Plex still reports series → no removal |
| Delete Season only | Partial presence | No Watchlist removal |
| Delete Episode | Series still present | No Watchlist removal |
👉 Recommendation
Only expect Watchlist removal when:
- the entire series is removed
- Plex no longer reports the series
Partial deletions do not qualify.
Sonarr provides:
series.tvdbId
PlexPulse maps this to:
tvdb://<tvdbId>
This is the canonical identifier for shows.
Webhooks are:
- Fast
- Opportunistic
- Non-authoritative
If a webhook arrives:
- before the Watchlist index is built
- during Plex refresh lag
- during container startup
…it may not immediately match.
This is expected and safe.
Missed webhooks are not a failure.
PlexPulse will correct state during:
- the next Baseline
- the next Reconcile run
- container restart
Correctness always converges.
curl http://<plexpulse-host>:8080/admin/index-readyExpected:
{ "ready": true }curl -X POST http://<plexpulse-host>:8080/admin/rebuild-indexPlexPulse guarantees:
- No file deletions
- No forced Arr actions
- No Plex library mutation
- No reliance on webhooks alone
Radarr and Sonarr remain fully in control of deletion behaviour.
PlexPulse observes, records, and reconciles — nothing more.
If something looks wrong:
- Check Plex first
- Then check Arr deletion behaviour
- Then run Baseline + Reconcile
Do not attempt to “fix” issues by forcing webhooks.
The system is designed to converge safely.