If you build anything around watch data — a marketplace, a valuation tool, an insurance
quoting flow, a collection tracker — you eventually hit the same wall: you have a
reference number (126500LN-0001, scraped from a listing or copied off an invoice)
and you need the spec sheet behind it — movement/caliber, case material, dimensions,
water resistance, dial color and finish. The listing itself never has all of this. Where
does it actually live, and how do you get it as clean data instead of copy-pasting spec
tables by hand?
The gap in the watch-data ecosystem
Watch marketplace scraping is a solved, proven market — Chrono24 scrapers on Apify
have 16,000+ runs, so people clearly pay for watch listing data. But a listing gives
you price, seller, condition, and a reference number — it does not give you the
manufacturer’s full technical spec for that reference. That data lives on dedicated
reference databases, not on the marketplaces themselves.
The reference-grade source for this is WatchBase — a structured database organized
brand → model family → individual reference, with every spec Rolex, Omega, Seiko, and
hundreds of other brands publish for each watch. It has no public API and no search
endpoint, only a browsable page hierarchy, which is exactly why this data usually ends
up copy-pasted into spreadsheets one watch at a time.
What the source data looks like, cleaned up
One record per reference, normalized to the fields you actually compare across watches:
{
"brand": "Rolex",
"family": "Daytona",
"reference": "126500LN-0001",
"name": "Cosmograph Daytona Stainless Steel - Cerachrom / White / Oyster",
"caliber": "Rolex caliber 4131",
"movement": "Rolex caliber 4131 Hours, Minutes, Small Seconds | Chronograph, Column wheel | Chronometer",
"material": "Ceramic, Stainless Steel",
"glass": "Sapphire",
"diameterMm": 40,
"heightMm": 11.9,
"waterResistanceM": 100,
"dialColor": "White",
"indexes": "Stick / Dot",
"specs": { "...": "every raw label/value pair WatchBase publishes for this reference" }
}
Enter fullscreen mode Exit fullscreen mode
The specs object matters as much as the normalized top-level fields: field coverage
varies a lot by watch (a current Rolex has far more documented fields than a 1960s
piece), and WatchBase’s own labels vary slightly between brands (Material vs
Materials). Keeping the raw label/value pairs alongside the normalized fields means you
never lose data to an over-eager parser.
Getting it without hand-copying spec tables
Rather than walking WatchBase’s brand → family → reference hierarchy yourself, you can
run a hosted actor that already does the discovery and normalization:
WatchBase Scraper on Apify.
Give it a brand (or a list of specific reference URLs if you already have them):
{
"brands": ["rolex"],
"maxItems": 200,
"includeMovement": true,
"includeCaseSpecs": true,
"includeDialSpecs": true
}
Enter fullscreen mode Exit fullscreen mode
curl -s -X POST "https://api.apify.com/v2/acts/minty_modesty~watchbase-scraper/runs?token=$APIFY_TOKEN" \
-H 'content-type: application/json' \
-d '{"brands":["rolex"],"maxItems":200}'
Enter fullscreen mode Exit fullscreen mode
It reads only public reference pages (plain server-rendered HTML, allowed by
robots.txt, no login) and returns one clean record per watch. If you already have
reference numbers from a marketplace dataset, pass referenceUrls instead of a whole
brand and skip straight to the records you need.
When this is (and isn’t) the right layer
If you only need one or two watches, just open the WatchBase page. If you’re enriching a
marketplace dataset in bulk — hydrating thousands of Chrono24-style listings with the
manufacturer spec behind each reference — that’s exactly the gap this fills: listing
scrapers get you price and reference number, this gets you everything after that.
답글 남기기