{
  "openapi": "3.0.1",
  "info": {
    "title": "Property Search API - US Property Records, Owners and MLS",
    "description": "Search 150M+ US property records by location, owner, equity and distress: absentee owner, high equity, vacant, pre-foreclosure, cash buyer and 150 more filters. Pull full county profiles, comparable sales, MLS listings with agent contacts, and verified standardised addresses.",
    "version": "0.1",
    "x-build-id": "cNcHUnQxNi4FkdNol"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~property-search-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-property-search-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~property-search-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-property-search-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~property-search-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-property-search-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": [
              "search",
              "detail",
              "comps",
              "mlsSearch",
              "autocomplete",
              "addressCheck"
            ],
            "type": "string",
            "description": "Search builds a property list from the nationwide record set. Detail returns the full county profile for named addresses. Comps returns comparable properties for a subject. MLS search covers what is on the market. Autocomplete and address check are the address handling modes.",
            "default": "search"
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "Search modes. The city to search, used together with the state, for example Arlington."
          },
          "state": {
            "title": "State",
            "type": "string",
            "description": "Search modes. The two letter state code, for example VA."
          },
          "county": {
            "title": "County",
            "type": "string",
            "description": "Search modes. The county name, used together with the state. A county is usually the right unit for an investor list, because it matches how the records are recorded."
          },
          "zip": {
            "title": "ZIP code",
            "type": "string",
            "description": "Search modes. A five digit ZIP code."
          },
          "address": {
            "title": "Address",
            "type": "string",
            "description": "Search modes. A single full address, for example \"13723 Neil Armstrong Ave, Herndon, VA 20171\"."
          },
          "apn": {
            "title": "APN",
            "type": "string",
            "description": "Search modes. The assessor's parcel number. Give the state or county with it, because APNs are only unique inside a county."
          },
          "latitude": {
            "title": "Latitude",
            "type": "string",
            "description": "Search and autocomplete modes. The centre of a radius search, or the point to bias suggestions towards."
          },
          "longitude": {
            "title": "Longitude",
            "type": "string",
            "description": "Search and autocomplete modes. The centre of a radius search, or the point to bias suggestions towards."
          },
          "radius": {
            "title": "Radius in miles",
            "type": "string",
            "description": "Search modes. How far from the centre point to search, in miles."
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "SFR",
              "CONDO",
              "MOBILE",
              "MFR",
              "LAND",
              "OTHER"
            ],
            "type": "string",
            "description": "Search modes. Keeps only properties of this type."
          },
          "flags": {
            "title": "Property flags (all must match)",
            "type": "array",
            "description": "Search modes. The provider's own true or false property flags. Every flag you pick must match. These are what build an investor list: absentee_owner, high_equity, vacant and pre_foreclosure are the four used most.",
            "items": {
              "type": "string",
              "enum": [
                "absentee_owner",
                "adjustable_rate",
                "air_conditioning_available",
                "assumable",
                "attic",
                "auction",
                "basement",
                "breezeway",
                "carport",
                "cash_buyer",
                "corporate_owned",
                "death",
                "deck",
                "feature_balcony",
                "fire_sprinklers",
                "flood_zone",
                "foreclosure",
                "free_clear",
                "garage",
                "high_equity",
                "hoa",
                "individual_owned",
                "inherited",
                "in_state_owner",
                "investor_buyer",
                "judgment",
                "last_sale_arms_length",
                "mfh_2to4",
                "mfh_5plus",
                "mls_active",
                "mls_cancelled",
                "mls_pending",
                "mls_sold",
                "out_of_state_owner",
                "patio",
                "pool",
                "pre_foreclosure",
                "price_reduced",
                "prior_owner_individual",
                "private_lender",
                "quit_claim",
                "reo",
                "rv_parking",
                "trust_owned",
                "vacant"
              ]
            }
          },
          "bedsMin": {
            "title": "Bedrooms from",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The fewest bedrooms a property may have."
          },
          "bedsMax": {
            "title": "Bedrooms to",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The most bedrooms a property may have."
          },
          "bathsMin": {
            "title": "Bathrooms from",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The fewest bathrooms a property may have."
          },
          "bathsMax": {
            "title": "Bathrooms to",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The most bathrooms a property may have."
          },
          "buildingSizeMin": {
            "title": "Building size from (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The smallest living area in square feet."
          },
          "buildingSizeMax": {
            "title": "Building size to (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The largest living area in square feet."
          },
          "lotSizeMin": {
            "title": "Lot size from (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The smallest lot size in square feet."
          },
          "lotSizeMax": {
            "title": "Lot size to (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The largest lot size in square feet."
          },
          "yearBuiltMin": {
            "title": "Year built from",
            "minimum": 1600,
            "type": "integer",
            "description": "Search modes. The earliest year of construction."
          },
          "yearBuiltMax": {
            "title": "Year built to",
            "minimum": 1600,
            "type": "integer",
            "description": "Search modes. The latest year of construction."
          },
          "valueMin": {
            "title": "Estimated value from",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The lowest estimated market value in dollars."
          },
          "valueMax": {
            "title": "Estimated value to",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The highest estimated market value in dollars."
          },
          "equityMin": {
            "title": "Estimated equity from",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The least estimated equity in dollars. Pair this with high_equity to find owners with room to negotiate."
          },
          "equityMax": {
            "title": "Estimated equity to",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The most estimated equity in dollars."
          },
          "lastSalePriceMin": {
            "title": "Last sale price from",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The lowest recorded last sale price in dollars."
          },
          "lastSalePriceMax": {
            "title": "Last sale price to",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The highest recorded last sale price in dollars."
          },
          "lastSaleDateFrom": {
            "title": "Last sold on or after",
            "type": "string",
            "description": "Search modes. Keeps only properties whose last recorded sale is on or after this date, written as YYYY-MM-DD."
          },
          "lastSaleDateTo": {
            "title": "Last sold on or before",
            "type": "string",
            "description": "Search modes. Keeps only properties whose last recorded sale is on or before this date, written as YYYY-MM-DD."
          },
          "yearsOwnedMin": {
            "title": "Years owned from",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The fewest years the current owner has held the property. A long hold is the usual signal for a tired landlord list."
          },
          "yearsOwnedMax": {
            "title": "Years owned to",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The most years the current owner has held the property."
          },
          "daysOnMarketMin": {
            "title": "Days on market from",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The fewest days the current listing has been on the market."
          },
          "daysOnMarketMax": {
            "title": "Days on market to",
            "minimum": 0,
            "type": "integer",
            "description": "Search modes. The most days the current listing has been on the market."
          },
          "searchCriteria": {
            "title": "Extra search criteria",
            "type": "object",
            "description": "Search modes, optional. Any further criteria in the provider's own format, merged over the fields above. The provider indexes more than 150 filters including census geography, construction, sewage, water source, loan and document type codes, so this is how to reach one the form does not cover."
          },
          "addresses": {
            "title": "Addresses or property ids",
            "type": "array",
            "description": "Detail, comps and address check modes. One per line. A line of digits is treated as the provider's own property id and anything else as an address.",
            "items": {
              "type": "string"
            }
          },
          "compMaxRadiusMiles": {
            "title": "Comparable radius in miles",
            "minimum": 1,
            "type": "integer",
            "description": "Comps mode. How far from the subject to look for comparable properties."
          },
          "compMaxDaysBack": {
            "title": "Comparable age in days",
            "minimum": 1,
            "type": "integer",
            "description": "Comps mode. Ignores sales older than this many days. A tighter window tracks a fast moving market but finds fewer comparables."
          },
          "compMaxResults": {
            "title": "Comparables per subject",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Comps mode. How many comparable properties to return for each subject."
          },
          "same_beds": {
            "title": "Comparables must match bedrooms",
            "type": "boolean",
            "description": "Comps mode. Keeps only comparables with the same bedroom count as the subject.",
            "default": false
          },
          "same_baths": {
            "title": "Comparables must match bathrooms",
            "type": "boolean",
            "description": "Comps mode. Keeps only comparables with the same bathroom count as the subject.",
            "default": false
          },
          "same_zip": {
            "title": "Comparables must be in the same ZIP",
            "type": "boolean",
            "description": "Comps mode. Keeps only comparables in the subject's own ZIP code.",
            "default": false
          },
          "same_county": {
            "title": "Comparables must be in the same county",
            "type": "boolean",
            "description": "Comps mode. Keeps only comparables in the subject's own county.",
            "default": false
          },
          "same_neighborhood": {
            "title": "Comparables must be in the same neighborhood",
            "type": "boolean",
            "description": "Comps mode. Keeps only comparables in the subject's own neighborhood, which is tighter than a ZIP code.",
            "default": false
          },
          "arms_length": {
            "title": "Arms length sales only",
            "type": "boolean",
            "description": "Comps mode. Keeps only sales between unrelated parties at market value, which excludes family transfers and other sales that do not reflect a real price.",
            "default": false
          },
          "compCriteria": {
            "title": "Extra comparable criteria",
            "type": "object",
            "description": "Comps mode, optional. Any further comparable settings in the provider's own format, including the boost weights that decide how much bedrooms, bathrooms, size, lot and age each count towards the match."
          },
          "searchTerm": {
            "title": "Search term",
            "type": "string",
            "description": "Autocomplete mode. At least three characters of an address, city, county, neighborhood, ZIP or APN."
          },
          "searchTypes": {
            "title": "Suggestion types",
            "type": "array",
            "description": "Autocomplete mode. Which kinds of suggestion to return. Leave empty for all of them.",
            "items": {
              "type": "string",
              "enum": [
                "A",
                "C",
                "G",
                "N",
                "P",
                "T",
                "Z"
              ],
              "enumTitles": [
                "A - full address",
                "C - city and state",
                "G - neighborhood",
                "N - county",
                "P - APN",
                "T - state",
                "Z - ZIP code"
              ]
            }
          },
          "strictAddressMatch": {
            "title": "Strict address matching",
            "type": "boolean",
            "description": "Address check mode. Requires a closer match before the provider will call an address verified, which trades recall for precision.",
            "default": false
          },
          "includePhotos": {
            "title": "Include listing photos",
            "type": "boolean",
            "description": "MLS search mode. Asks the provider to return photo URLs with each listing. This makes responses considerably larger.",
            "default": false
          },
          "skipCount": {
            "title": "Skip the free match count",
            "type": "boolean",
            "description": "Search mode. Before paging, the actor asks how many properties match, which the provider does not charge credits for. Turn this off only if you want to save the one extra request.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum rows",
            "minimum": 1,
            "type": "integer",
            "description": "The most rows this run will save and charge for. The provider spends one credit per record returned, so this is the spending control on both sides.",
            "default": 1000
          },
          "pageSize": {
            "title": "Results per request",
            "minimum": 1,
            "maximum": 250,
            "type": "integer",
            "description": "Search modes. How many records to ask for at a time, up to the provider's ceiling of 250. A wider page is not a cheaper one, because credits count records rather than requests.",
            "default": 250
          },
          "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 property 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."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}