# Chrono24 Watch Scraper (`gaurangghinaiya/chrono24-scraper`) Actor

Scrapes public watch listings from Chrono24: detail pages, brand and model index pages, and search results. Unofficial, not affiliated with Chrono24.

- **URL**: https://apify.com/gaurangghinaiya/chrono24-scraper.md
- **Developed by:** [Gaurang Ghinaiya](https://apify.com/gaurangghinaiya) (community)
- **Categories:** E-commerce, Integrations, AI
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $6.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

Turn any [Chrono24](https://www.chrono24.com) URL into clean, structured watch data: paste a single listing, a brand or model page, or a full search result, and get one JSON record per watch in return. Runs on the Apify platform, so you get proxy rotation, scheduling, an API, and one click export to JSON, CSV, or Excel with no scraping code of your own.

### What does Chrono24 Watch Scraper do?

This Actor accepts any Chrono24 URL, automatically works out whether it is a single watch detail page, a brand or model index page, or a search/category results page, and returns one structured JSON object per watch it finds. It reads the same structured data (JSON-LD) and specification tables Chrono24 already serves in plain HTML, so it runs as a lightweight HTTP crawler rather than a slow, expensive headless browser. Try it with a single detail URL first to see the full field set, then point it at a brand page or a saved search to pull hundreds of listings at once.

### Why use Chrono24 Watch Scraper?

- **Dealers and resellers** can track competitor pricing across brands and references without manually opening hundreds of listings.
- **Analysts and researchers** can build price history and market datasets for specific references, conditions, or seller types.
- **Collectors** can monitor a saved search or a model page for new listings and price drops.
- **Builders** can wire this into a larger pipeline through the Apify API, on a schedule, or as part of an AI agent workflow, with a per-run spend cap so cost never surprises you.

### How to use Chrono24 Watch Scraper

1. Click **Try for free** (or **Run**) on this Actor's page.
2. Paste one or more Chrono24 URLs into **Chrono24 URLs**. A single watch page, a brand/model page, and a search results page can all be mixed in the same run.
3. Optionally set **Max results per URL** to cap how many watches are pulled from each brand, model, or search URL (detail URLs always return exactly one watch).
4. Optionally set a target **Currency** (best effort; see note in Input below).
5. Click **Start** and watch the run log. Results appear in the **Dataset** tab as they are scraped.
6. Export the dataset as JSON, CSV, or Excel, or pull it through the Apify API into your own app.

### Input

| Field | Type | Description |
|---|---|---|
| `startUrls` | array | Any Chrono24 URLs: single watch detail pages, brand or model index pages, or search/category result pages. Mixed types are allowed and each URL is classified automatically. |
| `maxResults` | integer | Upper bound on watches returned per input URL. Applies to search, brand, and model pages; detail URLs always return exactly one result. Default 100. |
| `currency` | string | Optional ISO 4217 currency hint (USD, EUR, and so on). Chrono24 binds currency to server side session state rather than to a request parameter, so this is best effort: the output always reports the currency the page actually served. |
| `proxyConfiguration` | object | Proxy settings. Apify Proxy (datacenter) is enabled by default and is sufficient for this target. |

See the **Input** tab for the full schema with validation and defaults.

### Output

Every item is a single watch with brand, pricing, specification, seller, and listing details:

```json
{
  "brand": "Rolex",
  "model": "Submariner Date",
  "reference": "116610LV",
  "price": 18499,
  "currency": "USD",
  "priceNegotiable": false,
  "shippingCost": 0,
  "year": "2018",
  "condition": "Used (Very good) The item shows minor signs of wear, such as small, intangible scratches.",
  "movementType": "Automatic",
  "caliber": "3135",
  "powerReserve": "48 h",
  "caseDiameter": "40 mm",
  "caseMaterial": "Steel",
  "bezelMaterial": "Ceramic",
  "dialColor": "Green",
  "braceletMaterial": "Steel",
  "gender": "Men's watch/Unisex",
  "waterResistance": "30 ATM",
  "scopeOfDelivery": "No original box, no original papers",
  "availabilityText": "Item is in stock",
  "sellerType": "Professional dealer",
  "sellerCountry": "United States of America",
  "sellerMemberSince": "2022",
  "images": [
    "https://img.chrono24.com/images/uhren/ujdhp9xt03aa-ss16stgxaz6v9400sslghwbu-ExtraLarge.jpg"
  ],
  "listingUrl": "https://www.chrono24.com/rolex/submariner-date--id39958817.htm",
  "scrapedAt": "2026-07-05T17:12:21.554Z"
}
````

This example is a real item captured from a live run. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel from the **Dataset** tab.

### Data fields

| Field | Description |
|---|---|
| brand, model, reference | Watch identification. |
| price, currency, priceNegotiable | Listed price, its currency, and whether the seller marked it negotiable. |
| shippingCost | Shipping cost in the same currency as `price`, when Chrono24 reports one. |
| year, condition | Production year and condition grade with description. |
| movementType, caliber, powerReserve | Movement details. |
| caseDiameter, caseMaterial, bezelMaterial | Case specification. |
| dialColor, braceletMaterial, gender | Dial and strap/bracelet details. |
| waterResistance, scopeOfDelivery, availabilityText | Additional specification and stock status. |
| sellerType, sellerCountry, sellerMemberSince | Seller type (private or professional dealer), country, and how long they have used Chrono24. |
| images | Array of full size image URLs. |
| listingUrl, scrapedAt | Source URL and the timestamp this record was scraped. |

### Pricing: how much does it cost to scrape Chrono24?

This Actor uses Apify's pay-per-event pricing: you pay only for what you use, and platform and proxy usage are billed on top of the event price so the Actor's own running cost stays near zero. There is no charge unless the Actor is actively producing results for you.

**Worked example.** In a small cloud test, scraping 3 watches took about 8 seconds of compute and under 100 KB of datacenter proxy transfer. Platform and proxy usage is billed to you directly (at cost, with no markup), separately from the event prices below. At the pricing below, a run of 1,000 watches (for example a full brand page with `maxResults` set to 1,000) costs approximately:

- 1 run start: $0.01
- 1,000 watch results at $0.00998 each: $9.98
- **Total: about $9.99 per 1,000 watches**, plus a small amount of platform/proxy usage (well under a dollar per 1,000 based on measured test runs)

That lands in the lower-middle of the roughly $3 to $25 per 1,000 range typical for marketplace scrapers of this kind. Set **Max results per URL** and your run's spend cap to control cost precisely, and the Actor stops cleanly once your limit is reached so you are never surprised by a bill.

### Tips and advanced options

- Start with a single detail URL to confirm the fields you need before running a large brand or search crawl.
- Use `maxResults` to bound cost per URL rather than relying only on a spend cap; each capped URL still finishes its current page before stopping.
- Mixing a brand page and a search URL in the same run is supported and classified automatically per URL.
- Datacenter proxy (the default) is sufficient for this target; you should not need residential proxies.

### FAQ, disclaimer, and support

**Is this affiliated with Chrono24?** No. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Chrono24 GmbH. "Chrono24" and its logo are trademarks of Chrono24 GmbH.

**What data does this collect?** Only publicly visible listing data shown on Chrono24's own pages: watch specifications, pricing, and the public-facing seller type, country, and membership year that Chrono24 itself displays on every listing. No private, account, or contact information is collected.

**Is scraping Chrono24 allowed?** Use of this Actor must comply with Chrono24 GmbH's Terms of Service and all applicable laws, including data protection regulations such as GDPR and CCPA. This Actor is intended for legitimate research, market intelligence, dealer side competitive analysis, valuation, and personal collection management. Please respect rate limits and avoid overloading Chrono24's infrastructure; you are responsible for how you use the data you collect.

**What if a page layout changes and fields come back empty?** Chrono24 occasionally varies its page layout by listing type or seller. If you notice missing fields, please open an issue on this Actor's Issues tab with an example URL so it can be addressed.

**Need something custom?** If you need additional fields, a different output shape, or a related scraper, reach out through the Issues tab or the Actor's contact option in Apify Store.

# Actor input Schema

## `startUrls` (type: `array`):

Paste any Chrono24 URLs: a single watch detail page, a brand or model index page, or a search/category results page. Mixed types are allowed and each URL is classified automatically.

## `maxResults` (type: `integer`):

Upper bound on watches returned per input URL. Applies to search, brand, and model pages; detail URLs always return exactly one result. Each result now costs a real bypass fetch (roughly 10-20 seconds each), so keep this modest for quick test runs and raise it deliberately for large jobs.

## `currency` (type: `string`):

Optional ISO 4217 currency for prices, e.g. USD or EUR. When omitted, prices are returned in the currency Chrono24 serves by default.

## `proxyConfiguration` (type: `object`):

Proxy settings. Apify proxy is recommended; datacenter is the cheapest option and is usually sufficient for an efficient data source.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.chrono24.com/rolex/index.htm"
    }
  ],
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.chrono24.com/rolex/index.htm"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("gaurangghinaiya/chrono24-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.chrono24.com/rolex/index.htm" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("gaurangghinaiya/chrono24-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.chrono24.com/rolex/index.htm"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call gaurangghinaiya/chrono24-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=gaurangghinaiya/chrono24-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Chrono24 Watch Scraper",
        "description": "Scrapes public watch listings from Chrono24: detail pages, brand and model index pages, and search results. Unofficial, not affiliated with Chrono24.",
        "version": "0.1",
        "x-build-id": "zaalK0qrKbmhCqMnW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/gaurangghinaiya~chrono24-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-gaurangghinaiya-chrono24-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/gaurangghinaiya~chrono24-scraper/runs": {
            "post": {
                "operationId": "runs-sync-gaurangghinaiya-chrono24-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/gaurangghinaiya~chrono24-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-gaurangghinaiya-chrono24-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Chrono24 URLs",
                        "type": "array",
                        "description": "Paste any Chrono24 URLs: a single watch detail page, a brand or model index page, or a search/category results page. Mixed types are allowed and each URL is classified automatically.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxResults": {
                        "title": "Max results per URL",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Upper bound on watches returned per input URL. Applies to search, brand, and model pages; detail URLs always return exactly one result. Each result now costs a real bypass fetch (roughly 10-20 seconds each), so keep this modest for quick test runs and raise it deliberately for large jobs.",
                        "default": 10
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "CHF",
                            "GBP",
                            "JPY",
                            "HKD",
                            "AUD",
                            "CAD",
                            "SGD",
                            "AED"
                        ],
                        "type": "string",
                        "description": "Optional ISO 4217 currency for prices, e.g. USD or EUR. When omitted, prices are returned in the currency Chrono24 serves by default."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Proxy settings. Apify proxy is recommended; datacenter is the cheapest option and is usually sufficient for an efficient data source.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
