# UP GARAGE Japan Used Car Parts — Price by Condition (`jpmarketdata/upgarage-japan-used-parts-checker`) Actor

Type a part like wheels and see what UP GARAGE Japan charges for used stock today. You get the typical price and range in yen for each condition grade, how many parts that is, the share that are genuine OEM, and which shops hold them. $0.02 per search, no results = no charge. Unofficial.

- **URL**: https://apify.com/jpmarketdata/upgarage-japan-used-parts-checker.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 search analyzeds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## UP GARAGE Japan Used Car Parts — Price by Condition

> **Unofficial** — independent tool, **not affiliated with, endorsed by, or sponsored by UP GARAGE**. It reads only publicly visible pages. Support, reliability guarantees and the full disclaimer are at the bottom of this page.

**What it does:** Type a part like `ホイール` and get what UP GARAGE Japan's used stock costs today, split by the shop's own six condition grades.

**You enter:** A part, maker or product word, and optionally the car it has to fit. Example: `ホイール` fitting a `NISSAN` `SKYLINE`.

**You get:** One row — parts in stock, typical price and lowest–highest in yen, the same for each of the six grades from junk to new with how much dearer each is than a used one, the share that are genuine OEM, the share the shop still flags as newly arrived, which branches hold the stock, and the PCD, diameter, rim width and offset mix behind the wheels. First 120 parts a page.

**Price:** $0.02 per run. No results = no charge. +$0.002 per part row if you also want the list of individual parts (off by default).

**Example:** enter `ホイール` fitting a `NISSAN SKYLINE` → 486 parts · typical ¥87,890 · junk ¥36,190 → used ¥54,890 / ¥87,890 / ¥109,890 → unused ¥131,890 → new ¥329,890 · 39% genuine OEM · 3.7% newly arrived · 56 branches (real run, 2026-09-10)

> Unofficial — not affiliated with UP GARAGE. Reads public pages only.

### Why the grade split is the point

UP GARAGE grades every part it takes in and lets you search on that grade. So the split below is not someone squinting at photographs — it is the shop's own count and the shop's own prices for each grade, read from six searches instead of one.

| Code | The shop's word | What it means |
|---|---|---|
| 00 | junk | Sold as-is, not guaranteed to work |
| 10 | used | The lowest of three used grades |
| 20 | used | The middle of three used grades |
| 30 | used | The highest of three used grades |
| 40 | unused | Never fitted |
| 50 | new | New |

The shop's own front end prints one word, `used`, for all three of 10, 20 and 30 — so the word cannot tell them apart and the description in each row does. What separates them in practice is the price: on the run below, ¥54,890 → ¥87,890 → ¥109,890, a 2.0x step across the used band alone and 9.1x from junk to new.

`premiumVsUsedMid` compares each grade's typical price with grade 20, the middle used grade and the biggest one on the shelf: `2.7534` means new is 275% above it, `-0.5882` means junk is 59% below it. When grade 20 has no stock at all, every `premiumVsUsedMid` in the row is left empty rather than quietly re-based on some other grade.

Thin grades can look strange and are reported as they are: in the run below, junk is six parts. Six parts are not a market, and `parts` next to the median says so.

### Output

One row per run, plus one row per part when the part list is on.

`Measured on 2026-09-10 (real run, searchWord "ホイール", NISSAN SKYLINE)`

