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

Scrape Chrono24 watch listings from search, brand, model or listing URLs and keywords: brand, model, reference number, price, year, condition, box and papers, case, movement, caliber, location, dealer name and rating, and images. Filters for price, year, condition, materials, seller type and country.
Scrape watch listings from Chrono24, the largest luxury watch marketplace. Paste search, brand, model or listing URLs, or type a keyword, and get clean rows with the reference number, price, year, condition, box and papers, case, movement, caliber, location, dealer name and rating, and every photo. No login, no browser, and it costs $1 per 1,000 listings.
| Field | What it does |
|---|---|
startUrls | Chrono24 search, brand, model, reference or listing URLs |
searchQueries | Keywords, like the Chrono24 search box |
maxItems | Maximum listings in total (default 20, 0 = no limit) |
includeDetails | Open each listing page for the full spec sheet and seller data (default on) |
priceFrom / priceTo | Price range in the selected currency |
yearFrom / yearTo | Production year range |
usedOrNew, condition, boxAndPapers | New/used, condition grades, scope of delivery |
movement, caseMaterial, dialColor, braceletMaterial, functions, gender | Watch attribute filters |
sellerType, countries | Dealer / private seller / Chrono24 Direct, seller countries |
sortBy, currency | Sort order and price currency |
extraFilters | Any other Chrono24 search parameter as JSON |
{
"startUrls": ["https://www.chrono24.com/rolex/daytona--mod2.htm"],
"searchQueries": ["patek nautilus"],
"maxItems": 100,
"priceFrom": 20000,
"priceTo": 60000,
"boxAndPapers": "box_and_papers",
"countries": ["US", "Germany"],
"sortBy": "price_asc",
"currency": "USD"
}
| Field | Example |
|---|---|
listingId, listingUrl | 48351919, listing link |
title, subtitle | Rolex Daytona, seller's headline |
brand, collection, model, referenceNumber | Rolex, Daytona, Daytona, 16520 |
price, currency, priceOnRequest | 28070, USD, false |
shippingCost, shippingLabel | 150, + $150 for shipping |
year, condition, conditionDescription | 1989, Used (Very good) |
scopeOfDelivery, hasOriginalBox, hasOriginalPapers | box and papers |
movement, caliber, powerReserve, jewels | movement details |
caseMaterial, caseDiameter, bezelMaterial, crystal, dialColor, braceletMaterial, clasp | case, dial and bracelet |
functions, otherAttributes | ["Chronograph", "Date"] |
location, countryCode, region, city | seller location |
sellerType, sellerName, sellerRating, sellerReviewCount, sellerBadges, sellerMemberSince | seller data (name and rating for businesses only) |
description | the seller's description |
images, thumbnail | full-size photo URLs |
specs | the complete spec sheet, grouped by section |
position, badge, searchSource, scrapedAt | where and when it was found |
Example row (trimmed):
{
"listingId": "48351919",
"listingUrl": "https://www.chrono24.com/rolex/daytona-zenith-panda-white-dial-on-oyster-bracelet-16520-1989--id48351919.htm",
"title": "Rolex Daytona",
"subtitle": "Zenith Panda White Dial on Oyster Bracelet 16520 1989",
"brand": "Rolex",
"model": "Daytona",
"referenceNumber": "16520",
"price": 28070,
"currency": "USD",
"shippingCost": 150,
"year": 1989,
"condition": "Used (Very good)",
"scopeOfDelivery": "No original box, no original papers",
"hasOriginalBox": false,
"hasOriginalPapers": false,
"movement": "Automatic",
"caliber": "Zenith El Primero 4030",
"powerReserve": "50 h",
"caseMaterial": "Steel",
"caseDiameter": "40 mm",
"waterResistance": "10 ATM",
"crystal": "Sapphire crystal",
"dialColor": "White",
"braceletMaterial": "Steel",
"location": "United States of America, Florida, Naples",
"countryCode": "US",
"sellerType": "Professional dealer",
"sellerName": "Statement Jewelers",
"sellerBadges": ["Trusted Seller"],
"images": ["https://img.chrono24.com/images/uhren/48351919-k8lwbhk3m6q36h6tzq7pwbmh-ExtraLarge.jpg"],
"scrapedAt": "2026-10-15T04:26:43.000Z"
}
You pay $1.00 per 1,000 watch listings ($0.001 per listing), with or without full details. Platform usage (compute and residential proxy traffic) is billed on top at the normal rates and stays small: plain HTTP with compressed pages, about 40 KB of proxy traffic per listing page and about 60 KB per 120 search results.
Worked example (measured): 1,000 Omega listings with full details took about 2 minutes 20 seconds and cost $1.00 for the listings + about $0.08 proxy + $0.01 compute ≈ $1.09. The same 1,000 listings without details (search-card fields only) cost about $1.01.
Is it legal to scrape Chrono24? The actor reads public listing pages that anyone can open without an account. Check Chrono24's terms and your local law for your use case, and handle any personal data responsibly.
Do I need a Chrono24 account or my own proxy? No. No login is used. Residential proxies are used by default because Chrono24 refuses datacenter addresses; blocked requests are retried on a fresh address automatically.
How many listings can I get? As many as Chrono24 shows for your search. Brand pages like Rolex hold 100,000+ listings; use filters or several model URLs to target what you need.
Why is a field empty? Sellers fill the spec sheet themselves, so fields such as year, caliber or power reserve are missing when the seller left them out. Seller name and rating are only shown for businesses; private sellers appear by type and country.
What happens to sold listings? A sold or removed listing URL redirects to its model page on Chrono24, so it is skipped and counted in the run's status message.
Can I schedule it or use the API? Yes. Schedule runs in the console, or start them over the REST API and read the dataset as JSON, CSV or Excel.
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.
startUrlsarrayOptionalChrono24 URLs
Any chrono24.com URL: a search result page, a brand page (/rolex/index.htm), a model page (/rolex/daytona--mod2.htm), a reference page (/rolex/ref-116500ln.htm) or a single listing (...--id12345678.htm). Filters and sorting already in the URL are kept. Other Chrono24 country sites (chrono24.de, .fr, ...) are read from chrono24.com.
searchQueriesarrayOptionalSearch keywords
Keywords, exactly like the Chrono24 search box: a brand, model or reference number (e.g. 'patek nautilus', '126610LN', 'speedmaster moonwatch').
maxItemsintegerOptionaldefault 20Maximum listings
Stop after this many watch listings in total across all inputs. 0 means no limit.
maxItemsPerInputintegerOptionalMaximum listings per URL or keyword
Optional cap for each search, brand or model input, so one big brand page does not use up the whole run. Empty or 0 means no per-input cap.
includeDetailsbooleanOptionaldefault trueInclude full listing details
Open every listing page for the full spec sheet: reference number, year, condition, box and papers, caliber, case, dial, bracelet, functions, seller name, rating and description. Turn off for fast search-card data only (title, price, shipping, country, seller type, images).
Optional. Applied to every search, brand and model input (single listing URLs ignore them). They stack with filters already in a pasted URL.
priceFromintegerOptionalPrice from
Minimum price, in the selected currency.
priceTointegerOptionalPrice to
Maximum price, in the selected currency.
yearFromintegerOptionalYear of production from
Oldest production year, e.g. 1960.
yearTointegerOptionalYear of production to
Newest production year, e.g. 2024.
usedOrNewenumOptionalNew or used
Only new/unworn or only pre-owned watches.
conditionarrayOptionalCondition
One or more condition grades. Leave empty for all.
boxAndPapersenumOptionalBox and papers
Scope of delivery.
movementarrayOptionalMovement
One or more movement types.
caseMaterialarrayOptionalCase material
One or more case materials.
dialColorarrayOptionalDial color
One or more dial colors.
braceletMaterialarrayOptionalBracelet material
One or more bracelet or strap materials.
functionsarrayOptionalFunctions
Watches with all of these complications.
genderenumOptionalGender
Men's/unisex or women's watches.
sellerTypearrayOptionalSeller type
Professional dealers, private sellers, Chrono24 Direct or official brand boutiques.
countriesarrayOptionalSeller countries
Only sellers located in these countries. Country names ('Germany', 'United States of America') or ISO codes ('DE', 'US').
sortByenumOptionalSort by
Order of the results. Matters when the maximum cuts the list short.
currencyenumOptionaldefault "USD"Currency
Currency for prices and for the price filter.
extraFiltersobjectOptionalAdvanced filters (JSON)
Any other Chrono24 search parameter, e.g. {"waterproof": "10 ATM", "glass": "Sapphire crystal", "caseDiameter": ["40", "41"], "stockInfo": "InStock"}. Labels from the Chrono24 filter panel or raw ids both work.
maxConcurrencyintegerOptionaldefault 8Parallel listing pages
How many listing pages are opened in parallel when details are on.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Chrono24 refuses datacenter addresses, so residential exits are used (only a few KB to tens of KB per page).
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 |
|---|---|---|
| thumbnail | any | Image |
| listingUrl | any | Listing |
| title | any | Title |
| subtitle | any | Subtitle |
| referenceNumber | any | Reference |
| price | any | Price |
| currency | any | Currency |
| year | any | Year |
| condition | any | Condition |
| scopeOfDelivery | any | Box & papers |
| caseMaterial | any | Case |
| caseDiameter | any | Size |
| movement | any | Movement |
| caliber | any | Caliber |
| location | any | Location |
| countryCode | any | Country |
| sellerType | any | Seller type |
| sellerName | any | Seller |
| sellerRating | any | Rating |
| sellerReviewCount | any | Reviews |
| shippingCost | any | Shipping |
| scrapedAt | any | Scraped at |
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 |
|---|---|---|
| Watch listing | One Chrono24 watch listing saved to the dataset | $0.001 |
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/chrono24-scraper').call({
"startUrls": [
"https://www.chrono24.com/rolex/daytona--mod2.htm"
],
"searchQueries": [
"omega speedmaster"
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// 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/chrono24-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/chrono24-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.
Watch listings from a Chrono24 page in USD.
Search results with full listing details.
Cheapest used listings within a price range.
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.