Chrono24 Watch Listings Scraper avatar

Chrono24 Watch Listings Scraper

Pricing

Pay per event

Go to Apify Store
Chrono24 Watch Listings Scraper

Chrono24 Watch Listings Scraper

⌚ Export public Chrono24 watch listings with typed prices, references, seller locations, images, pagination, and optional detail enrichment for comps, sourcing, and inventory monitoring.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Extract public Chrono24 watch listings into a clean dataset for inventory monitoring, price research, valuation, and marketplace analysis.

The actor accepts Chrono24 search, brand, and model result pages, follows pagination, and saves one record per unique listing. It captures prices, references, seller locations, images, and source metadata without requiring a Chrono24 login.

  • ⌚ Monitor Rolex, Omega, Patek Philippe, and other brand inventory
  • 💵 Build current asking-price and comparable-listing datasets
  • 🌍 Compare dealer and private-seller supply across locations
  • 🔁 Schedule recurring exports for inventory and price changes
  • 🔎 Optionally enrich cards with structured detail-page data

What does Chrono24 Watch Listings Scraper do?

Chrono24 Watch Listings Scraper opens the public result pages you provide and exports their watch cards as JSON, CSV, Excel, XML, or RSS through Apify datasets.

For each listing it can collect:

  • stable Chrono24 listing ID and canonical URL;
  • watch title, recognized brand, and model;
  • public reference or card detail text;
  • numeric price, currency, and displayed price;
  • shipping text and numeric shipping price when shown;
  • condition and production year when exposed on the card;
  • dealer or private-seller classification;
  • seller location and watch image URL;
  • promotion badge, source page, source URL, and scrape time;
  • optional JSON-LD description, exact reference, and availability.

The actor follows the visible Next link and deduplicates listings by their numeric Chrono24 ID.

Who should use this Chrono24 scraper?

Watch dealers and resellers

Track competing inventory, asking prices, reference numbers, and seller locations. Run the same URLs daily to identify newly listed or removed watches.

Collectors and buyers

Build a shortlist of comparable watches before a purchase. Export records to a spreadsheet and compare price, shipping, year, condition, and seller geography.

Valuation analysts

Create repeatable snapshots for reference-level price research. Use sourceUrl, sourcePage, and scrapedAt to audit where and when each comparable was observed.

Marketplaces and data teams

Feed structured public listing records into dashboards, warehouses, alerts, or internal valuation tools without maintaining a browser scraper.

Why use this actor?

Chrono24 is protected by browser checks, and basic HTTP requests can return a challenge instead of listing data. This actor uses a full browser under Xvfb, a realistic context, bounded session rotation, and Apify Proxy support.

You also get:

  • ✅ typed, export-ready dataset fields;
  • ✅ strict Chrono24 URL validation;
  • ✅ global maxItems cost control;
  • ✅ per-URL pagination limits;
  • ✅ stable ID deduplication;
  • ✅ non-zero failure on total extraction failure;
  • ✅ optional detail enrichment rather than mandatory slow requests;
  • ✅ integrations with the Apify API, schedules, webhooks, MCP, and storage.

What Chrono24 data can you extract?

FieldTypeDescription
listingIdstringStable numeric Chrono24 listing ID
urlstringCanonical public listing URL
titlestringWatch title from the result card
brandstringRecognized manufacturer when available
modelstringModel text derived from the card title
referenceNumberstringCard detail/reference text or enriched reference
pricenumberNumeric asking price when public
currencystringPrice currency, such as USD
priceTextstringOriginal displayed price or “Price on request”
shippingPricenumberNumeric shipping amount when shown
shippingTextstringOriginal shipping label
conditionstringCondition hint when exposed
yearnumberProduction year found on the card
sellerTypestringdealer or private
sellerLocationstringPublic seller country/location
imageUrlstringWatch image URL
badgestringPublic card badge such as “Popular”
isPromotedbooleanWhether a badge indicates promotion
detailsEnrichedbooleanWhether detail JSON-LD was added
descriptionstringOptional structured detail description
availabilitystringOptional detail availability
sourceUrlstringInput or pagination URL that produced the row
sourcePagenumberPage number within that input
scrapedAtstringUTC ISO timestamp

Optional values are omitted when Chrono24 does not expose them; the actor does not invent missing data.