```json
{
  "type": "used_parts_price_summary",
  "searchWord": "ホイール",
  "vehicleMaker": "NISSAN",
  "vehicle": "NISSAN SKYLINE",
  "conditionGrades": [],
  "shopPrefectures": [],
  "status": "ok",
  "totalParts": 486,
  "partsRead": 120,
  "pagesRead": 1,
  "priceJpy": {
    "min": 1430, "p25": 52140, "median": 87890,
    "p75": 178640, "max": 571890, "average": 142962
  },
  "priceBasis": "sample",
  "partsWithPrice": 120,
  "byCondition": [
    {"code": "00", "label": "junk",
     "labelEnglish": "Junk — sold as-is, not guaranteed to work",
     "parts": 6, "partsRead": 6,
     "min": 19690, "median": 36190, "max": 50490,
     "premiumVsUsedMid": -0.5882, "priceBasis": "exact"},
    {"code": "10", "label": "used",
     "labelEnglish": "Used, the lowest of three used grades",
     "parts": 90, "partsRead": 90,
     "min": 2200, "median": 54890, "max": 292490,
     "premiumVsUsedMid": -0.3755, "priceBasis": "exact"},
    {"code": "20", "label": "used",
     "labelEnglish": "Used, the middle of three used grades",
     "parts": 248, "partsRead": 120,
     "min": 1430, "median": 87890, "max": 549890,
     "premiumVsUsedMid": 0.0, "priceBasis": "sample"},
    {"code": "30", "label": "used",
     "labelEnglish": "Used, the highest of three used grades",
     "parts": 83, "partsRead": 83,
     "min": 2200, "median": 109890, "max": 725890,
     "premiumVsUsedMid": 0.2503, "priceBasis": "exact"},
    {"code": "40", "label": "unused",
     "labelEnglish": "Unused — never fitted",
     "parts": 16, "partsRead": 16,
     "min": 5489, "median": 131890, "max": 373890,
     "premiumVsUsedMid": 0.5006, "priceBasis": "exact"},
    {"code": "50", "label": "new", "labelEnglish": "New",
     "parts": 43, "partsRead": 43,
     "min": 17490, "median": 329890, "max": 615890,
     "premiumVsUsedMid": 2.7534, "priceBasis": "exact"}
  ],
  "partsFromConditionSearches": 486,
  "conditionPartsCheck": "ok",
  "genuineParts": 47,
  "genuineShare": 0.3917,
  "auctionParts": 0,
  "auctionShare": 0.0,
  "stockFreshness": {
    "newArrivalParts": 18, "newArrivalRate": 0.037,
    "totalParts": 486, "listingDatePublished": false
  },
  "shopBreakdown": [
    {"shopName": "アップガレージ 横浜町田総本店", "parts": 18},
    {"shopName": "アップガレージ 栃木下野店", "parts": 5}
  ],
  "shopsWithParts": 56,
  "wheelSpecCoverage": 0.9417,
  "wheelSpecs": {
    "partsWithWheelSpec": 113,
    "pcd": [{"value": "114.3-5H", "parts": 112}, {"value": "114.3-4H", "parts": 1}],
    "pcdValues": 2,
    "diameterInches": [{"value": 18, "parts": 47}, {"value": 17, "parts": 22}],
    "diameterValues": 6,
    "rimWidthJ": [{"value": 8, "parts": 21}, {"value": 8.5, "parts": 20}],
    "rimWidthValues": 9,
    "offsetMm": [{"value": 30, "parts": 24}, {"value": 45, "parts": 17}],
    "offsetValues": 21,
    "wheelsPerSet": [{"value": 4, "parts": 102}, {"value": 2, "parts": 10}],
    "wheelsPerSetValues": 3
  },
  "filterCheck": {
    "verdict": "narrowed",
    "partsFound": 486,
    "partsOnTheWholeSite": 806329,
    "shareOfWholeSite": 0.0006,
    "vehicleFilter": "applied",
    "partsBeforeVehicleFilter": 110499
  },
  "hint": null,
  "sourceUrls": ["https://www.upgarage.com/en/ec/search/?search_word=%E3%83%9B%E3%82%A4%E3%83%BC%E3%83%AB&dd_bunrui_cd=01&compatible_vehicle_maker_id=2&compatible_vehicle_id=2041"],
  "requestsUsed": 10,
  "fetchedAt": "2026-09-10T04:27:22.960509+00:00"
}
```

One part row, returned only when **Also list every individual part** is on, at $0.002 each:

`Measured on 2026-09-10 (real run, searchWord "ホイール", NISSAN SKYLINE)`

