# UNIQLO Japan Prices — Typical Price and Markdown Share (`jpmarketdata/uniqlo-japan-price-checker`) Actor

Type a keyword like heattech and get what UNIQLO Japan charges for it today. Returns the typical price and lowest–highest in yen, how many items are marked down, how many were found, and the men/women/kids mix. $0.02 per keyword, no results = no charge. Unofficial.

- **URL**: https://apify.com/jpmarketdata/uniqlo-japan-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 keyword price summaries

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

## UNIQLO Japan Prices — Typical Price and Markdown Share

> **Unofficial** — independent tool, **not affiliated with, endorsed by, or sponsored by UNIQLO**. 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 word like `heattech` and get what UNIQLO Japan charges for it today — the typical price, the lowest–highest range, and how much of it is marked down.

**You enter:** one or more words, e.g. `ヒートテック` or `heattech`; or a whole category, e.g. `1072,1750,`.

**You get:** how many items UNIQLO Japan lists, the typical price and lowest–highest in yen and USD, how many are marked down, counts by price band, the men/women/kids mix of the items read, the rating, and UNIQLO's suggested words. Optional: one row per product.

**Price:** $0.02 per keyword — each word or category you enter is charged. +$0.002 per row if you also want the product list. No results = no charge.

**Example:** enter `ヒートテック` → 173 items found · typical ¥1,500, range ¥590–6,990 · 20 marked down (11.6%) · 61 items at ¥1,000 or less · women 39 / men 32 / kids 24 of the 100 read (real run, 2026-09-08)

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

### Pricing — $0.02 per keyword

| Event | Price | When |
|---|---|---|
| Keyword price summary | **$0.02** | Per keyword, and per category, analyzed |
| Individual listing | **$0.002** | Only if you turn on **Include individual listings** |

A default run (1 keyword, summary only) costs **$0.02** and takes about 4 seconds. You pay per keyword; there is no fixed monthly fee. **A keyword that returns zero listings is never charged**, and neither is a category that turns out to be empty. A run stops when it reaches the **$3.00 Maximum cost per run** — raise that in the run options, or split the run.

### Input

| Field | Example | Notes |
|---|---|---|
| `keywords` | `["ヒートテック"]` | Japanese and English both work — measured 2026-09-08, `ヒートテック` finds 173 items and `heattech` 153. Up to 10 per run, each charged $0.02 |
| `categoryPaths` | `["1072,1750,"]` | Optional. `genderId,classId,categoryId` — 1071 Women, 1072 Men, 1073 Kids, 1074 Baby. The class IDs come back in `categoryTree` on any keyword run. Each path is its own row, charged $0.02 |
| `maxItemsPerKeyword` | `100` | 10–300, read 100 at a time. Sets how many product rows you can get (+$0.002 each) and how many items the men/women/kids mix is counted over |
| `includeIndividualItems` | `false` | Turn on to also get one row per product (+$0.002 per row) |
| `convertToUsd` | `true` | Adds USD figures at the current exchange rate. A failed rate lookup never fails the run |

### Does a number cover every listing, or only the ones read?

Every record says so itself, so you never have to guess.

`totalListingsFound`, `markdownCount`, `markdownShare`, `priceBands`, `newArrivalCount`, `onlineOnlyCount`, `limitedStoreCount`, `flagCounts`, `ratingAverage` and `ratedItems` are **UNIQLO's own totals for the whole result**, not counts over a page. In the example below, 20 of all 173 items are marked down and 61 of all 173 cost ¥1,000 or less — reading 100 items did not change those numbers.

For the price ladder, `priceBasis` names the method:

| `priceBasis` | What it means |
|---|---|
| **`all_items`** | Every matching item was read. All six numbers, `average` included |
| **`rank_jump`** | UNIQLO's cheapest-first order holds across pages, so the item at rank 43 of 173 *is* the one a quarter of the way up. The five prices are read straight off the result; `average` stays empty because no single item carries it |
| **`price_bands`** | The five prices could not all be read, so the typical price is worked out inside UNIQLO's own price bands — exact at the band edges, straight-line inside a band |
| **`sample`** | Last resort: the numbers cover only the items read |

