WatchCharts Scraper — Market Price & Reference
Pricing
from $5.00 / 1,000 watch prices
WatchCharts Scraper — Market Price & Reference
Scrape WatchCharts market and retail prices by reference or brand. One row is one watch, with collection, volatility rank, and risk score. No login.
Pricing
from $5.00 / 1,000 watch prices
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by WatchCharts or its affiliates. Data is read from publicly accessible brand, search, and model overview pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.
WatchCharts scraper for public market prices. One row is one watch: reference, retail price, pre-owned market price, and the ranks printed on the model page (volatility, risk, sales volume). Search by reference, read a brand index, or open a model URL. Use it as a WatchCharts API alternative from Python, Node.js, cURL, or Apify MCP, and export the dataset as JSON.
Best for: dealers and pricing apps that need a current market price next to a reference number.
Suite
| Chrono24 Scraper | WatchCharts Scraper |
|---|---|
| Chrono24 Scraper — live dealer listings | WatchCharts Scraper ◄── you are here — market price and reference |
When to use this Actor
- A reference search — Put
126610LNin Search queries. The result list has no price, so the Actor opens each model page up to Maximum watches and saves the market price on that same row. - A brand index — Set Brands to
RolexorPatek Philippefor the first page of model cards. - A model overview — Paste a public model page URL. The row includes collection, dial color, and the percentile ranks.
- Richer cards — Turn on Open model pages to add those ranks onto each listing card. That opens one extra page per watch and is still one saved row.
When not to use this Actor
- Live dealer asks and shipping — Use the Chrono24 Scraper for listing cards. This Actor reads the public price index, not a marketplace checkout.
- Full price history, forecasts, or appraisals — Those sit behind a member login. This Actor saves the prices and ranks shown on the public page.
- A login session or private collection — No account, no collection export.
Key features
- Market and retail price — Number, currency, the printed text, and the as-of date when the page shows one.
- Reference and collection — Brand, model name, reference, and the related references on a model page.
- Ranks — Market price, one-year performance, volatility, risk, sales volume, days on market, and tenure, as printed.
- One charge per watch — A listing card and its optional model page are the same dataset row.
Input
| Field | Required | Default | What it does |
|---|---|---|---|
| Search queries | No | — | Reference or model text. One public search page each |
| Brands | No | — | Brand index, such as Rolex |
| Page URLs | No | — | Brand, search, or model page |
| Maximum watches | No | 25 | Stop after this many rows (cap 200) |
| Maximum pages | No | 1 | Listing pages per search or brand (cap 5) |
| Open model pages | No | off | Add collection and ranks onto each card |
| Proxy | No | Residential, Germany | On by default. The public pages answer a normal browser. A datacenter IP is challenged before any card loads |
{"searchQueries": ["126610LN"],"maxItems": 25,"maxPages": 1,"includeDetails": false}
Output
| Field | Meaning |
|---|---|
brand, modelName, reference | Name on the card or model page |
collection, references, style, dialColor | Specs from a model page |
marketPrice, marketPriceText, currency, marketPriceAsOf | Pre-owned estimate |
retailPrice, retailPriceText, retailPriceAsOf | Authorized-dealer price when printed |
marketRank, volatilityRank, riskScore | Percentiles as printed |
oneYearPerformance, salesVolumeRank, daysOnMarket, marketTenure | More percentiles from the model page |
status, caseMaterial, caseSize, waterResistance | Badges on a listing card |
imageUrl, url | Image and the public model URL |
sourceUrl, scrapedAt | Page that was read, and the run time in UTC |
{"recordType": "listing","query": "126610LN","brand": "Rolex","modelName": "Submariner Date","reference": "126610LN","marketPrice": 14250,"marketPriceText": "€14,250","currency": "EUR","retailPrice": 9100,"retailPriceText": "€9,100","status": "In Production","caseMaterial": "Steel","url": "https://watchcharts.com/watch_model/example/overview","sourceUrl": "https://watchcharts.com/watches/search?q=126610LN","scrapedAt": "2026-10-19T12:00:00Z"}
Use cases
- Price a reference before listing it, and keep the market price next to retail.
- Read the first page of a brand index when you want every in-production card, not one URL.
- Open a model page when you need the volatility rank and risk score, not only the price.
- Hand the reference to the Chrono24 Scraper when you also want live dealer listings.
Integration examples
Replace APIFY_TOKEN. The slug below is the Store name.
Node.js
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("crawloop/watchcharts-scraper").call({searchQueries: ["126610LN"],maxItems: 25,maxPages: 1,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("crawloop/watchcharts-scraper").call(run_input={"searchQueries": ["126610LN"],"maxItems": 25,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(len(items))
cURL
curl -X POST "https://api.apify.com/v2/acts/crawloop~watchcharts-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries":["126610LN"],"maxItems":25,"maxPages":1}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP.
Connect your Apify account, then call this Actor by its Store name crawloop/watchcharts-scraper.
Example prompts:
- "Run WatchCharts Scraper for reference 126610LN and return brand, reference, market price, and retail price as JSON"
- "Scrape the Rolex brand page with WatchCharts Scraper, maximum 25 watches, and list references under the market price"
- "Run WatchCharts Scraper for 16610, then Chrono24 Scraper for the same reference and compare the market price with live listings"
Suite next step
After the market price, pull live dealer listings with the Chrono24 Scraper.
FAQ
What is one row? One watch. A search or brand card is one row. Opening the model page adds fields to that same row. It is not a second charge, and it is not one row per history point.
Does the price include the full chart history? No. The row keeps the current market price, the retail price, and the ranks printed on the public page. Multi-year history stays on the site for logged-in members.
Which currency is the price in?
The currency printed on the page. currency is EUR, USD, or GBP when the symbol is one of those. marketPrice is the number without the symbol.
Do I need a login or a proxy? No login. Residential proxy is on by default because a datacenter address is challenged before the watch cards load. Turn Proxy off only for a local test.
How do I export the rows? The run writes one watch per dataset row. Download JSON, CSV, or Excel from that dataset, or read it with the Node.js, Python, and cURL examples.