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_urlvalues 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
f800rendition. - 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.webpor another extension.seller.webp: seller profile picture (when requested with--sellerand 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"
Then open the Command Prompt (type "prompt" in the search bar at the bottom of the screen):
- type
python --versionto 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
Then use it, like described above. For example:
vinted-downloader "ITEM_URL"
vinted-downloader --seller "ITEM_URL"
vinted-downloader --all-items "ITEM_URL"
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.