Vinted.fr - Listings, Item Detail & Seller Reviews avatar

Vinted.fr - Listings, Item Detail & Seller Reviews

Pricing

from $1.00 / 1,000 listing results

Go to Apify Store
Vinted.fr - Listings, Item Detail & Seller Reviews

Vinted.fr - Listings, Item Detail & Seller Reviews

Scrape Vinted.fr, France's C2C second-hand fashion marketplace: search with brand/price/condition/sort filters, paste item or seller URLs, or pull a seller's feedback history. Returns title, brand, price, condition, size, photos, seller rating per listing; reviews mode returns all seller ratings.

Pricing

from $1.00 / 1,000 listing results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Vinted.fr Scraper

Pull rich listing data from Vinted.fr, France's C2C second-hand fashion marketplace. Search by keyword with brand, price, condition, and sort filters, paste item or seller/member links directly, or pull a seller's complete feedback history. Every record includes identity, price, brand, and photos out of the box; turning on detail enrichment adds full description, condition, size, material, colour, and the seller's live feedback rating and count.

Why This Scraper?

  • Real listing filters, not guesswork. Brand id, price range, condition, and sort order all map directly to Vinted's own search parameters and are verified to narrow results, not just accepted and ignored.
  • Honest pricing, no fabricated discounts. Vinted shows a second, larger figure next to the listed price ("buyer protection included"), which is the current price plus a checkout fee, never a former price. This scraper reports the real listed price and does not invent a wasPrice/discount field that the site itself doesn't support.
  • Full item detail from the item's own page. Condition, size, material, colour, upload date, and full description, matched against the listing's own structured data and on-page attributes.
  • Native seller feedback. Overall rating, feedback count, and every individual feedback entry (reviewer, date, star rating, and comment) sourced from Vinted's own feedback system, no third-party review vendor.
  • Three ways in. Keyword/brand/category search with real filters, paste any item or seller/member URL (a seller URL walks their whole storefront), or pull a seller's full feedback history directly.
  • Optional export to your apps. Send results into Notion, Linear, Airtable, or any Apify MCP connector alongside the dataset.
  • Resume & recurring updates. Turn on Incremental mode to get only NEW, UPDATED, and REAPPEARED records on every scheduled run — a sold or removed listing comes back as EXPIRED — or resume one specific interrupted crawl with resumeFromRunId.

Input

FieldDescription
Modesearch, url or reviews.
Search keywordsFree-text keywords (search mode). Item budget splits evenly across them.
Category IDVinted catalog id (search mode, optional). Narrows a keyword search, or browses the whole category alone.
Brand IDVinted brand id (search mode, optional).
ConditionFilter to one or more condition levels (search mode, optional).
Minimum / Maximum price (EUR)Price range (search mode, optional).
Sort orderrelevance (default), newest_first, price_low_to_high, price_high_to_low (search mode).
URLs to scrapeItem pages (/items/<id>-<slug>) or seller/member pages (/member/<id>) to paste (url mode). A member URL enumerates every item that seller has listed.
SellersUsernames, numeric member ids, or /member/<id> URLs to fetch feedback for (reviews mode).
Fetch item detailAdds description, condition, size, material, colour, and the seller's feedback rating/count. On by default.
Max pages per searchResult pages walked per keyword/category/URL/seller entry. 0 (default) = unlimited, bounded by Max items.
Max items totalHard cap on total items/reviews returned across the run. Default 20; 0 = unlimited.
ProxyApify Proxy — Datacenter by default (works reliably and on every plan); switch to Residential only if you see failed runs.
Resume from a previous runContinue one specific previous run/dataset: records already collected there are skipped. For recurring monitoring of the same search/URLs/sellers, use Incremental mode instead — see "Resume & recurring updates" below.
Incremental changes for scheduled runsDaily/recurring monitoring of the same search/URLs/sellers. First run returns everything as NEW; later runs return only NEW/UPDATED/REAPPEARED by default. See "Resume & recurring updates" below.
State keyOptional name for a monitoring campaign, so its incremental state stays stable or is deliberately shared. Auto-derived from your mode/search/URL/seller/detail settings when left empty.
Emit unchanged recordsIncremental mode only. Also return records unchanged since the last run, marked UNCHANGED. Adds and bills extra rows you already have.
Emit expired recordsIncremental mode only. Also return records from a previous run no longer found (sold/removed), marked EXPIRED, once a run has fully scanned the tracked scope (not capped, not a resume). Adds and bills extra synthetic rows.
mcpConnectorsOptional MCP connectors to export results into (Notion, Linear, Airtable, Apify).
notionParentPageUrlNotion connector only: page under which item pages are created.
maxNotifyListingsCap on items exported to each connector per run. Does not affect the dataset.

Data You Get

FieldExample value
itemId00000001
titleSample Listing Title
urlhttps://www.vinted.fr/items/00000001-sample-listing-title
brandTitleSample Brand
priceAmount / currency15.0, EUR
promotedfalse
photos[][{"url": "https://images.example.com/000000000.jpeg", "isMain": true}]
seller{"id": "00000002", "username": "sample_seller"}
description (fetchDetails)The listing's own description text appears here when present.
condition (fetchDetails)Bon état
size (fetchDetails)M
material (fetchDetails)Coton
color (fetchDetails)Bleu
categoryPath (fetchDetails)Femmes Vêtements
catalogId (fetchDetails)0000
sellerFeedbackRating / sellerFeedbackCount (fetchDetails)4.9, 120

