Vinted Scraper — Second-Hand Fashion Listings, Prices & Sellers avatar

Vinted Scraper — Second-Hand Fashion Listings, Prices & Sellers

Pricing

from $3.00 / 1,000 listings

Go to Apify Store
Vinted Scraper — Second-Hand Fashion Listings, Prices & Sellers

Vinted Scraper — Second-Hand Fashion Listings, Prices & Sellers

Scrape Vinted listings from catalog search pages — title, brand, size, condition, price, buyer-protection total, favourites, seller and photos. Paste any Vinted catalog, member/closet, or item URL, or search by keyword + filters across any country domain. JSON/CSV out.

Pricing

from $3.00 / 1,000 listings

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

19

Total users

2

Monthly active users

15 hours ago

Last modified

Share

Vinted Scraper

Turn any Vinted URL or keyword into a structured stream of second-hand fashion listings. Scrape title, brand, size, condition, price, buyer-protection total, favourites, seller, and photos from any catalog search, member closet, or item page — across every Vinted country domain.

How Vinted Scraper works

Why Use This Scraper?

  • ✅ Multiple Vinted entry points — paste any catalog, member/closet, or item URL
  • ✅ Keyword search mode with brand, category, size, condition, and price filters
  • ✅ Every country domain — vinted.com, vinted.co.uk, vinted.fr, vinted.de, and 18 more
  • ✅ Real prices including the buyer-protection total and service fee, not just the sticker price
  • ✅ Seller, favourites, and photo data on every row
  • ✅ Flat one-row-per-listing output ready for CSV and spreadsheets

Overview

The Vinted Scraper is built for resellers, price analysts, and market researchers who need structured listing data from Vinted's second-hand fashion marketplace.

The output is always listing-shaped rows. Whether you start from a catalog search URL, a member's closet, or a single item URL, the resulting dataset is a flat stream of listing rows — one per item — not separate seller or search rows.

Vinted partitions its catalog by country domain: an item on vinted.com does not exist on vinted.fr. The scraper handles this automatically — every seed carries its own domain, and the domain field controls keyword searches.

Supported Inputs

URL types

URL typePatternExample
Catalog / search/catalog?search_text=...&brand_ids[]=...https://www.vinted.com/catalog?search_text=nike&order=newest_first
Member / closet/member/{id}-{login}https://www.vinted.com/member/3158054083-magicthriftbus
Single item/items/{id}-slughttps://www.vinted.com/items/9439503568-nike-pullover-hoodie-blue

Copy-pasteable startUrls

{
"startUrls": [
"https://www.vinted.com/catalog?search_text=nike&order=newest_first",
"https://www.vinted.co.uk/catalog?search_text=carhartt",
"https://www.vinted.com/member/3158054083-magicthriftbus"
]
}

Keyword / search mode

The actor also runs from a keyword plus filters, without any URL:

{
"searchText": "levis 501",
"domain": "vinted.fr",
"priceFrom": 10,
"priceTo": 60,
"order": "newest_first"
}

Unsupported inputs

  • ❌ Content behind a Vinted login (private messages, favourites lists, buyer-only fields)
  • ❌ More than 960 listings from one search: Vinted shows at most 10 pages of 96 per search. Split a broad search by price range, category, size, or brand to cover more
  • ❌ Full item descriptions and measurements
  • ❌ Hosts outside *.vinted.*

Use Cases

AudienceUse case
ResellersTrack sold-through, benchmark asking prices, and spot underpriced listings to flip
Price analystsBuild price distributions by brand, size, and condition across country domains
Brand / market teamsMonitor how a brand trades second-hand and how buyer-protection fees affect final price
Sourcing agentsWatch specific closets for new drops and reserved-vs-available status
ResearchersBulk-export second-hand fashion supply for circular-economy and resale studies
AgenciesDeliver client-ready Vinted datasets without maintaining a scraper

How It Works

How Vinted Scraper works

  1. Input — provide Vinted URLs and/or a keyword plus filters on a chosen country domain
  2. Classify — each URL is auto-routed to the catalog page, the seller's wardrobe (closet), or the item page
  3. Read — searches come from Vinted's own catalog page, with every filter from your URL kept; closets come from Vinted's wardrobe listing, using a per-domain access token taken from the homepage; item URLs come from the item page plus Vinted's pricing service
  4. Collect & paginate — it walks pages up to Vinted's last page or your maxItems, and never loads a page once maxItems rows are in
  5. Output — one flat listing row per item, exportable as JSON or CSV