How to scrape Chrono24 watch listings

  1. Open the actor input page.
  2. Add one or more public Chrono24 search, brand, or model result URLs.
  3. Set Maximum watch listings to control total output.
  4. Set Maximum pages per URL to bound pagination.
  5. Leave detail enrichment off for fast monitoring, or enable it for richer records.
  6. Keep direct browser access for the tested low-cost default; enable a proxy only if your environment is challenged.
  7. Click Start.
  8. Export the resulting dataset as JSON, CSV, Excel, XML, or RSS.

A low-cost first run uses one URL, one page, and five listings.

Input parameters

ParameterTypeDefaultPurpose
startUrlsarrayRolex result pageChrono24 search, brand, or model pages
maxItemsinteger20Global unique-listing limit
maxPagesPerUrlinteger3Pagination limit for every seed URL
includeDetailsbooleanfalseVisit details for JSON-LD enrichment
navigationTimeoutSecsinteger60Per-page browser timeout
maxSessionRetriesinteger2Browser/proxy rotations after challenges
proxyConfigurationobjectDirect accessOptional proxy settings for challenged environments

Individual listing-detail URLs are intentionally rejected as start URLs. This keeps every output row within the same listing-search product contract.

Example input

{
"startUrls": [
{ "url": "https://www.chrono24.com/rolex/index.htm" },
{ "url": "https://www.chrono24.com/omega/index.htm" }
],
"maxItems": 40,
"maxPagesPerUrl": 2,
"includeDetails": false,
"proxyConfiguration": {
"useApifyProxy": false
}
}

For a detail-enriched valuation sample, set includeDetails to true and start with a low maxItems value.

Example output

{
"listingId": "47173309",
"url": "https://www.chrono24.com/rolex/yacht-master-16622-platinum-grey-dial-stainless-steel-40--id47173309.htm",
"title": "Rolex Yacht-Master 40",
"brand": "Rolex",
"model": "Yacht-Master 40",
"referenceNumber": "16622 PLATINUM Grey Dial Stainless Steel 40",
"price": 10000,
"currency": "USD",
"priceText": "$10,000",
"shippingPrice": 99,
"sellerType": "dealer",
"sellerLocation": "United States of America",
"isPromoted": true,
"detailsEnriched": false,
"sourcePage": 1,
"scrapedAt": "2026-07-22T07:55:03.920Z"
}

Values change as the marketplace changes. The example illustrates the schema rather than guaranteeing a specific live offer.

How much does it cost to scrape Chrono24 listings?

This actor uses pay-per-event pricing:

  • one small Start charge per run;
  • one Watch listing charge for each unique dataset row.

The Console always shows the current exact event prices before a run. You control spend with maxItems and maxPagesPerUrl; detail enrichment also increases browser and proxy usage, so test that mode with a small limit first.

The free Apify plan can be used for small evaluations subject to your available platform credits. For recurring production monitoring, estimate cost from the item limit and the current tier price shown in Console.

Inventory and price-monitoring workflow

Run a stable set of result URLs on a schedule and store each dataset snapshot.

A typical workflow is:

  1. schedule the actor daily or hourly;
  2. export listingId, price, sellerLocation, and scrapedAt;
  3. join the new snapshot to the previous snapshot by listingId;
  4. flag new IDs, removed IDs, and changed prices;
  5. send changes to Slack, email, a webhook, or a database.

Because listings are deduplicated by stable ID, multiple overlapping result URLs can be supplied in one run.

Tips for reliable Chrono24 extraction

  • 🎯 Start with exact brand, model, or filtered search URLs.
  • 📉 Keep maxItems low while validating a new workflow.
  • 📄 Use one or two pages unless deeper inventory coverage is required.
  • 🔎 Enable detail enrichment only when descriptions or availability are needed.
  • 🌐 Use the tested direct default first; enable Apify Proxy only when needed.
  • 🔁 Let the actor rotate sessions rather than adding aggressive concurrency.
  • 🧾 Use the displayed priceText when a numeric price is unavailable.
  • 🕒 Compare scrapedAt values when building historical snapshots.

Chrono24 can change its page structure or challenge behavior. If a run fails, retry once with the default settings and inspect the log before increasing limits.

Apify integrations

Google Sheets and Excel

Export CSV or Excel from the dataset, or connect the dataset to a spreadsheet automation for recurring comparable-price reports.

Webhooks and alerts

