# Sofmap Japan Used Prices — By Condition Rank S to E (`jpmarketdata/sofmap-japan-used-rank-price-checker`) Actor

Type a model like MacBook Pro and see what used stock costs at Sofmap Japan today, split by the shop's own condition rank S to E. You get the typical price and range in yen per rank, how many units that is, and how long it has been sitting. $0.02 per search, no results = no charge. Unofficial.

- **URL**: https://apify.com/jpmarketdata/sofmap-japan-used-rank-price-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

## Sofmap Japan Used Prices — By Condition Rank S to E

> **Unofficial** — independent tool, **not affiliated with, endorsed by, or sponsored by Sofmap or Ri-Colle**. 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 model like `MacBook Pro` and get what Sofmap Japan's used stock costs today, split by the shop's own condition rank S to E.

**You enter:** A model or part number, and one of 28 shop sections. Example: `MacBook Pro` in `Mac`.

**You get:** One row — units and products in stock, typical price and lowest–highest in yen, the same for every rank S/A/B/C/D/E with how much dearer each is than B, days on the shelf, share already marked down, mail-order against branch stock, and which branches hold it.

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

**Example:** enter `MacBook Pro` in section `Mac` → 314 units over 84 products · typical ¥98,480 · range ¥4,280–629,980 · rank A ¥159,480 against rank B ¥78,980 · median 9 days on the shelf · 40% already marked down · 13 branches (real run, 2026-09-10)

> Unofficial — not affiliated with Sofmap. Reads public pages only.

### Why the rank split is the point

Sofmap grades every used unit it sells 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.

| Rank | The shop's words | What it means |
|---|---|---|
| S | 未使用 | Unused |
| A | 美品 | Excellent — outside is clean |
| B | 良品 | Good — small marks, works fine |
| C | 並品 | Fair — visible marks, works fine |
| D | 難あり | Faulty — damaged, some functions affected |
| E | ジャンク | Junk — does not power on |

`premiumVsB` compares each rank's typical price with rank B, the shop's "good" grade: `1.0192` means the A-grade typical price is 102% above B's, `-0.4685` means C is 47% below it. When rank B has no stock at all, every `premiumVsB` in the row is left empty rather than quietly re-based on some other rank.

Thin ranks can look strange and are reported as they are: in the run below rank E is a single unit at ¥79,980, which is above the B median. One junk machine is not a market, and `units` next to it says so.

### Output

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

`Measured on 2026-09-10 (real run, keyword "MacBook Pro", section "mac")`

```json
{
  "type": "used_rank_price_summary",
  "keyword": "MacBook Pro",
  "category": "mac",
  "categoryLabel": "Mac",
  "maker": null,
  "status": "ok",
  "totalUnits": 314,
  "totalProducts": 84,
  "productsRead": 84,
  "pagesRead": 1,
  "priceTaxIncluded": {
    "min": 4280, "p25": 51355, "median": 98480,
    "p75": 248355, "max": 629980, "average": 158537
  },
  "priceBasis": "exact",
  "unitsFromProductRows": 314,
  "unitCountCheck": "ok",
  "unitsFromRankSearches": 314,
  "rankUnitsCheck": "ok",
  "byRank": [
    {"rank": "S", "label": "未使用", "labelEnglish": "Unused",
     "units": 92, "products": 14, "productsRead": 14,
     "min": 102980, "median": 279980, "max": 629980,
     "premiumVsB": 2.5449, "priceBasis": "exact"},
    {"rank": "A", "label": "美品", "labelEnglish": "Excellent",
     "units": 110, "products": 37, "productsRead": 37,
     "min": 6980, "median": 159480, "max": 614480,
     "premiumVsB": 1.0192, "priceBasis": "exact"},
    {"rank": "B", "label": "良品", "labelEnglish": "Good",
     "units": 92, "products": 48, "productsRead": 48,
     "min": 6380, "median": 78980, "max": 359980,
     "premiumVsB": 0.0, "priceBasis": "exact"},
    {"rank": "C", "label": "並品", "labelEnglish": "Fair",
     "units": 11, "products": 9, "productsRead": 9,
     "min": 24980, "median": 41980, "max": 84980,
     "premiumVsB": -0.4685, "priceBasis": "exact"},
    {"rank": "D", "label": "難あり", "labelEnglish": "Faulty",
     "units": 8, "products": 7, "productsRead": 7,
     "min": 4280, "median": 16980, "max": 99980,
     "premiumVsB": -0.785, "priceBasis": "exact"},
    {"rank": "E", "label": "ジャンク", "labelEnglish": "Junk (does not power on)",
     "units": 1, "products": 1, "productsRead": 1,
     "min": 79980, "median": 79980, "max": 79980,
     "premiumVsB": 0.0127, "priceBasis": "exact"}
  ],
  "liquidity": {
    "daysOnShelf": {"min": 0, "p25": 2.0, "median": 9.0,
                    "p75": 32.2, "max": 364, "average": 26.2},
    "productsWithListingDate": 84,
    "listingDateCoverage": 1.0,
    "priceReductionRate": 0.4048,
    "newArrivalRate": 0.4643
  },
  "stockSplit": {"ec": 4, "shop": 310, "ecProducts": 2, "shopProducts": 82},
  "shopBreakdown": [
    {"shopCode": "198", "shopName": "Re Collection なんば店",
     "area": "西日本", "units": 86, "products": 13},
    {"shopCode": "258", "shopName": "AKIBA 駅前館",
     "area": "秋葉原", "units": 73, "products": 24}
  ],
  "makerOptions": ["Apple(アップル)"],
  "hint": null,
  "sourceUrls": ["https://used.sofmap.com/r/item?q=MacBook+Pro&categories1%5B%5D=mac"],
  "requestsUsed": 7,
  "fetchedAt": "2026-09-10T03:41:14.732286+00:00"
}
```

