Chrono24 API endpoint
Use Crawlora's Chrono24 watch listing search API to extract supported public Chrono24 data as structured JSON. This page includes request parameters, cURL examples, response schema, error behavior, credit cost, and a Playground link for testing before integration.
/chrono24/searchSearches Chrono24's luxury-watch marketplace by free-text keyword, or browses one brand's (optionally narrowed to one model's) current listings, returning normalized result cards: title, price with currency, seller type, seller country, promotional badge, image, and the listing URL to pass to chrono24-listing. At least one of query or brand is required. Optional advanced-search filters (condition, used_or_new, case_material, dial_color, bracelet_material, movement_type, gender, watch_type, stock_info) narrow results further; each filter's accepted values are discoverable from chrono24-facets and echoed back in the response's filters field. Developers commonly use this endpoint for data enrichment, monitoring, research dashboards, internal automation, and agent-native workflows that need repeatable structured public web data. Authentication uses the documented Crawlora headers, and usage is metered with the credit cost shown on this page.
Request parameters are generated from the active endpoint catalog. Required values must be sent before Crawlora can call the upstream public web data source.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| query | string | No | Free-text keyword search, e.g. \ | ||
| brand | string | No | Brand slug from chrono24-brands. At least one of query or brand is required | ||
| model | string | No | Model slug from chrono24-models (requires brand) | ||
| sort | string | No | Result order. One of: relevance, price_asc, price_desc, newest, popularity Allowed values: relevance, price_asc, price_desc, newest, popularity | ||
| page | integer | No | One-based result page Minimum: 1. | ||
| page_size | integer | No | Chrono24's own default | Results per page. Chrono24's own UI offers 30, 60 or 120; defaults to Chrono24's own default | |
| condition | string | No | Advanced-search filter, values from chrono24-facets group=condition Allowed values: new, like_new_unworn, very_good, good, fair, incomplete, no_details | ||
| used_or_new | string | No | Advanced-search filter, values from chrono24-facets group=usedOrNew Allowed values: new, used, no_details | ||
| case_material | string | No | Advanced-search filter, values from chrono24-facets group=caseMaterial Allowed values: aluminum, brass, bronze, carbon, ceramic, gold_steel, gold_plated, palladium, plastic, platinum, rose_gold, sapphire_crystal, silver, steel, tantalum, titanium, tungsten, white_gold, yellow_gold, no_details | ||
| dial_color | string | No | Advanced-search filter, values from chrono24-facets group=dialColor Allowed values: black, blue, bordeaux, bronze, brown, champagne, gold, green, grey, meteorite, mother_of_pearl, orange, pink, purple, red, silver, skeletonized, turquoise, white, yellow, no_details | ||
| bracelet_material | string | No | Advanced-search filter, values from chrono24-facets group=braceletMaterial Allowed values: alligator_skin, aluminium, brass, calf_skin, ceramic, crocodile_skin, gold_steel, gold_plated, leather, lizard_skin, ostrich_skin, plastic, platinum, red_gold, rose_gold, rubber, satin, shark_skin, silicon, silver, snake_skin, steel, textile, titanium, white_gold, yellow_gold, no_details | ||
| movement_type | string | No | Advanced-search filter, values from chrono24-facets group=movementType Allowed values: automatic, manual_winding, quartz, solar, smartwatch, no_details | ||
| gender | string | No | Advanced-search filter, values from chrono24-facets group=gender Allowed values: mens_unisex, womens | ||
| watch_type | string | No | Advanced-search filter, values from chrono24-facets group=watchType Allowed values: watches, parts_accessories | ||
| stock_info | string | No | Advanced-search filter, values from chrono24-facets group=stockInfo Allowed values: in_stock, on_order, on_request | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/chrono24/search?query=coffee&sort=relevance&page=1&condition=new&used_or_new=new&case_material=aluminum&dial_color=black&bracelet_material=alligator_skin&movement_type=automatic&gender=mens_unisex&watch_type=watches&stock_info=in_stock" \ -H "x-api-key: $CRAWLORA_API_KEY"
Send your scraping API key in the x-api-key header. Use the console API Keys page to rotate or select the active key.
Endpoint usage is metered in credits. The plan prices, included credits, limits, and overage rates below match the active backend billing configuration.
| Plan | Price | Included credits | Daily cap | Rate limit | Overage |
|---|---|---|---|---|---|
| Free | $0/mo | 2,000 | 500 daily credits | 5/min | No overage |
| Starter | $9/mo | 20,000 | 5,000 daily credits | 15/min | $0.75/1,000 overage credits when enabled |
| Growth | $29/mo | 100,000 | 25,000 daily credits | 45/min | $0.45/1,000 overage credits when enabled |
| Pro | $79/mo | 400,000 | No daily cap | 120/min | $0.30/1,000 overage credits |
| Business | $199/mo | 1,200,000 | No daily cap | 300/min | $0.20/1,000 overage credits |
| Enterprise | $499/mo | 5,000,000 | No daily cap | 1,000/min | $0.12/1,000 overage credits |
This endpoint is executed through Crawlora's managed scraping infrastructure.
- `total_count` is Chrono24's own reported result count for the query, including promoted listings mixed into the count. - `price`/`currency` are `0`/empty when Chrono24 shows a non-numeric price such as "Price on request" instead of a number; `price_text` always carries Chrono24's own formatted price string. - An unrecognized `sort` value, an unknown `brand`, or an unrecognized value for any filter param above, returns `400` before any upstream request is made. - `filters` echoes every filter param this call applied, keyed by its query-param name; omitted entirely when no filter was set. Example response: ```json { "code": 200, "msg": "OK", "data": { "brand": "rolex", "sort": "relevance", "page": 1, "total_count": 117628, "listings": [ { "id": "40700313", "title": "Rolex Datejust", "subtitle": "36 Rolex Datejust", "price": 3900, "currency": "USD", "price_text": "$3,900", "seller_type": "Private Seller", "location": "US", "badge": "Popular", "image_url": "https://img.chrono24.com/images/uhren/40700313-Square.jpg", "url": "https://www.chrono24.com/rolex/datejust-36--id40700313.htm" } ] } } ```
Crawlora does not silently return bad data when the upstream page cannot be used.
| Status | Common failure case |
|---|---|
| 400 | Invalid input or missing required parameter |
| 429 | Plan or endpoint rate limit exceeded |
| 500 | Internal execution error |
| 502 | Upstream platform failed, returned unusable HTML, or served a challenge page that could not be resolved |
When possible, Crawlora returns structured error context so your integration can retry, back off, or inspect the request.
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
{
"code": 200,
"msg": "OK",
"data": {
"brand": "rolex",
"sort": "relevance",
"page": 1,
"total_count": 117628,
"listings": [
{
"id": "40700313",
"title": "Rolex Datejust",
"subtitle": "36 Rolex Datejust",
"price": 3900,
"currency": "USD",
"price_text": "$3,900",
"seller_type": "Private Seller",
"location": "US",
"badge": "Popular",
"image_url": "https://img.chrono24.com/images/uhren/40700313-Square.jpg",
"url": "https://www.chrono24.com/rolex/datejust-36--id40700313.htm"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/chrono24.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | chrono24.SearchResponse | No | ||||
| data.brand | string | No | ||||
| data.filters | object | No | Filters echoes every advanced-search filter this call applied, keyed by its SearchOption field (snake_case) with the caller-supplied value, e.g. {"case_material": "steel"}. Omitted entirely when no filter param was set. | |||
| data.listings | array | No | ||||
| data.listings[].badge | string | No | Badge is a promotional badge Chrono24 shows on the card, e.g. "Popular" or "Promoted". Empty when the card carries none. | |||
| data.listings[].currency | string | No | Currency is the ISO-4217 currency code Price is denominated in. | |||
| data.listings[].id | string | No | ID is Chrono24's numeric listing id, parsed from the URL. | |||
| data.listings[].image_url | string | No | ImageURL is the listing's primary photo. | |||
| data.listings[].location | string | No | Location is the seller's country, e.g. "US". | |||
| data.listings[].price | number | No | Price is the numeric asking price. Zero when Chrono24 shows "Price on request" instead of a number. | |||
| data.listings[].price_text | string | No | PriceText is Chrono24's own formatted price string, kept alongside Price/Currency for a "price on request" or other non-numeric case. | |||
| data.listings[].seller_type | string | No | SellerType is Chrono24's own seller-badge text, e.g. "Private Seller" or a dealer's shop name. | |||
| data.listings[].subtitle | string | No | Subtitle is the listing's own free-text title line, e.g. "36 Rolex Datejust". | |||
| data.listings[].title | string | No | Title is the listing's brand + model line, e.g. "Rolex Datejust". | |||
| data.listings[].url | string | No | URL is the absolute listing-detail page URL, usable as the `path` input to Chrono24Listing. | |||
| data.model | string | No | ||||
| data.page | integer | No | ||||
| data.page_size | integer | No | ||||
| data.query | string | No | ||||
| data.sort | string | No | ||||
| data.total_count | integer | No | TotalCount is Chrono24's own reported result count for the query, including promoted listings mixed into the count. | |||
| msg | string | No | OK |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/chrono24/search?query=coffee&sort=relevance&page=1&condition=new&used_or_new=new&case_material=aluminum&dial_color=black&bracelet_material=alligator_skin&movement_type=automatic&gender=mens_unisex&watch_type=watches&stock_info=in_stock" \
-H "x-api-key: $CRAWLORA_API_KEY"Crawlora is designed for responsible structured public web data workflows. Customers are responsible for using Crawlora in compliance with applicable laws, third-party rights, target-platform rules, and Crawlora terms.
Read Crawlora terms