1. gallery-dl
  2. Unsupported URL

Unsupported URL

gallery-dl never contacted the site. It compared your link with the URL pattern of every extractor it has, none matched, and it moved on to the next link.

The error#

1[gallery-dl][error] Unsupported URL 'https://www.example.com/some/page'

Releases from a few years back, 1.17.0 for one, word it differently:

1[gallery-dl][error] No suitable extractor found for 'https://www.example.com/some/page'

The exception is NoExtractorError, an InputError in gallery_dl/exception.py. Job.__init__ in gallery_dl/job.py raises it when extractor.find returns nothing, and the main loop in gallery_dl/__init__.py logs the line and adds 64 to the exit status. The line carries the program's name, not a site's, because no site was picked.

What causes it#

extractor.find tries each extractor's regular expression against the URL, in order, and takes the first match. Nothing about the page itself is checked, so the reason is always in the link or in the version.

  1. The site has no extractor. The supported sites list has no entry for it. Among the big social platforms, LinkedIn, Threads and YouTube are missing.
  2. The site is there, this kind of page is not. Every extractor covers certain paths. An Instagram profile, post, reel, story, highlight or hashtag link matches; a link to an Instagram page outside those paths does not.
  3. Your release predates the pattern. New page types arrive in new versions. TikTok photo slideshows answered Unsupported URL until support landed through pull request #6708 in February 2025, which is the history behind issue #6878.
  4. The link was cut or changed on the way. A URL with & that is not in quotes gets split by the shell, and a link copied from an app can carry a wrapper domain in front of the real one.

How to tell which one it is#

List the extractors for a site, with an example URL for each:

1gallery-dl --list-extractors tiktok

Each entry prints its class name, a one-line description, its category and subcategory, and a line that starts with Example :. Compare your link with those examples.

What you findCause
The command prints nothing for that name1, or the category has another name, so try --list-extractors alone and search
Examples exist, none has your link's shape2
The changelog shows a newer version adding this shape3
The link works in quotes but not without4

How to fix it#

1. Update. It is the cheapest test of cause 3:

1python3 -m pip install -U gallery-dl2gallery-dl --version

2. Quote the link. Quotes stop the shell from acting on &, ? and #:

1gallery-dl "https://www.example.com/watch?id=123&list=456"

3. Rewrite it into a shape the extractor knows. Use the Example : line as the template. For X, links on x.com, twitter.com, the mobile domain and fixup mirrors such as fxtwitter and vxtwitter all match.

4. Hand it to yt-dlp. gallery-dl has an extractor called ytdl that passes a link to yt-dlp when you put ytdl: in front. yt-dlp has to be installed in the same Python.

1gallery-dl "ytdl:https://www.youtube.com/watch?v=VIDEO_ID"

To send every unmatched link there without the prefix, turn the extractor on in the config. The docs describe that setting as "Process URLs otherwise unsupported by gallery-dl with |ytdl|".

1{2    "extractor": {3        "ytdl": {4            "enabled": true5        }6    }7}

5. Ask for the site. Requests for a new site go to the tracker on codeberg.org/mikf/gallery-dl, where the maintainer labels them site:support.

SocialScrape covers three of the platforms missing from gallery-dl's list, each returning JSON from one request:

LinkEndpoint
A Threads profileGET /v1/threads/profile, and GET /v1/threads/profile/posts for its latest 20 to 30 posts
A Threads postGET /v1/threads/post
A LinkedIn profile, company or postGET /v1/linkedin/profile, GET /v1/linkedin/company, GET /v1/linkedin/post
A YouTube channel or videoGET /v1/youtube/channel, GET /v1/youtube/channel/videos, GET /v1/youtube/video

A link the API does not recognise is answered with unsupported_url (HTTP 400) before anything is fetched, and like every failure it costs nothing. A request that returns data is 1 credit, and 100 credits are yours when you open an account.

Questions

Does Unsupported URL mean the site blocked me?

No. gallery-dl decides that before any request goes out, from the link's text alone. A block shows up as an HTTP or challenge error instead.

Can gallery-dl download YouTube videos?

Only by passing the link to yt-dlp, with the ytdl: prefix or the enabled setting. gallery-dl has no YouTube extractor of its own.

Why do TikTok photo posts say Unsupported URL?

An older copy. Photo slideshow links match in current releases, which save each image and the sound.

100 free credits. No card needed.

Start pulling social data.