One product row, returned only when **Also list every used item** is on, at $0.002 each:

`Measured on 2026-09-10 (real run, keyword "MacBook Pro", section "mac")`

```json
{
  "type": "listing",
  "keyword": "MacBook Pro",
  "sku": "414145287",
  "jan": "2133064224803",
  "name": "Magic Mouse ブラック Multi-Touch対応 MMMQ3J／A",
  "maker": "Apple(アップル)",
  "ranks": ["A", "D"],
  "units": 3,
  "priceTaxIncludedMin": 4280,
  "priceTaxIncludedMax": 6980,
  "priceExcludingTaxMin": 3891,
  "priceExcludingTaxMax": 6346,
  "listedAt": "2026-09-08T11:21:07+09:00",
  "daysOnShelf": 2,
  "priceReducedAt": null,
  "isNewArrival": true,
  "stockType": "ec",
  "shopCode": "198",
  "shopName": "Re Collection なんば店",
  "conditionNote": "キー破損 1箇所。",
  "missingParts": "USB-C - Lightningケーブル",
  "url": "https://www.sofmap.com/product_detail.aspx?sku=414145287"
}
```

### What the numbers are measured over

- **Units against products.** `totalUnits` counts individual second-hand items on the shelf; `totalProducts` counts distinct products, because the shop groups identical units together. In the run above, 314 units are 84 products. A product row can hold several units at once (`units: 3`), and it can hold more than one rank (`ranks: ["A", "D"]`) — which is exactly why the per-rank figures come from six separate searches rather than from sorting one reply.
- **Prices are tax-included asking prices**, one per product: the cheapest unit of that product. There are no sold prices anywhere on this site, so nothing here says what anything actually sold for.
- **`priceBasis`** says `exact` when every product behind the search was read and `sample` when the page setting stopped it short. It matters: `iPhone 15` came out at ¥35,230 over the first 200 of its 353 products and ¥64,480 over all of them (measured 2026-09-10). Each rank carries its own `priceBasis` too.
- **`daysOnShelf`** counts days since the shop first listed the item. A product whose listing date is missing is left out entirely rather than counted as 0 days, and `listingDateCoverage` says what share of the products had one — it was 84 of 84 on 2026-09-10.
- **`priceReductionRate`** is the share of products the shop has already marked down at least once; **`newArrivalRate`** is the share it is still flagging as newly arrived.
- **`stockSplit`** separates the mail-order warehouse (`ec`) from branch shelves (`shop`), in units and in products. Branch stock means a trip or a phone call, so the split changes what the price is worth to you.

### 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.

