{"adoption": {"forks": 52, "observed_at": "2026-08-28T04:06:56.640749+00:00", "stars": 2494}, "canonical_url": "https://ross.abutalabs.com/products/cleanuparr", "card": {"archived": false, "artifact_type": "application", "description": "Advanced download manager for the Servarr ecosystem", "domain": ["self-hosted", "media", "developer-tools"], "enriched": true, "function": ["workflow-automation", "scheduling", "monitoring", "self-hosted"], "health_score": 100, "homepage": null, "language": "C#", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["Cleanuparr/Cleanuparr"], "name": "Cleanuparr/Cleanuparr", "platform": ["windows", "self-hosted", "cross-platform"], "pushed_at": "2026-08-26T14:39:51+00:00", "repo": "Cleanuparr/Cleanuparr", "stars": 2494, "tags": ["servarr", "radarr", "sonarr", "qbittorrent", "transmission", "deluge", "torrent-management", "media-automation", "download-queue", "malware-blocker", "automation", "docker", "linux", "macos"], "topics": ["cleaner", "cleanup", "deluge", "qbittorrent", "queue", "radarr", "sonarr", "stalled", "stuck", "torrent", "transmission", "lidarr", "readarr", "whisparr", "utorrent", "rtorrent", "rutorrent"], "urls": [], "use_cases": ["remove stalled downloads from sonarr and radarr automatically", "block malicious torrent files like lnk or zipx in my download queue", "automatically search for missing movies and shows in radarr", "find quality upgrades for items that haven't met cutoff", "clean up seeding torrents after a set time", "remove downloads failing to import from the arrs", "manage orphaned files left behind by deleted downloads"], "what_it_is": "Cleanuparr is a self-hosted download manager for the Servarr ecosystem that automates cleanup of stalled, stuck, and malicious downloads across Sonarr, Radarr, Lidarr, Readarr, and Whisparr with clients like qBittorrent, Transmission, and Deluge. It also proactively searches for missing content, quality upgrades, manages seeding, and removes orphaned files.", "when_to_avoid": ["you don't use the Servarr ecosystem or a supported torrent client", "you need a general-purpose torrent client rather than a companion automation tool", "you prefer fully manual control over your download queue"], "when_to_choose": ["you run a Servarr stack (Sonarr, Radarr, etc.) with qBittorrent, Deluge, or Transmission and want automated queue cleanup", "you want protection against malicious downloads and stuck queue items without manual intervention", "you want automated searching for missing content and quality upgrades"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cleanuparr", "repo": "Cleanuparr/Cleanuparr", "role": "main", "score": 84}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:27:16.738771+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "30cbee7e9d2fb7202cbc538d2bf27612e94cc41ad5619a2599f5467ac46661f5", "fetched_at": "2026-08-28T04:06:56.640749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Cleanuparr/Cleanuparr"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:27:16.738771+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "30cbee7e9d2fb7202cbc538d2bf27612e94cc41ad5619a2599f5467ac46661f5", "fetched_at": "2026-08-28T04:06:56.640749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Cleanuparr/Cleanuparr"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:27:16.738771+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "30cbee7e9d2fb7202cbc538d2bf27612e94cc41ad5619a2599f5467ac46661f5", "fetched_at": "2026-08-28T04:06:56.640749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Cleanuparr/Cleanuparr"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:27:16.738771+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "30cbee7e9d2fb7202cbc538d2bf27612e94cc41ad5619a2599f5467ac46661f5", "fetched_at": "2026-08-28T04:06:56.640749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Cleanuparr/Cleanuparr"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:27:16.738771+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "30cbee7e9d2fb7202cbc538d2bf27612e94cc41ad5619a2599f5467ac46661f5", "fetched_at": "2026-08-28T04:06:56.640749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Cleanuparr/Cleanuparr"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:27:16.738771+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "30cbee7e9d2fb7202cbc538d2bf27612e94cc41ad5619a2599f5467ac46661f5", "fetched_at": "2026-08-28T04:06:56.640749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Cleanuparr/Cleanuparr"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:56.640749+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:27:16.738771+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "30cbee7e9d2fb7202cbc538d2bf27612e94cc41ad5619a2599f5467ac46661f5", "fetched_at": "2026-08-28T04:06:56.640749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Cleanuparr/Cleanuparr"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:27:16.738771+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "30cbee7e9d2fb7202cbc538d2bf27612e94cc41ad5619a2599f5467ac46661f5", "fetched_at": "2026-08-28T04:06:56.640749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Cleanuparr/Cleanuparr"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:27:16.738771+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "30cbee7e9d2fb7202cbc538d2bf27612e94cc41ad5619a2599f5467ac46661f5", "fetched_at": "2026-08-28T04:06:56.640749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Cleanuparr/Cleanuparr"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:27:16.738771+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "30cbee7e9d2fb7202cbc538d2bf27612e94cc41ad5619a2599f5467ac46661f5", "fetched_at": "2026-08-28T04:06:56.640749+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Cleanuparr/Cleanuparr"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 47, "rhythm": 85}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 666, "days_push": 7, "days_rel": 21, "gap_med": 1.0, "n_releases_24m": 143}, "score": 84, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}