**Want `average` too?** Raise `maxItemsPerKeyword` above the number of items found (up to 300) and the record comes back as `all_items`, with the average filled in. For `ヒートテック` that is 200 — two requests instead of the three the default takes.

The one field that is always only a sample is `genderMix`, and `genderMixBasis` says so: UNIQLO publishes no gender totals, so the mix is counted over the items actually read (`sampledListings` tells you how many).

### When a keyword comes back empty

`keywordStatus` is `ok` as soon as UNIQLO returns items, `not_found` when it returns none, and `unknown` in the rare case where items exist but none of them is on sale yet. On anything but `ok`, `hint` names the next thing to try in one sentence (it is `null` otherwise). UNIQLO indexes its catalogue in both languages, so an English word that finds nothing is worth retrying in Japanese. **Nothing is charged for an empty answer.**

### Output example (`type: "price_summary"`)

Measured on 2026-09-08 (real run, `{"keywords": ["ヒートテック"], "maxItemsPerKeyword": 100, "includeIndividualItems": false}`). The whole record, nothing shortened — 3 requests, about 4 seconds.

```json
{
 "type": "price_summary",
 "keyword": "ヒートテック",
 "categoryPath": null,
 "keywordStatus": "ok",
 "totalListingsFound": 173,
 "sampledListings": 100,
 "uniqueProductsSampled": 97,
 "priceJpy": {"min": 590, "p25": 790, "median": 1500, "p75": 2990, "max": 6990, "average": null},
 "priceBasis": "rank_jump",
 "priceUsd": {"min": 3.82, "p25": 5.12, "median": 9.71, "p75": 19.36, "max": 45.27, "average": null},
 "exchangeRateJpyUsd": 0.006476,
 "sortUsed": "price_asc (sort=2)",
 "markdownCount": 20,
 "markdownShare": 0.1156,
 "newArrivalCount": 27,
 "onlineOnlyCount": 23,
 "limitedStoreCount": 37,
 "flagCounts": {"discount": 20, "colorSizeLimitedPrice": 7, "preSales": 6, "salesStart": 27, "newSKU": 17, "comingSoon": 10, "onlineOnly": 23, "limitedStore": 37, "extraLargeStoreOnly": 36, "unisex": 8},
 "priceBands": [
  {"upTo": 500, "count": 0},
  {"upTo": 1000, "count": 61},
  {"upTo": 2000, "count": 45},
  {"upTo": 3000, "count": 43},
  {"upTo": 4000, "count": 7},
  {"upTo": 5000, "count": 13},
  {"upTo": 6000, "count": 2},
  {"upTo": 7000, "count": 2},
  {"upTo": 8000, "count": 0},
  {"upTo": 9000, "count": 0},
  {"upTo": null, "count": 0}
 ],
 "genderMix": {"women": 39, "men": 32, "kids": 24, "baby": 1, "unisex": 4},
 "genderMixBasis": "sample",
 "ratingAverage": 4.24,
 "ratedItems": 112,
 "relatedKeywords": ["極暖ヒートテック", "超極暖ヒートテック", "ヒートテック靴下", "ヒートテックソックス", "極暖ヒートテックカシミヤブレンド", "ヒートテックタイツ"],
 "categoryTree": {
  "genders": [
   {"id": 1071, "name": "Women"},
   {"id": 1072, "name": "Men"},
   {"id": 1073, "name": "Kids"},
   {"id": 1074, "name": "Baby"}
  ],
  "classes": [
   {"id": 1480, "name": "Tシャツ・スウェット・フリース"},
   {"id": 1481, "name": "パンツ・ズボン"},
   {"id": 1483, "name": "インナー・下着・ブラトップ"},
   {"id": 1688, "name": "ルームウェア"},
   {"id": 1690, "name": "グッズ"},
   {"id": 97897, "name": "ヒートテック"},
   {"id": 94719, "name": "特別コレクション"},
   {"id": 1750, "name": "Tシャツ・スウェット・フリース"},
   {"id": 1751, "name": "パンツ・ズボン"},
   {"id": 1752, "name": "インナー・下着"},
   {"id": 1753, "name": "ルームウェア"},
   {"id": 1754, "name": "グッズ"},
   {"id": 97898, "name": "ヒートテック"},
   {"id": 95958, "name": "特別コレクション"},
   {"id": 149699, "name": "ガールズ"},
   {"id": 149700, "name": "ボーイズ・男女兼用"},
   {"id": 1961, "name": "インナー・下着"},
   {"id": 1963, "name": "グッズ"},
   {"id": 79773, "name": "エアリズム"},
   {"id": 97899, "name": "ヒートテック"},
   {"id": 2559, "name": "スポーツユーティリティウェア"},
   {"id": 2036, "name": "乳幼児服(6ヶ月～5歳)"}
  ]
 },
 "truncatedForTimeLimit": false,
 "hint": null,
 "sourceUrl": "https://www.uniqlo.com/jp/api/commerce/v5/ja/products?q=%E3%83%92%E3%83%BC%E3%83%88%E3%83%86%E3%83%83%E3%82%AF&limit=100&offset=0&sort=2&httpFailure=true",
 "checkedAt": "2026-09-08T12:30:53.657543+00:00"
}
```