- **`unitCountCheck`** — the shop's own unit count against the sum of the units in the rows it just sent. `ok` when they agree, `mismatch` when they do not, `not_checked` when the page setting stopped the read short (a short read is *supposed* to add up to less). They agreed on every search measured 2026-09-10: `MacBook Pro` 314, `ThinkPad` 385, `iPhone 15` 4,045, and the whole `Rice cookers, microwaves and ovens` section at 1,084.
- **`rankUnitsCheck`** — the six rank searches added up against the unfiltered one. Every unit carries exactly one rank, so 92+110+92+11+8+1 has to equal 314. This one still works when the read was cut short, because it uses only counts.

A `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

- Seven calls for a normal run: one covering the whole shelf, then one per rank. Reading more pages of the shelf costs one more each, to a maximum of nine. 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. Sofmap's terms of use art. 6(12) prohibit placing excessive load on the service, and art. 7(6) answers such load with rate limiting — so on this site the throttle is the substance of staying inside the rules, not a courtesy. Nothing here reads a cart, an account, a member page or a trade-in form, all of which the site's robots.txt puts off limits.
- No login, no cookie, no browser, no proxy. 256 MB is enough.
- The only person behind any of this data is the shop itself: Sofmap is the sole seller, so there are no private sellers, names or contact details anywhere in the output.

### If it stops working

The search this reads lives on `ec.sofmap.tyrellsys.com`, which belongs to the shop's search vendor rather than to Sofmap. It can be renamed or moved while `www.sofmap.com` stays perfectly healthy, so every failure message names that host and points at `used.sofmap.com/r/js/dist/search_result.js`, where the shop's own front end declares which host it is using. Sofmap also serves the same used list as a server-rendered fragment at `www.sofmap.com/product_list_parts.aspx`, which would survive that host disappearing; this version does not read it, and says so when it fails.

### 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 Sofmap or Ri-Colle**. 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

## `keyword` (type: `string`):

What to look for in Sofmap's used stock: a model name or a part number as printed, such as `MacBook Pro`, `ThinkPad X1` or `MMMQ3J`. Everything in the run is measured over the used 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.

## `category` (type: `string`):

Which of the shop's 28 used sections to look in. `all` searches every section; picking one drops items that merely share the word, which lowers the counts and can move the typical price a lot. If you change the model above, check this too — searching `ThinkPad` inside `Mac` finds nothing. It does not change what you are charged.

## `maker` (type: `string`):

Leave empty for every maker. Filling it keeps only that maker's used stock, so every count and price covers that maker alone. It has to be spelled the shop's way, Japanese brackets included: `Apple(アップル)` works, `Apple` returns nothing. Every spelling the shop uses for your search comes back in `makerOptions`, so an empty first run tells you what to type. 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 used product (name, maker, condition ranks it holds, units, price in yen with tax, listing day, days on the shelf, markdown date, branch, condition note, link) at +$0.002 per row. The rows are the products already read for the summary, so this adds rows, not waiting — capped by the pages setting below.

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

How much of the shelf the summary covers, 200 products a page. `priceBasis` says `exact` when every product was read and `sample` when this cut it short — and short moves the typical price: `iPhone 15` came out at ¥35,230 over the first 200 of its 353 products and ¥64,480 over all. It also caps the rows charged at $0.002 each when the list above is on: 200 rows a page, 600 at 3 pages.

## Actor input object example

```json
{
  "keyword": "MacBook Pro",
  "category": "mac",
  "maker": "",
  "includeListings": false,
  "maxPages": 1
}
```

# Actor output Schema

## `usedRankPriceSummaries` (type: `string`):

One row per search with the typical price and range in yen, the same split by condition rank S to E, how many units and products sit behind each, how long the stock has been listed and how much of it is already marked down.

# 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 = {
    "keyword": "MacBook Pro",
    "category": "mac",
    "maker": "",
    "includeListings": false,
    "maxPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/sofmap-japan-used-rank-price-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 = {
    "keyword": "MacBook Pro",
    "category": "mac",
    "maker": "",
    "includeListings": False,
    "maxPages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/sofmap-japan-used-rank-price-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 '{
  "keyword": "MacBook Pro",
  "category": "mac",
  "maker": "",
  "includeListings": false,
  "maxPages": 1
}' |
apify call jpmarketdata/sofmap-japan-used-rank-price-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpmarketdata/sofmap-japan-used-rank-price-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/W1v0S6OzcGOWYddbu/builds/YytLbgzcgSMEdrPTA/openapi.json
