# Chronext.de Watch Scraper ⌚ (`shahidirfan/chronext-de-watch-scraper`) Actor

Extract structured watch data from Chronext.de, including luxury watch listings, brands, models, prices, references, conditions, availability, images, and product URLs. Ideal for watch market research, price tracking, competitive analysis, resale monitoring, and datasets.

- **URL**: https://apify.com/shahidirfan/chronext-de-watch-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

### What does Chronext Watch Scraper do?

Chronext Watch Scraper collects structured watch listing data from Chronext.de and Chronext.com search pages. Provide one Chronext search URL or a keyword such as `rolex`, `omega`, `Datejust`, or a reference code, then receive product names, brands, models, prices, conditions, availability, a primary image plus verified gallery image URLs, and direct product links in an Apify dataset.

Use it for watch market research, price monitoring, inventory checks, competitor analysis, collection building, and automated catalog workflows.

### Why use Chronext Watch Scraper?

- **Search by URL or keyword** - Run an existing Chronext search or start with a watch term.
- **Structured watch records** - Collect product identifiers, reference codes, specifications, prices, stock status, primary images, gallery URLs, and canonical product URLs.
- **German and international markets** - Use `chronext.de` for EUR results or `chronext.com` for USD results.
- **Controlled collection** - Set the maximum results and page limit for small checks or larger datasets.
- **Null-free output** - Fields that are missing from a listing are omitted instead of being saved as `null`.
- **Automation-ready exports** - Download JSON, CSV, Excel, XML, and other Apify-supported formats.
- **Repeatable monitoring** - Run on demand or schedule recurring checks for price and inventory changes.

### What data can you extract from Chronext?

| Field                 | Description                                    |
| --------------------- | ---------------------------------------------- |
| `id`                  | Chronext product or variant identifier         |
| `name`                | Full watch listing name                        |
| `brand`               | Brand, such as Rolex or Omega, when available  |
| `model`               | Watch model when available                     |
| `submodel`            | Variant or submodel description when available |
| `reference_code`      | Manufacturer reference code when available     |
| `year`                | Production or model year when available        |
| `case_size`           | Case diameter in millimetres when available    |
| `condition`           | Localized condition label                      |
| `case_material`       | Case material when available                   |
| `dial_color`          | Dial color when available                      |
| `bracelet_material`   | Bracelet material when available               |
| `movement`            | Movement type when available                   |
| `gender`              | Localized gender classification when available |
| `image_url`           | Primary product image                          |
| `image_urls`          | Verified primary and additional gallery images |
| `price`               | Current price in the selected market currency  |
| `original_price`      | Previous or list price when available          |
| `currency`            | `EUR` for `.de` or `USD` for `.com`            |
| `stock_status`        | Source stock status when available             |
| `in_stock`            | Boolean stock indicator when available         |
| `delivery_days`       | Estimated delivery time in days when available |
| `content_box`         | Whether a box is indicated                     |
| `content_certificate` | Whether a certificate is indicated             |
| `listed_at`           | Source listing timestamp when available        |
| `categories`          | Merchandising categories when available        |
| `url`                 | Direct Chronext product URL                    |
| `source`              | Source domain used for the request             |

### How to use Chronext Watch Scraper

1. Open the Actor in Apify Console.
2. Enter one Chronext search URL or a keyword.
3. Choose the result limit and maximum number of pages.
4. Add proxy settings when your run requires them.
5. Start the run and review the dataset preview.
6. Export the records or connect the dataset to another workflow.

If both `url` and `keyword` are supplied, the URL is used as the complete search instruction. The keyword is not added to or combined with that URL.

### Input Parameters

| Parameter            | Type    | Required | Default | Description                                                                    |
| -------------------- | ------- | -------- | ------- | ------------------------------------------------------------------------------ |
| `url`                | String  | No       | -       | One search URL from `chronext.de` or `chronext.com`.                           |
| `keyword`            | String  | No       | -       | Watch brand, model, reference, or other search term. Used when `url` is empty. |
| `results_wanted`     | Integer | No       | `20`    | Maximum number of listings to save.                                            |
| `max_pages`          | Integer | No       | `10`    | Maximum number of search pages to request.                                     |
| `proxyConfiguration` | Object  | No       | `{}`    | Optional Apify Proxy or custom proxy settings.                                 |

