# KOMEHYO Rolex Inventory & Asking Price Monitor (`jpmarketdata/japan-watch-retail-buyback-comparison`) Actor

Monitor exact Rolex references in KOMEHYO Japan inventory: stable product IDs, current JPY asking prices, stock and condition facts, and changes from your saved observations. Optional dated Daikokuya buyback context.

- **URL**: https://apify.com/jpmarketdata/japan-watch-retail-buyback-comparison.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 96.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00 / 1,000 reference inventory snapshot createds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## KOMEHYO Rolex Inventory & Asking Price Monitor

Track exact Rolex references in KOMEHYO Japan inventory for dealer watchlists and sourcing research. Each run returns stable product IDs, current JPY asking prices, explicit stock status, condition rank, box/warranty evidence and the published warranty date. Supply selected observations from an earlier run to see same-ID price and stock changes. Optional Daikokuya buyback context supplements this inventory snapshot.

### Input

`references` accepts 1–10 exact Rolex reference codes: five or six digits with an optional suffix of up to four uppercase letters. Duplicates are removed before acquisition and billing. `maxListingsPerReference` defaults to 10 and accepts 1–50. `maxTotalListings` defaults to 50 and accepts 1–100; it must cover at least one detail per distinct reference. The total detail budget is divided evenly before acquisition, with any remainder assigned in input order. Unused quotas are not redistributed.

```json
{"references":["126610LN","126500LN","16233"],"maxListingsPerReference":10,"maxTotalListings":30,"includeBuyback":false}
```

`includeBuyback` defaults to **false**, an intentional change from the previous condition-screen-only contract. Set it to true to acquire Daikokuya’s dated mail-in reference table and apply its advertised eligibility requirements. `maxBuybackAgeDays` defaults to 7 and accepts 1–30; it only affects qualified buyback gaps.

`previousListings` optionally accepts up to 100 selected baseline observations:

```json
{"references":["126610LN"],"previousListings":[{"reference":"126610LN","listingId":"230-000-857-0603","askingPriceJPY":2400000,"stockStatus":"in_stock","checkedAt":"2026-10-02T00:00:00Z"}]}
```

Every baseline row must have exactly those five fields: a configured exact reference, a stable KOMEHYO product ID, a positive integer JPY asking amount, `in_stock` or `sold_out`, and an ISO observation timestamp with timezone strictly earlier than this run. Duplicate reference/ID pairs, unknown fields, arbitrary URLs and credentials are rejected. Baseline history is supplied by you and is not independently verified. The platform event budget caps distinct references before network work; zero event budget fails before acquisition.

### Output

One `japan_watch_retail_buyback_comparison_summary` row per acquired reference preserves the existing row type and adds the primary inventory workflow:

- `status`: `inventory_available`, `no_exact_in_stock_listing`, or `no_retail_listing`. Optional buyback eligibility does not change this result.
- `inventoryCount`, `minAskingPriceJPY` and `maxAskingPriceJPY`: exact-reference, explicitly in-stock facts in the acquired detail sample. Asking prices are not sold prices or valuations.
- `listings`: stable product IDs, URLs, independently verified detail reference, asking price, stock, condition rank, tri-state accessories, warranty date with its actual precision and interval, and manufacture year only if published. A warranty date is never relabeled manufacture year.
- `snapshotComparison`: same-reference/same-ID price or explicitly observed stock changes against your baseline, with separate baseline/current timestamps. `newlyObservedListingIds` means absent from that supplied baseline; it does not assert a new listing. `unobservedBaselineListingIds` never means sold or removed.
- `retailReportedCount`, `sampledListingCount`, `truncated`, `sampleOrder` and `coverage`: the search hit count and actual acquisition boundaries. Keyword hits are not an exact-reference inventory population count.
- `buybackStatus`: `not_requested` by default; when enabled, dated exact-reference rows and eligibility exclusions remain separate from current retail inventory.

KOMEHYO searches use ascending asking price, and only the first page is sampled. Up to 50 details per reference and 100 total can be acquired. There is no all-stock, global-market, population-minimum or complete-change-feed claim. Wrong-reference keyword hits and sold-out details are visible but excluded from inventory counts and sampled price bounds. A source-declared zero or no exact in-stock detail is a useful watchlist negative only after the source structure is valid.