```json
{
  "type": "part",
  "searchWord": "ホイール",
  "fitsVehicle": "NISSAN SKYLINE",
  "partId": "24723773",
  "name": "日産 スカイラインV36系 純正17インチアルミホイール+YOKOHAMA ADVAN FLEVA",
  "conditionCode": "20",
  "conditionLabel": "used",
  "conditionDescription": "Used, the middle of three used grades",
  "priceJpy": 35090,
  "priceExcludingTaxJpy": 31900,
  "isGenuinePart": true,
  "isNewArrival": true,
  "isAuction": false,
  "bidCount": null,
  "auctionEndsAt": null,
  "manufactureYear": "2023",
  "categoryPath": ["四輪", "タイヤホイール", "タイヤホイールセット", "17インチタイヤホイールセット"],
  "wheelPcd": "114.3-5H",
  "wheelDiameterInches": 17,
  "wheelRimWidthJ": 7.5,
  "wheelOffsetMm": 45,
  "wheelsInSet": 4,
  "shopName": "アップガレージ 横浜戸塚店",
  "url": "https://www.upgarage.com/en/ec/item/24723773/"
}
```

### What the numbers are measured over

- **Prices are tax-included asking prices.** There are no sold prices anywhere on this site, so nothing here says what a part actually sold for. Auction listings are in the same distribution, priced at their buy-it-now figure, and `auctionShare` says how many of them there were.
- **`priceBasis`** says `exact` when every part behind the search was read and `sample` when the page setting stopped it short. It matters, and it moves the number: the run above read 120 of 486 parts. Each grade carries its own `priceBasis` too — five of the six grades above are `exact`, because the shop's grades are small enough to read whole even when the search is not.
- **The grade counts are always exact.** They come from the shop's own six searches, not from sorting the rows, so `parts` per grade is the whole grade however few rows were read.
- **`genuineShare`** is the share of the parts read that UP GARAGE marks as genuine OEM rather than aftermarket.
- **Wheel figures** are read from both blocks that carry them — a bare wheel and a wheel sold with tyres on it — and `wheelSpecCoverage` says what share of the parts read had any, because the same word returns wheels, tyres and exhausts together.
- **The search is narrowed by the car, not by the word alone.** Picking a maker restricts the search to four-wheel parts UP GARAGE lists as fitting that maker; picking a model narrows it further. Model names have to be ones the shop lists — type them the way it romanises them (`SKYLINE`, `X-Trail`), and a name it does not know stops the run and prints the maker's whole list.

### There is no days-on-shelf here, and that is not an omission

UP GARAGE publishes **no arrival or listing date anywhere**. Its API can *sort* by arrival date but returns no date value in any field, on the list or on the individual part. Any "days on the shelf" figure in this output would therefore be invented, so there is none, and `stockFreshness.listingDatePublished: false` says so in every row rather than leaving you to wonder whether this particular run missed it.

What you get instead is `newArrivalRate` — the share of the search the shop itself still flags as newly arrived. It is the shop's own count, from its own filter, not counted off the rows: this API returns newest first, so counting the flag on a partial read would give 100% every time. Measured 2026-09-10: 3,254 of 110,499 for `ホイール`, a true 2.9%, against the 100% a sampled count would have printed.

### Two checks that travel in every row

Both compare numbers the site produces independently, so a quiet change of shape shows up as a word rather than as a wrong price.

- **`conditionPartsCheck`** — the six grade searches added up against the unfiltered one. Every part carries exactly one condition code, so 6+90+248+83+16+43 has to equal 486. It agreed exactly on the run above. `not_checked` means not every grade was searched.
- **`filterCheck`** — did the filters actually filter? This site's API answers HTTP 200 and returns **all 806,329 parts** when it does not recognise a parameter name, and it silently ignores the fitment filter unless the category travels with it. Both were measured live on 2026-09-10, and both would look like a perfectly successful run. So every run compares its own count against the site total that came back in the same reply, and a run that asks for a car also reads the same search without the car. If either says the filter did nothing, the run **fails** — a number wrong by three orders of magnitude is worse than no number.

A `conditionPartsCheck` mismatch does not stop the run and does not hide either: both raw sums are in the row next to the verdict, and the run log says so.

### Cost and load