Trigger a webhook when a run succeeds. Compare the new dataset against the previous run and alert on new listings or price reductions.

Data warehouses

Pull dataset items through the API into BigQuery, Snowflake, PostgreSQL, or your preferred lakehouse. Use listingId as the marketplace key and scrapedAt as the snapshot timestamp.

Zapier and Make

Start runs from a workflow, wait for completion, then route new listing records to a CRM, notification channel, or review queue.

Use the actor through the JavaScript API

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/chrono24-watch-listings-scraper').call({
startUrls: [{ url: 'https://www.chrono24.com/rolex/index.htm' }],
maxItems: 20,
maxPagesPerUrl: 1,
includeDetails: false,
proxyConfiguration: { useApifyProxy: false }
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Use the actor through the Python API

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/chrono24-watch-listings-scraper').call(run_input={
'startUrls': [{'url': 'https://www.chrono24.com/omega/index.htm'}],
'maxItems': 20,
'maxPagesPerUrl': 1,
'includeDetails': False,
'proxyConfiguration': {'useApifyProxy': False},
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item)

Use the actor with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~chrono24-watch-listings-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url":"https://www.chrono24.com/rolex/index.htm"}],
"maxItems": 20,
"maxPagesPerUrl": 1,
"proxyConfiguration": {"useApifyProxy": false}
}'

Fetch dataset items after the run finishes using the defaultDatasetId returned by the run API.

Use Chrono24 data with MCP and AI agents

Connect the actor to Claude Code:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/chrono24-watch-listings-scraper"

For Claude Desktop, Cursor, or VS Code, add this HTTP MCP server configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/chrono24-watch-listings-scraper"
}
}
}

Example prompts for your agent:

  • “Scrape the first 20 Rolex listings from Chrono24 and summarize asking prices.”
  • “Export current Omega listings and group them by seller location.”
  • “Create a comparable set for these Chrono24 result URLs and flag prices below the median.”
  • “Run an enriched five-item sample and summarize references and availability.”

Limitations

  • Only public chrono24.com result pages are supported.
  • Login-only data, saved searches, messaging, and account data are not accessed.
  • Fields absent from public cards are omitted rather than inferred.
  • Detail enrichment is slower and may fail for individual listings; useful card records are preserved.
  • Marketplace changes can affect selectors, availability, or challenge behavior.
  • Asking prices are not completed transaction prices and should not be treated as appraisals.
  • Currency reflects the public page presentation; no currency conversion is performed.

This actor extracts public marketplace information. Web scraping laws and contractual requirements vary by country and use case.

Use the actor responsibly:

  • collect only data you have a lawful purpose to process;
  • respect applicable terms, database rights, copyright, and privacy rules;
  • avoid excessive request volume;
  • do not use output for spam, harassment, or discriminatory decisions;
  • consult qualified counsel for regulated or high-risk uses.

The actor does not bypass login, access private account information, or send messages to sellers.

Troubleshooting

Why did the run report a Chrono24 challenge?

Use the tested direct default and the standard retry settings first. If direct access is challenged in your environment, enable Apify Proxy or provide a custom proxy. Avoid high limits until a small run succeeds.

Why is price missing?

Chrono24 may display “Price on request.” The original priceText remains available, but the actor does not invent a numeric price.

Why is detailsEnriched false when enrichment was enabled?

The detail page may not expose parseable Product JSON-LD or may have failed independently. The actor preserves the valid result-card record instead of discarding it.

Why was my URL rejected?

The URL must use chrono24.com, end in a public result-page .htm route, and not be an individual --id123.htm listing. Open the desired public result page in Chrono24 and copy that URL.

FAQ

Does this scraper require a Chrono24 account?

No. It reads public listing result pages and optional public detail metadata anonymously.

Can it scrape multiple brands in one run?

Yes. Add multiple brand or search URLs. maxItems applies globally, and duplicate listing IDs are emitted once.

Does it support pagination?

Yes. Set maxPagesPerUrl; the actor follows Chrono24's visible Next link.

Can I monitor prices over time?

Yes. Schedule repeated runs and compare datasets by listingId. Keep each snapshot's price, priceText, and scrapedAt.

Are prices guaranteed to be accurate appraisals?

No. They are public asking prices at scrape time. Validate any valuation decision with appropriate market and professional context.

Use related actors only when their source fits your workflow; each marketplace has a different pricing and seller context.