Ordinary used inventory is useful even when buyback `comparableCount` is zero. For example, the observed 126610LN offers at JPY 2,350,000 and 2,420,000 have warranty months 2021-11 and 2025-11. They remain stock/asking-price observations even though neither meets Daikokuya’s recent-warranty condition. The supplied example demonstrates a JPY 50,000 same-ID decrease against a synthetic user baseline; it is not independently measured historical pricing.

### Optional buyback conditions

A conditional gap requires a unique supported exact table variant, a fresh table, a supported used/unused condition, complete age-appropriate accessories, a latest dated warranty card, and every advertised condition affirmatively supported. The full possible warranty date interval must fall inside the past six calendar months for used or one month for unused and must not extend into the future. Rank A/S or box plus warranty alone does not prove those requirements. Used `〜` prices retain `upper_bound`; inquiry amounts remain null. Unknown facts, ambiguous variants and stale tables suppress only the conditional gap. Actual dealer acceptance, condition, authenticity, shipping, fees and payment remain unverified.

### Limits and charging

HTTP only, 256 MB, no required external API, proxy or browser. Fresh robots checks precede each requested host. Maximum 113 requests: one KOMEHYO robots read, 10 reference searches, 100 details, and optionally one Daikokuya robots read plus its table. Each request has a 30-second timeout and 1 MiB body cap; acquisition has a 300-second deadline. Same-host request starts are at least 1.5 seconds apart or slower when robots requires it. No retries, redirects, arbitrary routes, account/cart actions or transactions.

Access blocks, rate limits, timeouts and structure changes are explicit errors. All requested source acquisition is staged before delivery; any upstream failure emits no partial rows or billable event. A requested buyback source failure fails the run; leaving it disabled avoids that extra dependency. One charged dataset push per completed reference snapshot uses the existing `comparison-created` event once, including verified watchlist negatives. No per-detail event or manual-plus-push double charge. The price is $0.02 per snapshot. No actor-specific free trial is promised; platform credits may apply.

### Privacy

Return selected public product/reference facts only. Exclude images, free descriptions, customer/contact data, serial numbers, raw tables/HTML, cookies and tokens. Source bodies are not logged or persisted. Fixtures contain selected non-personal facts and synthetic fault cases. Baseline input is strictly limited to product observations.

# Actor input Schema

## `references` (type: `array`):

One to ten exact five- or six-digit Rolex references with an optional uppercase suffix of up to four letters. Deduplicated before acquisition and per-reference billing.

## `maxListingsPerReference` (type: `integer`):

Read up to 50 ascending-price first-page details per reference. The total detail budget is divided evenly between references before acquisition. The sample may omit offers.

## `maxBuybackAgeDays` (type: `integer`):

When includeBuyback is true, maximum accepted table age in calendar days in Asia/Tokyo. Stale tables remain visible and suppress qualified gaps; future dates are errors.

## `maxTotalListings` (type: `integer`):

Maximum details across all distinct references, divided evenly with any remainder assigned in input order. Must cover at least one detail per reference. Unused quotas are not redistributed.

## `includeBuyback` (type: `boolean`):

Optional dated public reference table and conservative condition screen. Defaults to false: ordinary asking-price inventory remains useful without any qualified buyback gap. Requested source failures fail the run.

## `previousListings` (type: `array`):

Optional baseline of at most 100 selected observations saved from earlier runs. Join by exact reference plus stable product ID. This user-supplied history is not independently verified; missing IDs in a capped sample never imply a sale or removal. Unknown fields and duplicate identities are rejected.

## Actor input object example

```json
{
  "references": [
    "126610LN"
  ],
  "maxListingsPerReference": 10,
  "maxBuybackAgeDays": 7,
  "maxTotalListings": 50,
  "includeBuyback": false,
  "previousListings": []
}
```

# Actor output Schema

## `results` (type: `string`):

Stable KOMEHYO product IDs, current JPY asking prices, stock and changes against your supplied observations; optional dated buyback context.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "references": [
        "126610LN"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/japan-watch-retail-buyback-comparison").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "references": ["126610LN"] }

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/japan-watch-retail-buyback-comparison").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "references": [
    "126610LN"
  ]
}' |
apify call jpmarketdata/japan-watch-retail-buyback-comparison --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpmarketdata/japan-watch-retail-buyback-comparison"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/htXhdUCmMbS5bF8LZ/builds/JMtKEeIfkPAXauKsc/openapi.json
