
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Scrape Vinted listings from all 26 country sites. Search by keyword or paste search, catalog, member, or item URLs, filter by price, condition, brand, and size, and get prices, photos, sizes, sellers, and optional full item details.
Get Vinted listings from all 26 Vinted country sites, from France, Germany and the UK to the US and Poland. Search by keyword or paste any Vinted search, catalog, brand, member or item URL. You get prices, sizes, condition, brand, photos and seller info, and you can add full item details or compare prices across countries. No login is needed, and it costs $0.50 per 1,000 listings.
/member/...) and single items work too.| Field | Key | Description |
|---|---|---|
| Search keywords | keywords | One Vinted search per keyword (and per compare country). |
| Vinted URLs | startUrls | Search, catalog, brand, member (seller closet) or item URLs from any Vinted site. |
| Country | country | Site for keyword searches: fr, de, gb, it, es, nl, be, pl, us, at, pt, ie, lu, cz, sk, hu, ro, hr, si, lt, lv, ee, fi, se, dk, gr. |
| Max listings per search | maxItems | Default 20. 0 means everything the search matches. |
| Price range | minPrice, maxPrice | In the country's currency. |
| Condition | conditions | new_with_tags, new_without_tags, very_good, good, satisfactory. |
| Sort by | sortBy | relevance, newest_first, price_low_to_high, price_high_to_low. |
| Brand / category / size / color IDs | brandIds, catalogIds, sizeIds, colorIds | The numbers from Vinted URLs, for example brand 53 for Nike. |
| Compare countries | compareCountries | Also run every keyword on these sites and compare prices. |
| Full item details | includeItemDetails | Adds description, color, category, upload time, all photos, reservation status. |
| Seller details | includeSellerDetails | Adds rating, review counts, location, listings, followers, verifications. |
| Track price changes / Save only | trackPriceChanges, saveOnly | Compare with earlier runs; all, new, priceDrops, newOrPriceDrops. |
| Proxy configuration | proxyConfiguration | Datacenter by default. |
{
"keywords": ["nike air force 1"],
"country": "fr",
"compareCountries": ["de", "gb"],
"maxItems": 50,
"maxPrice": 60,
"conditions": ["new_with_tags", "very_good"],
"sortBy": "newest_first",
"includeSellerDetails": true,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
One row per listing.
| Field | Description |
|---|---|
id, title, url | Vinted item ID, title and listing page |
price, total_item_price, service_fee | Price, price with the buyer protection fee, and the fee, each with amount and currency_code |
price_numeric, total_price_numeric, currency | The same prices as numbers, ready for sorting and charts |
brand_title, size_title | Brand and size as shown on Vinted |
status, status_id | Condition label in the site's language, and a language-neutral ID (6 new with tags, 1 new without tags, 2 very good, 3 good, 4 satisfactory) |
photo, photos | Main photo and all photos with thumbnails |
user | Seller ID, login, business flag and profile URL |
favourite_count, view_count, promoted | Favourites, views and whether the listing is promoted |
vinted_country, domain, search_keyword, search_url, position | Where the listing came from |
description, color, category, catalog_id, brand_id, uploaded, is_reserved | With Full item details |
seller | With Seller details: rating (of 5), review counts, country, city, listing count, followers, verifications, last login |
is_new_listing, previous_price, price_change, price_change_percent, price_dropped, first_seen_at | With price tracking |
The run's OUTPUT record holds a summary, including the per-country price comparison.
Example item (trimmed, sample data):
{
"id": 10378414429,
"title": "Carhartt J001 Active Jacket Black M",
"url": "https://www.vinted.de/items/10378414429-carhartt-j001-active-jacket-black-m",
"price": { "amount": "49.00", "currency_code": "EUR" },
"total_item_price": { "amount": "52.15", "currency_code": "EUR" },
"service_fee": { "amount": "3.15", "currency_code": "EUR" },
"price_numeric": 49.0,
"currency": "EUR",
"brand_title": "Carhartt",
"size_title": "M",
"status": "Sehr gut",
"status_id": 2,
"favourite_count": 9,
"photo": { "url": "https://images1.vinted.net/t/04_01820_example/f800/b768199d.webp" },
"user": { "id": 3185329205, "login": "sample_seller", "business": false, "profile_url": "https://www.vinted.de/member/3185329205" },
"vinted_country": "de",
"search_keyword": "carhartt jacket",
"position": 1,
"description": "Classic Carhartt J001 jacket in excellent condition, quilted lining.",
"color": "Schwarz",
"category": "Herren Bomberjacken",
"uploaded": "25 Min.",
"seller": {
"login": "sample_seller",
"rating": 4.6,
"feedback_count": 10,
"country": "Frankreich",
"item_count": 24,
"verified_email": true
},
"scraped_at": "2026-10-14T18:03:48.441Z"
}
Is it legal to scrape Vinted? It reads only public listings that anyone can see without an account. You are responsible for how you use the data, including personal data about sellers under GDPR and Vinted's terms.
Do I need a Vinted account or a proxy? No account. The default datacenter proxy is enough for searches; item pages switch to residential by themselves when needed.
How many listings can I get? Vinted's own pages stop at 960 listings per search (10 pages of 96). When you ask for more, the scraper splits the search into price bands automatically and walks each band, cheapest first, so one keyword can return thousands of listings. Seller closets have no such limit.
Why are some fields empty?
Vinted does not show every field for every listing. Items without a size have no size_title, and details such as description only appear with Full item details.
Why do the same listings show up on several countries? Many Vinted countries share one catalog, so a search on vinted.fr and vinted.de can return the same items, priced in each site's currency.
Can I schedule it or use the API? Yes. Schedule it with price tracking to get new listings and price drops, and fetch results through the API or integrations.
uploaded is the relative text Vinted shows (for example "25 Min."), in the site's language.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
keywordsarrayOptionalSearch keywords
Each keyword runs as its own Vinted search on the selected country (and on every compare country). Leave empty when you only paste URLs.
startUrlsarrayOptionalVinted URLs
Vinted search or catalog URLs with any filters, brand pages, member (seller closet) URLs, or single item URLs, from any Vinted country site.
countryenumOptionaldefault "fr"Country
Vinted site used for keyword searches. Prices come back in that site's currency.
maxItemsintegerOptionaldefault 20Max listings per search
How many listings to save for each keyword, URL, or seller closet. 0 means everything the search matches. Past 960 listings a search is split into price bands automatically.
Apply to keyword searches. For URLs they only fill in filters the URL does not already set; for seller closets the price and condition filters are applied to the listings.
minPricenumberOptionalMinimum price
Lowest listing price, in the country's currency.
maxPricenumberOptionalMaximum price
Highest listing price, in the country's currency.
conditionsarrayOptionalCondition
Only listings in these conditions. Leave empty for all.
sortByenumOptionaldefault "relevance"Sort by
Order of the search results.
brandIdsarrayOptionalBrand IDs
Vinted brand IDs, for example 53 for Nike (the number in brand_ids[]=53 or /brand/53-nike).
catalogIdsarrayOptionalCategory IDs
Vinted category IDs, for example 1242 for men's trainers (catalog[]=1242 or /catalog/1242-...).
sizeIdsarrayOptionalSize IDs
Vinted size IDs (the number in size_ids[]=... in a Vinted search URL).
colorIdsarrayOptionalColor IDs
Vinted color IDs (color_ids[]=... in a Vinted search URL).
Price comparison across Vinted sites and richer data per listing.
compareCountriesarrayOptionalCompare countries
Run every keyword on these Vinted sites too. The run summary (OUTPUT) then compares the median, average, min and max price per country.
includeItemDetailsbooleanOptionaldefault falseFull item details
Open each listing to add the description, color, category, upload time, all photos, and reservation status. Slower and billed as an extra item-details event.
includeSellerDetailsbooleanOptionaldefault falseSeller details
Add the seller's rating, review counts, location, listing count, followers, and verifications. Free; each seller is looked up once per run.
Remember listings between scheduled runs.
trackPriceChangesbooleanOptionaldefault falseTrack price changes
Compare every listing with earlier runs of the same search and add the previous price, the change, and whether it is new. Use with a schedule.
saveOnlyenumOptionaldefault "all"Save only
Which listings to save. Anything other than all listings turns on price tracking. The first run of a search counts every listing as new.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are the default and work for Vinted. The actor switches to residential by itself only if Vinted refuses datacenter exits.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | integer | null | Vinted item ID |
| title | string | null | Listing title |
| url | string | null | Listing page |
| price | object | null | Price without buyer fee: amount and currency_code |
| total_item_price | object | null | Price including the buyer protection fee |
| price_numeric | number | null | Price as a number |
| currency | string | null | |
| brand_title | string | null | |
| size_title | string | null | |
| status | string | null | Condition label in the site's language |
| status_id | integer | null | Language-neutral condition: 6 new with tags, 1 new without tags, 2 very good, 3 good, 4 satisfactory |
| photo | object | null | |
| user | object | null | Seller id, login, business flag and profile URL |
| vinted_country | string | null | |
| favourite_count | integer | null |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Full item details | Full item details (description, color, category, all photos) for one listing, only when turned on. | $0.0005 |
| Listing | One saved Vinted listing. | $0.0005 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/vinted-scraper').call({
"keywords": [
"nike air force 1"
],
"country": "fr",
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/vinted-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/vinted-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Very good condition items from 10 to 80 EUR, newest first.
French listings with item and seller details.
Listings compared across two Vinted countries.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.