# Luxury Watch Price & Listing Data — Chrono24 Scraper (`jungle_synthesizer/chrono24-luxury-watch-marketplace-listings-scraper`) Actor

Scrape luxury and pre-owned watch listings from Chrono24 — price, brand, model, reference, dealer name, rating, and location for every watch.

- **URL**: https://apify.com/jungle\_synthesizer/chrono24-luxury-watch-marketplace-listings-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Chrono24 Luxury Watch Marketplace Scraper — Price & Listing Data

Scrape luxury and pre-owned watch listings from [Chrono24](https://www.chrono24.com), the largest global marketplace for new and secondhand watches. Returns price, brand, model, reference number, condition, and the selling dealer's name, location, and rating for every listing.

***

### Chrono24 Scraper Features

- Extracts price, currency, condition, and year of production for every listing
- Returns dealer name, location, and star rating — the provenance data most watch scrapers skip
- Collects reference numbers and box/papers status, the two fields that actually move resale price
- Covers 24 major brands out of the box — Rolex, Omega, Patek Philippe, Audemars Piguet, Cartier, and 19 more
- Pulls full-size photo URLs for every watch, not just a thumbnail
- Point it at a specific brand, a set of brands, or drop in direct Chrono24 URLs — your call

***

### Who Uses Chrono24 Watch Data?

- **Watch dealers** — benchmark their own pricing against live Chrono24 listings before relisting.
- **Arbitrage traders** — spot underpriced watches across dealer locations and currencies, or at least the raw numbers that make spotting them possible.
- **Price analysts** — track reference-number price history for a specific model over time.
- **Insurance and appraisal firms** — pull comparable market prices for valuation reports.
- **Marketplace researchers** — study dealer rating and location patterns across the pre-owned watch trade.

***

### How It Works

1. Pick one or more brands (or leave it blank to cover all 24 supported brands).
2. The scraper walks each brand's listing pages, collecting the URL for every watch it finds.
3. Each watch's detail page is fetched and parsed for price, condition, dealer info, and photos.
4. Records land in your dataset as they're collected — no waiting for the whole run to finish before you can start pulling data.

***

### Chrono24 Scraper Input

```json
{
  "brands": ["rolex", "omega"],
  "maxItems": 100,
  "maxPagesPerBrand": 3
}
```

Or skip brand selection and point it straight at specific pages:

```json
{
  "startUrls": [
    "https://www.chrono24.com/rolex/submariner-date-116610ln-40mm-black-ceramic-bezel-stainless-steel--id47341084.htm"
  ],
  "maxItems": 1
}
```

| Field | Type | Default | Description |
|---|---|---|---|
| `brands` | array | *(all 24)* | Chrono24 brand slugs to scrape — `rolex`, `omega`, `patekphilippe`, `audemarspiguet`, `cartier`, and 19 more. Leave empty to cover all supported brands. |
| `maxItems` | integer | `10` | Maximum number of watch listings to collect. |
| `maxPagesPerBrand` | integer | `2` | Maximum search-result pages to paginate per brand (~30 watches per page). |
| `startUrls` | array | `[]` | Direct Chrono24 brand listing or watch detail page URLs. Overrides `brands` when set. |
| `resumeCursor` | string | *(empty)* | Cursor from a previous run's Output. Leave empty for a fresh crawl. |

***

### Chrono24 Scraper Output Fields

```json
{
  "listing_id": "47341084",
  "title": "Rolex Submariner Date 116610LN 40mm Black Ceramic Bezel Stainless Steel",
  "brand": "Rolex",
  "model": "Submariner Date",
  "reference_number": "116610LN",
  "price": 11495,
  "currency": "USD",
  "condition": "Used (Very good)",
  "year": "2010",
  "box_papers": "Original box, no original papers",
  "dealer_name": "QD Watches",
  "dealer_location": "United States of America, California, San Diego",
  "dealer_rating": 4.9,
  "shipping_from": "United States of America, California, San Diego",
  "listing_url": "https://www.chrono24.com/rolex/submariner-date-116610ln-40mm-black-ceramic-bezel-stainless-steel--id47341084.htm",
  "image_urls": ["https://img.chrono24.com/images/uhren/47341084-cekfmwhjyn3daoa1oei5pflg-ExtraLarge.jpg"],
  "scraped_at": "2026-08-04T01:27:35.517Z"
}
```

| Field | Type | Description |
|---|---|---|
| `listing_id` | string | Unique numeric listing identifier from the Chrono24 URL |
| `title` | string | Watch title (brand + model line) |
| `brand` | string | Watch brand name |
| `model` | string | Watch model / collection name |
| `reference_number` | string | Manufacturer reference number |
| `price` | number | Listing price |
| `currency` | string | ISO currency code for the listed price |
| `condition` | string | Watch condition (e.g. New, Used - Very good) |
| `year` | string | Year of production |
| `box_papers` | string | Scope of delivery — original box / papers included |
| `dealer_name` | string | Selling dealer's storefront name |
| `dealer_location` | string | Dealer's country/region/city as shown on the listing |
| `dealer_rating` | number | Dealer's average rating out of 5 |
| `shipping_from` | string | Location the watch ships from |
| `listing_url` | string | Canonical Chrono24 URL for this listing |
| `image_urls` | array | Full-size watch photo URLs |
| `scraped_at` | string | ISO-8601 timestamp when the record was scraped |

***

### Resuming a large crawl

Every run emits a `resumeCursor` in its Output. If a large crawl stops before it finishes — because it hit `maxItems`, your spend cap (`maxTotalChargeUsd`), or was aborted — start a new run with **the same input** plus that `resumeCursor` to continue from where it left off. The crawl resumes from the queued work the previous run didn't reach.

- You are **not re-charged** for records the earlier run already delivered.
- Resume within your account's run-retention window — on the free tier, roughly your 10 most recent runs. Once the source run is pruned, its `resumeCursor` is no longer valid.
- `resumeCursor` is opaque — supply it unmodified.

***

### FAQ

**How do I scrape Chrono24?**
Run this actor with a list of brands (or leave it blank for all 24 supported brands) and a `maxItems` cap. It returns price, dealer, and provenance data for every listing it finds — no browser extension or manual copy-pasting required.

**What data can I get from Chrono24?**
Price, currency, condition, year of production, reference number, box/papers status, and the selling dealer's name, location, and rating — for any of the 24 major brands this actor covers, or any specific listing URL you point it at.

**Can I filter by brand?**
Yes. Pass one or more Chrono24 brand slugs in the `brands` field — `rolex`, `omega`, `patekphilippe`, and 21 more. Leave it empty and the run covers all 24.

**How much does the Chrono24 Scraper cost to run?**
Pricing is pay-per-result on the Apify platform — check the actor's Pricing tab on the Apify Store for the current per-record rate.

**Does the Chrono24 Scraper need a login?**
No. It reads publicly listed watches — no Chrono24 account, login, or API key required on your end.

***

### Need More Features?

Need custom fields, filters, or a different target site? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use the Chrono24 Scraper?

- **Dealer provenance included** — name, location, and rating on every record, not just price and title.
- **Full brand coverage** — 24 major brands out of the box, or point it at any specific Chrono24 URL. Most Chrono24 scrapers make you pick one brand and stick with it.
- **Resumable** — pass a `resumeCursor` and pick up a stopped run without paying for records you already have.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs).

## `brands` (type: `array`):

Watch brands to scrape. Leave empty to crawl all major brands.

## `maxItems` (type: `integer`):

Maximum number of watch listings to collect.

## `maxPagesPerBrand` (type: `integer`):

Maximum number of search-result pages to paginate per brand (~30 watches per page).

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

Directly specify Chrono24 brand listing or watch detail page URLs. Overrides brands when set.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "brands": [],
  "maxItems": 10,
  "maxPagesPerBrand": 2,
  "startUrls": []
}
```

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "brands": [],
    "maxItems": 10,
    "maxPagesPerBrand": 2,
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/chrono24-luxury-watch-marketplace-listings-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "brands": [],
    "maxItems": 10,
    "maxPagesPerBrand": 2,
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/chrono24-luxury-watch-marketplace-listings-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "brands": [],
  "maxItems": 10,
  "maxPagesPerBrand": 2,
  "startUrls": []
}' |
apify call jungle_synthesizer/chrono24-luxury-watch-marketplace-listings-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/PR3X0MVf7JsNZdMb3/builds/tmcelOtEzG3uTgL7D/openapi.json
