{
  "openapi": "3.0.1",
  "info": {
    "title": "Housing Market Data API - US Home Prices, Rents and Trends",
    "description": "Track US housing markets by county, city, ZIP and metro: daily price feed, sale and rent prices, event counts, for-sale inventory, gross yield, all cash share, investor and institutional ownership, and new construction. Plus unit level property records with full sale and rental event history.",
    "version": "0.1",
    "x-build-id": "SV1mObeRjWNyxHpuI"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~housing-market-data-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-housing-market-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~housing-market-data-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-housing-market-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~housing-market-data-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-housing-market-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": [
              "markets",
              "metrics",
              "properties",
              "resolveAddresses"
            ],
            "type": "string",
            "description": "Markets searches the directory of counties, cities, ZIP codes and metros and returns the market id everything else is keyed by. Metrics reads one or more series for the markets you name. Properties searches unit level records with their event history. Resolve addresses turns street addresses into property ids and market ids.",
            "default": "markets"
          },
          "marketName": {
            "title": "Market name contains",
            "type": "string",
            "description": "Markets mode. Part of a place name to search for, for example Austin or Miami-Dade."
          },
          "locationType": {
            "title": "Geography type",
            "enum": [
              "COUNTY",
              "CITY",
              "ZIP5",
              "CDP",
              "VILLAGE",
              "TOWN",
              "CBSA",
              "ALL"
            ],
            "type": "string",
            "description": "Markets mode. Which kind of geography to return. A metro area (CBSA) is the widest, a five digit ZIP the narrowest."
          },
          "region": {
            "title": "Census region",
            "enum": [
              "EAST_NORTH_CENTRAL",
              "EAST_SOUTH_CENTRAL",
              "MIDDLE_ATLANTIC",
              "MOUNTAIN",
              "NEW_ENGLAND",
              "PACIFIC",
              "SOUTH_ATLANTIC",
              "WEST_NORTH_CENTRAL",
              "WEST_SOUTH_CENTRAL",
              "ALL"
            ],
            "type": "string",
            "description": "Markets mode. Keeps only markets in this US census region."
          },
          "stateAbbreviation": {
            "title": "State",
            "type": "string",
            "description": "Markets mode. The two letter state code, for example TX. Use ALL for every state."
          },
          "geoid": {
            "title": "GEOID",
            "type": "string",
            "description": "Markets mode. The census geographic identifier, when you already know it."
          },
          "singleParclId": {
            "title": "Market id",
            "minimum": 1,
            "type": "integer",
            "description": "Markets mode. Looks up one market by the provider's own id, which is how to confirm what an id refers to."
          },
          "sortBy": {
            "title": "Sort markets by",
            "enum": [
              "TOTAL_POPULATION",
              "MEDIAN_INCOME",
              "CASE_SHILLER_20_MARKET",
              "CASE_SHILLER_10_MARKET",
              "PRICEFEED_MARKET",
              "PARCL_EXCHANGE_MARKET"
            ],
            "type": "string",
            "description": "Markets mode. Sorting by population is the usual way to get the largest markets first."
          },
          "sortOrder": {
            "title": "Sort order",
            "enum": [
              "ASC",
              "DESC"
            ],
            "type": "string",
            "description": "Markets mode. Descending puts the largest or highest first.",
            "default": "DESC"
          },
          "parclIds": {
            "title": "Market ids",
            "type": "array",
            "description": "Metrics and properties modes. One numeric market id per line. Run the actor in markets mode first to find them.",
            "items": {
              "type": "string"
            }
          },
          "metrics": {
            "title": "Metric series",
            "type": "array",
            "description": "Metrics mode. Which series to read for each market. Every series you pick is fetched for every market, so five metrics over ten markets is fifty requests.",
            "items": {
              "type": "string",
              "enum": [
                "price_feed/price_feed",
                "price_feed/rental_price_feed",
                "market_metrics/housing_stock",
                "market_metrics/all_cash",
                "market_metrics/housing_event_counts",
                "market_metrics/housing_event_prices",
                "market_metrics/housing_event_property_attributes",
                "for_sale_market_metrics/for_sale_inventory",
                "for_sale_market_metrics/for_sale_inventory_price_changes",
                "for_sale_market_metrics/new_listings_rolling_counts",
                "rental_market_metrics/gross_yield",
                "rental_market_metrics/new_listings_for_rent_rolling_counts",
                "rental_market_metrics/rental_units_concentration",
                "investor_metrics/housing_event_counts",
                "investor_metrics/housing_event_prices",
                "investor_metrics/housing_stock_ownership",
                "investor_metrics/purchase_to_sale_ratio",
                "investor_metrics/new_listings_for_sale_rolling_counts",
                "portfolio_metrics/sf_housing_stock_ownership",
                "portfolio_metrics/sf_housing_event_counts",
                "portfolio_metrics/sf_new_listings_for_rent_rolling_counts",
                "portfolio_metrics/sf_new_listings_for_sale_rolling_counts",
                "new_construction_metrics/housing_event_counts",
                "new_construction_metrics/housing_event_prices"
              ],
              "enumTitles": [
                "Daily price feed (price per sq ft index)",
                "Daily rental price feed",
                "Housing stock by property type",
                "All cash share of sales",
                "Housing event counts (sales, listings, rentals)",
                "Housing event prices",
                "Attributes of properties with events",
                "For sale inventory",
                "For sale inventory price changes",
                "New for sale listings (rolling counts)",
                "Gross rental yield",
                "New rental listings (rolling counts)",
                "Rental unit concentration",
                "Investor housing event counts",
                "Investor housing event prices",
                "Investor share of housing stock",
                "Investor purchase to sale ratio",
                "Investor new for sale listings",
                "Portfolio share of single family stock",
                "Portfolio single family event counts",
                "Portfolio new rental listings",
                "Portfolio new for sale listings",
                "New construction event counts",
                "New construction event prices"
              ]
            }
          },
          "startDate": {
            "title": "From date",
            "type": "string",
            "description": "Metrics mode. The earliest period to return, written as YYYY-MM-DD."
          },
          "endDate": {
            "title": "To date",
            "type": "string",
            "description": "Metrics mode. The latest period to return, written as YYYY-MM-DD."
          },
          "propertyType": {
            "title": "Property type filter",
            "enum": [
              "SINGLE_FAMILY",
              "CONDO",
              "TOWNHOUSE",
              "ALL_PROPERTIES"
            ],
            "type": "string",
            "description": "Metrics mode. Applied only to the metrics that accept it. The price feed, housing stock and investor ownership series do not, and it is left off those rather than sent and rejected."
          },
          "portfolioSize": {
            "title": "Investor portfolio size",
            "enum": [
              "PORTFOLIO_2_TO_9",
              "PORTFOLIO_10_TO_99",
              "PORTFOLIO_100_TO_999",
              "PORTFOLIO_1000_PLUS",
              "ALL_PORTFOLIOS"
            ],
            "type": "string",
            "description": "Metrics mode. Applied only to the portfolio metrics, which split institutional activity by how many single family homes the owner holds."
          },
          "parclPropertyIds": {
            "title": "Property ids",
            "type": "array",
            "description": "Properties mode. One numeric property id per line, when you already know which properties you want.",
            "items": {
              "type": "string"
            }
          },
          "latitude": {
            "title": "Latitude",
            "type": "string",
            "description": "Properties mode. The centre of a radius search. Give a longitude and a radius with it."
          },
          "longitude": {
            "title": "Longitude",
            "type": "string",
            "description": "Properties mode. The centre of a radius search. Give a latitude and a radius with it."
          },
          "radius": {
            "title": "Radius in miles",
            "type": "string",
            "description": "Properties mode. How far from the centre point to search, in miles."
          },
          "searchPropertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Properties mode. Keeps only properties of these types.",
            "items": {
              "type": "string",
              "enum": [
                "SINGLE_FAMILY",
                "CONDO",
                "TOWNHOUSE",
                "OTHER"
              ],
              "enumTitles": [
                "Single family",
                "Condo",
                "Townhouse",
                "Other"
              ]
            }
          },
          "minBeds": {
            "title": "Bedrooms from",
            "minimum": 0,
            "type": "integer",
            "description": "Properties mode. The fewest bedrooms a property may have."
          },
          "maxBeds": {
            "title": "Bedrooms to",
            "minimum": 0,
            "type": "integer",
            "description": "Properties mode. The most bedrooms a property may have."
          },
          "minBaths": {
            "title": "Bathrooms from",
            "minimum": 0,
            "type": "integer",
            "description": "Properties mode. The fewest bathrooms a property may have."
          },
          "maxBaths": {
            "title": "Bathrooms to",
            "minimum": 0,
            "type": "integer",
            "description": "Properties mode. The most bathrooms a property may have."
          },
          "minSqft": {
            "title": "Square feet from",
            "minimum": 0,
            "type": "integer",
            "description": "Properties mode. The smallest floor area in square feet."
          },
          "maxSqft": {
            "title": "Square feet to",
            "minimum": 0,
            "type": "integer",
            "description": "Properties mode. The largest floor area in square feet."
          },
          "minYearBuilt": {
            "title": "Year built from",
            "minimum": 1600,
            "type": "integer",
            "description": "Properties mode. The earliest year of construction."
          },
          "maxYearBuilt": {
            "title": "Year built to",
            "minimum": 1600,
            "type": "integer",
            "description": "Properties mode. The latest year of construction."
          },
          "current_investor_owned_flag": {
            "title": "Investor owned only",
            "type": "boolean",
            "description": "Properties mode. Keeps only properties currently owned by an investor.",
            "default": false
          },
          "current_owner_occupied_flag": {
            "title": "Owner occupied only",
            "type": "boolean",
            "description": "Properties mode. Keeps only properties the owner lives in.",
            "default": false
          },
          "current_on_market_flag": {
            "title": "On the market for sale only",
            "type": "boolean",
            "description": "Properties mode. Keeps only properties currently listed for sale.",
            "default": false
          },
          "current_on_market_rental_flag": {
            "title": "On the market for rent only",
            "type": "boolean",
            "description": "Properties mode. Keeps only properties currently listed for rent.",
            "default": false
          },
          "current_new_construction_flag": {
            "title": "New construction only",
            "type": "boolean",
            "description": "Properties mode. Keeps only properties currently classed as new construction.",
            "default": false
          },
          "has_pool": {
            "title": "Has a pool",
            "type": "boolean",
            "description": "Properties mode. Keeps only properties with a swimming pool.",
            "default": false
          },
          "entityOwnerName": {
            "title": "Institutional owner",
            "enum": [
              "AMHERST",
              "VINEBROOK_HOMES",
              "SFR3",
              "PROGRESS_RESIDENTIAL",
              "FIRSTKEY_HOMES",
              "AMH",
              "TRICON",
              "MAYMONT_HOMES",
              "INVITATION_HOMES",
              "HOME_PARTNERS_OF_AMERICA",
              "MY_COMMUNITY_HOMES",
              "BLACKSTONE",
              "BX",
              "OPENDOOR",
              "OFFERPAD"
            ],
            "type": "string",
            "description": "Properties mode. Keeps only properties held by this named institutional owner, which is how to map a single family rental portfolio."
          },
          "includeEvents": {
            "title": "Include event history",
            "type": "boolean",
            "description": "Properties mode. Returns each property's housing events alongside its attributes. Turn this off for a plain property list.",
            "default": true
          },
          "includeFullEventHistory": {
            "title": "Include the full event history",
            "type": "boolean",
            "description": "Properties mode. Returns every recorded event rather than only the most recent ones. This makes responses considerably larger.",
            "default": false
          },
          "eventNames": {
            "title": "Event types",
            "type": "array",
            "description": "Properties mode. Keeps only these kinds of housing event. Use ALL_SOLD, ALL_LISTINGS or ALL_RENTALS to take a whole category.",
            "items": {
              "type": "string",
              "enum": [
                "ALL_SOLD",
                "SOLD",
                "NON_ARMS_LENGTH_TRANSFER",
                "SOLD_INTER_PORTFOLIO_TRANSFER",
                "NON_ARMS_LENGTH_INTRA_PORTFOLIO_TRANSFER",
                "ALL_LISTINGS",
                "LISTED_SALE",
                "LISTING_REMOVED",
                "PENDING_SALE",
                "LISTING_PRICE_CHANGE",
                "RELISTED",
                "OTHER",
                "ALL_RENTALS",
                "LISTED_RENT",
                "RENTAL_PRICE_CHANGE",
                "RENTAL_LISTING_REMOVED"
              ]
            }
          },
          "minEventDate": {
            "title": "Events on or after",
            "type": "string",
            "description": "Properties mode. Keeps only events on or after this date, written as YYYY-MM-DD."
          },
          "maxEventDate": {
            "title": "Events on or before",
            "type": "string",
            "description": "Properties mode. Keeps only events on or before this date, written as YYYY-MM-DD."
          },
          "minEventPrice": {
            "title": "Event price from",
            "minimum": 0,
            "type": "integer",
            "description": "Properties mode. The lowest event price in dollars."
          },
          "maxEventPrice": {
            "title": "Event price to",
            "minimum": 0,
            "type": "integer",
            "description": "Properties mode. The highest event price in dollars."
          },
          "extraFilters": {
            "title": "Extra filters",
            "type": "object",
            "description": "Properties mode, optional. Any further filters in the provider's own format, merged over the fields above. This is how to reach the owner filters, which narrow by owner name, seller name and whether the owner was an investor at the time of the event."
          },
          "addresses": {
            "title": "Addresses",
            "type": "array",
            "description": "Resolve addresses mode. One address per line, with a street, city, state and five digit ZIP separated by commas.",
            "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
          },
          "pageSize": {
            "title": "Results per request",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many rows to ask for at a time, up to the provider's ceiling of 1000.",
            "default": 1000
          },
          "requestsPerMinute": {
            "title": "Requests per minute",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "How fast to call the provider. Lower this if your plan rate limits the run.",
            "default": 120
          },
          "apiKey": {
            "title": "API key",
            "type": "string",
            "description": "Your own API key for the housing market data provider, taken from your account. This actor is bring your own key: it never uses anyone else's credentials, and the key is stored as a secret. Paste the key on its own, without a Bearer prefix."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}