diff --git a/code/frontend/src/app/core/services/documentation.service.ts b/code/frontend/src/app/core/services/documentation.service.ts
index a47ce1fb..699ffa2d 100644
--- a/code/frontend/src/app/core/services/documentation.service.ts
+++ b/code/frontend/src/app/core/services/documentation.service.ts
@@ -189,6 +189,21 @@ export class DocumentationService {
'applicationToken': 'application-token',
'priority': 'priority',
},
+ 'seeker': {
+ 'searchEnabled': 'search-enabled',
+ 'searchInterval': 'search-interval',
+ 'replacementSearchEnabled': 'replacement-search',
+ 'proactiveSearchEnabled': 'proactive-search',
+ 'selectionStrategy': 'selection-strategy',
+ 'monitoredOnly': 'monitored-only',
+ 'useCutoff': 'use-cutoff',
+ 'useCustomFormatScore': 'use-custom-format-score',
+ 'useRoundRobin': 'round-robin',
+ 'missingSearchEnabled': 'enable-missing-search',
+ 'enabled': 'instance-enabled',
+ 'skipTags': 'instance-skip-tags',
+ 'activeDownloadLimit': 'instance-active-download-limit',
+ },
};
openFieldDocumentation(section: string, fieldName: string): void {
diff --git a/code/frontend/src/app/features/settings/seeker/seeker.component.html b/code/frontend/src/app/features/settings/seeker/seeker.component.html
index 45549612..2d068921 100644
--- a/code/frontend/src/app/features/settings/seeker/seeker.component.html
+++ b/code/frontend/src/app/features/settings/seeker/seeker.component.html
@@ -20,13 +20,16 @@
@@ -35,23 +38,32 @@
@@ -70,7 +82,7 @@
{{ instance.instanceName }}
{{ instance.instanceType }}
-
+
@if (!instance.arrInstanceEnabled) {
@@ -81,19 +93,21 @@
}
diff --git a/docs/docs/configuration/seeker/index.mdx b/docs/docs/configuration/seeker/index.mdx
new file mode 100644
index 00000000..e7d61a70
--- /dev/null
+++ b/docs/docs/configuration/seeker/index.mdx
@@ -0,0 +1,198 @@
+---
+sidebar_position: 4.5
+---
+
+import {
+ ConfigSection,
+ Note,
+ Important,
+ Warning,
+ ElementNavigator,
+ SectionTitle,
+ PrefixedSection,
+ styles
+} from '@site/src/components/documentation';
+
+# Seeker
+
+The Seeker automates searching for missing items and quality upgrades across your Radarr and Sonarr libraries. It runs on a configurable schedule and works through your library one item at a time to avoid overwhelming your indexers.
+
+
+
+
+
+
+
+
+
+Master toggle for all searching. When disabled, neither replacement searches nor proactive searches will run.
+
+
+
+
+
+How often the Seeker job runs, in minutes. Available options are 2, 3, 4, 5, 6, 10, 12, 15, 20, and 30 minutes.
+
+
+Using a very low interval will trigger searches more frequently, which significantly increases the load on your indexers. This can result in rate limit warnings or a ban from your indexer.
+
+
+
+
+
+
+Replacement search is always enabled when Search is on and cannot be disabled. Whenever a download is removed from an *arr queue (by Queue Cleaner or any other mechanism), Seeker immediately queues a replacement search for that item. Replacement searches always take priority over proactive searches, which means the proactive cycle is paused until all queued replacement searches have been processed.
+
+
+
+
+
+
+
+
Proactive Search
+
+
+ Proactive search works through your library systematically to find items that are missing or could be upgraded. Each run processes one item at a time to keep indexer load predictable.
+
+
+
+Proactive search operates in cycles. Seeker tracks which items have been searched in the current cycle. Once every eligible item in an instance has been searched, the cycle resets and starts over. For Sonarr, the cycle is tracked at the season level — each season of each series is treated as a separate entry.
+
+
+
+
+When enabled, Seeker will periodically search for missing items and quality upgrades across your library. Each run selects one item according to the configured selection strategy and triggers a search in the corresponding *arr application.
+
+
+
+
+
+Missing search is always enabled when proactive search is on. Items with no file are always included as search candidates, regardless of any other quality upgrade settings.
+
+
+
+
+
+Controls how Seeker selects which item to search next from the pool of eligible candidates. Available strategies:
+
+- **Balanced Weighted** — Prioritizes items that are both newly added and have not been searched recently. A good default for most libraries.
+- **Oldest Search First** — Works through items in order, starting with those that have not been searched for the longest time. Guarantees every item is covered in sequence.
+- **Oldest Search Weighted** — Favors items that have not been searched recently, but still gives other items a chance.
+- **Newest First** — Always picks the most recently added items first. Best for keeping new additions up to date quickly.
+- **Newest Weighted** — Favors recently added items, but still gives older items a chance.
+- **Random** — Every eligible item has an equal chance of being picked with no prioritization.
+
+
+Regardless of the strategy, items already searched in the current cycle are excluded from selection. The strategy only determines the order in which unsearched items are considered.
+
+
+
+
+
+
+When enabled, only items that are marked as monitored in Radarr or Sonarr will be included as search candidates. Unmonitored movies, series, and episodes are skipped entirely.
+
+
+
+
+
+When enabled, items that already have a file but have not yet met the quality profile's cutoff will be included as upgrade candidates. Items that have already met their cutoff are excluded unless Use Custom Format Score also applies to them.
+
+
+
+
+
+When enabled, items whose current custom format score is below the quality profile's cutoff format score will be included as upgrade candidates. Seeker uses cached score data that is kept up to date by the Custom Format Score Syncer, which runs automatically when this setting is enabled.
+
+
+Custom format scores are tracked at the episode level for Sonarr. If a series has episodes with scores below the cutoff, the corresponding season will be searched.
+
+
+
+
+
+
+When enabled, only one instance is processed per Seeker run. Instances are rotated based on which was processed least recently, spreading indexer load evenly across all configured instances.
+
+When disabled, all enabled instances are processed on every run.
+
+
+Disabling round robin will trigger a search for each enabled instance on every run. With a low search interval and multiple instances, this can result in a large number of indexer requests in a short period.
+
+
+
+
+
+
+
+
+
+
+
Instance Configuration
+
+
+ Per-instance settings allow you to control which Radarr and Sonarr instances participate in proactive search and how they behave.
+
+
+
+An instance must also be enabled in Arr Settings for it to be used by Seeker.
+
+
+
+
+Enables this instance for proactive search. When disabled, the instance will not be included in any proactive search cycles. Replacement searches are not affected by this setting — they are always processed for any instance where a download was removed.
+
+
+
+
+
+Arr tags to exclude from search. Any movie or series in the corresponding *arr application that has one of these tags assigned will be skipped entirely during proactive search.
+
+**Examples:**
+```
+no-search
+skip-upgrade
+manual-only
+```
+
+
+
+
+
+When the number of items with bytes remaining to download (`SizeLeft > 0`) in the arr queue reaches this limit, the proactive search cycle is skipped for that instance. This prevents Seeker from triggering new searches while the download client is already busy.
+
+Set to `0` to disable this check and always run the proactive search regardless of queue activity.
+
+
+
+
+
+
+
+