{
  "openapi": "3.0.1",
  "info": {
    "title": "HAR.com Texas Real Estate Scraper",
    "description": "Scrape HAR.com — the largest Texas MLS portal — for homes for sale, for rent, and sold across Houston, Dallas, Austin & San Antonio. Get price, beds, baths, sqft, year built, GPS, MLS#, listing agent & broker. Search by city, area, zip or URL. JSON/CSV out.",
    "version": "0.0",
    "x-build-id": "NIEZh6vkIcEOXHoH0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~har-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-har-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/memo23~har-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-har-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/memo23~har-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-har-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "listingType": {
            "title": "Listing type",
            "enum": [
              "sale",
              "rent",
              "sold",
              "agents"
            ],
            "type": "string",
            "description": "Homes for sale, homes for rent, recently sold/leased transactions, or real-estate agents. Sold data comes from agents' closed-deal history (final sold price + date). Agents mode returns the HAR agent directory (name, email, phone, rating, office) for the locations below.",
            "default": "sale"
          },
          "locations": {
            "title": "Locations (city, area, or zip)",
            "type": "array",
            "description": "Texas locations to search — a city (\"Houston\"), area (\"Sugar Land\"), or 5-digit zip code (\"78701\"). Zips search by zip code, everything else by city. One search is run per location. Leave empty if you are pasting HAR.com URLs below instead.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "HAR.com URLs (optional)",
            "type": "array",
            "description": "Paste HAR.com URLs — search-result pages (e.g. https://www.har.com/houston/realestate/for_sale or .../for_rent), map/area searches (draw an area on HAR's map, apply filters, then copy the browser URL), or individual property pages (https://www.har.com/homedetail/...). Any filters already in the URL (price, beds, property type, map bounds, acreage) are applied automatically. Property pages are fetched individually.",
            "items": {
              "type": "string"
            }
          },
          "addresses": {
            "title": "Street addresses to look up (optional)",
            "type": "array",
            "description": "Look up specific properties by street address — on OR off market. Each returns a full property record: appraisal value, multi-source valuations (AVM), tax, parcel number (APN), schools, and whether it's currently listed. Use the street portion only, e.g. \"3540 Topeka St\" (do not append city/state/zip).",
            "items": {
              "type": "string"
            }
          },
          "includeDetails": {
            "title": "Include full property detail (schools, tax, description, mortgage estimate)",
            "type": "boolean",
            "description": "Fetch each property's detail record to add schools, tax breakdown, a full description and an estimated monthly payment. Adds one API call per listing.",
            "default": false
          },
          "includeAvm": {
            "title": "Include home valuation (AVM + appraisal value)",
            "type": "boolean",
            "description": "Attach an automated valuation to each property — the appraisal-district value, an AVM estimate and price per square foot. Adds one API call per listing.",
            "default": false
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest list price (for sale) or monthly rent (for rent)."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Highest list price (for sale) or monthly rent (for rent)."
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Restrict to specific property types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "single-family",
                "townhouse-condo",
                "lots",
                "multi-family",
                "acreage",
                "mid-hi-rise-condo"
              ],
              "enumTitles": [
                "Single-Family",
                "Townhouse / Condo",
                "Residential Lots",
                "Multi-Family",
                "Country Homes / Acreage",
                "Mid / High-Rise Condo"
              ]
            }
          },
          "minBeds": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms."
          },
          "maxBeds": {
            "title": "Maximum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of bedrooms."
          },
          "minBaths": {
            "title": "Minimum full bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of full bathrooms."
          },
          "maxBaths": {
            "title": "Maximum full bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of full bathrooms."
          },
          "hasHalfBath": {
            "title": "Require a half bathroom",
            "type": "boolean",
            "description": "Only return properties that have at least one half bathroom.",
            "default": false
          },
          "minSqft": {
            "title": "Minimum square feet",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum living area in square feet."
          },
          "maxSqft": {
            "title": "Maximum square feet",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum living area in square feet."
          },
          "minPricePerSqft": {
            "title": "Minimum price per sqft",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price per square foot."
          },
          "maxPricePerSqft": {
            "title": "Maximum price per sqft",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price per square foot."
          },
          "minLotSize": {
            "title": "Minimum lot size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum lot size in square feet."
          },
          "maxLotSize": {
            "title": "Maximum lot size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum lot size in square feet."
          },
          "newConstruction": {
            "title": "New construction only",
            "type": "boolean",
            "description": "Only return newly-built homes.",
            "default": false
          },
          "hasPool": {
            "title": "Has a private pool",
            "type": "boolean",
            "description": "Only return homes with a private pool.",
            "default": false
          },
          "priceReduced": {
            "title": "Price reduced only",
            "type": "boolean",
            "description": "Only return homes with a recent price reduction.",
            "default": false
          },
          "hasOpenHouse": {
            "title": "Has an open house",
            "type": "boolean",
            "description": "Only return homes with a scheduled open house.",
            "default": false
          },
          "waterfront": {
            "title": "Waterfront only",
            "type": "boolean",
            "description": "Only return waterfront homes.",
            "default": false
          },
          "foreclosure": {
            "title": "Foreclosures only",
            "type": "boolean",
            "description": "Only return foreclosure / distressed properties.",
            "default": false
          },
          "maxHoaFee": {
            "title": "Maximum HOA / maintenance fee",
            "minimum": 0,
            "type": "integer",
            "description": "Highest monthly HOA / maintenance fee."
          },
          "minYearBuilt": {
            "title": "Minimum year built",
            "minimum": 1800,
            "type": "integer",
            "description": "Earliest construction year."
          },
          "maxYearBuilt": {
            "title": "Maximum year built",
            "minimum": 1800,
            "type": "integer",
            "description": "Latest construction year."
          },
          "extraFilters": {
            "title": "Advanced filters (raw HAR params)",
            "type": "object",
            "description": "Any other HAR filter, as raw param → value pairs. Covers the full 'More Filters' panel (waterfront view, on golf course, elevator, study room, energy-efficient, architectural style, financing type, etc.). Use the exact param names from a har.com search URL. Examples: {\"waterview\": \"1\", \"ongolfcourse\": \"1\", \"style\": \"Victorian\", \"garage_num\": \"2\"}."
          },
          "instantDatabase": {
            "title": "⚡ Instant database (no scraping)",
            "type": "boolean",
            "description": "Serve agents instantly from our pre-built HAR agent database for the locations + filters below — no live scraping, no wait. Grows every time anyone runs a normal Agents scrape.",
            "default": false
          },
          "agentName": {
            "title": "Agent name",
            "type": "string",
            "description": "Filter agents by name (first, last, or full)."
          },
          "minAgentRating": {
            "title": "Minimum agent rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only agents with at least this client rating (0–5)."
          },
          "platinumAgentsOnly": {
            "title": "Platinum agents only",
            "type": "boolean",
            "description": "Only HAR Platinum agents.",
            "default": false
          },
          "agentsWithEmailOnly": {
            "title": "Only agents with an email",
            "type": "boolean",
            "description": "Skip agents that have no email address (most have one).",
            "default": false
          },
          "includeAgentStats": {
            "title": "Include agent listing counts",
            "type": "boolean",
            "description": "Add each agent's active and sold listing counts (a productivity signal for lead qualification). Adds two extra API calls per agent, so it slows large runs.",
            "default": false
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "newest",
              "price-asc",
              "price-desc",
              "sqft-desc",
              "lotsize-desc",
              "year-desc",
              "address-asc",
              "subdivision-asc"
            ],
            "type": "string",
            "description": "Ordering of results. A sort already present in a pasted HAR.com URL takes precedence.",
            "default": "newest"
          },
          "maxSoldAgents": {
            "title": "Agents to crawl for sold data",
            "minimum": 1,
            "type": "integer",
            "description": "For 'Sold / leased' runs only: how many agents active in the searched area to pull closed-deal history from. More agents = more sold transactions, but slower. Ignored for sale/rent.",
            "default": 25
          },
          "maxItems": {
            "title": "Maximum items to scrape",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on the number of properties collected across all searches. Use this to control billing.",
            "default": 1000
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of API calls processed in parallel.",
            "default": 10
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}