A run with neither `url` nor `keyword` searches the available catalog without a text filter. Chronext does not provide a location filter for these search results, so `location` is intentionally not part of this Actor's input contract.

### Output Data

Each dataset item represents one watch listing. Missing source fields are left out of that item rather than represented by empty or `null` values.

| Field            | Type    | Description                                    |
| ---------------- | ------- | ---------------------------------------------- |
| `id`             | String  | Chronext product or variant identifier         |
| `name`           | String  | Watch listing name                             |
| `brand`          | String  | Brand when available                           |
| `model`          | String  | Model when available                           |
| `reference_code` | String  | Manufacturer reference when available          |
| `price`          | Number  | Current price                                  |
| `original_price` | Number  | Previous or list price when available          |
| `currency`       | String  | `EUR` for `.de` or `USD` for `.com`            |
| `condition`      | String  | Localized condition label                      |
| `stock_status`   | String  | Source stock status when available             |
| `in_stock`       | Boolean | Normalized stock indicator when available      |
| `image_url`      | String  | Primary product image when available           |
| `image_urls`     | Array   | Primary and additional verified gallery images |
| `url`            | String  | Direct Chronext product URL                    |
| `source`         | String  | Chronext source domain used for the request    |

The `image_urls` array starts with `image_url`. Additional URLs are included when the public image host confirms the corresponding gallery files. No product detail page is needed to collect these image URLs.

### Usage Examples

#### Basic keyword search

Collect up to 20 Rolex listings from the German market:

```json
{
    "keyword": "rolex",
    "results_wanted": 20,
    "max_pages": 3
}
```

#### German search URL

Use a complete Chronext.de search URL. The URL's search term is used as supplied:

```json
{
    "url": "https://www.chronext.de/search?s%5Bsearch%5D%5Bq%5D=omega",
    "results_wanted": 50,
    "max_pages": 5
}
```

#### International search URL

Collect USD-priced results from Chronext.com:

```json
{
    "url": "https://www.chronext.com/search?s%5Bsearch%5D%5Bq%5D=rolex",
    "results_wanted": 100,
    "max_pages": 2
}
```

#### All available watches

Leave out both search fields to collect the catalog in the default market, bounded by the result and page limits:

```json
{
    "results_wanted": 20,
    "max_pages": 1
}
```

### Sample Output

```json
{
    "id": "A45859_V66198",
    "name": "Rolex Explorer II Cream Dial 16550",
    "brand": "Rolex",
    "model": "Explorer II",
    "submodel": "Cream Dial",
    "reference_code": "16550",
    "case_size": 40,
    "condition": "Vintage",
    "case_material": "Edelstahl",
    "dial_color": "Weiß",
    "bracelet_material": "Edelstahl",
    "movement": "Automatik",
    "gender": "Herren",
    "image_url": "https://cdn-products.chronext.com/V/6/V66198/V66198_1_det.png",
    "image_urls": [
        "https://cdn-products.chronext.com/V/6/V66198/V66198_1_det.png",
        "https://cdn-products.chronext.com/V/6/V66198/V66198_1.png",
        "https://cdn-products.chronext.com/V/6/V66198/V66198_2.jpg",
        "https://cdn-products.chronext.com/V/6/V66198/V66198_3.jpg"
    ],
    "price": 22990,
    "original_price": 23990,
    "currency": "EUR",
    "stock_status": "onStock",
    "in_stock": true,
    "delivery_days": 1,
    "content_box": true,
    "content_certificate": false,
    "listed_at": "2026-09-01T09:30:40+00:00",
    "categories": ["pre-owned-2"],
    "url": "https://www.chronext.de/rolex/explorer-ii/16550/V66198",
    "source": "https://www.chronext.de"
}
```

### Tips for best results

- Use the exact search URL copied from Chronext when you need a specific market or query.
- Use `chronext.de` for EUR prices and German labels, and `chronext.com` for USD prices and English labels.
- Start with `results_wanted: 20` when testing a new brand or reference.
- Increase `max_pages` when the result count is larger than one page.
- Use a proxy configuration for repeated or high-volume scheduled runs when appropriate.
- Review several records before treating a missing optional field as a data issue. Chronext does not publish every specification for every watch.
- `image_urls` includes the primary image and additional gallery files when they are available from the public image host. Some listings have only one image, and gallery counts can vary by listing.
- Public catalogs and prices can change. Schedule a new run when you need current inventory rather than relying on an old dataset.

