Skip to main content

Vinted Product Downloader

Vinted is a website to buy and sell second-hand clothes available in several countries in Europe. Sometimes it's useful to download the photographs of an article.

This Python script downloads the item details and photographs available from a Vinted listing.

  • Extract item details from supported older page formats and current server-rendered HTML / Next.js data.
  • Prefer photo full_size_url values when supplied in the item data or found through the seller's wardrobe API.
  • Fall back to the photo URLs available in the listing page when full-size URLs cannot be retrieved. These may be resized images, commonly using the f800 rendition.
  • Download the seller's profile picture with --seller.
  • Download the seller's available wardrobe items with --all-items.

Full-resolution downloads are not guaranteed. A full_size_url identifies the image Vinted supplies through that field; it does not guarantee a particular pixel size or the seller's unmodified camera original. The script does not upscale or re-encode images.

Usage

# Download item pictures to current directory
python vinted_downloader.py "ITEM_URL"

# Download item pictures and seller profile to current directory
python vinted_downloader.py --seller "ITEM_URL"

# Download all items available on the seller profile
python vinted_downloader.py --all-items "ITEM_URL"

Then you get the following files:

  • item.json: extracted item metadata; available fields depend on the source response.
  • item_summary: source URL, title, seller name and seller ID where available.
  • photo_00.jpeg, photo_01.jpeg, etc.: item photos, numbered from zero. Extensions follow the image URLs, so files may instead use .webp or another extension.
  • seller.webp: seller profile picture (when requested with --seller and a photo URL is available). The filename is fixed; the downloaded bytes are not converted to WebP.

With --all-items, each item's metadata, summary and photos are placed in a subdirectory named after its numeric ID.

Unexpected extraction or JSON-decoding failures may save the server response to vinted_product_downloader_error.txt for diagnosis.

Use the --output option to specify an output directory (default is current directory). If it doesn't exist, it will be created. If you want to save the files in a subdirectory of the output directory automatically named after the item id and title, then use the --save-in-dir option.

For example, to automatically create and save in the my-output/1234-item-title/ directory, run:

python vinted_downloader.py --output my-output --save-in-dir "https://www.vinted.fr/items/1234-item-title"

If you have installed the package with pip, you can also use the vinted-downloader command:

vinted-downloader "ITEM_URL"
vinted-downloader --seller "ITEM_URL"
vinted-downloader --all-items "ITEM_URL"

Saved full-size URLs after a sale

Full-size image URLs can continue to work after an item is sold, even when the listing page and wardrobe lookup no longer supply those URLs. Issue #25 reports examples using URLs previously recorded in issue #20; related extraction problems are discussed in issue #21.

This distinguishes two separate questions: whether the script can retrieve a full-size URL from the current listing data, and whether an already known URL still downloads the image. Failure to retrieve the URL does not prove that the image was deleted. These examples do not establish how long the URLs remain valid, or guarantee availability for every sold or deleted listing.

Download images and preserve the item's item.json while full-size URLs are available. When retrieved, those URLs are stored in the photo metadata, including their complete paths and query strings. --save-in-dir keeps each listing's files in its own directory, but rerunning the same listing can overwrite its metadata and photos: keep a backup of the earlier download.

The script currently fetches fresh listing data; it does not read an existing item.json to recover older URLs or automatically retrieve them from archives. Previously saved full-size URLs can be downloaded separately as long as they still work. Changing a thumbnail URL's size or path is not a reliable way to reconstruct them.

Unavailable listings and errors

A sold or otherwise inactive listing may still expose its item details and resized photos. The script attempts to find the same item in the seller's wardrobe to obtain full-size URLs. An item missing from that response does not by itself prove it was sold or that its image files were deleted; visibility can also differ between regional domains.

For HTTP 404/410 responses to the item-page request, or Vinted's rendered page-not-found screen even with HTTP 200, the script prints an Item unavailable message and exits with status 1, without a traceback or an error dump. Other HTTP errors on the item-page request and network errors that stop the download are reported separately with status 1. A failed wardrobe lookup falls back to the page photos. Successful completion returns status 0.