Input Configuration

Input fields

FieldTypeRequiredNotes
startUrlsarray<string>yes (or searchText)Vinted catalog, member, or item URLs; auto-classified
searchTextstringoptionalKeyword used when no URLs are given
domainstring enumoptionalCountry domain; default vinted.com
brandIdsarray<string>optionalNumeric Vinted brand IDs (keyword search only)
catalogIdsarray<string>optionalNumeric category IDs (keyword search only)
sizeIdsarray<string>optionalNumeric size IDs (keyword search only)
statusIdsarray<string>optionalNumeric condition IDs (keyword search only)
priceFromintegeroptionalMinimum price (keyword search only)
priceTointegeroptionalMaximum price (keyword search only)
orderstring enumoptionalrelevance | newest_first | price_low_to_high | price_high_to_low
maxItemsintegeroptionalHard cap on listings; default 1000
maxConcurrencyintegeroptionalPages in parallel; default 10
proxyobjectoptionalResidential recommended; built-in route by default

Common scenarios

1. Keyword search on a specific domain

{
"searchText": "nike",
"domain": "vinted.com",
"order": "newest_first",
"maxItems": 500
}

2. Mixed start URLs

{
"startUrls": [
"https://www.vinted.com/catalog?search_text=nike",
"https://www.vinted.com/member/3158054083-magicthriftbus"
],
"maxItems": 200
}

3. Filtered keyword search

{
"searchText": "jacket",
"domain": "vinted.co.uk",
"brandIds": ["53"],
"priceFrom": 15,
"priceTo": 80
}

Output Overview

Each dataset item is one listing row containing:

  • Core fields — id, title, url, brand, size, condition, domain
  • Pricing — price, currency, service fee, and total including buyer protection
  • Engagement — favourites and views
  • Seller — id, login, profile url, and business flag
  • Media — the main photo url and photo count

Different start types (catalog / closet / item) all resolve to the same flat listing shape, but each Vinted page carries a different amount of data, so some fields stay empty depending on where a row came from:

FieldSearch / catalogMember / closetSingle item
sellerLoginempty
sellerUrl/member/{id} (no username; the link still works)
photoCountempty (the catalog shows only the main photo)
viewsempty✅ (Vinted often reports 0)empty
isReservedempty

On search rows, brand, size, and condition are the text Vinted prints on the listing card, in the domain's language (e.g. Très bon état on vinted.fr). favourites is commonly 0 for brand-new listings.

Output Samples

Catalog search start (filtered catalog URL, vinted.co.uk)

{
"id": 10054862926,
"title": "Nike University of North Carolina Hoodie White & Light Blue mark on sleeve, Size Medium",
"url": "https://www.vinted.co.uk/items/10054862926-nike-university-of-north-carolina-hoodie-white-light-blue-mark-on-sleeve-size-medium",
"brand": "Nike",
"size": "M / UK 12-14",
"condition": "Good",
"price": 1,
"currency": "GBP",
"totalPriceWithBuyerProtection": 1.75,
"serviceFee": 0.75,
"favourites": 0,
"views": null,
"isPromoted": false,
"isReserved": null,
"sellerId": 107211146,
"sellerLogin": null,
"sellerUrl": "https://www.vinted.co.uk/member/107211146",
"sellerIsBusiness": true,
"photoUrl": "https://images1.vinted.net/t/02_0120c_.../f800/04605ca5.webp",
"photoCount": null,
"domain": "vinted.co.uk",
"scrapedAt": "2026-09-19T13:17:25.926Z"
}

Member / closet start (same flat shape, isReserved populated)

{
"id": 9439107296,
"title": "2001 Mattel Harry Potter \"Gryffindor Friends\" plush doll",
"url": "https://www.vinted.com/items/9439107296-...",
"brand": "Harry Potter",
"size": "One size",
"condition": "Good",
"price": 5,
"currency": "USD",
"totalPriceWithBuyerProtection": 5.7,
"serviceFee": 0.7,
"isReserved": false,
"sellerLogin": "magicthriftbus",
"photoCount": 5,
"domain": "vinted.com"
/* ...same fields as above... */
}

Key Output Fields

Listing Core

  • id, title, url, brand, size, condition, domain

Pricing

  • price, currency
  • serviceFee, totalPriceWithBuyerProtection

Engagement

  • favourites, views, isPromoted, isReserved

Seller

  • sellerId, sellerLogin, sellerUrl, sellerIsBusiness

