Vinted Demand & Sell-Through Scraper avatar

Vinted Demand & Sell-Through Scraper

Pricing

from $0.78 / 1,000 results

Go to Apify Store
Vinted Demand & Sell-Through Scraper

Vinted Demand & Sell-Through Scraper

Vinted demand intelligence: sell-through rate, realised sale prices, days-to-sell, and cross-market sourcing. No proxy, no PII.

Pricing

from $0.78 / 1,000 results

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

1

Monthly active users

3 days ago

Last modified

Share

Vinted Demand & Sell-Through Scraper

Analyse demand and sell-through on Vinted at scale: per-query market reports with sold-versus-active ratios, price distributions and demand signals, ready for resale research and pricing decisions. No API key required.


Why this scraper?

🎯 Built for vinted

A dedicated European scraper tuned for vinted β€” its categories, price formats and currency (EUR), not a generic tool pointed at it.

🀝 Seller and condition

Seller details and item condition in structured fields, ready for filtering.


Input parameters

ParameterTypeDefaultDescription
searchQuerystring"nike air force 1"Product, brand, or model to scan across markets (e.g. 'nike air force 1', 'ralph lauren jumper').
countriesarray["fr", "de", "nl", "it", "es"]Vinted markets to scan. Pick 2-5 for a focused arbitrage scan. All listings are normalised to one currency for comparison.
maxResultsinteger100Total listings to return across all markets (split evenly). Vinted caps each query at ~960 per market.
baseCurrencystring"EUR"Currency all markets are converted to for price-gap comparison. Live ECB rates.
sortBystring"relevance"How listings are ordered within each market.
priceMininteger(empty)Minimum listing price in each market's local currency. Leave empty for no minimum.
priceMaxinteger(empty)Maximum listing price in each market's local currency. Leave empty for no maximum.
conditionarray(empty)Filter by item condition. Leave empty to include all conditions.
brandNamesarray(empty)Filter by brand β€” just type the names (e.g. 'Nike', 'Stone Island'). The actor looks up each brand's ID automatically. Leave empty for all brands.
brandIdsarray(empty)Advanced: filter by raw Vinted brand ID if you already know it. Most users should use Brand names above instead.
sizeIdsarray(empty)Advanced: filter by raw Vinted size ID for categories not covered by the dropdowns below. Find it in the URL after selecting a size filter. Leave empty for all sizes.
clothingSizesarray(empty)Filter by clothing size (XS–XXXL). For shoes, use the shoe size filter below. Leave empty for all sizes.
shoeSizesarray(empty)Filter by EU shoe size (38–47.5). For clothing, use the clothing size filter above. Leave empty for all sizes.
kidsSizesarray(empty)Filter by kids clothing size (age / cm, e.g. '6 yr / 116 cm'). Covers newborn to 16 years. Leave empty for all sizes.
colorsarray(empty)Filter listings by colour. Leave empty for all colours. Note: Vinted does not return a colour value per listing, so this narrows the scan but does not add a colour output field.
genderstring"all"Filter by department. Vinted sells far more than clothing β€” pick Home, Electronics, Video Games, Books & Media, Beauty, Jewellery, Sports, or Bags for non-fashion categories. Leave as 'All' to search everything. Note: if you pick a specific Category below, that takes precedence over this.
categorystring"all"Filter by product category. These are the verified cross-department categories. For any other category, use the advanced Category ID field below. If set, this overrides the Department filter.
categoryIdinteger(empty)Advanced: filter by a specific Vinted catalog ID not covered by the Category dropdown. Find it in the catalog URL (catalog[]=NUMBER). Overrides Department and Category if set.
includeListingsbooleantrueOutput every matching listing row. Disable to get only the cross-country arbitrage summary (cheaper).
dedupeAcrossMarketsbooleantrueVinted shows the same listing in every market it ships to. With this on, each item appears once, with a 'markets' field listing every market it was found in. Turn off to get one row per market.
fetchDetailsbooleanfalseFetch each listing's page for the seller's description, declared colour, and full category path β€” data not in the fast search API. This makes runs slower and is billed at a higher per-result rate. Leave off for fast, cheap catalog data.
sellThroughTrackingbooleanfalseMeasure real demand. Run this on a schedule (e.g. daily): the actor snapshots live listings and flags items that disappear as 'likely sold', giving you a sell-through rate and median days-to-sell for your niche. Overrides the normal scan output.
trackerNamestring(empty)A stable name for this sell-through tracker (e.g. 'nike-af1-kids'). Reuse the same name across scheduled runs so history accumulates. Leave empty to auto-generate from the search query.
missingRunsBeforeSoldinteger2How many consecutive runs an item must be absent before it's marked likely sold. Use 2 to avoid false positives from search-ranking shuffle.
emitActiveItemsbooleantrueIn sell-through mode, also output items that are still listed (with days-listed and any price drop). Disable to output only newly-sold items and the summary (cheaper).
minSellThroughAlertPctinteger(empty)In sell-through mode, only send a webhook alert when the sell-through rate is at least this percentage. Leave empty to always alert. Pairs with the Telegram/Discord/Slack fields below.
includeArbitrageSummarybooleantrueAdd one summary row comparing median/min/max prices across markets and naming the buy-low / sell-high pair.
telegramBotTokenstring(empty)Optional. Send each run's arbitrage alert to Telegram. Create a bot with @BotFather and paste its token here. Also fill in the chat ID below.
telegramChatIdstring(empty)Optional. The chat or channel ID to send Telegram alerts to (e.g. your user ID, or -100... for a channel). Required if a bot token is set.
discordWebhookUrlstring(empty)Optional. Send each run's arbitrage alert to a Discord channel. Paste an Incoming Webhook URL (Server Settings β†’ Integrations β†’ Webhooks).
slackWebhookUrlstring(empty)Optional. Send each run's arbitrage alert to a Slack channel. Paste an Incoming Webhook URL (api.slack.com/messaging/webhooks).
minSpreadPctAlertinteger(empty)Only send alerts when the cross-country median spread is at least this percentage. Leave empty to always alert. Useful for scheduled runs that should only ping you on real opportunities.
alertTopListingsinteger5How many of the cheapest listings to include in each alert message.

