# Changelog of 🔥Vinted Scraper (`bebity/vinted-premium-actor`) Actor

- **URL**: https://apify.com/bebity/vinted-premium-actor/changelog.md
- **Full Actor documentation**: https://apify.com/bebity/vinted-premium-actor.md

## Changelog

Notable changes to **Vinted Scraper**, written for the people who run it.

Versions here match the version you see in Apify Console. Apify appends its own
build number, so version `2.0` appears as builds `2.0.1`, `2.0.2`, and so on —
pin a build number if you need a run to stay identical over time.

***

### 2.3 — 2026-09-13

Seller details now carry everything a seller's public profile shows — for a pro
seller, that includes how to reach them.

#### Added

- **Pro sellers' business contact** — `businessName`, `businessEmail`,
  `businessPhone`, `businessAddress`, `businessCountryCode`, `businessLegalCode`
  and `businessRegistrar`, with their own *Pro sellers' contact* tab. They hold
  exactly what Vinted displays on the seller's public profile: a contact Vinted
  keeps private, such as a sole trader's personal phone, stays empty, and every
  one of them is empty for private sellers.
- **`sellerPhoto`** — the seller's avatar, on the seller row too.
- **Verified sign-ins** — `isEmailVerified`, `isGoogleVerified` and
  `isFacebookVerified`.
- **`bundleDiscounts`** — the seller's bundle tiers, for example 10 % off from 3
  items. Tiers left at 0 % are not listed.

No extra request and no price change: all of it was already in the seller profile
the add-on fetches.

***

### 2.2 — 2026-09-13

The item details add-on now reads Vinted's own product API instead of the
product page: same fields, more of them, and about three times faster.

#### Breaking changes

- **`brandWikidata` is gone.** It existed only in the web page, was empty for
  one listing in three, and keeping it meant downloading a 2 MB page for every
  item. If you need it, pin your task's **Build** to a `2.1.x` build number.

#### Added

- **Stable ids next to the labels** — `categoryId`, `brandId`, `sizeId`,
  `statusId`. They do not change with the marketplace's language, so rows from
  two countries finally line up.
- **The shipping breakdown** — `shippingOriginalPrice`, `shippingDiscount`,
  `shippingLowest30d` and `pickupOnly`, beside the `shippingFrom` you had.
- **The seller, on the item row** — rating, number of reviews, items listed,
  city, country, last seen, and their badges (`sellerBadges`), without the
  seller add-on.
- **More attributes.** The product API serves fields the page never showed, such
  as a phone's battery health.
- `isReserved`, `isClosed` and `isHidden` are now filled on keyword-search rows
  too, not only on a seller's wardrobe.
- **`detailError`** — empty when a listing's product record arrived. When it
  could not be fetched, it says why.

#### Changed

- **The details add-on is about three times faster** and moves a fraction of the
  data it used to.
- **A listing whose product record cannot be fetched is kept.** Until now it
  became a row in the *Failed items* tab and its listing data was lost. It is now
  delivered with every listing column, the item-details columns empty and
  `detailError` saying why — and it is not charged the item-details price. The
  end of the run log says how many rows this happened to.

### 2.1 — 2026-09-12

Richer images, the seller's avatar and two listing statuses — all taken from data
the actor already receives, so speed and price do not change.

#### Breaking changes

- **Each entry of `photos` is now an object instead of a plain URL.** It carries
  `url` (the same image as before), `fullSizeUrl`, `dominantColor`, `width` and
  `height`. If you read `photos[i]` as a link, read `photos[i].url` instead. The
  `photo` column is unchanged: it is still the main image's URL. To keep the old
  shape, set your task's **Build** option to the last `2.0.x` build number.

#### Added

- **Full-size photos.** `photos[].fullSizeUrl` is the largest version Vinted
  keeps, up to 1600 px on the long side — for most photos twice the
  resolution of the URL you had so far (1200 × 1600 instead of 600 × 800 for a
  portrait shot). When the seller uploaded a smaller image, you get that image,
  never less than before.