- Eight calls for a normal run: one covering the whole search, one per grade, and one for the new-arrival count. Adding a car costs one more for the fitment check and one for the model lookup; reading more pages costs one each, to a maximum of twelve. A search that finds nothing stops after the first call, and is not charged.
- Calls are **2.0 seconds apart and capped at 12 per run**, in code, with no input that can lower either, and **no call asks for more rows than the shop's own front end does** (120, where the API would allow 500). UP GARAGE's terms art. 12 forbids acts that impair the operation of the service and its systems — a load clause — so on this site the throttle is the substance of staying inside the rules. robots.txt is `User-agent: * / Disallow:` with no Crawl-delay, and nothing here reads a cart, an account or a member page.
- No login, no cookie, no browser, no proxy. 256 MB is enough.
- **No photographs or image links are returned.** UP GARAGE's disclaimer reserves copyright over documents, photographs, illustrations, images and video; prices, counts and quantiles are facts. Every row of the reply carries an image URL and this Actor drops all of them.
- The only party behind any of this data is a business: UP GARAGE's own terms define a seller here as an *出品事業者*, a listing business, so there are no private sellers, names or contact details anywhere in the output.

### If it stops working

There is no second way in. The whole catalogue lives behind one JSON endpoint on `www.upgarage.com`, and the human pages render entirely in the browser — `/ec/search/` serves 4.7 KB of empty shell with not one product in its HTML — so unlike the sibling used-goods tools there is nothing to fall back to. The old `croooober.com` host that used to serve this catalogue has been dead since UP GARAGE merged the two sites in April 2024 and is not read here. Every failure message says all of that by name, so nobody spends an hour hunting for a fallback that does not exist.

### If something goes wrong

- **Wrong number or a failed run?** Open a ticket on the **Issues** tab. I read every one and reply within 2 business days (Japan time).
- **You never get a fake "empty" result.** If the site can't be read, the run fails and says so.
- **No results = no charge.** You only pay for results you actually get.
- **Checked every week.** An automatic test runs this tool weekly; if the site changes, I fix it.
- **Public pages only.** No login, no personal data, and it goes easy on the site.

### More tools by the same author