Sample shape: values above are illustrative placeholders, not from a live listing.

Reviews mode output

FieldExample value
sellerId00000002
reviewId0000000001
itemId00000003
reviewerUsernamesample_reviewer
rating5
bodySample feedback comment text.
isSystemFeedbackfalse
createdAt2026-01-01T00:00:00+01:00
sellerFeedbackRating / sellerFeedbackCount4.9, 120

Sample shape: values above are illustrative placeholders, not from a live seller.

Incremental mode only. When incrementalMode is on, every returned record (items or reviews) also carries:

FieldDescription
changeTypeNEW | UPDATED | UNCHANGED | REAPPEARED | EXPIRED
changedFieldsTop-level fields that changed since last seen; non-empty only for UPDATED
firstSeenAtWhen this record was first observed by this monitoring campaign
lastSeenAtWhen this record was last observed

No wasPrice / discount field, by design

Vinted item pages and listing cards show a second amount next to the price (e.g. "15,00 €" then "16,45 € Protection acheteurs incluse"). That second figure is the current price plus the buyer-protection fee charged at checkout, verified against the item page's own pricing breakdown, where the delta between the two exactly equals the disclosed fee. It is not a former/"was" price, and Vinted does not otherwise expose a markdown history for peer-to-peer listings. This scraper reports only priceAmount, the real listed price, rather than fabricating a discount field the marketplace doesn't have.

How to Use

Basic keyword search

{
"mode": "search",
"queries": ["sample keyword"],
"maxItems": 20
}

Search with brand, price range, condition, and sort

{
"mode": "search",
"queries": ["sample keyword"],
"brandId": "53",
"minPrice": 5,
"maxPrice": 60,
"conditions": ["3", "4"],
"sortBy": "price_low_to_high",
"fetchDetails": true,
"maxItems": 20
}

Paste item or seller/member links

{
"mode": "url",
"urls": [
"https://www.vinted.fr/items/00000001-sample-listing-title",
"https://www.vinted.fr/member/00000002"
],
"maxItems": 20
}

Pull a seller's full feedback history

{
"mode": "reviews",
"sellers": ["00000002"],
"maxItems": 100
}

sellers accepts a numeric member id or a full /member/<id> URL (find the id in the seller's profile page URL).

Filters (search mode)

FieldNotes
queriesFree-text keywords; item budget splits evenly across them.
categoryIdVinted catalog id, from a category page URL: vinted.fr/catalog/<id>-<name>.
brandIdVinted brand id, from a brand page URL: vinted.fr/brand/<id>-<name>.
conditionsFilter to one or more condition levels (new with tags, new without tags, very good, good, satisfactory).
minPrice / maxPriceEUR price range.
sortByrelevance (default), newest_first, price_low_to_high, price_high_to_low.

Resume & recurring updates

There are two different things here — pick the one that matches what you're doing:

NeedUse
A crawl stopped and should continueresumeFromRunId
Run the same search/URLs/sellers every day and receive only changesincrementalMode
Keep separate monitoring campaigns for similar scopesdistinct stateKey values
Run a normal full snapshotleave both off

Resume (resumeFromRunId) continues one specific interrupted or previous large crawl: paste a run ID or dataset ID and this run skips records already collected there, returning only the remaining new ones.

Incremental mode (incrementalMode) is for a schedule (for example, daily): the actor remembers the previous run of the same scope by itself, so you never paste a run ID. The first run returns everything as NEW. Later runs return only NEW, UPDATED, and REAPPEARED records by default — duplicates and unchanged records are suppressed (and not charged). Because Vinted is a C2C resale marketplace, a listing that sells is gone for good, so EXPIRED is a real, useful signal here, not noise — turn on emitExpired to also get those rows. Turn on emitUnchanged or emitExpired only when you also want those rows returned (and billed for). State is isolated per mode and search/URL/seller/detail setup automatically; set stateKey to name or deliberately share a monitoring campaign. Covers every mode: search, url (both pasted item links and member enumeration), and reviews.

Scheduled-run example — same search, run daily:

Day 1 (first run ever for this search):

{ "mode": "search", "queries": ["nike"], "incrementalMode": true }

→ every item comes back with "changeType": "NEW".

Day 2 (the schedule fires again, identical input):

{ "mode": "search", "queries": ["nike"], "incrementalMode": true }

→ items whose price/condition/etc. changed come back as "changeType": "UPDATED" with changedFields listing what changed, brand-new items come back as "changeType": "NEW", items that sold and were relisted come back as "changeType": "REAPPEARED" — and items still listed, unchanged, are not returned at all (suppressed, not charged) unless emitUnchanged is on. Turn on emitExpired to also get a synthetic EXPIRED row for any tracked item that sold or was removed.

Connection

Vinted.fr works reliably over a Datacenter connection, so it stays the cost-efficient default and works on every Apify plan, including free tier. Switch to Residential in the Proxy field only if you notice a rise in failed runs.

Export to your apps (optional)

Select one or more MCP connectors (Notion, Linear, Airtable, or a custom Apify MCP connector) under mcpConnectors to mirror results into the app you already use, alongside the dataset. Authorize the connector once under Apify → Settings → Integrations. For Notion, also set notionParentPageUrl to the page results should be created under. maxNotifyListings caps how many items are sent per connector per run (does not affect the dataset).