Seerr
Seerr integration brings media request data into Librariarr for use in lifecycle rules.
- Go to Settings → Integrations
- Under the Seerr section, click Add Instance
- Enter:
- Name: A label (e.g., “Seerr”)
- URL: Seerr base URL (e.g.,
http://192.168.1.100:5055) — the address Librariarr uses to reach Seerr - External URL (optional): The address your browser uses for Seerr (e.g.,
https://requests.example.com), starting withhttp://orhttps://. Used for the Open in Seerr link on media detail pages; falls back to URL when empty - API Key: Found in Seerr → Settings → General → API Key
- Click Test to verify — Save stays disabled until the test passes
- Save
What It Provides
Section titled “What It Provides”Seerr integration makes request metadata available in Librariarr:
| Data | Description |
|---|---|
| Request status | Whether media was requested, approved, or declined |
| Requester | Who requested the media |
| Request date | When the most recent request was made |
| Request count | Number of requests for this media |
| Approval/decline date | When the most recent request was approved or declined |
When a title has several requests (an HD and a 4K request, a re-request after it was deleted, or requests on several Seerr instances), the dates are those of the most recent one. A title deleted by a lifecycle rule and then requested again therefore counts as freshly requested, not as requested years ago.
A request counts as approved once Seerr has approved it — including requests Seerr has since marked Completed (the media arrived) or Failed (the hand-off to Sonarr/Radarr failed). Completed is the normal status of anything requested that is now in your library.
Use on the Dashboard
Section titled “Use on the Dashboard”Once a Seerr instance is connected, the Seerr Requests card can be added from the dashboard’s main tab (in Edit Layout mode). It shows per-user request statistics with watch follow-through:
| Column | Description |
|---|---|
| Total | Total requests submitted by the user |
| Movies | Movie requests |
| Movie % | Percentage of requested movies the user has watched |
| Series | TV series requests |
| Series % | Episodes watched as a percentage of episodes available across all requested series |
| Overall % | Combined watch percentage across movies and series episodes |
The card has two views: a compact top-5 leaderboard (default) and a full sortable table (toggle via “View all”). Stats are fetched live from Seerr and cached for 60 seconds.
Drill down into a user’s requests
Section titled “Drill down into a user’s requests”Click any user row to open a dialog with their full request history. Each entry shows:
- Poster, title, and year (resolved from your library when available, or fetched from the Seerr instance the request came from otherwise)
- Media status badge (Available, Partial, Processing, Pending, Blocklisted, Deleted) — for a 4K request, the status of the 4K copy
- 4K badge when applicable
- Watch indicator (per-episode progress for series)
- Created date
Clicking a request that’s in your library navigates to the corresponding library page (/library/movies/[id] for movies, /library/series/show/[id] for series). Requests for media that aren’t in your library are shown but not clickable.
The dialog supports filtering (All / Movies / Series / Watched / In progress) and free-text title search.
Watch correlation
Section titled “Watch correlation”Watch history is correlated by matching the requester’s media-server account in Seerr against the username in your Plex/Jellyfin/Emby watch history. Requirements:
- The Seerr user must be linked to a Plex account (
plexUsername) or a Jellyfin/Emby account (jellyfinUsername) — visible in Seerr → Users - The matching media server user must share that username
- Watch history must have been synced from the media server
Users without a linked account appear in the card with an icon indicating that watch history can’t be correlated. They are left out of the header’s overall watched percentage and sort below everyone else in the percentage columns.
Movie % counts requests: two requests for the same watched film (an HD and a 4K request, say) are both counted as watched. For series, the watched count is computed per-episode: the numerator is the number of episodes the user has played, the denominator is the total number of episodes available in your library for that series. A series is matched to your library by TVDB ID, or by TMDB ID when either side has no TVDB ID, and counts once however many requests point at it (Seerr creates a separate request for each later batch of seasons).
If a Seerr instance can’t be read in full (unreachable, or its request list changed faster than it could be paged), the card and the drill-down show what the other instances returned and are not cached, so the next load tries again.
Use in Lifecycle Rules
Section titled “Use in Lifecycle Rules”Seerr data is available as rule conditions in the lifecycle engine:
| Field | Description | Example Use |
|---|---|---|
Has Request (seerrRequested) |
Whether media was requested | Keep all requested content |
Request Date (seerrRequestDate) |
When requested | Delete if requested over a year ago |
Request Count (seerrRequestCount) |
Number of requests | Prioritize frequently requested content |
Requested By (seerrRequestedBy) |
Who requested | Filter by specific user |
Approval Date (seerrApprovalDate) |
When approved | Track time since approval |
Decline Date (seerrDeclineDate) |
When declined | Clean up declined requests |
Lifecycle rules and the Query page both read every enabled Seerr instance and merge their requests, so a title requested on any of them counts as requested.
Seerr fields are available for movie and series rule sets only. Seerr has no music requests, so they can’t be used in a music rule set, and the Requested By value is the requester’s Plex username, otherwise their Seerr username, otherwise their email.
Missing or unreadable data
Section titled “Missing or unreadable data”- An item with no request (or a request that was never approved or declined) has no date for the corresponding field. Date comparisons — including negated ones — never match a missing date; use Is Empty to target those items.
- Seerr’s request list is read in full for every run. If it can’t be read in full — Seerr is unreachable, a page fails, or the list changes faster than it can be paged — the rule set is skipped for that run and its existing matches and pending actions are left alone. Evaluating against a partial list would make every request it missed look like media nobody asked for.
- Older Overseerr and Jellyseerr releases (before Jellyseerr 2.6.0) are supported: Librariarr filters requests by type itself when the server doesn’t accept the filter.
Example Rule
Section titled “Example Rule”Create a rule set to find media that was requested but never watched:
- Has Request (
seerrRequested) equalstrue - AND Play Count (
playCount) equals0 - AND Approval Date (
seerrApprovalDate) before 6 months ago
Security
Section titled “Security”- API keys are stored securely and never exposed to the frontend
- Connection testing uses server-side endpoints
Limitations
Section titled “Limitations”- Seerr data is fetched live during rule evaluation, which can be slower for large match sets
- Multiple Seerr instances are supported; the dashboard card aggregates requests across all of them per user (Plex username, otherwise Seerr username or email)
- If an instance can’t be read (it’s down, or its request list changed faster than it could be paged), the card marks its figures incomplete and covers the instances that did answer; the per-user list says so too. Nothing is cached in that state, so the next load tries again
- Request data availability depends on Seerr having been running when requests were made — historical data before Seerr was set up is not available
- Watch correlation on the dashboard card relies on the Seerr user’s
plexUsernameorjellyfinUsernamematching the username in your media server’s watch history