PlexPulse — keep your Plex Watchlist aligned with reality.
PlexPulse ensures your Plex Account Watchlist accurately reflects what is actually present in your Plex libraries.
If something disappears from Plex, PlexPulse will eventually remove it from your Watchlist — safely, deterministically, and without guesswork.
No stale Watchlist entries.
No accidental removals.
No operator memory required.
PlexPulse answers one authoritative question:
“Does Plex still report this item as present?”
It does this by running a baseline scan against Plex and maintaining a persistent Library State Ledger.
Every item moves through a strict lifecycle:
current → missing → deleted
Watchlist cleanup is driven only by this lifecycle — never by filesystem state, assumptions, or partial signals.
PlexPulse maintains a persistent JSON-lines ledger recording:
- First time an item was seen in Plex
- Last time an item was observed
- When it became missing
- When it was confirmed deleted
- Optional historical delete intent from Radarr / Sonarr
The ledger is:
- Human-auditable
- Deterministic
- Idempotent
- Safe to rebuild against
- Never truncated automatically
Nothing is inferred.
Nothing is guessed.
There is exactly one command you need to run manually:
maintenance/plexpulse-reconcile.shThis command always performs the correct sequence:
- Baseline — observe current Plex library truth
- Backfill — import optional Arr deletion intent (non-fatal)
- Reconcile — enforce Watchlist policy via the running server
You never need to remember ordering. You never need to run baseline separately. You never need to call curl manually.
Delete something in Plex → run reconcile → trust the outcome.
PlexPulse reacts to what Plex reports, not to filesystem events.
This means:
- Deleting a file does not immediately change ledger state
- Plex must stop returning the item via its API
- Only then does the item become
missing - Only after that can it become
deleted
With:
PLEXPULSE_LEDGER_DELETE_AFTER_HOURS=0This means:
The moment Plex no longer reports an item, it becomes eligible for Watchlist removal.
There is no grace window after absence is observed, but absence must be observed first.
This design avoids:
- Race conditions
- Partial Plex refreshes
- Temporary metadata inconsistencies
- Accidental Watchlist removals
PlexPulse is intentionally conservative — and therefore safe.
PlexPulse is deliberately structured into clear phases:
- Queries Plex libraries
- Updates ledger presence and timestamps
- Marks unseen items as
missing - Optionally promotes
missing → deletedbased on policy
- Parses Radarr / Sonarr logs
- Records historical delete intent only
- Never overrides Plex presence truth
- Reads ledger state
- Applies Watchlist cleanup policy
- Executes side-effects only via server Admin API
No phase is skipped. No phase is collapsed. No phase infers intent.
PlexPulse is designed to run cleanly on:
- Synology
- Unraid
- Linux
- macOS
Key principles:
- Docker controls all host ↔ container mappings
- Absolute paths are used consistently
- Runtime state lives in a single bind-mounted directory
- Operator scripts may be run on host or inside container
- No Docker-in-Docker
- No hidden host assumptions
git clone https://github.com/MrCee/plexpulse.git
cd plexpulsecp .env.example .env
nvim .envRequired values:
PLEX_BASEURLPLEX_TOKENPLEXPULSE_STATE_DIRPLEXPULSE_LIBRARY_LEDGER
Optional policy controls:
PLEXPULSE_LEDGER_DELETE_AFTER_HOURSPLEXPULSE_AUTOCLEAN_WATCHLIST_ON_LIBRARY_DELETE
docker compose build --no-cache
docker compose up -dOn startup, PlexPulse will:
- Ensure state directory exists
- Ensure ledger file exists
- Run baseline
- Run backfill
- Trigger reconciliation
- Start the webhook server
After deleting items from Plex:
maintenance/plexpulse-reconcile.shThat’s it.
You do not need to:
- Run baseline manually
- Call curl endpoints
- Inspect internal state unless debugging
For visibility and debugging:
GET /inspect/index— Watchlist index snapshotGET /inspect/watchlist— Current Watchlist view
These are read-only and safe.
PlexPulse never:
- Deletes media files
- Modifies Plex libraries
- Alters Radarr or Sonarr configuration
- Acts on partial deletes
- Performs silent or inferred automation
Watchlist removal happens only when:
- Plex no longer reports the item and
- Ledger policy allows deletion and
- The server confirms the removal
MIT License — see the LICENSE file.
PlexPulse is designed to be boring, predictable, and safe.
Delete something.
Run one command.
Trust the result.
PlexPulse — because your Watchlist should reflect reality, not memory.