### Integrations

- **Apify API** - Retrieve dataset records from your own applications.
- **Google Sheets** - Export watch listings for price comparisons and review.
- **Webhooks** - Trigger downstream processing after a run completes.
- **Make or Zapier** - Send listing data to no-code workflows.
- **CSV, Excel, JSON, and XML** - Download the format that fits your analysis or data pipeline.

### Frequently Asked Questions

#### Can I search Chronext.de and Chronext.com?

Yes. Supply a search URL from either domain. The Actor selects the matching market, currency, and localized product attributes from that URL.

#### Can I use a keyword instead of a URL?

Yes. Enter a keyword such as `rolex`, `omega speedmaster`, `Datejust`, or a reference number. Keyword mode uses the German market unless a complete URL is supplied.

#### Can I collect a specific number of results?

Yes. Set `results_wanted` to the maximum number of records you want. The Actor stops once that limit is reached or the available pages are exhausted.

#### Does the Actor support pagination?

Yes. Set `max_pages` to cap the number of search-result pages. Pagination stops earlier when Chronext reports that there are no more results.

#### Why is a field missing from one listing?

Chronext does not publish every optional specification or gallery image for every watch. The Actor omits unavailable values so the dataset does not contain unnecessary `null` columns. A listing with one available image will have an `image_urls` array containing only that primary image.

#### Can I run this Actor on a schedule?

Yes. Apify schedules can run it hourly, daily, weekly, or at another interval for price and inventory monitoring.

#### Can I export the dataset to CSV or Excel?

Yes. Apify supports CSV, Excel, JSON, XML, and other dataset export formats.

#### Is it legal to collect Chronext data?

You are responsible for complying with Chronext's terms, applicable laws, privacy requirements, and any restrictions on using or redistributing collected data. Use the Actor for legitimate collection of publicly available product information and avoid excessive request volumes.

### Related Actors

- [Flipkart Product Scraper](https://apify.com/shahidirfan/flipkart-product-scraper) - Collect product prices, images, reviews, availability, and seller data from Flipkart.
- [Noon.com Product Scraper](https://apify.com/shahidirfan/noon-com-scraper) - Extract product listings, prices, images, ratings, and seller information from Noon.com.
- [Trendyol Product Scraper](https://apify.com/shahidirfan/trendyol-product-scraper) - Gather product details, prices, ratings, images, sellers, and product links from Trendyol.
- [B\&H Photo Scraper](https://apify.com/shahidirfan/b-h-photo-scraper) - Collect ecommerce product prices, stock status, images, specifications, and reviews from B\&H Photo.

### Support

For a bug report or feature request, use the Issues tab for this project and include the input mode, domain, result limit, and a short description of the observed behavior. Do not include proxy credentials or private account information.

### Legal Notice

This Actor is intended for responsible collection of publicly available watch listing information. It is not affiliated with or endorsed by Chronext. Users are responsible for complying with website terms, applicable laws, intellectual property requirements, and responsible request practices.

# Actor input Schema

## `url` (type: `string`):

One Chronext search URL. Supports chronext.de and chronext.com URLs such as https://www.chronext.de/search?s\[search]\[q]=rolex.

## `keyword` (type: `string`):

Watch brand, model, reference, or other search term. Used when Search URL is empty.

## `results_wanted` (type: `integer`):

Maximum number of watch listings to save.

## `max_pages` (type: `integer`):

Maximum number of search-result pages to request. Each page can contain up to 100 records.

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

Optional Apify Proxy or custom proxy configuration for the JSON requests.

## Actor input object example

```json
{
  "keyword": "rolex",
  "results_wanted": 20,
  "max_pages": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "keyword": "rolex",
    "results_wanted": 20,
    "max_pages": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/chronext-de-watch-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 = {
    "keyword": "rolex",
    "results_wanted": 20,
    "max_pages": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/chronext-de-watch-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "keyword": "rolex",
  "results_wanted": 20,
  "max_pages": 3
}' |
apify call shahidirfan/chronext-de-watch-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/chronext-de-watch-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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