# Suumo Scraper — Japan Real Estate Listings (`jungle_synthesizer/suumo-scraper`) Actor

Scrape rental and sale property listings from Suumo.jp — Japan's largest real estate portal. Pick a mode (rental, used/new condo, used/new house, or land) and paste a Suumo search URL. Extract price/rent, layout, area, address, station access, building age, and more.

- **URL**: https://apify.com/jungle\_synthesizer/suumo-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 56 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Suumo Web Crawler: Rental and Sales Data Extraction for Japan Real Estate

Gather detailed insights on rental and sale property listings across Japan with the **Suumo Web Crawler** — a Japan real estate Suumo scraper built for professionals, investors, and analysts. It covers Suumo.jp's full property surface — rentals, used and new condos, used and new houses, and land — with one unified actor.

### Key Features

- **Six Listing Modes**: Switch between rentals (賃貸), used condos (中古マンション), new condos (新築マンション), used houses (中古一戸建て), new houses (新築一戸建て), and land (土地) via a single `mode` input.
- **Mode-Aware Output Schema**: Rentals return rent / deposit / key money; sales return price, exclusive area or land + building area, zoning, and price-per-tsubo where applicable.
- **Advanced Search Filters**: Use Suumo's native URL parameters (area, price range, building age, floor area) — no in-actor filter logic required.
- **Pagination Support**: Walks through search result pages until `maxItems` or `maxPages` is reached.
- **Optional Detail Page Enrichment**: For rentals, follow each listing to fetch building structure, contract terms, parking, and more.

### Supported Modes & URL Patterns

| Mode | Vertical | Search URL family |
|---|---|---|
| `rental` | 賃貸 | `https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&...` |
| `sale_used_condo` | 中古マンション | `https://suumo.jp/jj/bukken/ichiran/JJ012FC001/?bs=011&...` |
| `sale_new_condo` | 新築マンション | `https://suumo.jp/jj/bukken/ichiran/JJ011FC001/?bs=010&...` |
| `sale_used_house` | 中古一戸建て | `https://suumo.jp/jj/bukken/ichiran/JJ012FC001/?bs=021&...` |
| `sale_new_house` | 新築一戸建て | `https://suumo.jp/jj/bukken/ichiran/JJ012FC001/?bs=020&...` |
| `sale_land` | 土地 | `https://suumo.jp/jj/bukken/ichiran/JJ012FC001/?bs=030&...` |

Open Suumo, navigate to the right vertical, set your filters, and paste the resulting URL into `searchUrl`.

### Ideal Use Cases for Real Estate Professionals

- **In-depth Real Estate Analysis**: Uncover rental trends and pricing variations in hotspots like Tokyo or other major Japanese cities.
- **Thorough Market Research**: Equip yourself with data-driven insights to evaluate market conditions and make informed real estate investments.
- **Comparative Property Listings**: Compile comparable properties to refine your valuation and pricing strategies, enhancing your competitive edge.

### Input Schema

