{
  "openapi": "3.0.1",
  "info": {
    "title": "StreetEasy $1💰 URL Search | Keyword Filtering | Rich Output",
    "description": "From $1/1K. Scrape streeteasy.com across NYC and Jersey City for sales, rentals, in-contract, and sold properties. Supports filters or direct URLs. Returns pricing, coordinates, photos, brokerage, amenities, building details, agent contacts, and price history.",
    "version": "1.1",
    "x-build-id": "muCLlMds2wRb3F3Op"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~streeteasy-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-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/abotapi~streeteasy-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-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/abotapi~streeteasy-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "🎯 Start here, pick your search mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Use search mode to combine filters (areas, price, beds, baths, etc.) into one query. Use url mode to paste one or more StreetEasy URLs (sale, rent, sold, in-contract) and let the actor walk pagination forward.",
            "default": "search"
          },
          "saleType": {
            "title": "Listing type",
            "enum": [
              "forSale",
              "forRent",
              "inContract"
            ],
            "type": "string",
            "description": "Sale, rental, recently sold, in contract, or off market.",
            "default": "forSale"
          },
          "locations": {
            "title": "Locations (boroughs / neighborhoods)",
            "type": "array",
            "description": "Slugs as they appear in StreetEasy URLs. Examples: nyc (all NYC), manhattan, brooklyn, queens, bronx, staten-island, williamsburg, astoria, jersey-city, hoboken, upper-east-side, park-slope, dumbo. Multi-select supported. Defaults to all NYC.",
            "items": {
              "type": "string"
            },
            "default": [
              "nyc"
            ]
          },
          "urls": {
            "title": "URLs (paste any StreetEasy listing or search URL)",
            "type": "array",
            "description": "Examples:\n• https://streeteasy.com/for-sale/manhattan\n• https://streeteasy.com/for-rent/williamsburg/price:3000-5000\n• https://streeteasy.com/sold/nyc\n• https://streeteasy.com/building/the-lombardy/1401\nMulti-URL supported. Filter-mode fields are ignored. Pagination starts at the URL's page and walks forward.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "propertyTypes": {
            "title": "Property types",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter by building / property type. Multi-select supported.",
            "items": {
              "type": "string",
              "enum": [
                "CONDO",
                "CO_OP",
                "HOUSE",
                "TOWNHOUSE",
                "MULTI_FAMILY",
                "RENTAL",
                "CONDOP"
              ],
              "enumTitles": [
                "Condo",
                "Co-op",
                "House",
                "Townhouse",
                "Multi-family",
                "Rental",
                "Condop"
              ]
            },
            "default": []
          },
          "minPrice": {
            "title": "Min price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Lower bound on price. For sales: total price. For rentals: monthly rent."
          },
          "maxPrice": {
            "title": "Max price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Upper bound on price. For sales: total price. For rentals: monthly rent."
          },
          "minBedrooms": {
            "title": "Min bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Use 0 for studios."
          },
          "maxBedrooms": {
            "title": "Max bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Upper bound on bedroom count."
          },
          "minBathrooms": {
            "title": "Min bathrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Lower bound on bathroom count. Decimal supported (1.5)."
          },
          "minSqft": {
            "title": "Min square feet",
            "minimum": 0,
            "type": "integer",
            "description": "Lower bound on living area (square feet)."
          },
          "maxSqft": {
            "title": "Max square feet",
            "minimum": 0,
            "type": "integer",
            "description": "Upper bound on living area (square feet)."
          },
          "amenities": {
            "title": "Amenities (must include all selected)",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter to listings that advertise these amenities.",
            "items": {
              "type": "string",
              "enum": [
                "DOORMAN",
                "ELEVATOR",
                "GYM",
                "POOL",
                "GARAGE",
                "PARKING_AVAILABLE",
                "LAUNDRY_IN_BUILDING",
                "WASHER_DRYER_IN_UNIT",
                "DISHWASHER",
                "PRIVATE_OUTDOOR_SPACE",
                "TERRACE",
                "BALCONY",
                "ROOF_DECK",
                "BIKE_ROOM",
                "STORAGE",
                "PETS_ALLOWED",
                "FURNISHED",
                "FIREPLACE",
                "CENTRAL_AIR",
                "VIRTUAL_DOORMAN"
              ],
              "enumTitles": [
                "Doorman",
                "Elevator",
                "Gym",
                "Pool",
                "Garage",
                "Parking available",
                "Laundry in building",
                "Washer/Dryer in unit",
                "Dishwasher",
                "Private outdoor space",
                "Terrace",
                "Balcony",
                "Roof deck",
                "Bike room",
                "Storage",
                "Pets allowed",
                "Furnished",
                "Fireplace",
                "Central air",
                "Virtual doorman"
              ]
            },
            "default": []
          },
          "noFee": {
            "title": "No-fee rentals only",
            "type": "boolean",
            "description": "Rentals: only listings with no broker fee. Ignored when saleType is not forRent.",
            "default": false
          },
          "keywords": {
            "title": "Keyword search",
            "type": "string",
            "description": "Free-text keyword filter (matches description / title)."
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "RECOMMENDED",
              "PRICE_ASC",
              "PRICE_DESC",
              "LISTED_AT_DESC",
              "LISTED_AT_ASC",
              "SQFT_DESC",
              "BEDROOMS_DESC"
            ],
            "type": "string",
            "description": "Order in which results are returned.",
            "default": "RECOMMENDED"
          },
          "maxPages": {
            "title": "Max pages per query (0 = unlimited)",
            "minimum": 0,
            "type": "integer",
            "description": "Pagination cap per query. Each page returns up to perPage listings (default 100). Leave empty to walk every result page, bounded only by maxListings.",
            "default": 0
          },
          "perPage": {
            "title": "Listings per page",
            "minimum": 10,
            "maximum": 500,
            "type": "integer",
            "description": "Up to 500 supported. Higher values mean fewer round trips and lower cost.",
            "default": 100
          },
          "maxListings": {
            "title": "Max listings (0 = unlimited within budget)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap across the whole run. The actor stops as soon as this many records have been pushed. Default 20 keeps small test runs cheap; bump it for production scrapes.",
            "default": 20
          },
          "fetchDetails": {
            "title": "Fetch detail pages (slower, more fields)",
            "type": "boolean",
            "description": "When on, the actor opens each listing page to enrich amenities, building info, agent contact, full description, and price history. Adds one HTTP request per listing.",
            "default": false
          },
          "expandLargeQueries": {
            "title": "Auto-expand queries above 1050 results",
            "type": "boolean",
            "description": "When on and a query matches more than the per-query cap (~1050), the actor splits it into price buckets and merges results so you can extract the full market.",
            "default": false
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Residential US is required (StreetEasy blocks datacenter ranges). Country is forced to US.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (optional)",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a full-catalogue walk across separate runs. Listings already collected there (matched by listing id) are skipped, so this run only saves the new ones. Use this after an interrupted run, or to keep growing one big catalogue pull. For recurring daily/weekly monitoring of the same search, use Incremental mode below instead — the two are different things and normally not combined."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily/weekly monitoring of the same search. The first run returns every matching listing as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED listings — unchanged ones are skipped (and not billed). State is kept separately per search scope (mode, location/URL, filters, and the Fetch detail pages setting); use State key below to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the search scope (locations/URLs, filters, and Fetch detail pages) — different searches then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged listings (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. This returns — and bills — extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired listings (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search — not when Max listings/Max pages capped it, the site blocked a page, or Resume was used. This returns — and bills — extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}