Jomashop Luxury Watch Listings Scraper
Pricing
Pay per event
Jomashop Luxury Watch Listings Scraper
Scrape public Jomashop watch listings with SKUs, prices, discounts, stock status, images, and optional product descriptions.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Extract public Jomashop luxury watch catalog listings with prices, SKUs, brand/model/reference hints, stock status, images, and optional description/spec text.
What does Jomashop Luxury Watch Listings Scraper do?
Jomashop Luxury Watch Listings Scraper collects structured product listing data from the public Jomashop watch catalog. It uses Jomashop's public GraphQL catalog endpoint to paginate product rows without opening a browser.
Use it to monitor retail prices, compare discounts, build ecommerce catalogs, and track stock changes across thousands of watch listings.
Who is it for?
- ๐ฐ๏ธ Watch dealers tracking grey-market inventory and retail spreads.
- ๐ Ecommerce analysts comparing list prices, final prices, and discounts.
- ๐ Marketplace sellers building product matching and arbitrage workflows.
- ๐ผ Data teams enriching internal SKU databases with public catalog metadata.
- ๐ Price-monitoring teams looking for repeatable daily or weekly watch exports.
Why use this actor?
- HTTP-only scraping path for low compute cost.
- Public Jomashop catalog data, no login required.
- SKU-first output designed for product matching.
- Includes final price, list price, discount amount, discount percent, and stock status.
- Optional detail mode for product descriptions and specification text.
What data can I extract?
| Field | Description |
|---|---|
productUrl | Jomashop product page URL |
sku | Jomashop SKU |
name | Product listing name |
brand | Parsed brand hint from the name |
model | Parsed model/name hint |
reference | Parsed reference/SKU-like value |
category | Category label |
categoryId | Magento category ID used for the query |
finalPrice | Current listed sale/final price |
listPrice | Regular/list price when available |
discountAmount | Discount amount in listing currency |
discountPercent | Discount percentage |
currency | Listing currency, usually USD |
stockStatus | Jomashop stock status |
imageUrls | Product image URLs |
description | Optional detail description text |
shortDescription | Optional short description |
specsText | Optional specification/description text |
source | jomashop.com |
scrapedAt | ISO timestamp |
How much does it cost to scrape Jomashop watch listings?
This actor uses pay-per-event pricing. A small start event is charged once per run, and each saved product listing is charged as one result.
Formula-derived pricing with platform minimums starts at about $0.36 per 1,000 saved listings on the BRONZE tier, before Apify plan discounts and tier-specific adjustments.
How to use it
- Open the actor on Apify.
- Keep the default watches category URL or provide another public Jomashop category URL.
- Set
maxItemsto the number of listings you want. - Keep
includeDetailsdisabled for fast price-monitoring exports. - Enable
includeDetailswhen you also need description/spec text. - Run the actor.
- Download the dataset as JSON, CSV, Excel, XML, or via API.
Input options
startUrls
Optional list of public Jomashop category URLs. The default is:
[{ "url": "https://www.jomashop.com/watches.html" }]
categoryId
Direct Jomashop/Magento category ID. The default 871 points to the public watches category.
maxItems
Maximum number of product listings to save. Start with 50 for a sample run, then increase for monitoring or full exports.
pageSize
Number of products requested per GraphQL page. Values between 50 and 100 are efficient for larger runs.
includeDetails
When enabled, the actor performs one extra GraphQL query per product to collect description/spec text. Leave it disabled for the cheapest and fastest listing-only runs.
Example input
{"startUrls": [{ "url": "https://www.jomashop.com/watches.html" }],"categoryId": "871","maxItems": 50,"pageSize": 50,"includeDetails": false}
Example output
{"productUrl": "https://www.jomashop.com/tissot-carson-watch-t1224071105100.html","sku": "TIST1224071105100","name": "Tissot Carson Automatic Black Dial Men's Watch T122.407.11.051.00","brand": "Tissot","model": "Carson Automatic Black Dial","reference": "T122.407.11.051.00","category": "Watches","categoryId": "871","finalPrice": 419,"listPrice": 419,"discountAmount": 0,"discountPercent": 0,"currency": "USD","stockStatus": "IN_STOCK","imageUrls": ["https://cdn2.jomashop.com/media/catalog/product/...jpg"],"description": null,"shortDescription": null,"specsText": null,"source": "jomashop.com","scrapedAt": "2026-06-07T00:00:00.000Z"}
Tips for best results
- Use
includeDetails: falsefor regular price monitoring. - Use
includeDetails: trueonly when you need product description/spec text. - Increase
maxItemsgradually when testing new categories. - Keep
pageSizeat 50 or 100 for efficient pagination. - Use SKU and reference fields for matching against internal product databases.
Integrations
- ๐ Send CSV exports to Google Sheets or Excel for pricing analysis.
- ๐งฉ Use the dataset API in product matching pipelines.
- ๐ Schedule daily runs and compare
finalPrice,discountPercent, andstockStatus. - ๐ท๏ธ Join output rows with marketplace listings by SKU, brand, model, or reference.
- ๐๏ธ Feed ecommerce catalog enrichment jobs with public image and price metadata.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/jomashop-luxury-watch-listings-scraper').call({startUrls: [{ url: 'https://www.jomashop.com/watches.html' }],categoryId: '871',maxItems: 50,pageSize: 50,includeDetails: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 3));
API usage with Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/jomashop-luxury-watch-listings-scraper').call(run_input={'startUrls': [{'url': 'https://www.jomashop.com/watches.html'}],'categoryId': '871','maxItems': 50,'pageSize': 50,'includeDetails': False,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items[:3])
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~jomashop-luxury-watch-listings-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"startUrls":[{"url":"https://www.jomashop.com/watches.html"}],"categoryId":"871","maxItems":50,"pageSize":50,"includeDetails":false}'
MCP usage
Use this actor from Apify MCP tools in Claude Desktop, Claude Code, or other MCP clients.
MCP server URL:
https://mcp.apify.com/?tools=automation-lab/jomashop-luxury-watch-listings-scraper
Claude Code setup:
$claude mcp add apify-jomashop "https://mcp.apify.com/?tools=automation-lab/jomashop-luxury-watch-listings-scraper"
Claude Desktop JSON config:
{"mcpServers": {"apify-jomashop": {"url": "https://mcp.apify.com/?tools=automation-lab/jomashop-luxury-watch-listings-scraper"}}}
Example prompts:
- "Run the Jomashop watch scraper for 100 products and summarize the biggest discounts."
- "Compare today's Jomashop output with yesterday's dataset by SKU."
- "Find in-stock watches over $1,000 with discount percent above 20%."
Scheduling
Set up an Apify schedule to run the actor daily, weekly, or monthly. Price and stock-monitoring workflows work best when the same input is used repeatedly and results are compared by SKU.
Data quality notes
Brand, model, and reference are parsed from public product names and SKUs. Jomashop does not always expose every watch attribute as a separate listing field, so treat parsed values as helpful matching hints rather than manufacturer-certified normalized attributes.
FAQ
Is this an official Jomashop API?
No. The actor uses public catalog responses that are visible without an account. It is not affiliated with or endorsed by Jomashop.
Does it require a proxy?
The current implementation is HTTP-only and did not require a proxy during development or cloud validation.
Troubleshooting
Why are descriptions empty?
Descriptions are only collected when includeDetails is enabled. Listing-only mode is faster and cheaper but intentionally skips per-product detail queries.
Why did I get fewer products than maxItems?
The category may contain fewer reachable products than requested, or the public endpoint may return duplicate SKUs that are skipped to keep the dataset clean.
Can I scrape another Jomashop category?
Yes. Provide a public Jomashop category URL or a direct category ID. The actor is optimized for watches, but the GraphQL listing fields are also useful for other retail categories.
Legality
This actor collects publicly available catalog data. You are responsible for using the data in compliance with applicable laws, Jomashop's terms, and Apify's terms. Avoid collecting personal data and do not use the actor for prohibited purposes.
Related scrapers
Explore other Automation Lab actors for ecommerce, marketplace, and price-monitoring workflows:
- https://apify.com/automation-lab/amazon-product-scraper
- https://apify.com/automation-lab/ebay-scraper
- https://apify.com/automation-lab/shopify-scraper
Changelog
- Initial version: public Jomashop GraphQL listing pagination, pricing fields, image URLs, stock status, and optional product details.
Support
If you need a field that is visible on Jomashop but missing from the dataset, open an issue with an example product URL and the field name.
Limits
The actor depends on Jomashop's public catalog endpoint. If Jomashop changes its GraphQL schema or blocks public catalog access, the actor may need an update.
Version
Current actor version: 0.1.