`categoryTree` is there so you can go one level deeper without guessing: pick a gender ID and a class ID out of it and put `"1072,97898,"` in `categoryPaths` for Men's HEATTECH.

With **Include individual listings** on you also get one row per product, `type: "item"`: `productId`, `name`, `priceJpy`, `isMarkedDown`, `markdownSince`, `flags`, `gender`, `ratingAverage`, `ratingCount`, `colorCount`, `sizeCount` and `url`.

### What this Actor does not do

- **No discount percentage.** UNIQLO's listing pages do not carry the pre-markdown price — `promo` and `base` are the same number even on a marked-down item. So you get *whether* an item is marked down and *when the markdown started*, never "40% off"
- **No sold prices.** UNIQLO is a shop: these are the prices you would pay today, not what something sold for
- **No stock counts and no store availability.** UNIQLO publishes neither in its listings; `limitedStoreCount` only counts items UNIQLO itself labels as sold in some stores only
- **No pictures and no product descriptions.** Only the facts above and the link to the product page
- **No item rows by default.** The product is the summary; individual products are opt-in and separately priced
- **Nothing is stored.** Every run reads the site live; nothing is kept between runs
- **No personal data.** UNIQLO is a single retailer — there are no third-party sellers, and review text is never read

### Notes on the data

- **The item count is UNIQLO's own, and it is exact.** `totalListingsFound` is the number the site itself reports for the search. Measured 2026-09-08: 100 + 73 = 173 for `ヒートテック`, to the item
- **It counts listings, not products.** The same product appears once per gender it belongs to, so 100 listings on one page were only 97 distinct products. `uniqueProductsSampled` gives the second number, and product rows are counted once each — you are never billed twice for the same product
- **`markdownSince` is the time UNIQLO started the markdown**, converted to UTC. There is no end date on an open-ended markdown
- **Ratings come from UNIQLO's own breakdown of the whole result**, and UNIQLO groups them in half-star steps, so `ratingAverage` is the average over those steps. Items nobody has reviewed are left out — `ratedItems` says how many of the items found carry a rating at all (112 of 173 in the example)
- **`priceBands` counts items in each band** (¥1,000–2,000 held 45 items), rebuilt from the running totals UNIQLO publishes. The counts add up to `totalListingsFound`, and the last band with `"upTo": null` is everything above ¥9,000
- **`flagCounts` passes through every label UNIQLO returns**, including ones this tool does not name separately (`comingSoon`, `preSales`, `limitedOffer`…), so a new label never disappears quietly
- **`categoryTree.classes` is a flat list** — the same class name can appear under several genders with different IDs (`1480` is Women's tops, `1750` is Men's)
- The data is UTF-8 JSON from UNIQLO's own listing API; a page holds at most 100 items, so 300 items is 3 requests. Requests are spaced at least 1.5 s apart and a run carries a wall-clock budget; if it runs out, later keywords are read over fewer pages and their records carry `truncatedForTimeLimit: true`
- **A blocked read is never reported as an empty result.** If UNIQLO answers with anything other than its normal JSON — a waiting-room redirect during a big sale, an error body, a bad status — the run fails and names the status and the URL

