Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Japan Real Estate API page →
Real Estate

Japan Real Estate API & Scraper

The Japan Real Estate API returns Japanese property listings as clean JSON.

5 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary search endpoint returns items with listing id, URL, Japanese title and address, price (JPY), madori (layout) and area (m2), and you can pull a detail, areas and a separate listings search and detail. It is built for real-estate tools and Japanese property analytics that need this data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

Reading a Japanese listing without misplacing four zeros

Japanese property prices are quoted in man-yen (units of 10,000). The number you get back is not. price_jpy is already multiplied out into ordinary yen, while the filter you send, max_price_man, is still in man-yen. Getting those two the wrong way round is a factor of 10,000. All values measured on 2026-08-27.

Field or parameterUnit and meaningMeasured
price_jpyOrdinary yen, already expanded out of man-yenRent price_ja '7.5万円' returned price_jpy 75000. Sale price_ja '498万円' returned price_jpy 4980000.
max_price_manYour filter, in MAN-YEN, not yen10 means 100,000 yen a month for rent; 5000 means 50,000,000 yen for a sale
area_m2Square metres. SUUMO publishes m2, not tsubo, so nothing is converted17.62 on a Tokyo 1K rental, 52.54 on an Osaka 1LDK resale
madoriThe Japanese layout code, returned as published1K, 1LDK, 3LDK, and ワンルーム for a studio
listing_id, rentals12 digits, zero-padded. URL is /chintai/jnc_<id>/000109252250
listing_id, sales8 digits. The URL is path-based, /ms/chuko/<pref>/sc_<ward>/nc_<id>/20227675. `detail` needs the url for sales; an id alone returns MISSING_PARAM
station_access[]One entry per line, with walk_minutes parsed from the Japanese stringA Tokyo rental returned three: 1, 10 and 16 minutes on three different lines
areas.arSUUMO region code, 9 values from 010 to 090tokyo 030, osaka 060, fukuoka 090
areas.taJIS prefecture code, 01 to 47hokkaido 01, tokyo 13, osaka 27, okinawa 47
admin_fee_jpyMonthly management fee on rentals, separate from rent10000 on a 75,000 yen apartment, i.e. the real monthly outlay is 85,000

