# At Home Japan Rental Listings (`bovi/athome-scraper`) Actor

Collect public room-level rental listings from athome.co.jp. Get structured records with rent, layout, area, fees, and transit. Run with an HTTPS search-results URL; no account required. Pricing: $0.0024 per saved dataset item on Free.

- **URL**: https://apify.com/bovi/athome-scraper.md
- **Developed by:** [Vitalii Bondarev](https://apify.com/bovi) (community)
- **Categories:** Real estate, Automation, 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 at home japan rental listings

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?

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

## At Home Japan Rental Listings Scraper

Enter a public `athome.co.jp` search-results URL to scrape room-level rental listings, with optional listing-page detail enrichment. No athome account or login is required. You pay $0.0024 on the Free plan per saved dataset item.

- Compare room rents, layouts, floor areas, fees, and transit access across selected search pages.
- Calculate monthly rent per square metre from `price_per_sqm_jpy` for rental analysis.
- Map detail-enriched listings with coordinates and inspect facilities and available photos.
- Review listing agency names and public phone numbers when the detail data includes them.
- Save one dataset row for each room link the Actor finds.

### What you get

The Actor reads HTTPS rental search-result pages on `athome.co.jp` and its subdomains and follows the next-page link until the requested result limit is reached. With `includeDetails` enabled, it also fetches individual listing pages for additional server-rendered data.

Images are returned as URL references, not downloaded files.

| Field family | Fields | Type | Contents |
| --- | --- | --- | --- |
| Listing identity and address | `listingId`, `url`, `propertyTitle`, `property_type`, `address`, `region`, `locality`, `room` | String for each field | Listing identifier, canonical URL, property information, address, region, locality, and room label |
| Rent and fees | `price`, `price_text`, `price_per_sqm_jpy`, `mgmt_fee`, `deposit`, `key_money` | `price`: number; `price_per_sqm_jpy`: integer; other fields: string | Monthly rent in Japanese yen, athome’s displayed rent text, calculated rent per square metre, and fee text |
| Layout and building | `layout`, `floor_size_sqm`, `floor`, `floors_total`, `build_year`, `build_age` | `floor_size_sqm`: number; `floor`, `floors_total`, `build_year`: integer; other fields: string | Room layout, floor area, floor information, total building floors, construction year, and building-age text |
| Transit | `transit` | Array of strings | Train line, station, and walking-time entries |
| Location enrichment | `latitude`, `longitude` | Number for each field | Coordinates from listing detail data |
| Agency details | `agent_name`, `agent_phone`, `agent_license` | String for each field | Public listing agency name, telephone number, and licence identifier when present |
| Facilities and photos | `facilities`, `images`, `image_count` | `facilities`, `images`: array of strings; `image_count`: integer | Detail-page facilities and image URL references with an image count |
| Collection metadata | `scraped_at` | ISO 8601 string | UTC time when the record was collected |

### Sample output

This is an overview-only record from a run with `includeDetails` set to `false`. The sample omits the keys `property_type`, `build_year`, `image_count`, `images` and `scraped_at`. All shown values are copied from one dataset record.

```json
{
  "listingId": "1063884484",
  "url": "https://www.athome.co.jp/chintai/1063884484/",
  "propertyTitle": "ＬｉｖｅＦｌａｔ千駄木 5階建",
  "address": "文京区千駄木２丁目",
  "transit": ["東京メトロ千代田線 「千駄木」駅 徒歩5分"],
  "room": "４０３",
  "price_text": "8.6 万円",
  "price": 86000,
  "mgmt_fee": "10,000円",
  "deposit": "1ヶ月",
  "key_money": "1ヶ月",
  "layout": "ワンルーム",
  "floor_size_sqm": 15.39,
  "floors_total": 5,
  "build_age": "築2年6ヶ月",
  "price_per_sqm_jpy": 5588
}
```

### Pricing

This Actor uses Apify’s pay-per-event billing model. You pay only for the events listed below. It does not use the Pay per event + usage option, so the platform usage of your runs (compute, proxy traffic and storage) is not billed to you separately.

| Charge event | Unit | Free-plan price | Applicable condition |
| --- | --- | --- | --- |
| `apify-default-dataset-item` | One saved dataset item | $0.0024 per event on the Free plan | One saved dataset item |
| `apify-actor-start` | One Actor Start event | $0.00005 per event on the Free plan | Charged when the Actor starts; one event per GB of Actor memory, minimum of one event |

With the minimum of one Actor Start event on the Free plan, 10 results cost 10 x $0.0024 = $0.024, plus $0.00005 for the start event, **$0.02405 on Free**.

For **1,000 results, the dataset-item charge is $2.40 on Free** (total with the start event: **$2.40005 on Free**). For **10,000 results, the dataset-item charge is $24.00 on Free** (total with the start event: **$24.00005 on Free**).

The Apify Free plan includes **$5 of platform credit each month**, which covers 2,083 dataset items on the Free plan with the minimum of one Actor Start event.

### How to use

1. **Open** a rental search-results page on `athome.co.jp` and apply the filters you want on athome.
2. **Enter** the HTTPS search-results URL in `searchUrl`. The URL must use `athome.co.jp` or one of its subdomains.
3. **Set** `maxResults` to the maximum number of room listings to save, or keep the default of `50`.
4. **Choose** whether to fetch individual listing pages with `includeDetails`. Keep it `false` for overview collection, or set it to `true` for optional coordinates, facilities, additional photos, and agency data.
5. **Start** the run and inspect the resulting dataset. The Actor deduplicates listing IDs.
6. **Repeat** the run through Apify Schedules, using daily as a starting point for a rental-listing collection.

```json
{
  "searchUrl": "https://www.athome.co.jp/forstudents/100428/001/chintai/list/",
  "maxResults": 10,
  "includeDetails": false
}
```

Export the dataset as JSON or CSV, or read it through the Apify dataset API.

### Input parameters

| Parameter | What it does | Default |
| --- | --- | --- |
| `searchUrl` | Required HTTPS athome.co.jp rental search-results URL. The Actor accepts `athome.co.jp` and its subdomains and rejects other target domains. | Prefilled verified athome rental results page |
| `maxResults` | Maximum number of room listings to save. The input schema accepts integers from `1` upward. | `50` |
| `includeDetails` | When `true`, fetches individual listing pages for additional detail fields. Detail requests can trigger site verification. | `false` |
| `proxyConfiguration` | Apify Proxy settings. | Apify Proxy enabled, `RESIDENTIAL` group |

### Limits and edge cases

| Condition | What you see | What to do |
| --- | --- | --- |
| `searchUrl` is not HTTPS, is outside `athome.co.jp`, or includes URL credentials | Input validation fails before collection | Use an HTTPS athome.co.jp search-results URL without a username or password |
| `maxResults` is zero or negative | The Actor returns without pushing records | Use an integer of at least `1` |
| A search page cannot be fetched (`src/main.py:70`, `src/fetch.py:53-54`) | The run fails, and records already saved from earlier pages stay in the dataset. HTTP 4xx responses fail immediately; only 429/5xx and network errors are retried, up to 3 attempts | Check the URL and retry the run later |
| A search page contains no parsed room records | Collection stops at that page and may produce an empty or partial dataset | Check that the URL is an athome rental search-results page and review its filters |
| More than 100 search pages would be needed | The Actor stops after the 100-page limit even if the requested result limit has not been reached | Narrow the athome search filters or run separate searches |
| Detail enrichment reaches a verification page | Detail requests stop, while overview records continue to be saved | Leave `includeDetails` disabled, or retry the run later |
| A detail fetch or parse fails, `includeDetails` is disabled, or the source lacks a field | The record is still saved without those fields | Treat fields as optional when processing the dataset |

### FAQ

#### How much does it cost to scrape At Home Japan rental listings?

See the Pricing section above for Free-plan per-item and start-event prices.

#### Why did my run return no listings?

The Actor requires an HTTPS rental search-results URL on `athome.co.jp` or its subdomains. If the selected page produces no parsed room records, collection stops there. Check the URL and athome filters, then try a verified rental results page.

#### Is it legal to scrape public athome.co.jp data?

This Actor reads public athome.co.jp search-result pages and, optionally, server-rendered listing detail data. Whether a particular collection or use is legal or allowed depends on the source terms, applicable law, and your use case; public availability is not a legal guarantee.

### Related actors

- [ChavesNaMão Property Scraper](https://apify.com/bovi/chavesnamao-scraper) — another bovi property-listing scraper.
- [Dabang Property Scraper](https://apify.com/bovi/dabang-scraper) — another bovi property-listing scraper.
- [Property24 Scraper | South Africa](https://apify.com/bovi/property24-scraper) — a bovi property scraper for Property24 listings.

# Actor input Schema

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

Paste an HTTPS athome.co.jp rental search-results URL. The prefilled URL is a verified public listing page.

## `maxResults` (type: `integer`):

Maximum number of room listings to return.

## `includeDetails` (type: `boolean`):

Optionally fetch listing pages for coordinates, full photos, facilities, and agent details. Disabled by default because repeated detail requests can trigger site verification.

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

Optional Apify Proxy settings. Proxy is disabled unless you enable it.

## Actor input object example

```json
{
  "searchUrl": "https://www.athome.co.jp/forstudents/100428/001/chintai/list/",
  "maxResults": 50,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset with collected room listings.

# 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 = {
    "searchUrl": "https://www.athome.co.jp/forstudents/100428/001/chintai/list/",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("bovi/athome-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 = {
    "searchUrl": "https://www.athome.co.jp/forstudents/100428/001/chintai/list/",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("bovi/athome-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 '{
  "searchUrl": "https://www.athome.co.jp/forstudents/100428/001/chintai/list/",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call bovi/athome-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bovi/athome-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/T4ufpzEflh2MKRtYX/builds/t29JptuJG25YblY0a/openapi.json
