Search the Watch Market
Pricing
Pay per usage
Search the Watch Market
Watch asking prices and new dealer listings for watches from 537,000+ live ads, 122,000+ vendors, and 160+ million price points (data since 1988). Resolve a watch model, then fetch specs, the latest snapshot, 13-week history, and new listings. Use Standby for HTTP or Start to save JSON.
Pricing
Pay per usage
Rating
5.0
(1)
Developer
Search the Watch Market
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Share
Market data for watches: watch asking prices, specs, weekly charts, and new dealer supply — for apps, agents, and research, without scraping dealer websites.
Built on the same dataset behind Search the Watch Market:
| 537,000+ | Active listings |
| 8.2+ million | Historic listings |
| 816,000+ | Historic auctions |
| 122,000+ | Vendors tracked |
| 160+ million | Price points |
| Since 1988 | Historical coverage |
This Actor exposes live asking-price market data. Auction results and the long historic archive sit in that same dataset; the endpoints below return model resolve, weekly snapshots, specs, 13-week charts, new listings, and listing price history.
What you can do
- Find the model — type a brand and reference; get a stable
group_id - See what it’s worth — low, high, and average asking price plus market value for the latest complete week
- Read the specs — case size, movement, materials, and other consensus fields
- Track the chart — about 13 weeks of min / mean / max in major currencies
- See new supply — watches listed in the last 7 days, with seller, price, and URL
- Follow one listing — asking-price changes over time
Use Standby for on-demand HTTP. Use Start to save JSON in an Apify dataset. Scheduling, monitoring, and the Apify API work as with any other Actor.
Brand names in examples (Rolex, Omega, and similar) are data labels only — this Actor is not affiliated with those manufacturers.
All data endpoints are GET.
Authentication
All /data/* endpoints require your Apify API token:
Authorization: Bearer <APIFY_TOKEN>
The Console Standby tab injects it automatically. From code you can pass ?token=<APIFY_TOKEN> instead of the header if you cannot set headers.
If authentication fails, the Actor returns 401 with:
{"status": 0,"error": "unauthorized","message": "Missing or malformed Authorization header. Expected: Bearer <APIFY_TOKEN>"}
Pricing
See this Actor’s Pricing tab. You pay through Apify (platform usage and any Actor events). No separate account or key is required.
Standby is billed like a normal run while instances are up, including idle time until timeout.
When a quota is exceeded, the Actor returns 429. Handle 429 with retry/backoff. Responses may include X-RateLimit-Limit and X-RateLimit-Remaining.
Response format
Successful responses use:
{"status": 1,"...": "payload"}
Error responses use:
{"status": 0,"error": "<error_code>","message": "<description>"}
Treat a response as success only when HTTP status is 200 and the JSON has "status": 1.
Common HTTP statuses:
- 400 invalid input
- 401 unauthorized
- 404 not found
- 429 rate limited
- 500 server error
- 503 temporarily unavailable
Quick start
- Sign in to Apify, or copy an API token from Apify Settings.
- Resolve a watch query to a
group_id. - Call model endpoints with that
group_id. - Use
listing_idvalues from listings responses for listing-history calls.
Example:
APIFY_TOKEN="YOUR_APIFY_TOKEN"BASE_URL="https://search_the_watch_market--watch-market-data.apify.actor"curl -s "$BASE_URL/data/resolve?q=rolex%20submariner%20126610ln" \-H "Authorization: Bearer $APIFY_TOKEN"
Core identifiers
group_id: model-level identifier used by model endpointslisting_id: listing-level identifier used by the listing history endpoint
Endpoints overview
| Endpoint | Purpose |
|---|---|
GET /data/resolve?q={query} | Resolve free-text watch query to group_id |
GET /data/model/{group_id}/prices | Latest model pricing snapshot |
GET /data/model/{group_id}/specs | Model specification attributes |
GET /data/model/{group_id}/history | 13-week model price history |
GET /data/model/{group_id}/listings | New listings in the last 7 days |
GET /data/listing/{listing_id}/history | Price-change history for one listing |
GET / | Health check (no auth) |
Endpoint reference
1) Resolve query
GET /data/resolve?q={query}
Use this first when you do not yet have a group_id.
Query parameters:
q(required, string): e.g.rolex submariner 126610ln
Success example:
{"status": 1,"group_id": 2341,"brand": "Submariner","model_number": "126610LN","display_name": "Submariner 126610LN"}
Request example:
curl -s "https://search_the_watch_market--watch-market-data.apify.actor/data/resolve?q=rolex%20submariner%20126610ln" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
No match example (404):
{"status": 0,"error": "not_found","message": "No matching group found"}
If you see this message, check spelling and try the manufacturer reference number instead of a colloquial name.
2) Model prices
GET /data/model/{group_id}/prices
Returns the latest model-level pricing snapshot.
Path parameters:
group_id(required, integer)
Success example:
{"status": 1,"group_id": 2314,"currency": "USD","listing_count": 47,"min": 6640,"max": 11360,"mean": 8600,"market_value": 8370}
Prices use USD when that week has USD data; otherwise the first populated fallback currency is used.
Request example:
curl -s "https://search_the_watch_market--watch-market-data.apify.actor/data/model/2314/prices" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
3) Model specs
GET /data/model/{group_id}/specs
Returns specification attributes for the model.
Path parameters:
group_id(required, integer)
Success example:
{"status": 1,"group_id": 2314,"properties": {"brand": "Omega","model": "Speedmaster","reference_number": "310.32.42.50.01.002","base_caliber": "3861","case_diameter": "42mm","water_resistance": "50m","power_reserve": "50h","case_material": "Stainless Steel","bracelet_material": "Stainless Steel","crystal": "Sapphire","functions": "Hours, Minutes, Seconds, Chronograph, Date","year_introduced": "2021"}}
Request example:
curl -s "https://search_the_watch_market--watch-market-data.apify.actor/data/model/2314/specs" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
4) Model history
GET /data/model/{group_id}/history
Returns up to 13 complete weekly points with mean, min, max, and count.
Path parameters:
group_id(required, integer)
Supported currency keys in mean/min/max:
- GBP, USD, EUR, AUD, CAD, CHF, HKD, SGD, PLN, AED, JPY
Success example:
{"status": 1,"group_id": 2314,"weeks": [{"week": "2026-02-09","mean": {"GBP": 6210,"USD": 8380,"EUR": 7290},"min": {"GBP": 5600,"USD": 7550,"EUR": 6570},"max": {"GBP": 7100,"USD": 9580,"EUR": 8340},"count": 38}]}
Request example:
curl -s "https://search_the_watch_market--watch-market-data.apify.actor/data/model/2314/history" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
5) Model listings (new in last 7 days)
GET /data/model/{group_id}/listings?cursor={token}
Returns a paginated listings feed.
Path parameters:
group_id(required, integer)
Query parameters:
cursor(optional, string): usenext_cursorfrom the prior response
Listings are a rolling 7-day window, 20 items per page. Do not use numeric page offsets — new listings would shift the result set. Listing prices stay in the dealer’s local currency.
Success example:
{"status": 1,"group_id": 2314,"page_size": 20,"total_count": 43,"next_cursor": "eyJhZGRlZF9kYXRlIjoiMjAyNi0wNS0wM1QxODo0MjowMC4wMDBaIiwibGlzdGluZ19pZCI6MTEyNjAxMzM0fQ","items": [{"listing_id": 112578408,"url": "https://example.com/listings/omega-speedmaster-moonwatch","added_date": "2026-05-04T09:14:00.000Z","price": 6450,"currency": "GBP","seller": "Example LTD"}]}
First page:
curl -s "https://search_the_watch_market--watch-market-data.apify.actor/data/model/2314/listings" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
Next page:
curl -s "https://search_the_watch_market--watch-market-data.apify.actor/data/model/2314/listings?cursor=YOUR_NEXT_CURSOR" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
Loop while next_cursor is present to get every new listing.
6) Listing price history
GET /data/listing/{listing_id}/history
Returns the observed price-change timeline for one listing.
Path parameters:
listing_id(required, integer)
Success example:
{"status": 1,"listing_id": 112578408,"history": [{ "price": 6800, "date": "2026-02-14T12:00:00.000Z" },{ "price": 6650, "date": "2026-03-01T08:00:00.000Z" },{ "price": 6500, "date": "2026-03-22T14:00:00.000Z" },{ "price": 6450, "date": "2026-04-16T21:17:04.000Z" }]}
Request example:
curl -s "https://search_the_watch_market--watch-market-data.apify.actor/data/listing/112578408/history" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
Health check
GET /
No authentication required.
$curl -s "https://search_the_watch_market--watch-market-data.apify.actor/"
How to use Start
Fill the input form and click Start:
- Choose an endpoint
- For resolve, enter q (for example
rolex submariner 126610ln) - For prices, specs, history, or listings, enter group_id
- For listing history, enter listing_id
- For further listing pages, paste cursor from
next_cursor
The JSON is stored as dataset item 0 and as key-value record OUTPUT. Start runs work with the usual Apify API, tasks, and schedules.
How to integrate
- Store your Apify API token in a secret manager.
- Add
Authorization: Bearer <APIFY_TOKEN>to all/data/*requests (or?token=). - Resolve user input to
group_idvia/data/resolve. - Use model endpoints for analytics (prices, specs, history).
- Use the listings endpoint for recent supply monitoring.
- Use listing history for price-change tracking.
- Handle 429 with retry/backoff.
Standby is HTTP, so Zapier, Make, and similar tools can call it like any other REST API.
cURL collection
APIFY_TOKEN="YOUR_APIFY_TOKEN"BASE_URL="https://search_the_watch_market--watch-market-data.apify.actor"GROUP_ID="2314"LISTING_ID="112578408"# Resolve querycurl -s "$BASE_URL/data/resolve?q=omega%20speedmaster%20310.32.42.50.01.002" \-H "Authorization: Bearer $APIFY_TOKEN"# Pricescurl -s "$BASE_URL/data/model/$GROUP_ID/prices" \-H "Authorization: Bearer $APIFY_TOKEN"# Specscurl -s "$BASE_URL/data/model/$GROUP_ID/specs" \-H "Authorization: Bearer $APIFY_TOKEN"# Historycurl -s "$BASE_URL/data/model/$GROUP_ID/history" \-H "Authorization: Bearer $APIFY_TOKEN"# Listingscurl -s "$BASE_URL/data/model/$GROUP_ID/listings" \-H "Authorization: Bearer $APIFY_TOKEN"# Listing historycurl -s "$BASE_URL/data/listing/$LISTING_ID/history" \-H "Authorization: Bearer $APIFY_TOKEN"
Issues and feature requests: use this Actor’s Issues tab.