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

***

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

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

`prefecture` is required (JIS code, Japanese or English name). `area` is optional — a Japanese city/ward name, romaji, or a suumo slug like `sc_shinjuku`; leave it empty to crawl the whole prefecture city by city. **Price units switch by mode**: JPY/month for `rent` (150000 = ¥150,000/month), 万円 for buy modes (5000 = ¥50,000,000). `layoutMin` and `ageMax` filter client-side.

### 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`):

What to search: "rent" (賃貸 rental units), "buy\_mansion" (中古マンション used condos), "buy\_house" (中古一戸建て used houses) or "buy\_land" (土地 land lots).

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

REQUIRED. Prefecture to search: JIS code ("13"), Japanese ("東京都") or English ("Tokyo"). suumo.jp static list pages are prefecture-scoped.

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

Optional city scope: Japanese name ("新宿区", "横浜市西区"), romaji ("shinjuku") or a raw suumo slug ("sc\_shinjuku"). Resolved against the prefecture's live city index; an unknown value fails loudly listing all valid cities. Leave empty to crawl all cities of the prefecture in order.

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

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

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

Optional upper price bound, applied client-side. UNIT SWITCHES BY MODE: for mode=rent this is JPY per month (e.g. 150000 = ¥150,000/month); for buy modes this is 万円 = 10,000 JPY units (e.g. 5000 = ¥50,000,000).

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

Optional minimum floor plan, e.g. "1K", "1LDK", "2DK", "3LDK" — listings with a smaller layout are filtered out client-side (ワンルーム < 1K < 1DK < 1LDK < 2K < …). Ignored for land.

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

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

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

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. Default false (cheaper).

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

Stop after this many dataset records.

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

Hard budget of HTTP requests to suumo.jp for this run (1 city-index page + list pages of ~30-100 listings + 1 per rent detail when detailFetch is on). Requests are strictly serial with >= 1.2 s spacing. When the budget runs out the run completes with complete=false in RUN\_SUMMARY.

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

Apify proxy settings. Default: no proxy. Never used for rotation/evasion — one client identity per run.

## 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
};

// 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,
}

# 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
}' |
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/T2ohn7SkwGSEsmnh3/openapi.json
