# SUUMO Scraper - Japan Property Listings (`redomic/suumo-scraper`) Actor

Scrape SUUMO Japan property listings from search URLs for rentals and sales. Returns flat rows with JPY prices, area, layout, station access, monitor changes, and run status.

- **URL**: https://apify.com/redomic/suumo-scraper.md
- **Developed by:** [Redomic](https://apify.com/redomic) (community)
- **Categories:** Real estate, Lead generation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 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 Scraper: Japan Rental and Property Listings

Export property listings from SUUMO, Japan's biggest real estate portal, to a spreadsheet or an API. Paste any SUUMO search URL, for rentals or for flats and houses for sale, and each row gives you the price in yen, monthly fees, deposit and key money, layout, floor area, floor, nearest station and walking time, and the address. Run it on a schedule and you get only the new listings and price changes since the last run.

### Who uses it

- **Relocation companies and expat services** comparing rents and move-in costs across Tokyo neighbourhoods.
- **Investors** pricing flats by station, layout and price per m².
- **Analysts and proptech products** that need Japanese listing data in English-friendly columns.

### What you get

Rentals in Shinjuku from the default input on 15 November 2026:

| Building | Rent (JPY/month) | Management fee | Layout | Area (m²) | Floor | Station | Walk |
|---|---|---|---|---|---|---|---|
| リーブルグラント西新宿イースト | 224,000 | 20,000 | 1LDK | 40.17 | 8階 | 東京メトロ丸ノ内線/西新宿駅 | 5 min |
| クレアホームズ新宿百人町 | 180,000 | 10,000 | 1LDK | 45.3 | 2階 | ＪＲ山手線/新大久保駅 | 5 min |
| グランスイート四谷二丁目レジデンス | 358,000 | | 3LDK | 70 | 7階 | 東京メトロ丸ノ内線/四谷三丁目駅 | 5 min |
| パークフラッツ西早稲田 | 110,000 | 10,000 | 1K | 25.05 | 5階 | 東京メトロ副都心線/雑司が谷駅 | 3 min |
| クラッシィタワー新宿御苑 | 335,000 | 14,000 | 1LDK | 44.71 | 8階 | 東京メトロ丸ノ内線/新宿御苑前駅 | 4 min |

Building names, floors, stations and addresses come in Japanese, as SUUMO shows them. Numbers come as plain numbers: rent and fees in yen, area in m².

Each rental row also carries the deposit (敷金) and key money (礼金), the monthly total (rent plus management fee), the move-in cost (rent, fee, deposit and key money together), the price per m² and per tsubo, the layout broken into rooms and type, and every station within reach. A building with several units for rent comes back as one row per unit. Turn on `fetchDetails` for the building structure, total floors and units, the direction the flat faces, parking and the move-in date.

Each data row links to the listing’s own detail page in `url`. A run’s per-source status and the final summary are stored in the run’s key-value store records `STATUS` and `SUMMARY`, not in the dataset.

### Two modes

| Mode | What you get | Good for |
|---|---|---|
| `search` (default) | Every listing on the SUUMO search you pasted | Price surveys, exports |
| `monitor` | Only listings that are new, changed price or disappeared since the last run | Daily alerts |

### Price

$3 per 1,000 listings. There's no start fee. In monitor mode you pay only for new and changed listings, so a quiet day costs nothing. A 100-listing run like the one above costs $0.30.

### How to run it

1. Search on suumo.jp the way you normally would: area, station, rent, layout.
2. Copy the address from your browser.
3. Paste it into **Start URLs** and run.

Rental searches (`/chintai/`), used flats (`/ms/chuko/`) and other SUUMO result pages all work.

To narrow a search without changing the URL:

```json
{
  "startUrls": [{ "url": "https://suumo.jp/chintai/tokyo/sc_shinjuku/" }],
  "maxPriceYen": 200000,
  "minAreaM2": 30,
  "maxWalkMinutes": 7,
  "layoutType": "LDK",
  "maxItems": 300
}
```

For alerts, save a search as a task with `"mode": "monitor"` and schedule it daily. The first run records what's listed today. After that you get only `new` listings, `changed` prices and `removed` listings. Use a different `monitorStateKey` for each search you track.

### Input

| Field | Default | What it does |
|---|---|---|
| `startUrls` | Shinjuku rentals | SUUMO search or listing URLs. |
| `mode` | `search` | `search` or `monitor`. |
| `minPriceYen`, `maxPriceYen` | none | Price or rent range in yen. |
| `minAreaM2`, `maxAreaM2` | none | Floor area range. |
| `maxWalkMinutes` | none | The longest walk to a station. |
| `minLayoutRooms`, `maxLayoutRooms` | none | Number of rooms in the layout. |
| `layoutType` | any | `K`, `DK`, `LDK`, `R` or `ワンルーム`. |
| `layoutContains` | none | Text the layout must contain, for example `2LDK`. |
| `fetchDetails` | `false` | Open each listing for building details. Slower. |
| `monitorStateKey` | `default` | A name for each monitored search. |
| `resumeCursor` | none | Continue a large search where the last run stopped. |
| `maxItems` | `100` | The most listings to return. |

### Output fields

`id`, `url`, `title`, `listingType`, `propertyType`, `address`, `station`, `stationAccess`, `walkMinutes`, `priceAmount`, `priceCurrency`, `managementFeeAmount`, `monthlyTotalJpy`, `depositAmount`, `keyMoneyAmount`, `moveInCostJpy`, `layout`, `layoutRooms`, `layoutType`, `areaM2`, `pricePerM2`, `pricePerTsubo`, `floor`, `builtYear`, `structure`, `scrapedAt`.

### FAQ

**Does it need a Japanese IP?**
SUUMO often blocks data-centre traffic, so the Actor uses Apify's residential proxy by default. That cost is included in the price.

**What do 敷金 and 礼金 mean?**
敷金 (shikikin) is the deposit, usually returned when you move out. 礼金 (reikin) is key money, a one-off payment to the landlord that you don't get back. Both come as yen amounts in `depositAmount` and `keyMoneyAmount`.

**What is a tsubo?**
A Japanese area unit of about 3.31 m². Prices per tsubo are common in Japanese property listings, so we give you both.

**Something looks wrong in my results.**
Open an issue on the Issues tab with your input and we'll look at it.

### 日本語

SUUMOの検索URLを貼り付けるだけで、賃貸・売買物件を表形式で取得できます。賃料、管理費、敷金、礼金、間取り、専有面積、階数、最寄り駅と徒歩分数、住所を出力します。`monitor` モードでは前回からの新着・価格変更・掲載終了のみを返します。

### Use it from AI agents (MCP) and Python

**AI agents.** Add this Actor as a tool in Claude, Cursor, VS Code or any MCP client through the Apify MCP server. The agent reads the input schema, so a plain request is enough.

```json
{
  "mcpServers": {
    "suumo-scraper": {
      "url": "https://mcp.apify.com?tools=redomic/suumo-scraper",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}
```

**Python.** `pip install apify-client`, then:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("redomic/suumo-scraper").call(run_input={"startUrls": [{"url": "https://suumo.jp/jj/bukken/ichiran/JJ010FJ001/?ar=030&bs=011&ta=13&sc=13104&kb=1&kt=9999999&mb=0&mt=9999999&ekTjCd=&ekTjNm=&tj=0&cnb=0&cn=9999999"}]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### More from us

- [Allabolag Scraper - Swedish Company Data](https://apify.com/redomic/allabolag-company-scraper): Scrape allabolag.se for Swedish company financials, industry, status and board role titles by search, org number or URL
- [Ashby Jobs Scraper with Salaries](https://apify.com/redomic/ashby-jobs-monitor): Ashby jobs scraper for any startup careers board (OpenAI, Ramp, Notion and thousands more), with salary ranges as numbers: min, max, currency, period, plus equity and bonus flags
- [ATS Jobs Search: Greenhouse, Lever & Ashby Jobs API](https://apify.com/redomic/ats-jobs-search): Search 300,000+ open jobs from 11,000+ companies on Greenhouse, Lever and Ashby in one run
- [Blocket Scraper: Car Monitor](https://apify.com/redomic/blocket-se-scraper): Blocket scraper: each run returns up to 2,500 Blocket Bil and Torget listings as flat rows with price, make, model, year, mileage, VIN, inspections and seller
- [Closed Jobs Tracker: Filled Roles & Time-to-Fill](https://apify.com/redomic/closed-jobs-tracker): Search closed jobs from 11,000+ companies with closedOn, daysOpen and time-to-fill signals
- [Google Jobs Scraper - Job Postings API](https://apify.com/redomic/google-jobs): Google Jobs and job postings scraper: get job title, company, location, posted date, salary, full description and every apply link for any search
- [Google Trends API: Trending Now & Interest Over Time](https://apify.com/redomic/google-trends): Trending-now searches and new-trends alerts/monitoring per country with the news behind them, plus interest over time, interest by region, and related and rising queries for any keyword
- [GovDeals Scraper](https://apify.com/redomic/govdeals-scraper): Search and monitor GovDeals government surplus auctions
- [Greenhouse Jobs Monitor & Scraper](https://apify.com/redomic/greenhouse-jobs-monitor): Monitor Greenhouse jobs from any company careers board (Airbnb, Stripe, Discord and thousands more)
- [Job Postings Dataset: 320k+ Open Jobs, Updated Daily](https://apify.com/redomic/job-postings-dataset): 320,000+ open jobs from 10,000+ company career sites (Greenhouse, Lever, Ashby), updated daily with first-seen and closed dates
- [Lever Jobs Scraper with Salaries](https://apify.com/redomic/lever-jobs-monitor): Lever jobs scraper for any company's careers page (Palantir, Spotify, Zoox, Shield AI and thousands more): flat rows with title, team, location, workplace, commitment, apply link, salary as numbers and the full description merged
- [Marktplaats.nl Scraper](https://apify.com/redomic/marktplaats-nl): Scrape Marktplaats.nl listings into clean rows: title, price in EUR, condition, seller, location, images
- [Otodom Scraper: Poland Property Listings & Price Monitor](https://apify.com/redomic/otodom-scraper): Scrape Otodom.pl property listings in Poland
- [Otomoto.pl Scraper](https://apify.com/redomic/otomoto-scraper): Scrape Otomoto.pl Polish car listings: one run returns used-car rows with price, make, model, year, mileage, fuel, gearbox, seller and URL
- [Personio Jobs Scraper](https://apify.com/redomic/personio-jobs): Scrape open jobs from Personio company career pages (jobs.personio.de/.com XML feeds)
- [Salary Data API: Pay Ranges by Job Title & Level](https://apify.com/redomic/salary-data): Get salary benchmarks (p10-p90, annualised, with n) and pay ranges from 150,000+ employer-posted jobs across 11,000+ companies, updated daily
- [SIRET Company Scraper](https://apify.com/redomic/siret-company-scraper): Search French companies by name, SIREN or SIRET
- [Talabat Scraper — Menus, Prices & Delivery Fees](https://apify.com/redomic/talabat-scraper): Talabat menus, prices and delivery fees as flat rows in 8 MENA markets
- [Workday Jobs Scraper](https://apify.com/redomic/workday-jobs): Search and monitor public Workday (myworkdayjobs.com) job postings

# Changelog

This Actor's version history is a separate document: https://apify.com/redomic/suumo-scraper/changelog.md

# Actor input Schema

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

SUUMO search or listing URLs to scrape (rental, sale, used condo, etc.).

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

search/detail scrapes current listings; monitor reports new, changed, and removed listings versus the previous run state.

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

Upper limit on listing rows returned per run (excluding status/summary rows).

## `minPriceYen` (type: `integer`):

Keep only listing rows whose priceAmount is at least this value in JPY.

## `maxPriceYen` (type: `integer`):

Keep only listing rows whose priceAmount is at most this value in JPY.

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

Keep only listing rows whose areaM2 is at least this value.

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

Keep only listing rows whose areaM2 is at most this value.

## `maxWalkMinutes` (type: `integer`):

Keep only listing rows whose walkMinutes is at most this value.

## `minLayoutRooms` (type: `integer`):

Keep only listing rows whose layoutRooms is at least this value.

## `maxLayoutRooms` (type: `integer`):

Keep only listing rows whose layoutRooms is at most this value.

## `layoutType` (type: `string`):

Keep only listing rows whose layoutType matches this value (K, DK, LDK, R, ワンルーム, or other).

## `layoutContains` (type: `string`):

Keep only listing rows whose layout contains this text.

## `resumeCursor` (type: `string`):

Continue a previous run from the next unprocessed page using the resumeCursor emitted in status/summary rows.

## `monitorStateKey` (type: `string`):

Optional key suffix for monitor state in the named key-value store. Use different keys for different URL sets.

## `fetchDetails` (type: `boolean`):

Fetch each listing detail page and enrich rows with detail-only fields (structure, floors/units, direction, parking, handover or move-in, renovation/feature notes). Slower; more requests.

## `proxy` (type: `object`):

Proxy settings. SUUMO may require residential proxy access on the Apify platform.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://suumo.jp/chintai/tokyo/sc_shinjuku/"
    }
  ],
  "mode": "search",
  "maxItems": 100,
  "monitorStateKey": "default",
  "fetchDetails": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

All result, status, and summary rows from the default dataset.

# 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/"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("redomic/suumo-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/" }],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("redomic/suumo-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/"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call redomic/suumo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,redomic/suumo-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/g6xy2Eoj4Hii8radD/builds/0XMED9uIeWG2S2qVi/openapi.json
