Jomashop Luxury Watch Listings Scraper avatar

Jomashop Luxury Watch Listings Scraper

Pricing

Pay per event

Go to Apify Store
Jomashop Luxury Watch Listings Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldDescription
productUrlJomashop product page URL
skuJomashop SKU
nameProduct listing name
brandParsed brand hint from the name
modelParsed model/name hint
referenceParsed reference/SKU-like value
categoryCategory label
categoryIdMagento category ID used for the query
finalPriceCurrent listed sale/final price
listPriceRegular/list price when available
discountAmountDiscount amount in listing currency
discountPercentDiscount percentage
currencyListing currency, usually USD
stockStatusJomashop stock status
imageUrlsProduct image URLs
descriptionOptional detail description text
shortDescriptionOptional short description
specsTextOptional specification/description text
sourcejomashop.com
scrapedAtISO 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

  1. Open the actor on Apify.
  2. Keep the default watches category URL or provide another public Jomashop category URL.
  3. Set maxItems to the number of listings you want.
  4. Keep includeDetails disabled for fast price-monitoring exports.
  5. Enable includeDetails when you also need description/spec text.
  6. Run the actor.
  7. 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: false for regular price monitoring.
  • Use includeDetails: true only when you need product description/spec text.
  • Increase maxItems gradually when testing new categories.
  • Keep pageSize at 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, and stockStatus.
  • ๐Ÿท๏ธ 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 ApifyClient
import os
client = 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().items
print(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.

Explore other Automation Lab actors for ecommerce, marketplace, and price-monitoring workflows:

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.