Chrono24 APIchrono24.com ↗
Search luxury watch listings and retrieve full specs from Chrono24 via two endpoints. Get price, brand, model, caliber, photos, and seller data.
What is the Chrono24 API?
The Chrono24 API gives developers access to watch listings across the world's largest pre-owned and new watch marketplace through 2 endpoints. search_watches returns up to 60 results per query including price, brand, model, and seller country, while get_watch_details delivers full specifications — caliber data, case size, crystal type, production year, and photo arrays — for any individual listing identified by a numeric listing ID or URL.
curl -X GET 'https://api.parse.bot/scraper/4dc3881d-e9c4-4804-9a0d-b5fdd23bdfc3/search_watches?limit=5&query=Rolex+Daytona' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace chrono24-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: chrono24 SDK — bounded, re-runnable; every call capped."""
from parse_apis.chrono24_com_api import Chrono24, WatchNotFound
client = Chrono24()
# Search for watches — limit caps total items returned.
for watch in client.search_results.search(query="Rolex Daytona", limit=3):
print(watch.name, watch.price, watch.seller_location)
# Drill-down: take one result and get full details via the summary's navigation op.
summary = client.search_results.search(query="Omega Speedmaster", limit=1).first()
if summary:
full = summary.details()
print(full.name, full.reference_number, full.condition, full.year)
print(full.case_size, full.movement_type, full.case_material)
# Direct lookup by listing_id with typed error handling.
try:
detail = client.watches.get(listing_id="40983017")
print(detail.brand, detail.model, detail.price, detail.currency)
print(detail.seller_name, detail.seller_location)
except WatchNotFound as e:
print(f"not found: {e.listing_id}")
print("exercised: search_results.search, WatchSummary.details, watches.get")
Full-text search across Chrono24 watch listings. Returns up to 60 results per query with basic listing data including price, brand, model, and seller country. Results are ordered by relevance. Each result carries a listing_id usable with get_watch_details for full specs.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return (capped at 60). |
| queryrequired | string | Search query for watches (brand, model, reference number, or keywords). |
{
"type": "object",
"fields": {
"query": "the search query used",
"watches": "array of watch listing summaries",
"total_results": "integer total from current page"
},
"sample": {
"data": {
"query": "Rolex Daytona",
"watches": [
{
"name": "Rolex UNWORN 2024 126500LN Daytona 40mm White Panda Dial",
"brand": "Rolex",
"model": "Daytona",
"price": "37250",
"currency": "USD",
"image_url": "https://img.chrono24.com/images/uhren/r82r2z1a8vsn-3xvfxvze8ivg4y35pwzqbzdn-ExtraLarge.jpg",
"listing_id": "40983017",
"listing_url": "https://www.chrono24.com/rolex/unworn-2024-126500ln-daytona-40mm-white-panda-dial--id40983017.htm",
"seller_location": "US"
}
],
"total_results": 60
},
"status": "success"
}
}About the Chrono24 API
Searching Watch Listings
The search_watches endpoint accepts a query string covering brand names, model names, reference numbers, or free-text keywords. Results are ordered by relevance and include a listing_id field for each watch, which feeds directly into get_watch_details. The limit parameter caps results at a maximum of 60 per call. The response also includes total_results, giving a count of how many listings matched the current query on the page sampled.
Retrieving Full Listing Details
get_watch_details accepts either a listing_id (the numeric ID from search results) or a full url from the listing_url field in search results — at least one must be provided. The response includes the listing name, brand, model, year of production, price and currency, a photos array of image URLs, and a caliber object with fields for caliber name, base_caliber, power_reserve, and jewels. Physical attributes like case_size and crystal type are also returned.
Data Scope and Considerations
Chrono24 lists watches from dealers and private sellers across many countries; the seller_country field in search results reflects this geographic spread. The price field is returned as a string and paired with an ISO currency code, so currency normalization is left to the caller. Listings that lack certain spec fields — such as power_reserve or year — will return those fields as null or empty rather than omitting them entirely, so defensive handling is advised.
The Chrono24 API is a managed, monitored endpoint for chrono24.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when chrono24.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official chrono24.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track asking-price trends for a specific reference number across multiple Chrono24 listings using search_watches and the price field
- Build a watch valuation tool that pulls case size, caliber, and production year from get_watch_details to estimate market value
- Aggregate photo galleries for a watch model by collecting the photos array across multiple get_watch_details calls
- Monitor new listings for a target model by periodically running search_watches with a reference number query
- Compare seller countries for the same reference to identify regional pricing differences using seller_country from search results
- Populate a watch database with structured specs (crystal, case_size, jewels, power_reserve) sourced from get_watch_details
- Build a caliber lookup tool that maps brand and model names to base_caliber and power_reserve data from get_watch_details
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.