# Japan Real Estate (suumo.jp) (`jpopendata/japan-real-estate-suumo`) Actor

Japanese rental & for-sale property listings from suumo.jp — rent/sale price, layout, floor area, building age, stations and per-m²/tsubo analytics by prefecture/city, English schema, privacy-safe addresses. Unofficial; not affiliated with Recruit Co., Ltd.

- **URL**: https://apify.com/jpopendata/japan-real-estate-suumo.md
- **Developed by:** [JP Open Data](https://apify.com/jpopendata) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 per records

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

## Japan Real Estate (suumo.jp)

**Japanese rental and for-sale property listings — rent/sale prices, layouts, floor areas, building age, nearest stations and per-m²/per-tsubo analytics — from suumo.jp, Japan's largest real-estate portal, in a clean English schema.**

This Actor searches suumo.jp's public listings by mode (rent 賃貸 / used condo 中古マンション / used house 中古一戸建て / land 土地), prefecture and city, and returns each listing as English-schema JSON: property name, monthly rent or total sale price in JPY (with an explicit `priceType` unit field), management fee, deposit (敷金) and key money (礼金) for rentals, floor plan, exclusive/land area in m², building age and built year, floor and total floors, town-level address, nearest stations with walking minutes, the listing agency's business name, and analysis fields (`pricePerSqm`, `pricePerTsubo`) computed on every record. Optional client-side filters narrow by price window, minimum layout (e.g. 1LDK+) and maximum building age.

Japan's property market draws global investors — but SUUMO is Japanese-only and its layouts (1LDK), price units (万円) and age conventions (築年) are opaque to international tooling. This Actor is the bridge: one English schema across renting and buying, with the per-area price metrics analysts actually compare.

> **Unofficial tool.** Not affiliated with or endorsed by Recruit Co., Ltd. or SUUMO. It collects **publicly available data only** (no login, no paywall), politely (strictly serial requests, ≥1.2 s apart, hard per-run budget, no block evasion), and extracts **factual data only** — property facts and agency business identity; no listing ad-copy, no review content, no phone numbers, no personal data of any kind (relevant e.g. under GDPR: no personal data is collected or processed). **Addresses are structurally truncated to town/chōme level** — street numbers and room numbers are never emitted, because vacancy status plus a precise address can identify residents. Users are responsible for ensuring their own use of the data complies with the source site's terms and applicable law.

***

### Quick start — verified input

Copy-paste this into the Actor's input (JSON tab) or pass it via API — it was run successfully on 2026-09-02 (10 rental units in Shinjuku-ku, Tokyo, list data, ~15 seconds):

```json
{
  "mode": "rent",
  "prefecture": "Tokyo",
  "area": "新宿区",
  "maxItems": 10
}
```

#### Common input mistakes

| Wrong | Right | Why |
|---|---|---|
| `"prefecture": "Tokyo-to"` / `"Yokohama"` / `"Shinjuku"` | `"prefecture": "Tokyo"` / `"Kanagawa"` / `"Tokyo"` + `"area": "新宿区"` | `prefecture` must be one of the 47 prefectures (English name, dropdown). Cities and wards go in `area`. |
| `"prefecture": "東京都"` or `"13"` (via API) | `"prefecture": "Tokyo"` | The platform checks the 47 English names before the run starts; other spellings are rejected with the valid list. |
| `"area": "Tokyo"` | leave `area` empty | `area` is one city/ward of the prefecture, not the prefecture. An unknown city stops the run with the full city list. |
| `"mode": "rent", "priceMax": 15` | `"mode": "rent", "priceMax": 150000` | Rent prices are JPY per month; 万円 units apply to buy modes only (the run warns on suspiciously small rent values). |
| `"mode": "buy_mansion", "priceMax": 50000000` | `"mode": "buy_mansion", "priceMax": 5000` | Buy prices are in 万円 (10,000 JPY units): 5000 = ¥50,000,000. |
| `"layoutMin": "one bedroom"` | `"layoutMin": "1LDK"` | A digit followed by K / DK / LDK (or ワンルーム / 1R). |

Every invalid value stops the run **immediately** (before any upstream request) with a message that names the field and lists the valid values. Fields with a fixed list of values are validated by the Apify platform before the run even starts.

#### Empty results?

A run that finishes with `items: 0` and `complete: true` is not an error. Typical causes: a price window in the wrong unit (rent = JPY/month, buy = 万円), a `layoutMin` / `ageMax` combination that no listing in the chosen city satisfies, or a small `maxApiRequests` with tight filters (filtering is client-side — raise the budget). Widen the query and re-run.

***

### Who is this for?

- **International property investors & analysts** — screen Japanese rental yields and sale prices by city with per-m²/per-tsubo metrics, across renting AND buying in one schema.
- **Market research & PropTech** — rent levels by layout and age band, condo price distributions, station-distance effects; a live public-listing complement to official transaction statistics.
- **Relocation & expat services** — feed live Japanese rental inventory (deposit/key-money included) into English-language tooling.
- **Data teams** — a stable English schema over a Japanese-only source, with explicit units everywhere.

### Sample output (dataset item)

```json
{
  "propertyName": "マンションヴィップ四谷",
  "mode": "buy_mansion",
  "priceJpy": 27980000,
  "priceType": "sale_total",
  "managementFeeJpy": null,
  "depositJpy": null,
  "keyMoneyJpy": null,
  "layout": "ワンルーム",
  "areaSqm": 31.69,
  "landAreaSqm": null,
  "buildingAgeYears": 50,
  "builtYear": 1976,
  "floor": null,
  "totalFloors": null,
  "buildingType": "中古マンション",
  "address": "東京都新宿区片町",
  "prefecture": "東京都",
  "prefectureEn": "Tokyo",
  "prefectureCode": "13",
  "nearestStations": [
    { "line": "都営新宿線", "station": "曙橋", "walkMinutes": 2 }
  ],
  "pricePerSqm": 882928,
  "pricePerTsubo": 2918771,
  "agencyName": "東京テアトル(株)",
  "url": "https://suumo.jp/ms/chuko/tokyo/sc_shinjuku/nc_21130098/",
  "detailFetched": false,
  "source": "SUUMO (suumo.jp)",
  "sourceUrl": "https://suumo.jp/",
  "license": "Publicly available data — unofficial tool; users are responsible for compliance with the source site's terms",
  "retrievedAt": "2026-08-25T13:10:00Z"
}
```

Rent-mode records fill `managementFeeJpy`, `depositJpy`, `keyMoneyJpy`, `floor`, `totalFloors` and set `priceType: "monthly_rent"`.

### Input reference

```json
{
  "mode": "rent",
  "prefecture": "Tokyo",
  "area": "新宿区",
  "priceMax": 150000,
  "layoutMin": "1LDK",
  "ageMax": 15,
  "maxItems": 100,
  "maxApiRequests": 60
}
```

- **mode** (default `rent`): `rent` / `buy_mansion` / `buy_house` / `buy_land` (dropdown; via API `rental`, `condo`, `house`, `land` and the Japanese labels are accepted too).
- **prefecture** (required): English name of one of the 47 prefectures exactly as in the dropdown (`"Tokyo"`, `"Osaka"` …). The Apify platform validates this list before the run starts, so `"東京都"`, `"13"` or `"tokyo-to"` are rejected immediately with the list of valid values. Cities are not prefectures — `"Yokohama"` is rejected; use `"Kanagawa"` + `"area": "横浜市西区"`.
- **area** (optional): one city/ward — Japanese name (`新宿区`), the romaji part of the slug (`shinjuku`) or the slug (`sc_shinjuku`); an unknown value stops the run with the prefecture's full city list. Leave empty to crawl all cities.
- **priceMin / priceMax** (optional): **units switch by mode** — JPY/month for `rent` (150000 = ¥150,000/month), 万円 for buy modes (5000 = ¥50,000,000).
- **layoutMin** (optional): `1K`, `1LDK`, `2DK`, `3LDK` … · **ageMax** (optional): whole years.
- **detailFetch** (rent only, default false) / **maxItems** (default 10, max 10000) / **maxApiRequests** (default 30, max 60) / **proxyConfiguration** (default none).

### Pricing

Pay per result — see the pricing tab. A city query is typically hundreds to tens of thousands of listings upstream; `maxItems` caps what you take.

### FAQ

**Where does the data come from?**
Live from suumo.jp's public, login-free static list pages (and, for rentals with `detailFetch`, unit detail pages) at run time. Every record embeds the source, source URL, a license note, and the retrieval timestamp.

**Is this an official SUUMO / Recruit service?**
No. **Unofficial**, independently built and maintained, and **not affiliated with or endorsed by Recruit Co., Ltd.** It reads only publicly available pages.

**Why are addresses cut at the town level?**
Deliberately. SUUMO publishes some sale listings with street numbers; combined with vacancy status, a precise address can identify current residents or absent owners. The Actor structurally truncates every address to city + town/chōme (「東京都新宿区片町6-10」→「東京都新宿区片町」) and this is pinned by automated legal tests. Phone numbers, personal names and owner information are never extracted either — the only business identity emitted is the listing agency's company name.

**Are listing headlines/descriptions included?**
No. Agent ad-copy headlines (「◆諸費用抑えて購入可能◆…」), promotional prose and equipment sales text are **never extracted** — deliberately: marketing copy is the agent's creative content and stays on the source site. The output is strictly factual property data.

**Who is responsible for how the data is used?**
You are. The Actor collects publicly available factual data politely, but the legality of your specific use (redistribution, database rights, the source site's terms) is your responsibility as the user.

**Are prices accurate?**
Prices are what suumo.jp advertised at retrieval time. Listings turn over constantly — treat each run as a snapshot and re-run for fresh data.

**What about server load?**
Strictly serial requests, ≥1.2 s apart, ~30–100 listings per list page, one extra request per rental detail (opt-in), hard per-run request budget (max 60), exponential backoff, no CAPTCHA/login/block evasion. If suumo.jp changes its page format, the Actor stops with a clear error instead of silently mis-parsing; if it blocks persistently, the run fails visibly.

### Search terms this Actor answers

suumo scraper · suumo.jp scraper · japan real estate data · japan property listings api · tokyo apartment listings · japan rent data · japan condo prices · japanese housing market dataset · japan property market api · 不動産 データ · japan rental market english · buy apartment japan data · japan real estate investment data · tsubo price japan

### More Japan data Actors by the same developer

- **Japan Hotels & Ryokan Prices** — hotel/ryokan prices and facility facts from jalan.net.
- **Japan Used Cars (carsensor.net)** — used-vehicle listings with repair history and inspection status.
- **Japan Government Tenders & Awards** — tender notices and award results from the kkj.go.jp portal.
- **Japan Medical Facilities** — every registered hospital, clinic, dental clinic, and pharmacy (MHLW open data).
- **Japan Care Facilities** — long-term care providers across 35 service types (MHLW open data, CC BY).
- **Japan Government Subsidies & Grants** — open subsidy calls from the official jGrants API.
- **Japan Renewable Energy FIT/FIP Facilities** — METI-certified renewable installations, privacy-safe schema.
- **Japan Financial Licenses & Registrations** — FSA-licensed banks, securities firms, crypto exchanges and more.
- **Japan Construction & Real-Estate Licenses** — licensed contractors and brokers from MLIT's official register.
- **Japan Trade Statistics** — monthly import/export flows by HS code and partner country, from Japan Customs.

***

*Unofficial tool; not affiliated with Recruit Co., Ltd. Publicly available data only; users are responsible for compliance with the source site's terms and applicable law. No personal data is collected — addresses are truncated to town level by design.*

# Actor input Schema

## `mode` (type: `string`):

Optional, default rent. What to search: rent (賃貸 rental units), buy\_mansion (中古マンション used condos), buy\_house (中古一戸建て used houses) or buy\_land (土地 land lots). NOTE: price units switch with the mode (see priceMin / priceMax).

## `prefecture` (type: `string`):

REQUIRED. Choose one of the 47 prefectures by its English name (e.g. "Tokyo", "Osaka", "Kyoto"). Via API/CLI pass the English name exactly as listed (e.g. "Tokyo", not "東京都" / "13" / "tokyo-to" — the platform validates the list before the run starts and rejects anything else with the list of valid values). Cities are NOT prefectures: use "Kanagawa" for Yokohama, "Aichi" for Nagoya, "Osaka" for Osaka-shi. suumo.jp list pages are prefecture-scoped; narrow to one city/ward with area.

## `area` (type: `string`):

Optional. Leave empty to crawl ALL cities of the prefecture in order (recommended for a first run). To narrow to one city/ward: the Japanese name ("新宿区", "横浜市西区"), the romaji part of the suumo slug ("shinjuku") or the raw slug ("sc\_shinjuku"). Resolved against the prefecture's live city index; an unknown value stops the run with the list of all valid cities. Do NOT put a prefecture name here.

## `priceMin` (type: `integer`):

Optional. Lower price bound, applied client-side. UNIT SWITCHES BY MODE: for mode=rent this is JPY per month (50000 = ¥50,000/month); for buy modes it is 万円 = 10,000 JPY units (2000 = ¥20,000,000). Leave empty for no minimum.

## `priceMax` (type: `integer`):

Optional. Upper price bound, applied client-side. UNIT SWITCHES BY MODE: for mode=rent this is JPY per month (150000 = ¥150,000/month — NOT 15); for buy modes it is 万円 = 10,000 JPY units (5000 = ¥50,000,000). Leave empty for no maximum.

## `layoutMin` (type: `string`):

Optional. Minimum floor plan: ワンルーム / 1R, 1K, 1DK, 1LDK, 2K, 2DK, 2LDK, 3LDK … (a digit followed by K / DK / LDK). Listings with a smaller layout are filtered out client-side. Ignored for buy\_land. Any other form stops the run with the list of valid forms.

## `ageMax` (type: `integer`):

Optional. Maximum building age in whole years (築年数), e.g. 10 = built within the last 10 years. Applied client-side; listings without a published age are excluded when set. Leave empty for no limit.

## `detailFetch` (type: `boolean`):

Optional, default false. Rent mode only: when true, each unit costs one extra request but adds built year/month, structure, total units, refined building type and the handling agency's business name. Buy-mode list pages already carry every output field, so this flag is ignored for buy modes.

## `maxItems` (type: `integer`):

Optional, default 10. Stop after this many listing records (1..10000). A list page yields ~30-100 listings; with detailFetch (rent only) each record also needs one detail request, so raise maxApiRequests accordingly.

## `maxApiRequests` (type: `integer`):

Optional, default 30. Hard budget of HTTP requests to suumo.jp for this run (1 city-index page + list pages + 1 per rent detail when detailFetch is on). Requests are strictly serial with >= 1.2 s spacing. When the budget runs out the run still SUCCEEDS with the records collected so far and complete=false in RUN\_SUMMARY (not an error).

## `proxyConfiguration` (type: `object`):

Optional. Apify proxy settings. Default: no proxy (direct connection). Never used for rotation/evasion — one client identity per run. Set only if suumo.jp starts refusing the runtime IP (HTTP 403).

## Actor input object example

```json
{
  "mode": "rent",
  "prefecture": "Tokyo",
  "area": "新宿区",
  "layoutMin": "1LDK",
  "detailFetch": false,
  "maxItems": 10,
  "maxApiRequests": 30
}
```

# Actor output Schema

## `records` (type: `string`):

Structured rental / for-sale property records with source attribution (source, sourceUrl, license, retrievedAt) on every item.

# 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 = {
    "mode": "rent",
    "prefecture": "Tokyo",
    "maxItems": 10,
    "maxApiRequests": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpopendata/japan-real-estate-suumo").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 = {
    "mode": "rent",
    "prefecture": "Tokyo",
    "maxItems": 10,
    "maxApiRequests": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("jpopendata/japan-real-estate-suumo").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 '{
  "mode": "rent",
  "prefecture": "Tokyo",
  "maxItems": 10,
  "maxApiRequests": 30
}' |
apify call jpopendata/japan-real-estate-suumo --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpopendata/japan-real-estate-suumo"
        }
    }
}

```

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/QyFy1ad7LwnE4Q8AP/builds/WXYzFP13vD8uAp3OV/openapi.json