One page is not a fixed 30 rows. A single rent page for Tokyo returned 52 items, because SUUMO lists several units under one building block and each unit becomes its own row. Two rows can therefore share title_ja, address_ja, area_m2 and building_age_years while carrying different listing_id, bukken_code and price_jpy. Deduplicate on listing_id, never on building name.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/japan-re/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "prefecture": "tokyo",
    "listing_type": "rent",
    "max_pages": 1
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "japan-re",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 6552.8,
    "record_count": 66,
    "bytes": 493478,
    "cache_hit": false,
    "completeness_pct": 100,
    "stop_reason": "max_pages",
    "method": "suumo_ssr",
    "prefecture": "tokyo",
    "listing_type": "rent",
    "page": 1,
    "filters_applied": {}
  },
  "data": {
    "items": [
      {
        "listing_id": "[redacted-phone]",
        "bukken_code": "[redacted-phone]",
        "source": "suumo",
        "listing_type": "rent",
        "transaction_type": "rent",
        "url": "https://suumo.jp/chintai/jnc_[redacted-phone]/?bc=[redacted-phone]",
        "title_ja": "YOU I COURT",
        "address_ja": "東京都杉並区浜田山3",
        "price_jpy": 115000,
        "price_ja": "11.5万円",
        "admin_fee_jpy": null,
        "madori": "1K",
        "madori_ja": "1K",
        "area_m2": 25.25,
        "station_access": [
          {
            "access_ja": "[trimmed-depth]",
            "walk_minutes": "[trimmed-depth]",
            "bus_minutes": "[trimmed-depth]"
          },
          {
            "access_ja": "[trimmed-depth]",
            "walk_minutes": "[trimmed-depth]",
            "bus_minutes": "[trimmed-depth]"
          },
          {
            "access_ja": "[trimmed-depth]",
            "walk_minutes": "[trimmed-depth]",
            "bus_minutes": "[trimmed-depth]"
          }
        ],
        "building_age_years": 7,
        "photos": [
          "https://img01.suumo.com/front/gazo/fr/bukken/560/[redacted-phone]/[redacted-phone]_ro.jpg",
          "https://img01.suumo.com/front/gazo/fr/bukken/560/[redacted-phone]/[redacted-phone]_co.jpg",
          "https://img01.suumo.com/front/gazo/fr/bukken/560/[redacted-phone]/[redacted-phone]_go.jpg"
        ]
      },
      {
        "listing_id": "[redacted-phone]",
        "bukken_code": "[redacted-phone]",
        "source": "suumo",
        "listing_type": "rent",
        "transaction_type": "rent",
        "url": "https://suumo.jp/chintai/jnc_[redacted-phone]/?bc=[redacted-phone]",
        "title_ja": "京王新線 初台駅 3階建 築21年",
        "address_ja": "東京都渋谷区本町2",
        "price_jpy": 148000,
        "price_ja": "14.8万円",
        "admin_fee_jpy": 6000,
        "madori": "1LDK",
        "madori_ja": "1LDK",
        "area_m2": 37.44,
        "station_access": [
          {
            "access_ja": "[trimmed-depth]",
            "walk_minutes": "[trimmed-depth]",
            "bus_minutes": "[trimmed-depth]"
          },
          {
            "access_ja": "[trimmed-depth]",
            "walk_minutes": "[trimmed-depth]",
            "bus_minutes": "[trimmed-depth]"
          },
          {
            "access_ja": "[trimmed-depth]",
            "walk_minutes": "[trimmed-depth]",
            "bus_minutes": "[trimmed-depth]"
          }
        ],
        "building_age_years": 21,
        "photos": [
          "https://img01.suumo.com/front/gazo/fr/bukken/218/[redacted-phone]/[redacted-phone]_ro.jpg",
          "https://img01.suumo.com/front/gazo/fr/bukken/218/[redacted-phone]/[redacted-phone]_co.jpg",
          "https://img01.suumo.com/front/gazo/fr/bukken/218/[redacted-phone]/[redacted-phone]_go.jpg"
        ]
      },
      {
        "listing_id": "[redacted-phone]",
        "bukken_code": "[redacted-phone]",
        "source": "suumo",
        "listing_type": "rent",
        "transaction_type": "rent",
        "url": "https://suumo.jp/chintai/jnc_[redacted-phone]/?bc=[redacted-phone]",
        "title_ja": "グリーンヒル",
        "address_ja": "東京都八王子市川口町",
        "price_jpy": 66000,
        "price_ja": "6.6万円",
        "admin_fee_jpy": 4000,
        "madori": "1LDK",
        "madori_ja": "1LDK",
        "area_m2": 40.07,
        "station_access": [
          {
            "access_ja": "[trimmed-depth]",
            "walk_minutes": "[trimmed-depth]",
            "bus_minutes": "[trimmed-depth]"
          },
          {
            "access_ja": "[trimmed-depth]",
            "walk_minutes": "[trimmed-depth]",
            "bus_minutes": "[trimmed-depth]"
          },
          {
            "access_ja": "[trimmed-depth]",
            "walk_minutes": "[trimmed-depth]",
            "bus_minutes": "[trimmed-depth]"
          }
        ],
        "building_age_years": 17,
        "photos": [
          "https://img01.suumo.com/front/gazo/fr/bukken/337/[redacted-phone]/[redacted-phone]_go.jpg",
          "https://img01.suumo.com/front/gazo/fr/bukken/337/[redacted-phone]/[redacted-phone]_co.jpg",
          "https://img01.suumo.com/front/gazo/fr/bukken/337/[redacted-phone]/[redacted-phone]_ro.jpg"
        ]
      }
    ],
    "count": 66,
    "prefecture": "tokyo",
    "listing_type": "rent",
    "page": 1,
    "pages_fetched": 1,
    "has_next_page": true,
    "next_page": 2
  }
}
Actions

What the Japan Real Estate API does

ActionDescriptionConcrete use caseKey params
searchSearch SUUMO property listings in any of Japan's 47 prefectures — rentals or homes for sale (used house / used condo / land / new house) — filtered by max price (万円), min area (m²), max station walk-time, building age and a free-text station/area keyword. Paginate with page + max_pages.Real-estate investors call search to search SUUMO property listings in any of Japan's 47 prefectures.prefecture, listing_type, page, max_pages, max_price_man, ...
detailFull detail for one SUUMO listing — rent/deposit/key-money or sale price, madori layout, floor area, floor, orientation, building structure & age, station access and the photo gallery. For RENT pass listing_id; for SALE pass the listing's `url` from a search result (SUUMO sale pages have no id-only URL). listing_type picks the right parser.Brokerage tools call detail to get full detail for one SUUMO listing.listing_id, url, listing_type
areasList Japan's 47 prefectures with their romaji slug, kanji name and SUUMO region/JIS codes — use it to discover or validate the `prefecture` value before searching. Pass an optional query to filter by name.Property dashboards call areas to list Japan's 47 prefectures with their romaji slug, kanji name and SUUMO region/JIS codes.query
listings/searchLegacy name for `search`, kept so older integrations keep working. It runs the exact same code and returns the exact same body (verified byte-for-byte, 2026-08-28). New code should call `search`.Lead-generation teams call listings/search to get legacy name for `search`, kept so older integrations keep working.prefecture, listing_type, page, max_pages, max_price_man, ...
listings/detailLegacy name for `detail`, kept so older integrations keep working. It runs the exact same code and returns the exact same body. New code should call `detail`.Real-estate investors call listings/detail to get legacy name for `detail`, kept so older integrations keep working.listing_id, url, listing_type
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/japan-re/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"prefecture":"tokyo","listing_type":"rent","max_pages":1}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.japan-re.search with {"prefecture":"tokyo","listing_type":"rent","max_pages":1}.
Use cases

