Radarr/Radarr · warning · UnsupportedFeedException

Failed to find a valid download url in the feed.

Error message

Failed to find a valid download url in the feed.

What it means

TorrentRssSettingsDetector.ValidateReleases throws an UnsupportedFeedException when any release's DownloadUrl fails IsValidDownloadUrl. IsValidDownloadUrl rejects null/whitespace and any URL that does not start with magnet:, http:, or https:. Without a usable download URL a release cannot be fetched, so the feed is rejected during detection.

Source

Thrown at src/NzbDrone.Core/Indexers/TorrentRss/TorrentRssSettingsDetector.cs:265

        private void ValidateReleases(TorrentInfo[] releases, TorrentRssIndexerSettings indexerSettings)
        {
            if (releases == null || releases.Empty())
            {
                throw new UnsupportedFeedException("Empty feed, cannot check if feed is parsable.");
            }

            var torrentInfo = releases.First();

            _logger.Trace("TorrentInfo: \n{0}", torrentInfo.ToString("L"));

            if (releases.Any(r => r.Title.IsNullOrWhiteSpace()))
            {
                throw new UnsupportedFeedException("Feed contains releases without title.");
            }

            if (releases.Any(r => !IsValidDownloadUrl(r.DownloadUrl)))
            {
                throw new UnsupportedFeedException("Failed to find a valid download url in the feed.");
            }

            var total = releases.Where(v => v.Guid != null).Select(v => v.Guid).ToArray();
            var distinct = total.Distinct().ToArray();

            if (distinct.Length != total.Length)
            {
                throw new UnsupportedFeedException("Feed contains releases with same guid, rejecting malformed rss feed.");
            }
        }

        private void ValidateReleaseSize(TorrentInfo[] releases, TorrentRssIndexerSettings indexerSettings)
        {
            if (!indexerSettings.AllowZeroSize && releases.Any(r => r.Size == 0))
            {
                throw new UnsupportedFeedException("Feed doesn't contain the release content size.");
            }

View on GitHub (pinned to ca451608dc)

Solutions

  1. Inspect the failing item's enclosure/link element in the raw feed to see the exact URL.
  2. If the URL is relative, the parser must resolve it against the feed BaseUrl - ensure UseEnclosureUrl/GetDownloadUrl produces an absolute URL.
  3. If the scheme is unsupported (ftp), switch the feed to provide magnet/http links.
  4. Use a Torznab endpoint via Jackett which normalizes download URLs.
  5. Report the malformed feed to the indexer operator.
Defensive patterns

Strategy: validation

Validate before calling

// Pre-check download URL validity per release
foreach (var r in releases)
    if (!IsValidDownloadUrl(r.DownloadUrl))
        logger.Warn("Release '{0}' has invalid download URL: {1}", r.Title, r.DownloadUrl);

Type guard

// Type guard for absolute http(s)/magnet URLs
static bool IsValidDownloadUrl(string url) =>
    !string.IsNullOrWhiteSpace(url) &&
    (url.StartsWith("magnet:", StringComparison.OrdinalIgnoreCase) ||
     url.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ||
     url.StartsWith("https://", StringComparison.OrdinalIgnoreCase));

Try / catch

try { ValidateReleases(releases, indexerSettings); }
catch (UnsupportedFeedException ex) when (ex.Message.Contains("download url"))
{ logger.Warn("Feed has releases with invalid download URLs; resolve relative URLs in the parser."); }

Prevention

When it happens

Trigger: At least one TorrentInfo has a DownloadUrl that is null/empty or does not begin with magnet:, http:, or https: (e.g. a relative path like '/download/123', an ftp: link, or a javascript: link).

Common situations: The feed provides only a relative download path without a base; the enclosure URL is malformed; the feed requires login and the download link is a session-bound relative URL; a non-standard link scheme is used.

Related errors


AI-assisted analysis of Radarr/Radarr@ca451608dc (2026-08-13). Data as JSON: /api/errors/bc777459e6446dd8. Report an issue: GitHub.