
Chrono24 Listing Scraper
Pricing
Pay per event

Chrono24 Listing Scraper
Extracting structured watch data from Chrono24. Provide a listing URL, and it returns clean JSON with brand, model, reference, price, condition, specs, images, seller ratings, reviews, delivery details, availability, and multi-currency support—ready for instant integration.
0.0 (0)
Pricing
Pay per event
0
1
1
Last modified
2 hours ago
Chrono24 Watch Scraper API
A powerful Flask-based API for scraping individual watch listings from Chrono24 across multiple domains with consistent data structure and automatic Unicode decoding.
🚀 Quick Start
Installation
# Clone the repositorygit clone <repository-url>cd chrono24# Install dependenciespip install -r requirements.txt# Start the Flask apppython app.py
Basic Usage
# Scrape a watch listingGET /scrape_watch?url=https://chrono24.ch/rolex/datejust-36-1970-top-condition--id28485741.htm# Health checkGET /health# API informationGET /
🌍 Supported Domains
Domain | Country | Language | Currency | URL |
---|---|---|---|---|
chrono24.com | United States | English | USD | https://chrono24.com |
chrono24.ch | Switzerland | German | CHF | https://chrono24.ch |
chrono24.de | Germany | German | EUR | https://chrono24.de |
chrono24.fr | France | French | EUR | https://chrono24.fr |
chrono24.it | Italy | Italian | EUR | https://chrono24.it |
chrono24.es | Spain | Spanish | EUR | https://chrono24.es |
chrono24.co.uk | United Kingdom | English | GBP | https://chrono24.co.uk |
chrono24.com.au | Australia | English | AUD | https://chrono24.com.au |
chrono24.in | India | English/Hindi | INR | https://chrono24.in |
chrono24.app | Mobile App | Auto-detected | Auto-detected | https://chrono24.app |
Note: chrono24.app
URLs are automatically converted to the appropriate domain based on the SETLANG
and SETCURR
parameters.
📡 API Endpoints
1. Scrape Watch Listing
Endpoint: GET /scrape_watch
or GET /scrape_watch/
Query Parameters:
url
(required): The Chrono24 watch listing URL to scrape
Example Request:
$GET /scrape_watch?url=https://chrono24.app/rolex/datejust-36-1970-top-condition--id28485741.htm?SETLANG=en_CH&SETCURR=CHF
Example Response:
{"success": true,"data": {"title": "Rolex Datejust 36 1970 Top Condition","price": "4800","currency": "CHF","domain": "chrono24.ch","manufacturer": "Rolex","location": "Switzerland, Bülach bei Zürich","condition": "Used (Very good) The item shows minor signs of wear, such as small, intangible scratches.","additional_details": {"reference_number": "1603","case_diameter": "36 mm","movement": "Automatic","year_of_production": "1970"},"image_urls": ["https://img.chrono24.com/..."],"image_count": 17},"domain": "chrono24.ch","currency": "CHF"}
2. Health Check
Endpoint: GET /health
or GET /health/
Response:
{"status": "healthy","supported_domains": ["chrono24.com", "chrono24.ch", "chrono24.in", ...],"flare_solverr_enabled": false}
3. API Information
Endpoint: GET /
or GET /index
or GET /index/
Response:
{"service": "Chrono24 Watch Scraper API","version": "1.0.0","endpoints": {"/scrape_watch": {"method": "GET","description": "Scrape a single watch listing","parameters": {"url": "The Chrono24 watch listing URL to scrape"}}},"supported_domains": ["chrono24.com", "chrono24.ch", "chrono24.in", ...],"usage": "Send a GET request to /scrape_watch with the 'url' parameter containing a Chrono24 watch listing URL or chrono24.app URL"}
🔧 Features
Automatic URL Conversion
chrono24.app
URLs are automatically converted to the appropriate domain- Smart detection based on
SETLANG
andSETCURR
parameters
Price Cleaning
- Removes Unicode characters (e.g.,
\u2019
→'
) - Strips currency symbols and formatting
- Returns clean numeric values
Unicode Decoding
- Automatically converts Unicode escape sequences to readable symbols
- Supports German (ü, ö, ä, ß), French (é, è, à, ç), Spanish (ñ), and more
- Handles quotation marks, dashes, and special characters
Consistent Data Structure
- Same output format across all supported domains
- Domain and currency information included
- Comprehensive watch details extraction
📊 Data Structure
All responses follow the same structure regardless of the source domain:
{"success": boolean,"data": {"title": "string","price": "string (cleaned)","currency": "string","domain": "string","manufacturer": "string","location": "string","condition": "string","description": "string","image_urls": ["string"],"image_count": number,"additional_details": {"reference_number": "string","case_diameter": "string","movement": "string","year_of_production": "string",// ... other watch specifications}},"domain": "string","currency": "string"}
🛡️ Error Handling
The API returns appropriate HTTP status codes and error messages:
200
: Success400
: Bad Request (missing URL, invalid URL, scraping failed)500
: Internal Server Error
Error Response Format:
{"error": "Error description","usage": "Usage instructions (for 400 errors)"}
🚀 Advanced Usage
Mobile App URL Support
# Mobile app URL with Swiss parametersGET /scrape_watch?url=https://chrono24.app/rolex/datejust-36-1970-top-condition--id28485741.htm?SETLANG=en_CH&SETCURR=CHF# This automatically converts to chrono24.ch and scrapes with Swiss settings
Direct Domain URLs
# Swiss domainGET /scrape_watch?url=https://chrono24.ch/rolex/datejust-36-1970-top-condition--id28485741.htm# US domainGET /scrape_watch?url=https://chrono24.com/rolex/submariner-date-126610ln--id12345678.htm# Indian domainGET /scrape_watch?url=https://chrono24.in/rolex/datejust-41mm-blue-dial--id87654321.htm
🔍 Troubleshooting
Common Issues
- 403 Forbidden Errors: Use FlareSolverr (see CLOUDFLARE_BYPASS.md)
- No Listings Found: Check if the URL is valid and accessible
- Connection Errors: Verify your internet connection and try again
Getting Help
- Check the health endpoint:
GET /health
- Verify the app is running:
python app.py
- Check console logs for debugging information
📝 Examples
Python Requests
import requests# Scrape a watch listingresponse = requests.get('http://localhost:5000/scrape_watch',params={'url': 'https://chrono24.ch/rolex/datejust-36-1970-top-condition--id28485741.htm'})if response.status_code == 200:data = response.json()print(f"Watch: {data['data']['title']}")print(f"Price: {data['data']['price']} {data['data']['currency']}")print(f"Location: {data['data']['location']}")else:print(f"Error: {response.json()}")
cURL
# Basic scrapingcurl "http://localhost:5000/scrape_watch?url=https://chrono24.ch/rolex/datejust-36-1970-top-condition--id28485741.htm"# Health checkcurl "http://localhost:5000/health"
📄 License
This project is licensed under the terms specified in the LICENSE file.
The Chrono24 Watch Scraper API is ready to use! 🎉
For information about bypassing Cloudflare protection, see CLOUDFLARE_BYPASS.md.
On this page
Share Actor: