{
  "openapi": "3.0.1",
  "info": {
    "title": "Rent Comps API - Apartment Rents, Concessions, Comps",
    "description": "Get US multifamily rent comps with asking and effective rents net of concessions, unit level availability and days on market, comparable buildings, predicted market rent per unit, and operating expense benchmarks for any apartment building.",
    "version": "0.1",
    "x-build-id": "SQd8LHkcmqEMLTU64"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~rent-comps-data-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-rent-comps-data-api",
        "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/nabeelbaghoor~rent-comps-data-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-rent-comps-data-api",
        "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/nabeelbaghoor~rent-comps-data-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-rent-comps-data-api",
        "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": [
              "propertySearch",
              "propertyReport",
              "units",
              "comparables",
              "marketRents",
              "expenseBenchmarks",
              "marketSearch",
              "shapeSearch"
            ],
            "type": "string",
            "description": "Property search resolves addresses to the provider's IDs and is free on its plans, so start there. Property report reads one building in full. Units returns one row per apartment with its asking and effective rent. Comparables finds similar buildings. Market rents says what each unit should be asking. Expense benchmarks predicts the operating statement. Market search reads every building inside a polygon.",
            "default": "propertySearch"
          },
          "searchTerm": {
            "title": "Address or building name",
            "type": "string",
            "description": "Property search mode. A partial address or building name, for example 111 w wacker. This endpoint costs nothing on the provider's plans, so resolving a long list of addresses here is free."
          },
          "state": {
            "title": "State",
            "type": "string",
            "description": "Property search mode. A two letter state code, which narrows a name that repeats across states."
          },
          "zipCode": {
            "title": "ZIP code",
            "type": "string",
            "description": "Property search mode. A five digit ZIP code."
          },
          "latitude": {
            "title": "Latitude",
            "type": "string",
            "description": "Property search mode. Give a longitude with it to search around a point."
          },
          "longitude": {
            "title": "Longitude",
            "type": "string",
            "description": "Property search mode. Give a latitude with it to search around a point."
          },
          "propertyIds": {
            "title": "Property IDs",
            "type": "array",
            "description": "One property ID per line, as returned by property search. Used by the report, units, comparables, market rents and expense benchmark modes. IDs are UUIDs and can change when the provider merges two records for the same building, so re-resolve one that stops working.",
            "items": {
              "type": "string"
            }
          },
          "includeFloorplans": {
            "title": "Include floorplan rows",
            "type": "boolean",
            "description": "Units mode. Off by default. A floorplan is the advertised unit type rather than a specific apartment, so counting both double counts the building.",
            "default": false
          },
          "historyFrom": {
            "title": "Rent history from",
            "type": "string",
            "description": "As YYYY-MM-DD. How far back the unit rent history goes in the report. A longer window is a bigger response rather than a more expensive request."
          },
          "historyTo": {
            "title": "Rent history to",
            "type": "string",
            "description": "As YYYY-MM-DD."
          },
          "occupancyOverTime": {
            "title": "Include occupancy over time",
            "type": "boolean",
            "description": "Adds the building's occupancy series to the report, which is how to see whether a rent cut was followed by a fill."
          },
          "useTrailingMarketLeasePrice": {
            "title": "Use trailing market lease prices",
            "type": "boolean",
            "description": "Reads the market from recently signed leases rather than from what is being asked today. The steadier of the two bases in a fast moving market."
          },
          "comparablesCount": {
            "title": "Number of comparables",
            "minimum": 1,
            "type": "integer",
            "description": "Comparables mode. How many similar buildings to return, best match first.",
            "default": 10
          },
          "comparablesTier": {
            "title": "Comparable tier",
            "enum": [
              "current",
              "valueAdd"
            ],
            "type": "string",
            "description": "Comparables mode. Current compares against the building as it stands. Value add compares against what it would be after renovation, which is the right basis for an acquisition underwriting.",
            "default": "current"
          },
          "renovationLevel": {
            "title": "Renovation level",
            "minimum": 0,
            "type": "integer",
            "description": "Comparables mode, on the value add tier. How extensive a renovation to assume."
          },
          "selectedIds": {
            "title": "Force these comparables in",
            "type": "array",
            "description": "Comparables mode. One property ID per line that must be included whatever the rules say.",
            "items": {
              "type": "string"
            }
          },
          "excludedIds": {
            "title": "Keep these comparables out",
            "type": "array",
            "description": "Comparables mode. One property ID per line to exclude, which is how to drop your own properties from a competitive set.",
            "items": {
              "type": "string"
            }
          },
          "minDistanceMiles": {
            "title": "Minimum distance in miles",
            "minimum": 0,
            "type": "integer",
            "description": "Comparables mode. Excludes buildings closer than this, which is occasionally useful for excluding a sister property next door."
          },
          "maxDistanceMiles": {
            "title": "Maximum distance in miles",
            "minimum": 0,
            "type": "integer",
            "description": "Comparables mode and property search. How far out to look."
          },
          "minNumberUnits": {
            "title": "Minimum unit count",
            "minimum": 0,
            "type": "integer",
            "description": "Comparables and market search modes. A building's total apartment count."
          },
          "maxNumberUnits": {
            "title": "Maximum unit count",
            "minimum": 0,
            "type": "integer",
            "description": "Comparables and market search modes."
          },
          "allowNullNumberUnits": {
            "title": "Allow unknown unit counts",
            "type": "boolean",
            "description": "Whether a building whose unit count the provider does not know survives the unit count filter. Left unset the provider decides; setting it either way is a deliberate choice between letting unknowns through and dropping them."
          },
          "minYearBuilt": {
            "title": "Built no earlier than",
            "minimum": 1800,
            "type": "integer",
            "description": "Comparables and market search modes. A four digit year."
          },
          "maxYearBuilt": {
            "title": "Built no later than",
            "minimum": 1800,
            "type": "integer",
            "description": "Comparables and market search modes. A four digit year."
          },
          "allowNullYearBuilt": {
            "title": "Allow unknown years built",
            "type": "boolean",
            "description": "Whether a building with no year on file survives the year filter. Older stock is the most likely to be missing one."
          },
          "minNumberStories": {
            "title": "Minimum storeys",
            "minimum": 0,
            "type": "integer",
            "description": "Comparables and market search modes. Storey count separates a garden style property from a mid rise."
          },
          "maxNumberStories": {
            "title": "Maximum storeys",
            "minimum": 0,
            "type": "integer",
            "description": "Comparables and market search modes."
          },
          "allowNullNumberStories": {
            "title": "Allow unknown storey counts",
            "type": "boolean",
            "description": "Whether a building with no storey count on file survives the storey filter."
          },
          "maxMilesToUniversity": {
            "title": "Maximum miles to a university",
            "minimum": 0,
            "type": "integer",
            "description": "Comparables mode. Keeps only buildings within this distance of a university, which is how to build a student housing comparable set."
          },
          "maxMilesToHospital": {
            "title": "Maximum miles to a hospital",
            "minimum": 0,
            "type": "integer",
            "description": "Comparables mode. Keeps only buildings within this distance of a hospital."
          },
          "useEmbedding": {
            "title": "Match on the provider's similarity model",
            "type": "boolean",
            "description": "Comparables mode. Uses the provider's learned building similarity rather than the attribute rules alone, which finds buildings that feel comparable without matching on paper."
          },
          "isApartment": {
            "title": "Conventional apartments",
            "type": "boolean",
            "description": "Comparables and market search modes. Leave this alone to ignore it; set it either way to filter."
          },
          "isCondo": {
            "title": "Condominiums",
            "type": "boolean",
            "description": "Comparables and market search modes. Leave this alone to ignore it."
          },
          "isSingleFamily": {
            "title": "Single family rentals",
            "type": "boolean",
            "description": "Comparables and market search modes. Leave this alone to ignore it."
          },
          "isBuildToRent": {
            "title": "Build to rent communities",
            "type": "boolean",
            "description": "Comparables and market search modes. Purpose built rental houses rather than converted ones."
          },
          "isStudent": {
            "title": "Student housing",
            "type": "boolean",
            "description": "Comparables and market search modes. Student rents are quoted per bed rather than per unit, so mixing them into a conventional comp set skews it."
          },
          "isSenior": {
            "title": "Senior living",
            "type": "boolean",
            "description": "Comparables and market search modes."
          },
          "isAffordable": {
            "title": "Affordable housing",
            "type": "boolean",
            "description": "Comparables and market search modes. Rent restricted buildings price against an income limit rather than against the market, so they belong in their own comp set."
          },
          "isLeaseUp": {
            "title": "Currently in lease up",
            "type": "boolean",
            "description": "Comparables mode. A building still filling for the first time discounts heavily, which distorts a stabilised comparison."
          },
          "polygon": {
            "title": "Search polygon",
            "type": "array",
            "description": "Market search mode. One \"latitude,longitude\" pair per line, at least three of them, in order around the boundary. The ring is closed for you and the axis order the provider needs is handled for you. Shape search mode returns a named market's own polygon.",
            "items": {
              "type": "string"
            }
          },
          "minUnitRent": {
            "title": "Minimum unit rent",
            "minimum": 0,
            "type": "integer",
            "description": "Market search mode. Keeps only buildings with units at or above this rent."
          },
          "maxUnitRent": {
            "title": "Maximum unit rent",
            "minimum": 0,
            "type": "integer",
            "description": "Market search mode. Keeps only buildings with units at or below this rent."
          },
          "rentFilterType": {
            "title": "Apply the rent filter to",
            "enum": [
              "price",
              "effective_price"
            ],
            "type": "string",
            "description": "Market search mode. The asking price, or the price net of concessions. In a market giving away free months these select materially different buildings."
          },
          "minUnitSqft": {
            "title": "Minimum unit square footage",
            "minimum": 0,
            "type": "integer",
            "description": "Market search mode."
          },
          "maxUnitSqft": {
            "title": "Maximum unit square footage",
            "minimum": 0,
            "type": "integer",
            "description": "Market search mode."
          },
          "minBuildingQuality": {
            "title": "Minimum building quality",
            "minimum": 0,
            "type": "integer",
            "description": "Market search mode. The provider's own quality score, derived from the building's photographs."
          },
          "maxBuildingQuality": {
            "title": "Maximum building quality",
            "minimum": 0,
            "type": "integer",
            "description": "Market search mode. The provider's own quality score."
          },
          "minReviewScore": {
            "title": "Minimum review score",
            "minimum": 0,
            "type": "integer",
            "description": "Market search mode. The building's resident review score."
          },
          "maxReviewScore": {
            "title": "Maximum review score",
            "minimum": 0,
            "type": "integer",
            "description": "Market search mode."
          },
          "includedAmenities": {
            "title": "Required amenities",
            "type": "array",
            "description": "Market search mode. One amenity per line, in the provider's own spelling, for example Pool or In Unit Laundry. The amenity lists on a property report are where the exact spellings come from.",
            "items": {
              "type": "string"
            }
          },
          "excludedAmenities": {
            "title": "Excluded amenities",
            "type": "array",
            "description": "Market search mode. One amenity per line to exclude.",
            "items": {
              "type": "string"
            }
          },
          "listingStatus": {
            "title": "Listing status",
            "enum": [
              "active",
              "inactive",
              "all"
            ],
            "type": "string",
            "description": "Market search mode. Active is what is advertised now; inactive is what has been taken down, which is how to study recent leasing history."
          },
          "marketNames": {
            "title": "Market names",
            "type": "array",
            "description": "Shape search mode. One market name per line, for example Austin, TX. Each returns the market's polygon, which you can feed straight into market search mode.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Maximum rows",
            "minimum": 1,
            "type": "integer",
            "description": "The most rows this run will save and charge for. This is the spending control on both sides.",
            "default": 1000
          },
          "requestsPerMinute": {
            "title": "Requests per minute",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How fast to call the provider. Its hard ceiling is 500 per rolling minute, and the actor follows the reset time the provider publishes when it does rate limit.",
            "default": 240
          },
          "baseUrl": {
            "title": "API base URL",
            "type": "string",
            "description": "Only set this if the provider has given you a different host. Leave empty to use the documented one."
          },
          "apiKey": {
            "title": "API key",
            "type": "string",
            "description": "Your own API key for the rental market data provider, from the API section of your account. This actor is bring your own key: it never uses anyone else's credentials, and the key is stored as a secret."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}