Media

  • photoUrl, photoCount

FAQ

Which Vinted URLs are supported?

Catalog/search URLs (/catalog?... and category pages like /catalog/1904-women-shoes), member/closet URLs (/member/{id}-{login}), and single item URLs (/items/{id}-slug). Each is auto-classified. A catalog URL's query string (search_text, catalog[], brand_ids[], size_ids[], status_ids[], color_ids[], price_from, price_to, order, and any other filter the site put there) is kept as it is; only the page number is set by the actor.

Do you return listing rows or seller rows?

Always listing rows. A member/closet URL is expanded into one row per item in that seller's wardrobe — you never get a single "seller" row.

How do I filter by brand or category?

Filter on the Vinted site, then copy the numeric IDs out of the resulting catalog URL — brand_ids[], catalog[], size_ids[], status_ids[] — and pass them in the matching input fields (keyword-search mode). Or just paste the whole filtered catalog URL into startUrls.

Why is totalPriceWithBuyerProtection higher than price?

price is the seller's asking price. Vinted adds a Buyer Protection fee (serviceFee) on top; totalPriceWithBuyerProtection is what a buyer actually pays.

Why are some fields null or zero?

Each Vinted page carries different data. Search rows come from the catalog page, which has no seller username, view count, reserved flag, or photo count, so sellerLogin, views, isReserved, and photoCount are empty there (see the table under Output Overview). Closet and item URLs fill most of them. favourites is frequently 0 on freshly listed items.

Why does a big search stop at 960 listings?

Vinted itself shows at most 10 pages of 96 listings for any search. To collect more, split the search: narrower price ranges, a category, sizes, or brands, each as its own URL.

Which countries can I scrape?

Any Vinted domain — vinted.com, .co.uk, .fr, .de, .es, .it, .nl, .be, .pl, .cz, .sk, .at, .lt, .lu, .pt, .se, .ro, .hu, .gr, .fi, .dk, .ie. Pick one with the domain field, or paste URLs from any of them.

Can I scrape private profiles or content behind login?

No. The actor only reads publicly available listing data. Anything behind the Vinted login wall is out of scope.

What about rate limits?

Vinted's pages show low anti-bot friction. The actor rotates the proxy and retries on any 401/403/429 or block page, and loads one page at a time. Residential proxy is recommended for large runs.

Support

Found a bug or have a feature request? Open an issue on the actor's Issues tab.

Additional Services

Need full item descriptions, measurements, sold-listing history, or scheduled closet monitoring? Custom work is available on request — open an issue with what you need.

Explore More Scrapers

If you found this useful, you might also like:

🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/apify-vinted-scraper).

Purpose: scrape Vinted second-hand fashion listings from catalog searches, member closets, or item URLs across any Vinted country domain.

Minimal input:

{ "searchText": "nike", "domain": "vinted.com", "maxItems": 20 }

Output: one dataset row per listing — id, title, url, brand, size, condition, price, currency, serviceFee, totalPriceWithBuyerProtection, favourites, views, isPromoted, isReserved, sellerId, sellerLogin, sellerUrl, sellerIsBusiness, photoUrl, photoCount, domain, scrapedAt.

Behaviors an agent should know:

  • Always set maxItems. A search returns at most 960 listings (Vinted's cap of 10 pages of 96); split broad searches by filters to go further.
  • startUrls take priority over searchText/filter fields; the discrete filters apply to keyword search only.
  • domain selects the country catalog AND the token bootstrap domain; a seed URL's own domain overrides it.
  • Search rows leave sellerLogin, views, isReserved, and photoCount empty; closet rows fill all four, item rows all but views.
  • Item URLs are read from the item page; a sold or removed item gives no row.
  • Billing is per dataset row plus a one-off actor-start event; a search with no results pushes no rows.

⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Vinted UAB, Vinted, Inc., or any of their subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available Vinted listing pages — no authenticated endpoints, buyer-only features, or content behind the Vinted login wall. Users are responsible for ensuring their use complies with Vinted's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.

SEO Keywords

vinted scraper, scrape vinted, vinted api, vinted.com scraper, Apify vinted, vinted listings scraper, vinted closet scraper, second hand fashion data, vinted price monitoring, resale price data, vinted brand data, vinted seller scraper, used clothing scraper, secondhand marketplace scraper, vinted catalog scraper, vinted uk scraper, vinted fr scraper, fashion resale intelligence, circular economy data, vinted product data.