{
  "openapi": "3.0.1",
  "info": {
    "title": "StreetEasy Scraper: NYC Rentals, Sales and Price Drop Monitor",
    "description": "Scrape StreetEasy rentals and sales across NYC with net-effective rent, fees and price history. Schedule the change monitor to get only new listings, price drops, price increases and rented or sold units, with unchanged listings never charged. Export to Excel, CSV or JSON.",
    "version": "0.3",
    "x-build-id": "jReunXKeNEr6un7YK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~streeteasy-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-streeteasy-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/getascraper~streeteasy-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-streeteasy-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/getascraper~streeteasy-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-streeteasy-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",
        "properties": {
          "mode": {
            "title": "What to do",
            "enum": [
              "search",
              "urls",
              "monitor"
            ],
            "type": "string",
            "description": "Search listings with the filters below, paste StreetEasy page links, or monitor a search for changes. Monitor mode is built for schedules: each run returns only new listings, price drops, price increases and status changes since the previous run, and unchanged listings are never charged.",
            "default": "search"
          },
          "listingType": {
            "title": "Rentals or sales",
            "enum": [
              "rentals",
              "sales"
            ],
            "type": "string",
            "description": "Apartments for rent or homes for sale. Used by search and monitor modes.",
            "default": "rentals"
          },
          "status": {
            "title": "Listing status",
            "enum": [
              "active",
              "in_contract",
              "past"
            ],
            "type": "string",
            "description": "Active = on the market now. In contract = a deal is pending. Past = already rented or sold, useful for rent and sale comps (each past row carries its full price history).",
            "default": "active"
          },
          "propertyType": {
            "title": "Property type",
            "type": "array",
            "description": "Keep only homes of these types: condo, co-op, condop, townhouse, house, or multi-family. Pick one or more, or leave empty for all types. Used by search and monitor modes. Listings whose type is not stated are left out when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "CONDO",
                "CO_OP",
                "CONDOP",
                "TOWNHOUSE",
                "HOUSE",
                "MULTI_FAMILY"
              ],
              "enumTitles": [
                "Condo",
                "Co-op",
                "Condop",
                "Townhouse",
                "House",
                "Multi-family"
              ]
            }
          },
          "startUrls": {
            "title": "StreetEasy URLs",
            "type": "array",
            "description": "Used in 'Paste StreetEasy URLs' mode. Paste any search page (its filters are kept), a listing page (one full row), or a building page (its units with the status chosen above). Each search or building link returns up to 'Max listings'. Links that cannot be read are listed in the run summary, never saved as empty rows.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "locations": {
            "title": "Neighborhoods or boroughs",
            "type": "array",
            "description": "Type places the way people say them: 'Upper West Side', 'UWS', 'Williamsburg', 'LIC', 'Bed-Stuy', 'Brooklyn'. Each one is matched to StreetEasy's own neighborhood list, and anything that does not match is reported in the log with suggestions. Leave empty to search all of NYC and North Jersey.",
            "default": [
              "Manhattan"
            ],
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Min price (USD)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Lowest monthly rent or asking price to include."
          },
          "maxPrice": {
            "title": "Max price (USD)",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Highest monthly rent or asking price to include."
          },
          "priceBasis": {
            "title": "Price filter applies to",
            "enum": [
              "gross",
              "netEffective"
            ],
            "type": "string",
            "description": "Rentals only. Gross = the advertised monthly rent. Net effective = the rent averaged over the lease after free months, which is what a concession listing really costs. Every row carries both values in separate columns, so you never mix them up.",
            "default": "gross"
          },
          "minBeds": {
            "title": "Min bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "0 means studios are included."
          },
          "maxBeds": {
            "title": "Max bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Set Min and Max to 0 for studios only."
          },
          "minBaths": {
            "title": "Min bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "number",
            "description": "Minimum number of full bathrooms."
          },
          "minSqft": {
            "title": "Min size (sq ft)",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Many NYC listings do not state their size; those are left out when this is set."
          },
          "noFeeOnly": {
            "title": "No-fee rentals only",
            "type": "boolean",
            "description": "Only rentals marked as no broker fee. Every row also lists the fees each landlord disclosed (application, move-in, amenity, pet and more), which tells you more than the yes/no flag.",
            "default": false
          },
          "furnishedOnly": {
            "title": "Furnished only",
            "type": "boolean",
            "description": "Only furnished units. Useful for relocation, corporate housing and short stays; rows show the furnished rent when the landlord quotes one.",
            "default": false
          },
          "petsAllowed": {
            "title": "Pets allowed",
            "type": "boolean",
            "description": "Only listings that allow pets.",
            "default": false
          },
          "availableBy": {
            "title": "Available by (move-in date)",
            "type": "string",
            "description": "Only rentals you can move into on or before this date. Listings with no stated move-in date are treated as available now."
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "newest",
              "oldest",
              "price_asc",
              "price_desc",
              "sqft_desc",
              "ppsf_asc",
              "beds_desc",
              "open_house"
            ],
            "type": "string",
            "description": "Order of results in search mode. Monitor mode always scans newest first.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Most listings to save per search (per link in URL mode). In monitor mode, this is how many of the newest matching listings are checked each run; set it above the search's total size to also catch listings that leave the market.",
            "default": 100
          },
          "includeDetails": {
            "title": "Include full listing details",
            "type": "boolean",
            "description": "Price and status history, amenities, pet policy, open houses, building facts, nearby subway stations and schools, photos, floor plans and the description. Fetched together with the listing, so it does not slow the run down.",
            "default": true
          },
          "maxPhotos": {
            "title": "Photos per listing",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "How many photo links to include per listing. 0 skips photos.",
            "default": 5
          },
          "includeAgentContacts": {
            "title": "Include agent contact details",
            "type": "boolean",
            "description": "Adds each listing agent's name, phone, email and license number. Off by default because this is personal data; turn it on only if you have a legitimate reason to process it. The listing's brokerage name is always included.",
            "default": false
          },
          "stateName": {
            "title": "Monitor name (optional)",
            "type": "string",
            "description": "Monitor mode only. Runs that share a name share one memory of what was already seen, so a schedule, a saved task and an API call can all continue the same monitor. Leave empty and the monitor is identified by its filters instead."
          },
          "changeTypes": {
            "title": "Changes to return (optional)",
            "type": "array",
            "description": "Monitor mode only. Pick the kinds of change you want back, for example only price drops. Leave empty to get every kind. The other changes are still remembered, so nothing is repeated later, and only the rows you receive are charged.",
            "items": {
              "type": "string",
              "enum": [
                "NEW",
                "PRICE_DROP",
                "PRICE_INCREASE",
                "STATUS_CHANGE",
                "DELISTED"
              ],
              "enumTitles": [
                "New listings",
                "Price drops",
                "Price increases",
                "Rented, sold or in contract",
                "Taken off the market"
              ]
            }
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "US residential proxies are the default and the most reliable choice. Change this only if you know you need a different connection.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}