Who uses this API and why

  • Investors call search to track Japanese listing prices by area.
  • Dashboards use detail and madori to enrich a property.
  • Analysts use areas to size a Japanese market.
FAQ

Questions developers ask before integrating

Is price_jpy in man-yen or in yen?

In yen, already multiplied out, and both transaction types were checked. A Tokyo rental showing price_ja '7.5万円' returned price_jpy 75000, and an Osaka resale showing price_ja '498万円' returned price_jpy 4980000. You never need to multiply by 10,000. The one place man-yen survives is the filter: max_price_man is in man-yen, so 10 caps rent at 100,000 yen a month and 5000 caps a sale at 50 million yen.

Why does `detail` reject my sale listing_id?

Because SUUMO sale pages have no id-only URL to reconstruct. Rentals live at /chintai/jnc_<12-digit id>/ and can be fetched by listing_id alone; sales live at a path that includes the prefecture and the ward, such as /ms/chuko/osaka/sc_osakasayama/nc_20227675/, which cannot be derived from the id. Passing a sale listing_id returned MISSING_PARAM saying exactly that. Copy the `url` from the search result instead and pass it with the matching listing_type.

What extra fields does a sale detail carry over a search row?

The recurring costs and the building facts a buyer needs, and they arrive as Japanese strings rather than parsed numbers: management_fee_ja ('8600円/月(委託(通勤))'), repair_fund_ja ('4130円/月'), total_units_ja ('293戸'), zoning_ja ('2種住居'), handover_ja ('即引渡可') and updated_ja ('2026年8月2日'). Those five are not advertised in the action's declared return shape but were present on the sale listing measured. Budget for the monthly fees separately: on that 4.98 million yen apartment they came to 12,730 yen a month before anything else.

Why does title_ja change between search and detail on a sale listing?

Because the two pages title the same property differently. The search row carried the agent's marketing headline, and the detail page for the same listing carried a generated title of building name, price and layout. property_name_ja is the field that stayed identical across both, so use it as the building's name and treat title_ja as display copy. On rentals the two agree, since a rental row is titled with the building name in both places.

How do I find the right prefecture value?

Call `areas`, which returns all 47 with four fields each: a romaji slug, the kanji name, ar and ta. The slug or the kanji both work as the `prefecture` parameter. ar is the SUUMO region grouping, only nine values from 010 to 090, so tokyo and kanagawa share 030 while kyoto and osaka share 060. ta is the JIS prefecture code, unique per prefecture, 01 for hokkaido through 47 for okinawa. Pass `query` to filter, for example 'osa' returned only osaka.

Why are deposit_jpy and key_money_jpy null?

They came back null on all three Tokyo rentals sampled, along with deposit_ja and key_money_ja. SUUMO does not print shikikin and reikin on every listing page, and where the page does not print them there is nothing to parse, so the field is null rather than zero. Read null as unknown, not as 'no deposit required'. admin_fee_jpy is more reliably present on search rows, at 8,000 to 10,000 yen a month on the listings measured.

How much does one page actually return, and how do I get more?

It varies by listing type. A Tokyo rent page returned 52 items and an Osaka buy_apartment page returned 30, both with max_pages 1, because rentals list every available unit under one building block. has_next_page and next_page tell you whether to continue, and max_pages up to 20 merges pages in a single call, stopping early on an empty page. meta.stop_reason says which limit ended the run.

What do station_access entries look like, and is walk_minutes reliable?

Each entry has access_ja, the raw Japanese line naming the railway line and station, plus walk_minutes and bus_minutes parsed out of it. Search rows return every line a property is near: one Tokyo rental came back with three entries at 1, 10 and 16 minutes on the Hanzomon, Oedo and Shinjuku lines, each number matching its own access_ja string. The formatting differs slightly between rent and sale pages, so keep access_ja as the source of truth and treat walk_minutes as the sortable convenience field.

What is the Japan Real Estate API?