```json
{
  "mode": "sale_used_condo",
  "searchUrl": "https://suumo.jp/jj/bukken/ichiran/JJ012FC001/?ar=030&bs=011&ta=14&sc=14104&pc=20",
  "maxItems": 100,
  "maxPages": 0,
  "fetchDetails": false
}
````

#### Input Fields

- **mode**: Listing vertical to scrape. One of `rental`, `sale_used_condo`, `sale_new_condo`, `sale_used_house`, `sale_new_house`, `sale_land`. Defaults to `rental`.
- **searchUrl**: A Suumo search results URL matching the chosen mode. Open suumo.jp, set your filters in the UI, copy the URL.
- **maxItems**: Cap on records returned (0 = unlimited).
- **maxPages**: Cap on pages crawled (0 = unlimited).
- **fetchDetails**: Rentals only — follow each listing to fetch enriched fields (structure, parking, contract terms). Ignored in sales modes.

### Sample Output

Used condo (sale\_used\_condo):

```json
{
  "mode": "sale_used_condo",
  "propertyType": "中古マンション",
  "buildingTitle": "プロスパーハウス",
  "address": "神奈川県横浜市中区本牧荒井",
  "stationAccess": ["ＪＲ根岸線「山手」徒歩12分"],
  "buildingAge": "1968年6月",
  "price": "1280万円",
  "exclusiveArea": "66.6m2（壁芯）",
  "layout": "3DK",
  "detailUrl": "https://suumo.jp/ms/chuko/kanagawa/sc_yokohamashinaka/nc_78367586/",
  "propertyCode": "78367586"
}
```

Rental:

```json
{
  "mode": "rental",
  "propertyType": "賃貸マンション",
  "address": "神奈川県横浜市中区山手町",
  "rent": "85万円",
  "managementFee": "5,000円",
  "deposit": "1ヶ月",
  "keyMoney": "1ヶ月",
  "layout": "4SLDK",
  "area": "178m2",
  "buildingAge": "築12年"
}
```

### Need Additional Features?

Want to customize your scraping experience? If you're looking to add new data fields or require a bespoke scraper for a different purpose, don't hesitate to reach out. We're keen to enhance the functionality to meet your specific needs.

### Why Choose the Suumo Web Crawler?

- **Efficient Performance**: Designed for efficient large-scale data scraping with advanced session and concurrency management capabilities.
- **Highly Customizable**: Easily adjust input options to cater to your specific scraping needs.
- **Dependable**: Featuring robust error-handling mechanisms to minimize disruption during data collection.

### Proxies and Anti-Blocking Measures

Our scraper utilizes the Apify Proxy or your designated proxy settings to mitigate the risk of being blocked during scraping operations. It supports automatic session management to ensure uninterrupted data collection for your real estate projects.

Unlock the power of the Suumo Web Crawler today and stay ahead in the competitive real estate market!

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

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

Type of Suumo listing to scrape. Each mode binds to a different Suumo search URL family — paste the matching URL in `searchUrl` below.

## `searchUrl` (type: `string`):

Suumo.jp search results URL matching the selected mode. Open suumo.jp, navigate to the right vertical (rental/sale/condo/house/land), set your filters, and paste the resulting URL here.

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

Maximum number of listings to scrape. Set to 0 for unlimited.

## `maxPages` (type: `integer`):

Maximum number of search result pages to crawl. Set to 0 for unlimited.

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

Follow each listing link to fetch additional fields (rental: structure, contract terms, parking; sales: detail-page enrichment is currently rental-only). Slower but more data.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "rental",
  "searchUrl": "https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=14&sc=14104&pc=50",
  "maxItems": 100
}
```

# Actor output Schema

## `results` (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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "rental",
    "searchUrl": "https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=14&sc=14104&pc=50",
    "maxItems": 100,
    "maxPages": 0,
    "fetchDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "rental",
    "searchUrl": "https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=14&sc=14104&pc=50",
    "maxItems": 100,
    "maxPages": 0,
    "fetchDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/suumo-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "rental",
  "searchUrl": "https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=14&sc=14104&pc=50",
  "maxItems": 100,
  "maxPages": 0,
  "fetchDetails": false
}' |
apify call jungle_synthesizer/suumo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jungle_synthesizer/suumo-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Suumo Scraper — Japan Real Estate Listings",
        "description": "Scrape rental and sale property listings from Suumo.jp — Japan's largest real estate portal. Pick a mode (rental, used/new condo, used/new house, or land) and paste a Suumo search URL. Extract price/rent, layout, area, address, station access, building age, and more.",
        "version": "0.1",
        "x-build-id": "noK2FPwyCAnlCM9bp"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~suumo-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-suumo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~suumo-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-suumo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~suumo-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-suumo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode",
                    "searchUrl"
                ],
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "mode": {
                        "title": "Listing Mode",
                        "enum": [
                            "rental",
                            "sale_used_condo",
                            "sale_new_condo",
                            "sale_used_house",
                            "sale_new_house",
                            "sale_land"
                        ],
                        "type": "string",
                        "description": "Type of Suumo listing to scrape. Each mode binds to a different Suumo search URL family — paste the matching URL in `searchUrl` below."
                    },
                    "searchUrl": {
                        "title": "Search URL",
                        "type": "string",
                        "description": "Suumo.jp search results URL matching the selected mode. Open suumo.jp, navigate to the right vertical (rental/sale/condo/house/land), set your filters, and paste the resulting URL here."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum number of listings to scrape. Set to 0 for unlimited."
                    },
                    "maxPages": {
                        "title": "Max Pages",
                        "type": "integer",
                        "description": "Maximum number of search result pages to crawl. Set to 0 for unlimited."
                    },
                    "fetchDetails": {
                        "title": "Fetch Detail Pages",
                        "type": "boolean",
                        "description": "Follow each listing link to fetch additional fields (rental: structure, contract terms, parking; sales: detail-page enrichment is currently rental-only). Slower but more data."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