- **Each photo's dominant colour and dimensions**, so you can tell a portrait
  shot from a landscape one, or sort a gallery by colour, without downloading
  anything. `width` and `height` describe `url`.
- **`sellerPhoto`** — the seller's avatar, next to their name and profile link.
  Empty for sellers who have not set one.
- **`isVisible`** and **`isHidden`**, alongside `isReserved` and `isClosed`.
  Vinted serves `isVisible` only in keyword search and `isHidden` only in a
  seller's wardrobe, so each one is empty on the other.

#### Fixed

- **The documentation now says a listing can carry up to 20 photos.** It said 10;
  every photo was already returned.

***

### 2.0 — 2026-09-10, updated 2026-09-11

A full rebuild. The engine, the input, and the output contract are all new. If
you are coming from `0.0`, read **Breaking changes** first — your saved inputs
will not run as-is.

#### Breaking changes

- **The advanced parallelism setting is gone.** It was the one field in the form
  that asked you to guess a number, and the wrong guess made runs slower rather
  than faster — the actor now tunes it from its own measurements. A saved task
  that still carries the old field keeps working: the value is simply ignored.
- **The input has been redesigned.** Field names and shapes have changed, and
  every field now has a plain-language title, a description of what it does, and
  a sensible default. You should no longer have to look up a numeric ID anywhere
  to get a run started. Open the actor, re-fill the form once, and save it as a
  task.
- **Sellers now go to their own dataset.** They used to share the listings
  table, which meant `maxItems: 100` answered with roughly 198 records — 100
  listings plus a hundred seller rows that had no title and no price and read as
  blank in any flat view. `maxItems: 100` now means 100 listings, and enriched
  sellers land in a separate **Sellers** dataset with columns of their own.
- **There is no proxy setting any more.** Proxying is handled by the actor, and
  its cost is ours rather than yours — a run bills you for the events in the
  table below and nothing else. If you had a proxy configured on a saved task,
  the setting is simply ignored; the task still runs.
- **There is no concurrency setting any more.** The actor runs at the speed it
  was tuned to across real runs; a lower setting only made a run slower at the
  same price per result. A saved task that still carries it runs — the
  setting is simply ignored.
- **Pricing moves from a monthly subscription to pay-per-event.** You pay for
  results instead of for a seat, the two enrichments are opt-in and billed only
  when used, and there is no monthly commitment. See the README for the full
  table.

#### Added

- **Deep scan.** Vinted stops paginating a single search at roughly 800 unique
  results, whatever you ask for. Deep scan works around that and returns several
  thousand from the same query. It costs more requests, so it is off by default.
- **Item details** (opt-in). Adds the full listing description, the readable
  category path, every colour rather than just the first, the shipping-from
  price, the brand's Wikidata identifier, and Vinted's own per-category
  attribute map — `material` on furniture, `author` and `isbn` on books,
  `battery_health` on phones, and so on for whatever else Vinted attaches.
- **Seller details** (opt-in). One row per unique seller: rating and the full
  feedback breakdown behind it, items listed, sold and bought, a computed
  sell-through rate, followers, city, and when they were last seen — as a real
  timestamp rather than "today at 10:24".
- **Demand signals computed for you** — listing age in hours, favourites per
  day, and favourite rate. Vinted publishes none of these.
- **Paste a Vinted URL.** Filter on the site the way you normally would, paste
  the URL in, and the actor reproduces the search. The dropdowns are still there
  if you prefer them.
- **Brands by name.** Type `Nike` or `Stone Island` instead of hunting for
  Vinted's brand number — a number still works if you have one. Before
  collecting anything, the run lists the brands it is about to filter on. A name
  that matches no brand exactly is never guessed: it is left out, the log
  suggests the closest brands Vinted has, and the **Failed items** tab keeps a
  row for it. If none of the brands you named exist, the search does not run at
  all rather than returning every brand. Saved tasks that used brand numbers keep
  working unchanged.