### 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)
- [HobbyLink Japan Gunpla & Figure Prices + Stock Status](https://apify.com/jpmarketdata/hlj-hobby-market-checker)
- [Iosys Japan Used iPhone & Phone Prices by Condition](https://apify.com/jpmarketdata/iosys-phone-market-checker)
- [JACKROAD Japan Watch Prices — New, Used, Vintage, In Stock](https://apify.com/jpmarketdata/jackroad-watch-price-checker)
- [Kakaku.com Japan Lowest Prices — Shops, Rank, Rating](https://apify.com/jpmarketdata/kakaku-japan-price-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 UNIQLO**. 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

## `keywords` (type: `array`):

Words to look up on UNIQLO Japan. Japanese and English both work (measured 2026-09-08: `ヒートテック` finds 173 items, `heattech` 153). Each word gets its own summary row and is charged $0.02, and a word that finds nothing is not charged. Up to 10 per run. A run stops when it reaches the $3.00 Maximum cost per run — raise that in the run options, or split the run.

## `categoryPaths` (type: `array`):

Read a whole UNIQLO category instead of searching a word. Write it as `genderId,classId,categoryId`: gender is 1071 Women, 1072 Men, 1073 Kids, 1074 Baby, and the class IDs come back in `categoryTree` on any keyword run (`1072,1750,` = Men > tops, 246 items on 2026-09-08). Each path gets its own summary row and is charged $0.02, the same as a keyword.

## `maxItemsPerKeyword` (type: `integer`):

How many listings are read for each word, 100 at a time. It sets how many product rows you can get back (with the toggle below, at +$0.002 per row) and how many listings the men/women/kids mix is counted over. The typical price, the range and the marked-down count cover every matching listing whatever you put here — `priceBasis` in each row says how they were read.

## `includeIndividualItems` (type: `boolean`):

Off by default: a run costs a flat $0.02 per keyword summary. Turn it on to also get one row per product — name, price in yen, whether it is marked down and since when, colours, sizes, rating and the link — at +$0.002 per row. A product is charged once even when UNIQLO lists it under several genders.

## `convertToUsd` (type: `boolean`):

Adds USD figures next to the yen ones at the current exchange rate (open.er-api.com). A failed rate lookup never fails the run — the yen numbers come back on their own.

## Actor input object example

```json
{
  "keywords": [
    "ヒートテック"
  ],
  "categoryPaths": [],
  "maxItemsPerKeyword": 100,
  "includeIndividualItems": false,
  "convertToUsd": true
}
```

# Actor output Schema

## `priceSummaries` (type: `string`):

One row per keyword or category: how many items UNIQLO Japan lists, the typical price and the range in yen and USD, and how many of them are 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 = {
    "keywords": [
        "ヒートテック"
    ],
    "categoryPaths": [],
    "maxItemsPerKeyword": 100,
    "includeIndividualItems": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/uniqlo-japan-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 = {
    "keywords": ["ヒートテック"],
    "categoryPaths": [],
    "maxItemsPerKeyword": 100,
    "includeIndividualItems": False,
}

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/uniqlo-japan-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 '{
  "keywords": [
    "ヒートテック"
  ],
  "categoryPaths": [],
  "maxItemsPerKeyword": 100,
  "includeIndividualItems": false
}' |
apify call jpmarketdata/uniqlo-japan-price-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpmarketdata/uniqlo-japan-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/hLo5seUIaBWGDVnVN/builds/Mvxsxc3az1goXLk24/openapi.json