- [BookOff Japan Used Manga, Books, CDs — Price & Stock](https://apify.com/jpmarketdata/bookoff-market-checker)
- [@cosme Japan Beauty Ranking — Top 50 Ratings & Prices](https://apify.com/jpmarketdata/cosme-beauty-market-checker)
- [Digimart Japan Used Guitar & Instrument Prices](https://apify.com/jpmarketdata/digimart-instrument-market-checker)
- [Fujiya Camera Japan Used Camera Prices by Condition](https://apify.com/jpmarketdata/fujiya-camera-market-checker)
- [GU Japan Prices — Typical Price and Markdown Share](https://apify.com/jpmarketdata/gu-japan-price-checker)
- [HobbyLink Japan Gunpla & Figure Prices + Stock Status](https://apify.com/jpmarketdata/hlj-hobby-market-checker)
- [Hobby Search Japan Prices — What's In Stock and % Off](https://apify.com/jpmarketdata/hobbysearch-japan-stock-price-checker)
- [Iosys Japan Used iPhone & Phone Prices by Condition](https://apify.com/jpmarketdata/iosys-phone-market-checker)
- [Mercari Japan Sold Prices — What Items Really Sell For](https://apify.com/jpmarketdata/mercari-japan-price-checker)
- [Yahoo! Auctions Japan Sold Prices — Median, Range, Bids](https://apify.com/jpmarketdata/yahoo-auction-sold-comps)

All tools (Japan marketplaces, real estate, jobs, racing, prediction markets): <https://apify.com/jpmarketdata>

### Disclaimer

Unofficial, independent tool — **not affiliated with, endorsed by, or sponsored by UP GARAGE**. Product names and logos belong to their owners and only say where the data comes from. Data is read from public pages, for market research; check before you act on it.

# Actor input Schema

## `searchWord` (type: `string`):

What to look for in UP GARAGE's stock. The catalogue is indexed in Japanese, so a Japanese part word finds far more than an English one — `ホイール` (wheel), `マフラー` (exhaust), `エアロ` (body kit) — while maker and product names work as printed: `RAYS`, `BBS`, `RECARO`, `BLITZ`. Everything in the run is measured over the stock this word finds, so a narrower word gives a tighter typical price and a wider one covers more of the shelf. One run is one search and costs a flat $0.02; a search that finds nothing is not charged.

## `vehicleMaker` (type: `string`):

Leave empty to cover every car and every motorcycle part. Picking a maker keeps only the parts UP GARAGE lists as fitting that maker's cars, which also drops motorcycle, bicycle and tool stock, so every count and price below covers that maker alone: `ホイール` went from 110,629 parts to 5,964 for Nissan (measured 2026-09-10). It does not change what you are charged.

## `vehicle` (type: `string`):

Leave empty to cover the whole maker. Filling it needs the maker above as well, and the model has to be one UP GARAGE lists: type it the way it romanises the name — `SKYLINE`, `X-Trail`, `SUPRA`, `ROADSTER`. Spaces, hyphens and capitals do not matter. A model it does not know stops the run and prints the maker's whole list, instead of quietly dropping the car and pricing every part that matches the word: `ホイール` for a Nissan Skyline is 486 parts against 110,629 without it. It does not change what you are charged.

## `conditionGrades` (type: `array`):

Leave empty for all six, which is what the grade-by-grade table is for. Picking some keeps only those grades, so the counts, the typical price and the table all cover the grades you picked. It does not change what you are charged, but it does make the run shorter, because each grade is looked up separately.

## `shopPrefectures` (type: `array`):

Leave empty for every UP GARAGE branch in Japan. Picking prefectures keeps only the parts held by branches there, which matters if the buyer has to collect or wants one shipment: `ホイール` was 5,422 parts in Tokyo and 2,228 in Osaka out of 110,629 nationwide (measured 2026-09-10). It does not change what you are charged.

## `includeListings` (type: `boolean`):

Off by default: a run costs a flat $0.02 for the summary. Turn it on to also get one row per part (name, price in yen with tax, condition grade, genuine or aftermarket, auction or fixed price, wheel PCD / diameter / rim width / offset, holding branch, link) at +$0.002 per row. The rows are the parts already read for the summary, so this adds rows, not waiting — capped by the pages setting below at 120 a page. No photographs or image links are returned.

## `maxPages` (type: `integer`):

How much of the shelf the typical price covers, 120 parts a page. `priceBasis` says `exact` when every part behind the search was read and `sample` when this cut it short — and short moves the typical price, so check it before quoting one. It also caps the rows charged at $0.002 each when the part list above is on: 120 rows a page, 360 at 3 pages. The grade-by-grade counts are the shop's own and are exact either way.

## Actor input object example

```json
{
  "searchWord": "ホイール",
  "vehicleMaker": "NISSAN",
  "vehicle": "SKYLINE",
  "conditionGrades": [],
  "shopPrefectures": [],
  "includeListings": false,
  "maxPages": 1
}
```

# Actor output Schema

## `usedPartsPriceSummaries` (type: `string`):

One row per search with the typical price and range in yen, the same split by condition grade, how many parts sit behind each, the share that are genuine rather than aftermarket, and which shops hold them.

# 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 = {
    "searchWord": "ホイール",
    "vehicleMaker": "NISSAN",
    "vehicle": "SKYLINE",
    "conditionGrades": [],
    "shopPrefectures": [],
    "includeListings": false,
    "maxPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/upgarage-japan-used-parts-checker").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 = {
    "searchWord": "ホイール",
    "vehicleMaker": "NISSAN",
    "vehicle": "SKYLINE",
    "conditionGrades": [],
    "shopPrefectures": [],
    "includeListings": False,
    "maxPages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/upgarage-japan-used-parts-checker").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 '{
  "searchWord": "ホイール",
  "vehicleMaker": "NISSAN",
  "vehicle": "SKYLINE",
  "conditionGrades": [],
  "shopPrefectures": [],
  "includeListings": false,
  "maxPages": 1
}' |
apify call jpmarketdata/upgarage-japan-used-parts-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpmarketdata/upgarage-japan-used-parts-checker"
        }
    }
}
```

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/PsjKnCbNcXCQFmxWr/builds/mzmBD02MIT3gzC8x7/openapi.json