Japan Real Estate API is a ReefAPI endpoint group for japan property listings and details. It returns live JSON through POST requests under /japan-re/v1.

Is the Japan Real Estate API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Japan Real Estate calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Japan Real Estate login or account?

No login to Japan Real Estate is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Japan Real Estate data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Japan Real Estate API use?

Japan Real Estate actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Japan Real Estate from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call japan-re actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / japan-re

Japan Real Estate

Japan property listings and details.

base /japan-re/v15 endpoints
post/japan-re/v1/detail1 credit

Full detail for one SUUMO listing — rent/deposit/key-money or sale price, madori layout, floor area, floor, orientation, building structure & age, station access and the photo gallery. For RENT pass listing_id; for SALE pass the listing's `url` from a search result (SUUMO sale pages have no id-only URL). listing_type picks the right parser.

ParameterAllowed / rangeDescription
listing_idoptionalSUUMO RENT listing id — the digits in a jnc_<id> URL, or a rent search result's listing_id. (For SALE listings pass `url` from the search result instead, since SUUMO sale pages have no id-only URL.)
urloptionalFull SUUMO listing URL (copy the `url` from a search result). REQUIRED for sale listings; optional for rent (listing_id works too).
listing_type = rentoptionalrent · buy_house · buy_apartment · buy_land · buy_new_houseTransaction & property type. Legacy values sale_used_house / sale_used_condo still work.
Try in playground →
post/japan-re/v1/areas1 credit

List Japan's 47 prefectures with their romaji slug, kanji name and SUUMO region/JIS codes — use it to discover or validate the `prefecture` value before searching. Pass an optional query to filter by name.

ParameterAllowed / rangeDescription
queryoptionalOptional filter — match a prefecture by romaji or kanji name substring (e.g. 'osa' → osaka, '東京' → tokyo).
Try in playground →
post/japan-re/v1/listings/search1 credit

Legacy name for `search`, kept so older integrations keep working. It runs the exact same code and returns the exact same body (verified byte-for-byte, 2026-08-28). New code should call `search`.

ParameterAllowed / rangeDescription
prefecturerequiredhokkaido · aomori · iwate · miyagi · akita · yamagata · fukushima · ibaraki · tochigi · gunma · saitama · chiba · tokyo · kanagawa · niigata · toyama · ishikawa · fukui · yamanashi · nagano · gifu · shizuoka · aichi · mie · shiga · kyoto · osaka · hyogo · nara · wakayama · tottori · shimane · okayama · hiroshima · yamaguchi · tokushima · kagawa · ehime · kochi · fukuoka · saga · nagasaki · kumamoto · oita · miyazaki · kagoshima · okinawaPrefecture to search — any of Japan's 47 prefectures by romaji slug (tokyo, osaka, kyoto, hokkaido, fukuoka…) or its kanji name (東京都, 大阪府).
listing_type = rentoptionalrent · buy_house · buy_apartment · buy_land · buy_new_houseTransaction & property type. Legacy values sale_used_house / sale_used_condo still work.
page = 1optional1–1-based results page.
max_pages = 1optional1–20Fetch and merge this many pages from `page` onward (stops on an empty page). Each page ~30 listings.
max_price_manoptional0–Maximum price in 万円 (man-yen, ×10,000 JPY). For rent this is the monthly rent ceiling (e.g. 10 = ¥100,000/mo); for sale the total price ceiling (e.g. 5000 = ¥50,000,000).
min_area_m2optional0–Minimum floor/building area in square metres.
max_walk_minutesoptional1–60Maximum walking minutes from the nearest train station.
building_ageoptional0–100Maximum building age in years (e.g. 10 = built within the last 10 years).
keywordoptionalFree-text filter — a station, line, ward/area or building name (Japanese works best, e.g. 新宿, 山手線, 渋谷区).
Try in playground →
post/japan-re/v1/listings/detail1 credit

Legacy name for `detail`, kept so older integrations keep working. It runs the exact same code and returns the exact same body. New code should call `detail`.

ParameterAllowed / rangeDescription
listing_idoptionalSUUMO RENT listing id — the digits in a jnc_<id> URL, or a rent search result's listing_id. (For SALE listings pass `url` from the search result instead, since SUUMO sale pages have no id-only URL.)
urloptionalFull SUUMO listing URL (copy the `url` from a search result). REQUIRED for sale listings; optional for rent (listing_id works too).
listing_type = rentoptionalrent · buy_house · buy_apartment · buy_land · buy_new_houseTransaction & property type. Legacy values sale_used_house / sale_used_condo still work.
Try in playground →
Comparing scraping APIs?ReefAPI vs Bright Data