Output schema

Every field below is present on every record. Fields the source does not publish for a given item are returned as null rather than omitted.

FieldTypeDescription
_typestringtype.
idstringVinted listing ID.
countrystringMarket the listing was found in.
urlstringDirect listing URL.
titlestringListing title.
brandstringnull
sizestringnull
conditionstringnull
currencystringLocal currency of the listing.
itemPricenumberSeller's asking price (local currency).
buyerPricenumberTotal the buyer pays incl. Buyer Protection (local currency).
serviceFeenumbernull
favouriteCountnumbernull
isPromotedbooleanWhether the listing is a promoted/bumped item.
isBusinessSellerbooleannull
photoCountnumberNumber of photos on the listing.
photoUrlstringnull
dominantColorstringnull
photoUploadedAtstringnull
sourcestringSource.
scrapedAtstringTimestamp when this record was scraped.
itemPriceBasenumbernull
buyerPriceBasenumbernull
baseCurrencystringThe comparison currency.
marketsarrayEvery market this exact item was found in (cross-market duplicates are merged into one row).

Example record

{
"_type": "LISTING",
"id": "9222956838",
"country": "fr",
"url": "https://www.vinted.fr/items/9222956838-nike-air-max-muse-beige",
"title": "Nike Air Max Muse beige",
"brand": "Nike",
"size": "38.5",
"condition": "Très bon état",
"currency": "EUR",
"itemPrice": 30,
"buyerPrice": 32.2,
"serviceFee": 2.2,
"favouriteCount": 11,
"isPromoted": false,
"isBusinessSeller": false,
"photoCount": 6,
"photoUrl": "https://images1.vinted.net/t/04_0178a_RicYp7npXNhP88DF81HxR1j5/f800/1782037084.jpeg?s=cc093d2951e723dd88aafcea690c2f782094b11c",
"dominantColor": "#7D7266",
"photoUploadedAt": "2026-06-21T10:18:04.000Z",
"source": "vinted-arbitrage-scanner",
"scrapedAt": "2026-06-27T12:30:04.894Z",
"itemPriceBase": 30,
"buyerPriceBase": 32.2,
"baseCurrency": "EUR",
"markets": [
"fr"
]
}

Examples

Search for Nike hoodie:

{
"searchQuery": "Nike hoodie",
"maxResults": 100
}

Filter by category or condition:

{
"searchQuery": "Nike hoodie",
"maxResults": 100,
"condition": [
"used"
]
}

Larger run with a hard cap:

{
"searchQuery": "Nike hoodie",
"maxResults": 500
}

Daily monitoring (run on a schedule):

{
"searchQuery": "Nike hoodie",
"maxResults": 500
}

Schedule this input to run once a day in the Apify Scheduler to track prices, stock and new items over time.


πŸ’° Pricing

$0.8 per 1,000 results β€” you only pay for successfully retrieved market reports. Failed retries are never charged.

ResultsCost
100~$0.08
1,000~$0.8
10,000~$8
100,000~$80

Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Subscription tiers lower the rate further, down to $0.76 per 1,000 at the highest tier. Use the Max results cap in the input to control your spend exactly.


Performance

Run sizeTypical time
100 resultsunder 1 minute
1,000 results2–4 minutes
10,000 results20–35 minutes

Known limitations

  • Some fields (brand, condition, shipping) are only returned when the seller or source publishes them β€” expect null on a share of records.
  • Prices and stock change constantly; records reflect the moment of scraping.
  • Very large result sets are bounded by the source's own paging limits.
  • Items can sell or be withdrawn at any time, so a small share of URLs may expire shortly after scraping.

Technical details

  • Source: vinted
  • Coverage: everything the public search exposes, filterable via the input parameters above
  • Retry: automatic retry on network errors with exponential backoff

Need a custom scraper?

Unfenced Group builds Apify actors for any website β€” for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results β€” we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

Get in touch: www.unfencedgroup.nl