{
  "openapi": "3.0.1",
  "info": {
    "title": "Suumo.jp Scraper - Japan Rental Listings, Prices & Agents",
    "description": "Scrape Suumo, Japan's largest property portal: rental rooms with rent, management fees, deposits, layout, floor area, station access, photos and the listing agency's name. Search by prefecture and city or paste links, and monitor price changes with recurring updates.",
    "version": "0.2",
    "x-build-id": "qWJStoPdUbei3VHd6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~suumo-jp-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-suumo-jp-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/abotapi~suumo-jp-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-suumo-jp-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/abotapi~suumo-jp-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-suumo-jp-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"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "urls",
              "sale_used_condo",
              "sale_new_condo",
              "sale_used_house",
              "sale_new_house",
              "sale_land"
            ],
            "type": "string",
            "description": "Rentals: search by area walks the rental result pages for the prefecture and cities below. A Sale mode walks the result pages of that sale type for the same prefecture and cities (rent, layout, area and walk filters apply to rentals only). My own links walks the links you paste, forward from the page each link names.",
            "default": "search"
          },
          "prefecture": {
            "title": "Prefecture",
            "enum": [
              "01",
              "02",
              "03",
              "04",
              "05",
              "06",
              "07",
              "08",
              "09",
              "10",
              "11",
              "12",
              "13",
              "14",
              "15",
              "16",
              "17",
              "18",
              "19",
              "20",
              "21",
              "22",
              "23",
              "24",
              "25",
              "26",
              "27",
              "28",
              "29",
              "30",
              "31",
              "32",
              "33",
              "34",
              "35",
              "36",
              "37",
              "38",
              "39",
              "40",
              "41",
              "42",
              "43",
              "44",
              "45",
              "46",
              "47"
            ],
            "type": "string",
            "description": "The prefecture to search, as its two-digit JIS code. One run covers one prefecture.",
            "default": "13"
          },
          "cityCodes": {
            "title": "Cities (optional)",
            "type": "array",
            "description": "City names or JIS 5-digit codes. Type a name such as 千代田区 or Chiyoda, or a code such as 13101 (13101 Chiyoda-ku, 13102 Chuo-ku, 13103 Minato-ku, 13113 Shibuya-ku). A name that matches no city in the selected prefecture fails the run with a clear message. Every city is walked as its own source and shares the run limit. Leave empty to walk the whole prefecture.",
            "items": {
              "type": "string"
            }
          },
          "layouts": {
            "title": "Layout codes (optional)",
            "uniqueItems": true,
            "type": "array",
            "description": "Room layout filter applied by the site itself, as the two-digit codes of suumo's own search grammar: 01 studio (one room), 02 1K, 03 1DK, 04 1LDK, 05 2K, 06 2DK, 07 2LDK, 08 3K, 09 3DK, 10 3LDK, 11 4K, 12 4DK, 13 4LDK. Empty means every layout.",
            "items": {
              "type": "string"
            }
          },
          "rentMin": {
            "title": "Minimum rent (10,000 yen)",
            "type": "number",
            "description": "Lower rent bound in units of 10,000 yen, for example 5 for 50,000 yen. Search mode."
          },
          "rentMax": {
            "title": "Maximum rent (10,000 yen)",
            "type": "number",
            "description": "Upper rent bound in units of 10,000 yen. Search mode."
          },
          "areaMin": {
            "title": "Minimum floor area (sqm)",
            "type": "integer",
            "description": "Lower floor-area bound in square metres. Search mode."
          },
          "areaMax": {
            "title": "Maximum floor area (sqm)",
            "type": "integer",
            "description": "Upper floor-area bound in square metres. Search mode."
          },
          "maxBuildingAge": {
            "title": "Maximum building age (years)",
            "type": "integer",
            "description": "Only buildings up to this many years old. Search mode."
          },
          "maxWalkMinutes": {
            "title": "Maximum walk to station (minutes)",
            "type": "integer",
            "description": "Only rooms within this many minutes on foot of a station. Search mode."
          },
          "sortBy": {
            "title": "Sort order (rentals)",
            "enum": [
              "default",
              "rentFeeAsc",
              "rentFeeDesc"
            ],
            "type": "string",
            "description": "Order of the rental results, applied by the site itself (verified over two pages of a city search). Rooms of one building are listed together, ordered by the building's cheapest room (lowest first) or dearest room (highest first). The default keeps the site's own order. Rental Search mode only; ignored in links and sale modes.",
            "default": "default"
          },
          "urls": {
            "title": "Suumo links",
            "type": "array",
            "description": "Multi-URL supported. Paste rental search links (/jj/chintai/ichiran/..., including repeated sc= cities, md= layouts and page=N), rental city pages (/chintai/<prefecture>/sc_<city>/), station pages (/chintai/<prefecture>/ek_<station>/), prefecture pages (/chintai/<prefecture>/) or single room links (/chintai/jnc_<id>/, the ?bc= code is optional, or an agency room page /chintai/bc_<code>/). Sale links work too: result pages of /ms/chuko, /ms/shinchiku, /chukoikkodate, /ikkodate and /tochi (also /jj/bukken/ichiran/...) and single listing pages (.../nc_<id>/). Pagination starts at the page named in the link and walks forward. Search-mode fields are ignored in this mode. Left untouched (no links of your own, no Max rooms, no Max pages), this field reads one page of each example link.",
            "default": [
              "https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13&sc=13101",
              "https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13&sc=13101&page=2",
              "https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13&sc=13101&md=02&page=3",
              "https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13",
              "https://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13&sc=13101&sc=13102",
              "https://suumo.jp/chintai/tokyo/sc_chiyoda/",
              "https://suumo.jp/chintai/tokyo/sc_chiyoda/?page=2",
              "https://suumo.jp/chintai/osaka/",
              "https://suumo.jp/chintai/jnc_000110732282/?bc=100503934766",
              "https://suumo.jp/chintai/jnc_000110732282/",
              "https://suumo.jp/chintai/kanagawa/ek_25890/",
              "https://suumo.jp/chintai/bc_100488633377/"
            ],
            "items": {
              "type": "string"
            }
          },
          "searchUrl": {
            "title": "Search link",
            "type": "string",
            "description": "One pasted suumo.jp rental or sale search link (the same as putting it in Links). Switches a default search run or a sale mode to links mode."
          },
          "fetchDetails": {
            "title": "Read each room's own page",
            "type": "boolean",
            "description": "The search page carries rent, fees, layout, area, address, stations and building age. A room's own page adds the photo set, the full spec table, the agency's pitch and the agency name. Pasted room links are their own page, so they are always read and always carry the surcharge. In a sale mode the listing page adds the zoning, the transaction type and the spec table and carries no extra charge.",
            "default": false
          },
          "maxItems": {
            "title": "Max rooms",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "The single limit that stops a run. Default 1000 rooms, at most 1,000,000; 0 is read as 1,000,000 so older saved tasks keep working.",
            "default": 1000
          },
          "maxPages": {
            "title": "Max pages per source",
            "minimum": 0,
            "type": "integer",
            "description": "Runaway guard per source. 0 means the walk ends when the site runs out of results.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "suumo.jp serves its pages to ordinary connections, so the default is the standard Apify proxy with no group and no country pin. A home-country (Japan) residential exit also works and is only worth it if the standard pool is ever degraded.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Continue a previous run",
            "type": "string",
            "description": "Give the run id of an interrupted run and every room it already collected is skipped. Mutually exclusive with recurring updates once a baseline exists."
          },
          "incrementalMode": {
            "title": "Recurring updates (only return what changed)",
            "type": "boolean",
            "description": "Label every room NEW, UPDATED, UNCHANGED or REAPPEARED against the previous run of the same setup, and record the ones that vanished as EXPIRED. UPDATED means a compared field moved: rent, management fee, deposit, key money, guarantee, layout, area, availability, floor, station list and the other listing facts. Never compared: the run time, the search position, which search found the room, and the agency's own last-updated stamp. Photo order is ignored. Unchanged rooms are not returned unless you also turn on the return-unchanged switch. Returns (and bills) extra rows only for what changed.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, recurring updates only)",
            "type": "string",
            "description": "Name the baseline of a recurring schedule yourself. Without it the baseline is keyed on the whole search setup, so two differently-configured schedules never share one baseline."
          },
          "emitUnchanged": {
            "title": "Also return unchanged rooms (recurring updates only)",
            "type": "boolean",
            "description": "Returns (and bills) every tracked room again, labelled UNCHANGED, instead of only the changed ones.",
            "default": false
          },
          "emitExpired": {
            "title": "Also return rooms that are gone (recurring updates only)",
            "type": "boolean",
            "description": "Rooms tracked by the previous run but absent from a COMPLETE scan are returned (and billed) one last time, labelled EXPIRED. A run that stopped early never reports rooms as gone.",
            "default": false
          },
          "changeScope": {
            "title": "What counts as a change (recurring updates only)",
            "enum": [
              "all",
              "priceAndStock"
            ],
            "type": "string",
            "description": "Any listing field: every compared field can make a room UPDATED. Rent, fees and availability only: just rent, management fee, deposit, key money, guarantee and move-in availability decide UPDATED, so name, photo, remark and layout-copy edits never produce a returned row. Changing this changes which baseline an automatic state key uses.",
            "default": "all"
          },
          "compactUpdates": {
            "title": "Short rows for updated rooms (recurring updates only)",
            "type": "boolean",
            "description": "UPDATED and EXPIRED rows come back short: ids, link, current rent and fees, and priceChanges with the old and new value of each moved field. New rooms stay full. The per-room detail surcharge is not charged on a short row because it carries no detail fields.",
            "default": false
          },
          "expireAfterMissedScans": {
            "title": "Missed scans before a room is marked gone (recurring updates only)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "With the gone-rooms switch on, a room is returned as EXPIRED only after it was missing from this many complete scans in a row. EXPIRED means the room dropped out of the search; a listing that left the results and a delisted one look the same without opening each room page.",
            "default": 1
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Field names that never make a room UPDATED and are left out of changedFields (they stay in the output). Use a dotted path to ignore one key inside a nested list, for example stations.name. Leave empty to compare every listing field. Changing this changes which baseline an automatic state key uses.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optional delivery step AFTER the scrape: pipes dataset results into apps you connected in the Apify MCP Connector setup.",
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "Notion connector only: the parent page new Notion pages attach under."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many dataset rows at most each connector receives per run.",
            "default": 50
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}