EveryWatch APIeverywatch.com ↗
Search watch models and retrieve auction results from 500+ auction houses via the EveryWatch API. Get pricing, source links, and historical sales data.
What is the EveryWatch API?
The EveryWatch API provides two endpoints that cover watch model discovery and auction result retrieval aggregated from over 500 auction houses. Use search_models to find a watch by keyword and get its slug identifier, then pass that slug to get_auction_results to pull up to 48 recent auction records — each with pricing, source links, and watch details — out of the full historical pool tracked for that reference.
curl -X GET 'https://api.parse.bot/scraper/45ca4080-79bb-4066-8d81-413cb494cfac/search_models?query=Rolex+Daytona' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for watch models and references by keyword. Returns matching models with their slugs (used by get_auction_results), brand/model identifiers, and listing/historical counts. Up to 15 results per query. Supports composite queries: multiple brand names separated by ' / ', ';', newline, ' & ', or ' and ' are searched independently and results are returned as a deduplicated union with brand-level rows prioritized for each component. Each result includes an entity_level field ('brand', 'model', or 'reference') indicating the granularity of the match.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search query for watch brand, model, or reference number (e.g. 'Rolex Daytona', 'Omega Speedmaster', 'Patek Philippe 5711'). Supports composite queries with separators: ' / ' (slash), ';' (semicolon), newline, ' & ', or ' and ' to search multiple brands independently (e.g. 'AKRIVIA / Rexhep Rexhepi'). |
{
"type": "object",
"fields": {
"total": "integer count of results returned",
"results": "array of matching watch models with slug, counts, entity identifiers, and entity_level ('brand', 'model', or 'reference')"
},
"sample": {
"data": {
"total": 15,
"results": [
{
"slug": "/rolex/daytona",
"brand_id": "257",
"model_id": "1883",
"image_url": "https://ew-s3-image.s3.eu-west-1.amazonaws.com/media/2023/05/20/media/webp/rolex-chronograph-1165091250169_320w.webp",
"brand_name": "Rolex",
"model_name": "Daytona",
"total_count": 170386,
"reference_id": null,
"listing_count": 18530,
"reference_name": null,
"matching_string": "Rolex Daytona",
"historical_count": 151856
}
]
},
"status": "success"
}
}About the EveryWatch API
Endpoint Overview
The API has two endpoints designed to work in sequence. search_models accepts a free-text query parameter — brand names, model names, or reference numbers like Rolex Daytona or 5172G — and returns up to 15 matching watch models. Each result includes a slug (e.g. /patek-philippe/5172g), brand and model entity identifiers, and counts for both active listings and historical records. The slug is the key input for the second endpoint.
Auction Results
get_auction_results takes a slug obtained from search_models and returns an auctions array of up to 48 recent records. Each auction object includes sale price data, a direct source link to the original auction listing, and watch-level details for that specific sold lot. The response also includes total_records — the full count of historical auction records EveryWatch holds for that model — and returned_count, which reflects how many records came back in this call (capped at 48).
Coverage and Scope
EveryWatch aggregates data from over 500 auction houses, making it useful for tracking realized prices across a wide range of references from major brands like Rolex, Omega, and Patek Philippe down to more obscure references. The search_models results include listing and historical counts, giving a quick signal of how liquid or well-documented a reference is before fetching full auction records.
Pagination and Limitations
get_auction_results returns a maximum of 48 records per call. If total_records is higher than returned_count, not all available records are returned in a single response. The search_models endpoint is also capped at 15 results, so highly generic queries may not surface every relevant reference — more specific queries (e.g. including a reference number) tend to return more targeted results.
The EveryWatch API is a managed, monitored endpoint for everywatch.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when everywatch.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official everywatch.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a watch valuation tool by querying recent realized prices for a specific reference using
get_auction_results - Track price trends for a reference number over time by storing and comparing auction result records
- Validate a watch listing price against historical auction data before buying or selling
- Index watch model slugs and record counts from
search_modelsto build a reference database - Surface direct auction source links from
get_auction_resultsto let users verify original listings - Monitor
total_recordsfor newly popular references to identify growing collector interest - Integrate auction pricing data into a watch portfolio tracker alongside owned reference details
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does EveryWatch have an official developer API?+
What does `get_auction_results` actually return per auction record?+
auctions array includes pricing information for the sold lot, a direct source link to the original auction listing, and watch-level details for that lot. The response also surfaces total_records (full historical count for the model) and returned_count (records returned this call, max 48).Can I paginate through all auction records for a model if `total_records` exceeds 48?+
get_auction_results currently returns up to 48 records per call with no offset or page parameter exposed. If total_records is larger than returned_count, the remaining records are not accessible in a single request. You can fork this API on Parse and revise it to add pagination support for deeper history retrieval.Does the API expose current active listings or only completed auction results?+
search_models response includes separate counts for active listings and historical records, but get_auction_results returns completed auction result data. Active listing details — current asking prices, lot descriptions, or unsold lots — are not currently returned. You can fork this API on Parse and revise it to add an endpoint covering active listings.How specific should the `query` parameter be in `search_models`?+
search_models returns up to 15 results per query. Generic queries like Rolex will match many references and may not surface the exact one you need. Including a model name or reference number — such as Rolex Daytona 116500 — narrows results and makes the returned slugs more directly usable with get_auction_results.