EveryWatch APIeverywatch.com ↗
Search watch models and retrieve hammer prices from 500+ auction houses via the EveryWatch API. Access auction results, price history, and portfolio data.
What is the EveryWatch API?
The EveryWatch API exposes 4 endpoints covering watch model search, completed auction results, portfolio tracker data, and price history charts aggregated from over 500 auction houses. The get_auction_results endpoint returns paginated realized hammer prices with provenance details, multi-currency FX metadata, and sold/unsold status, filterable by date range, auction house, and reference identifier.
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
Endpoints and What They Return
The search_models endpoint accepts a keyword query — brand name, model name, or reference number — and returns up to 15 matching watch models, each carrying a slug, entity-level classification (brand, model, or reference), and listing and historical counts. The slug from these results is the required input for get_auction_results. Composite queries using /, or ; separators are supported for multi-brand lookups.
Auction Results and Filtering
get_auction_results accepts a slug and returns paginated auction records up to 192 per page. Each record includes identity fields such as reference_id and reference_number, realized pricing with provenance, and FX metadata in multiple currencies. Client-side filters cover date_from, date_to, sold_status (sold or unsold), auction_house (case-insensitive substring match on organization_name), and reference_id for narrowing to an exact reference. The total_records field reflects the server-side count for the model; returned_count reflects what survives any applied filters. The filters_applied object confirms which parameters were active.
Portfolio Tracker and Price History
get_portfolio_tracker looks up a watch by reference number and/or model string and returns the candidate list the EveryWatch portfolio add-watch page surfaces — including images (image_120, image_original, image_without_bg), attribute_options (case material, dial color, bracelet material with per-option counts), and a usable slug for further queries. get_price_history returns the Watch Performance chart data for the same lookup, exposing first_value, current_value, and latest_price objects that each carry dealer and auction values in USD, EUR, GBP, and CHF. The period parameter controls the chart window; max returns the full available history.
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?+
- Track realized hammer prices across 500+ auction houses for a specific Rolex reference using
get_auction_resultswith areference_idfilter. - Compare dealer median market price to historical auction prices for a watch using
get_price_historylatest_priceandcurrent_valuefields. - Build a watch valuation tool by retrieving multi-currency
auction_valueanddealer_valuedata fromget_price_history. - Filter auction results to a specific auction house using the
auction_housesubstring parameter to analyze house-specific pricing trends. - Look up dial color, case material, and bracelet options for a reference using
get_portfolio_trackerattribute_options. - Identify how many total auction records exist for a model versus a specific reference using
total_recordsfromget_auction_results. - Resolve a reference number to a canonical slug via
search_modelsorget_portfolio_trackerfor use in downstream auction queries.
| 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` return and how do its filters work?+
reference_number, reference_id, hammer price with provenance, and multi-currency FX metadata — for a model identified by its slug. Date, sold/unsold status, auction house name, and reference ID filters are applied to the fetched page, so returned_count may be lower than page_size. The filters_applied object in the response documents which filters were active.Does the API return live or active listings, not just completed auctions?+
search_models does return a listing_count alongside historical_count, indicating the site tracks some current listings, but there is no dedicated endpoint for retrieving active listing details. You can fork this API on Parse and revise it to add an endpoint targeting current listing data.Are there pagination limitations I should know about?+
get_auction_results supports pages of 1–192 records and exposes has_more and next_page to drive iteration. The date_from, date_to, sold_status, and auction_house filters are applied client-side to the fetched page rather than server-side, so filtering does not reduce total_records — only returned_count reflects post-filter results. For large datasets, you may need to iterate multiple pages to collect all records matching a narrow date or house filter.