π Vinted Data Scraper: Fast & Robust! π₯
π Items and catalogs
π₯ User profiles with stats and balances
π·οΈ Brands
π Seamlessly integrate with Apify for unparalleled performance & insights. Elevate your business now!π
π₯ Power of direct API access for ultra-fast data extraction in a flash! β‘
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.