# SUUMO Rental Scraper: Japan Apartment Listings & Rents (`bogdiehard/suumo-rental-scraper`) Actor

Extracts SUUMO rental listings in Japan by ward or city, one row per room: rent, fees, deposit, layout, area, floor, station walk time and building age. Public data only.

- **URL**: https://apify.com/bogdiehard/suumo-rental-scraper.md
- **Developed by:** [Demetrius Greses Jr](https://apify.com/bogdiehard) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## SUUMO Rental Scraper: Japan Apartment Listings & Rents

Extracts SUUMO rental listings for any Japanese ward or city, one row per room with rent, fees, deposit, key money, layout, floor area, floor, station walk time and building age, for proptech teams, rent-index analysts and relocation services.

### Use cases

- **Proptech and relocation services** build rental search pages and compare rents by station and walking time.
- **Rent-index and market analysts** track rent and fees by ward, layout and floor area, using the room rows and the site total in the run log.
- **Investors** screen whole-building leases (flagged with wholeBuilding) and small units, and compute rent per square metre from rentYen and areaM2.
- **Expat-housing services** list rooms within a set walk of a station, with the rent, deposit and key money a tenant pays up front.
- **Data teams** run the Actor on an Apify schedule to see new listings each day, using the room ID as the stable key.

### Sample output

Three rows from a real run on the Shinjuku ward page with the daily-test input (20 results). Full field names are in the dataset.

| id | buildingName | rentYen | layout | areaM2 | nearestStation |
| --- | --- | --- | --- | --- | --- |
| 000110344136 | ハウス白石 | 41000 | ワンルーム | 9 | 東京メトロ東西線/高田馬場駅 |
| 000106831051 | ハウス白石 | 55000 | ワンルーム | 14 | 東京メトロ東西線/高田馬場駅 |
| 000070351594 | JJハウス | 47000 | ワンルーム | 10.23 | 都営大江戸線/落合南長崎駅 |

One item as JSON (the first row; the gallery list is shortened with "…"):

```json
{
    "id": "000110344136",
    "propertyCode": "100530893061",
    "buildingName": "ハウス白石",
    "buildingType": "賃貸アパート",
    "address": "東京都新宿区高田馬場1",
    "prefecture": "tokyo",
    "ward": "shinjuku",
    "nearestStation": "東京メトロ東西線/高田馬場駅",
    "walkMinutes": 6,
    "stations": ["東京メトロ東西線/高田馬場駅 歩6分", "JR山手線/高田馬場駅 歩6分", "東京メトロ副都心線/西早稲田駅 歩7分"],
    "buildingAgeYears": 65,
    "buildingAgeText": "築65年",
    "storeysText": "2階建",
    "floor": 2,
    "floorText": "2階",
    "rentYen": 41000,
    "managementFeeYen": 7000,
    "depositYen": 0,
    "keyMoneyYen": 41000,
    "layout": "ワンルーム",
    "areaM2": 9,
    "wholeBuilding": false,
    "imageUrl": "https://img01.suumo.com/front/gazo/fr/bukken/061/100530893061/100530893061_go.jpg",
    "imageUrls": ["https://img01.suumo.com/front/gazo/fr/bukken/061/100530893061/…", "…"],
    "roomUrl": "https://suumo.jp/chintai/jnc_000110344136/",
    "sourceUrl": "https://suumo.jp/chintai/jnc_000110344136/",
    "scrapedAt": "2026-10-12T22:59:34.004Z"
}
```

### Pricing

**$4.00 per 1,000 results** (one result is one room). A 500-result run costs about $2.00. You pay only for results saved to your dataset, plus Apify's standard start fee of $0.00005 per run. Apify Silver and Gold plan users get lower per-result prices automatically.

Set **maxItems** (Max results) to cap what a run can cost. The Actor stops cleanly when it reaches your spending limit.

### Input

See the input tab for full configuration options.

| Field | Type | Description |
| --- | --- | --- |
| `startUrls` | array | Rental list pages such as https://suumo.jp/chintai/tokyo/sc_shinjuku/ (one ward or city), or a prefecture index such as https://suumo.jp/chintai/tokyo/ to read every ward and city in that prefecture. Sales, new-build, mobile and city pages, URLs with sc\[] filters and URLs on other sites are ignored. Required. A `?page=N` (1–240) in the URL is ignored and the Actor starts at page 1; URLs with `sort`, `snetid`, `cinm`, `rnTmp` or `rnekTmp` parameters are skipped (robots.txt). |
| `minRentManYen` | number | Lowest monthly rent in units of 10,000 yen: 8 means 80,000 yen. Optional. |
| `maxRentManYen` | number | Highest monthly rent in units of 10,000 yen. Optional. SUUMO accepts only its own rent steps (see the FAQ). |
| `minAreaM2` | number | Smallest floor area in square metres. Optional. |
| `maxAreaM2` | number | Largest floor area in square metres. Optional. |
| `sortBy` | string | `newest` (default), `cheapest` (rent plus management fee) or `recommended` (SUUMO's recommended order). |
| `maxPagesPerStart` | integer | Result pages to read for each start URL, 1 to 240, default 5. A page holds up to 50 buildings. |
| `maxItems` | integer | Maximum number of rooms to return. Default 100, maximum 100,000. You are charged per result. |
| `proxyConfiguration` | object | Apify datacenter proxy by default. |

Example input, the daily test:

```json
{
    "startUrls": [{ "url": "https://suumo.jp/chintai/tokyo/sc_shinjuku/" }],
    "maxItems": 20
}
```

Example input, filtered by rent and area, cheapest first:

```json
{
    "startUrls": [{ "url": "https://suumo.jp/chintai/tokyo/sc_shinjuku/" }],
    "maxRentManYen": 8,
    "minAreaM2": 30,
    "sortBy": "cheapest",
    "maxPagesPerStart": 3,
    "maxItems": 300
}
```

### Integrations

- **API:** run the Actor and fetch results with the [Apify API](https://docs.apify.com/api/v2) or the JavaScript and Python clients.
- **AI agents:** call it as a tool through the [Apify MCP server](https://mcp.apify.com).
- **No-code:** connect it to Make, Zapier or n8n, or export results straight to Google Sheets.
- **Scheduling:** run it daily or hourly with Apify Schedules and get only fresh listings.

### FAQ

**What are the limits?** SUUMO stops at page 240, so one start URL reaches at most 240 pages of 50 buildings, which is about 12,000 buildings or roughly 24,000 to 80,000 rooms depending on the sort order. The Actor reads two pages at a time and at most 30 pages per minute, and a page takes about 3 to 8 seconds. To cover more, add one start URL per ward or city, or narrow the rent and area filters. Listings change daily. SUUMO merges duplicate listings, so the room count can differ from the total SUUMO shows, which the run log records for each page.

**Why does the sort order change the number of rooms?** The sort order changes how many rooms each page holds. On 2026-10-12 the first 50-building page held 101 rooms in newest-first order and 345 rooms in recommended order. Use `recommended` when you want the widest coverage per page.

**Which rent values does SUUMO accept?** Only SUUMO's own rent steps. On 2026-10-12, 8 (80,000 yen) and 20 (200,000 yen) worked, while 1, 2 and 22.5 returned SUUMO's error page. The Actor then fails with a message about the filter values. Pick a value from the rent menu on the SUUMO search page.

**How do I find other ward and city slugs?** Open the prefecture index, for example https://suumo.jp/chintai/tokyo/, and copy the link of the area you need. The path ends in sc\_ followed by the slug. The Tokyo index lists these 50 slugs: `sc_setagaya` 世田谷区 · `sc_nerima` 練馬区 · `sc_suginami` 杉並区 · `sc_shinjuku` 新宿区 · `sc_minato` 港区 · `sc_nakano` 中野区 · `sc_toshima` 豊島区 · `sc_shibuya` 渋谷区 · `sc_chiyoda` 千代田区 · `sc_shinagawa` 品川区 · `sc_chuo` 中央区 · `sc_bunkyo` 文京区 · `sc_taito` 台東区 · `sc_sumida` 墨田区 · `sc_koto` 江東区 · `sc_arakawa` 荒川区 · `sc_adachi` 足立区 · `sc_katsushika` 葛飾区 · `sc_edogawa` 江戸川区 · `sc_meguro` 目黒区 · `sc_ota` 大田区 · `sc_kita` 北区 · `sc_itabashi` 板橋区 · `sc_hachioji` 八王子市 · `sc_tachikawa` 立川市 · `sc_musashino` 武蔵野市 · `sc_mitaka` 三鷹市 · `sc_ome` 青梅市 · `sc_fuchu` 府中市 · `sc_akishima` 昭島市 · `sc_chofu` 調布市 · `sc_machida` 町田市 · `sc_koganei` 小金井市 · `sc_kodaira` 小平市 · `sc_hino` 日野市 · `sc_higashimurayama` 東村山市 · `sc_kokubunji` 国分寺市 · `sc_kunitachi` 国立市 · `sc_fussa` 福生市 · `sc_komae` 狛江市 · `sc_higashiyamato` 東大和市 · `sc_kiyose` 清瀬市 · `sc_higashikurume` 東久留米市 · `sc_musashimurayama` 武蔵村山市 · `sc_tama` 多摩市 · `sc_inagi` 稲城市 · `sc_hamura` 羽村市 · `sc_akiruno` あきる野市 · `sc_nishitokyo` 西東京市 · `sc_nishitamagun` 西多摩郡. Use the prefecture index itself as the start URL to read all of them. Other prefectures use the same pattern with their lowercase English slug (for example tokyo); check that the index page opens first.

**How are money and floor values written?** Rent, management fee, deposit and key money are in yen. SUUMO's 万円 values are converted, so 22.5万円 becomes 225000. A dash means none and is returned as 0. A value SUUMO leaves out is null. managementFeeYen is monthly, while depositYen (敷金) and keyMoneyYen (礼金) are one-off amounts. A basement floor is negative (B1-1階 gives -1), and a duplex such as 5-6階 gives its lower floor (5).

**What is in the station fields?** stations holds every station line as SUUMO shows it. nearestStation is the first line without its walk time, and walkMinutes is the number from 歩N分. A line with only a bus time has walkMinutes null.

**Are whole-building leases included?** Yes. A 1棟 or 一棟 lease (in the building name, but not an estate number such as 第2棟), or 棟 in the layout, is kept and marked wholeBuilding: true.

**Why do some building names look wrong?** Building names are copied as SUUMO shows them. In a 1,000-room sample, about one room in five had a name that SUUMO filled with station, storey or age text, such as 西武新宿線 下落合駅 7階建 築19年. Group by address or by the room id rather than by name.

**Is this legal?** The Actor reads public rental list pages only, with no login, account cookies or CAPTCHA solving, and crawls at a polite rate. Rental list paths are not disallowed in SUUMO's robots.txt (checked 2026-10-12). Sales and new-build pages, which name sales staff, are out of scope and are never requested. The output holds property data only: no staff names, phone numbers or contact details. The Actor is not affiliated with, endorsed by or connected to SUUMO or Recruit Co., Ltd. You are responsible for how you use the data.

**Something broke or a field is missing?** Open an issue on the Actor's Issues tab. We answer within one business day and usually ship a fix within 48 hours.

### Related Actors

- [More Husena Actors](https://apify.com/bogdiehard) — other public-data scrapers from Husena LLC.

### Changelog

- **0.1** (2026-10-12) — First release: rental list pages by ward or city, prefecture index expansion, one row per room, yen money fields, floor area, station walk time, building age, whole-building flag, and rent, area and sort filters.

# Actor input Schema

## `startUrls` (type: `array`):

Rental list pages such as https://suumo.jp/chintai/tokyo/sc_shinjuku/ (one ward or city), or a prefecture index such as https://suumo.jp/chintai/tokyo/ to read every ward and city in that prefecture. Sales, new-build, mobile and city pages, URLs with sc\[] filters, URLs on other sites and room detail pages are ignored. Required. A page number in the URL (?page=N) is ignored: the Actor always starts at page 1 and follows the pages itself.

## `minRentManYen` (type: `number`):

Lowest monthly rent to include, in units of 10,000 yen: 8 means 80,000 yen. SUUMO accepts its own rent steps, so an unusual value can return an error page and fail the run. Leave empty for no minimum.

## `maxRentManYen` (type: `number`):

Highest monthly rent to include, in units of 10,000 yen: 8 means 80,000 yen. SUUMO accepts its own rent steps, so an unusual value can return an error page and fail the run. Leave empty for no maximum.

## `minAreaM2` (type: `number`):

Smallest floor area to include, in square metres. Leave empty for no minimum.

## `maxAreaM2` (type: `number`):

Largest floor area to include, in square metres. Leave empty for no maximum.

## `sortBy` (type: `string`):

Order of the results on SUUMO: newest listings first, cheapest rent plus management fee first, or SUUMO's recommended order.

## `maxPagesPerStart` (type: `integer`):

Result pages to read for each start URL. A page holds up to 50 buildings, and the number of rooms depends on the sort order. SUUMO stops at page 240, the most one query can reach.

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

Maximum number of rooms to return. One result is one room. You are charged per result.

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

Apify datacenter proxy is used by default.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://suumo.jp/chintai/tokyo/sc_shinjuku/"
    }
  ],
  "sortBy": "newest",
  "maxPagesPerStart": 5,
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `stats` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://suumo.jp/chintai/tokyo/sc_shinjuku/"
        }
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("bogdiehard/suumo-rental-scraper").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 = {
    "startUrls": [{ "url": "https://suumo.jp/chintai/tokyo/sc_shinjuku/" }],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("bogdiehard/suumo-rental-scraper").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 '{
  "startUrls": [
    {
      "url": "https://suumo.jp/chintai/tokyo/sc_shinjuku/"
    }
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call bogdiehard/suumo-rental-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bogdiehard/suumo-rental-scraper"
        }
    }
}
```

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/TzttkY5JSQWfOVecp/builds/WIvLzNE6fYZbotGGd/openapi.json