- **Colour filter.** Pick one or more of Vinted's 29 colours from a list.
- **A cap on what a run may cost you.** Set *Maximum cost per run* and the actor
  plans its collection around that number before it sends a single request: it
  tells you upfront how many listings your cap covers, collects exactly that
  many, and stops. You are never handed rows past the cap, and never charged
  past it.
- **Ready-made output views.** The Output tab opens on a photo-first overview,
  with separate tabs for product details, pricing and shipping, seller and
  demand, and anything that failed. The Sellers dataset has three of its own.
- **Failure rows.** Anything that could not be collected appears as a row with
  the reason why, in its own tab. Nothing is dropped in silence.
- **All 12 Vinted marketplaces** — `com`, `fr`, `de`, `es`, `it`, `be`, `at`,
  `cz`, `pl`, `pt`, `ro`, `co.uk`.

#### Changed

- **The two add-ons now sit together** under **Output options**, instead of being
  split across two sections with a seller heading above an item setting.
- **A run now asks for 1 GB by default**, measured rather than guessed: at that
  size a 100-listing run with everything switched on finishes in about 75
  seconds, which is twice as fast as the tier below it for the same cost, and
  cheaper than the tier above.
- **Roughly five times faster.** A 100-listing run that used to take close to two
  minutes now typically finishes in about twenty seconds.
- **36 columns per listing**, up from a thin subset, and every one of them is
  documented in the README with a real example row.
- Image URLs now include a dedicated main-photo column alongside the full list,
  so exports to CSV and Excel stay readable.
- Rebuilt on Node 24. Version `0.0` ran on a Node release that has reached end
  of life.

#### Fixed

- **A mistake in the input no longer fails the run.** A pasted address the actor
  cannot read — a search that was typed rather than copied, a link to one item
  or to a seller's page, an address from another site — used to end the run with
  an error. Now the run tells you which addresses it could not use and why,
  writes a row for each in the **Failed items** tab, and carries on with the
  ones it can read. If none of them can be used, the run finishes normally and
  says so instead of failing.

- **A link to a single item is no longer treated as a search.** Pasting one used
  to start an unfiltered browse of the whole catalogue and bill you for
  listings you never asked for. It is now refused with a note telling you to
  paste the results page instead.

- **A seller link that names no seller is no longer dropped in silence.** It
  used to leave a run that finished with zero rows and no explanation anywhere.

- **A pasted category link now keeps its category.** A link to a category page,
  or to a search filtered by category, used to run without the category at all —
  returning, and billing, listings from every category under the same keyword.
  The category is now applied exactly as the page you copied showed it.

- **A run the platform restarts now carries on instead of starting over.** Apify
  sometimes moves a long run to another server mid-way. The run used to begin
  again from the first page, so every listing it had already collected appeared
  twice in your dataset and was charged twice, along with a second start fee.
  It now picks up from the page it had reached; the rows already collected stay,
  and none of them is collected or charged again. Resurrecting an aborted run
  continues it the same way.

- **Runs no longer report success with missing data.** In `0.0`, a failure part
  way through collection ended the run quietly and reported success, so a
  truncated result was indistinguishable from a complete one. That is what hid
  the ~800-result ceiling from users for months. Collection now either returns
  the rows or tells you which ones it could not get, and warns you explicitly
  when a search has hit Vinted's own limit.

- **The README no longer advertises data the actor cannot return.** `0.0`
  promised catalogue browsing that had stopped working. Every field and every
  claim in the current README is checked against live data by an automated test.

#### Notes

- Deep scan and the two add-ons are all off by default, so a run costs the base
  rate unless you ask for more.
- `viewCount`, `isReserved` and `isClosed` are only populated when you collect a
  seller's wardrobe. Vinted does not serve them in keyword search results, and
  the actor returns an honest `null` rather than a plausible zero.

***

### 0.0

The original release. No changelog was kept for it.