When Vinted returns only its not-found page, there are no listing details or photo URLs to extract. Recovering them requires another source, such as an archived page or previously saved metadata/image URLs. A missing listing does not establish whether previously saved image URLs still work.

Firefox extension

The upstream author also provides a separate Firefox extension, with source code on GitHub. Changes to this Python script do not update the extension.

How to install?

The PyPI package uses the version installed in your environment, which may differ from the source checkout. To run the code in this repository, follow the source installation instructions and use python vinted_downloader.py.

With pip

On Linux or MacOS

The Vinted product download is on PyPI, so you can run:

pip install vinted-downloader

All dependencies are installed automatically.

You can then use the command vinted-downloader like this:

vinted-downloader [-o OUTPUT] [-s] [-a] [-d] "ITEM_URL"

or, if you prefer to use Python:

python -m vinted_downloader [-o OUTPUT] [-s] [-a] [-d] "ITEM_URL"

To update the package, run:

pip install --upgrade vinted-downloader

On Windows

First you need to install Python:

  • Go to https://www.python.org/downloads/
  • Download the installer "Python for Windows"
  • Run the installer (click on the downloaded file)
    • Check "Add python.exe to PATH" (this is VERY IMPORTANT, see the image below)
    • Click "Install Now"

Add python.exe to PATH

Then open the Command Prompt (type "prompt" in the search bar at the bottom of the screen):

  • type python --version to check that Python is correctly installed (you should see the version of Python, and not an error message)
  • type pip install vinted-downloader. This will install the downloader and its dependencies

pip install vinted-downloader

Then use it, like described above. For example:

vinted-downloader "ITEM_URL"
vinted-downloader --seller "ITEM_URL"
vinted-downloader --all-items "ITEM_URL"

Run vinted-downloader

If the command vinted-downloader doesn't work, use:

python -m vinted_downloader "ITEM_URL"

To update, run:

pip install --upgrade vinted-downloader

From the sources

Clone the GitHub repository and install the dependencies.

On Linux and MacOS

# Clone
git clone https://github.com/boberle/vinted-downloader.git

# Install dependencies
cd vinted-downloader
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# Run
python vinted_downloader.py "ITEM_URL"

How does it work?

The client opens the Vinted home page to establish an anonymous session, then requests the item URL using the same session.

It checks for unavailable pages and HTTP errors before extracting item details. Supported extraction methods include older embedded item data and current HTML, JSON-LD and Next.js Flight data.

When the page fallback supplies an item ID and seller ID, the script searches the seller's wardrobe at /api/v2/wardrobe/SELLER_ID/items, following pagination for up to ten pages. If the matching item supplies full-size photo URLs, those are preferred. Otherwise, the downloader uses the photo URLs available in the page data.

Photo URLs are used with their supplied paths and query parameters intact. The script does not generate signatures or guess original-size URLs from thumbnail URLs.

Version

This is version 2. Not back compatible with version 1.

Metadata

Release files for vinted-downloader 2.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vinted-downloader 2.9.0
File Size Uploaded Provenance Actions
vinted_downloader-2.9.0.tar.gz 18.2 kB Without provenance Details for vinted_downloader-2.9.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for vinted-downloader 2.9.0
File Interpreter ABI Platform Actions
vinted_downloader-2.9.0-py3-none-any.whl Python 3 none any Details for vinted_downloader-2.9.0-py3-none-any.whl

Total release size: 33.7 kB

Release files / vinted_downloader-2.9.0.tar.gz

Download URL vinted_downloader-2.9.0.tar.gz
Size 18.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c102e10ed0c556318ee222f222c70c5685d8622b04c3809b5471d9de540ce0b4
BLAKE2b-256 checksum
How to use checksums
af0263814b8588246a6f79e4339dc6ccbf40c9ea430221ce9cb0281c61a2858d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / vinted_downloader-2.9.0-py3-none-any.whl

Download URL vinted_downloader-2.9.0-py3-none-any.whl
Size 15.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
852dc69e56254049586077f5132cdac2f7f00366437eef46d03399343685e6d3
BLAKE2b-256 checksum
How to use checksums
0cb56c362336e5e8b3bb810ed338c037224d1d962c1e38b067c79b96313e9bd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Security for vinted-downloader 2.9.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page