# HAR.com Texas Real Estate Scraper (`memo23/har-scraper`) Actor

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.

- **URL**: https://apify.com/memo23/har-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Real estate, Agents, AI
- **Stats:** 7 total users, 5 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $4.00 / 1,000 property scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## HAR.com Texas Real Estate Scraper 🏡

Scrape **HAR.com** — the largest single-market MLS portal in the United States — for Texas real estate: homes **for sale**, homes **for rent**, and **sold / leased** transactions across Houston, Dallas, Austin, San Antonio and every Texas metro. Search by city, area or zip, or paste HAR.com URLs, and get back clean, structured property records: price, beds, baths, square footage, year built, lot size, GPS coordinates, MLS number, listing agent and broker — plus optional full detail and home valuation.

![How the HAR.com Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-har.png)

### Why use this HAR.com scraper?

- **All of Texas, one actor.** HAR.com aggregates listings statewide — this scraper reaches Houston, Dallas–Fort Worth, Austin, San Antonio and beyond from a single input.
- **Three markets in one tool.** For-sale, for-rent, and sold/leased — including the **final sold price and sold date** that most public tools can't reach.
- **Agent + broker on every row.** Each property carries the listing agent's name and the brokerage — ready for real-estate lead generation and outreach.
- **Built-in home valuation.** Optionally attach an automated valuation (appraisal-district value, AVM estimate, price per square foot) to every property.
- **Clean, flat schema.** One row per property, 40+ well-named fields, no nested HTML to untangle. Export to JSON, CSV or Excel.
- **Fast and reliable.** Pulls listings in large batches with accurate total counts — no login, no captcha, no browser.

### What does it do?

This actor collects Texas property data from HAR.com and returns it as structured records. Give it one or more **locations** (a city, area or zip) or paste **HAR.com URLs**, choose the **listing type** (for sale, for rent, or sold), and optionally add filters (price, beds, baths, square footage, year built). Every matching property is normalised into a single row with a consistent field set.

For **sold / leased** data, the actor gathers closed-deal history from agents active in the searched area, so you get real transaction records — address, final sold price, sold date, price per square foot — for market analysis and comparable-sales research.

### Supported inputs

| Input | Example | What it does |
| --- | --- | --- |
| **Location** | `Houston`, `Sugar Land`, `78701` | Runs a full search for that city / area / zip |
| **HAR.com search URL** | `https://www.har.com/houston/realestate/for_sale` | Turns the page (and any filters in it) into a full search |
| **HAR.com map / area search URL** | `https://www.har.com/search/dosearch?map_tools_nwlat=…&for_sale=1` | Searches exactly the area you drew on the map (bounding box or polygon), with its filters |
| **HAR.com property URL** | `https://www.har.com/homedetail/...` | Fetches that single property |
| **Street address** | `3540 Topeka St` | Looks up one property's record + valuation — even off market |

**Tip — search by map area:** on HAR.com, zoom/draw the exact area you want, apply your filters, then copy the URL from your browser and paste it into `startUrls`. The scraper reads the map bounds and every filter straight from that URL.

You can mix locations, URLs and addresses in the same run, and narrow any search with the filter fields (price, beds, baths, sqft, lot size, year built, property type, new construction).

#### Address lookup

Provide street addresses (street portion only) to pull a full property record for a specific home — **whether or not it's currently for sale**: appraisal value, **multiple independent valuations** (appraisal district, Blackknight, CoreLogic), tax rates, parcel number (APN), lot size, year built, schools, and a flag for whether it's currently listed.

### Use cases

- **Agent lead generation** — pull the HAR agent directory by city or zip: name, email, phone, rating, brokerage and office details (most agents have an email). Set listing type to **Agents**.
- **Real-estate lead generation** — build lists of listing agents and brokers, filtered by city, price band or property type.
- **Comparable-sales (comps) research** — pull recently **sold** homes with final prices and dates to value a property.
- **Market analysis & dashboards** — track inventory, price trends, days on market and price-per-square-foot across Texas metros.
- **Investor deal sourcing** — filter for new construction, price-reduced, or specific bed/bath/sqft profiles.
- **Rental market tracking** — monitor for-rent inventory and asking rents by area.
- **Property due diligence & valuation** — look up any address (on or off market) for appraisal value, multiple AVM estimates, tax, parcel number and lot details.
- **CRM enrichment** — attach valuations and full property detail to addresses you already track.

### How it works

1. **Input** — provide Texas locations and/or HAR.com URLs, pick the listing type, and set any filters.
2. **Processing** — the actor resolves each location to its market area, pages through every matching listing, and (for sold runs) gathers agents' closed deals. Optionally it fetches full detail and a home valuation per property.
3. **Output** — each property is normalised and pushed as one row to your dataset, ready to export as JSON, CSV or Excel.

### Input configuration

| Field | Type | Description |
| --- | --- | --- |
| `listingType` | select | `sale`, `rent`, or `sold` |
| `locations` | array | Texas cities, areas or zips to search |
| `startUrls` | array | HAR.com search or property URLs (optional) |
| `includeDetails` | boolean | Add schools, tax, description and mortgage estimate (one extra call per listing) |
| `includeAvm` | boolean | Add appraisal-district value + AVM estimate + price/sqft (one extra call per listing) |
| `minPrice` / `maxPrice` | integer | Price (sale) or monthly rent (rent) bounds |
| `minBeds` / `minBaths` | integer | Minimum bedrooms / full bathrooms |
| `minSqft` / `maxSqft` | integer | Living-area bounds |
| `minYearBuilt` / `maxYearBuilt` | integer | Construction-year bounds |
| `maxSoldAgents` | integer | For sold runs: how many active agents to crawl closed deals from (default 25) |
| `maxItems` | integer | Hard cap on properties collected |
| `maxConcurrency` | integer | Parallel request cap |

#### Example input

```json
{
  "listingType": "sale",
  "locations": ["Houston", "Sugar Land"],
  "minPrice": 300000,
  "maxPrice": 900000,
  "minBeds": 3,
  "includeAvm": true,
  "maxItems": 500
}
````

### Output overview

Every row is a single property with a stable, flat schema. Sale/rent rows carry `price`; sold rows add `soldPrice`, `soldDate` and `soldPricePerSqft`.

#### Output sample — home for sale

```json
{
  "listingType": "sale",
  "mlsNumber": "40109088",
  "harId": "3275972",
  "status": "Coming Soon",
  "address": "10422 Timberoak Dr",
  "city": "Houston",
  "state": "TX",
  "zip": "77043",
  "subdivision": "Shadow Oaks",
  "latitude": 29.802188,
  "longitude": -95.55525,
  "price": 965000,
  "pricePerSqft": 313.72,
  "beds": 4,
  "bathsFull": 3,
  "bathsHalf": 1,
  "sqft": 3076,
  "lotSize": "8,400 sqft",
  "yearBuilt": 1969,
  "propertyType": "Single-Family",
  "daysOnMarket": 1,
  "photo": "https://mediahar.harstatic.com/789900450/hr/789921233.jpeg",
  "photosCount": 37,
  "agentName": "Heather Niemeyer",
  "brokerName": "Camelot Realty Group",
  "url": "https://www.har.com/homedetail/10422-timberoak-dr-houston-tx-77043/3275972",
  "avmValue": "$343K",
  "avmSource": "Appraisal Districts",
  "avmPricePerSqft": "$175.75"
}
```

#### Output sample — sold property

```json
{
  "listingType": "sold",
  "mlsNumber": "68264598",
  "address": "2612 Morrison St",
  "city": "Houston",
  "state": "TX",
  "zip": "77009",
  "soldPrice": 1195000,
  "soldDate": "2026-07-01",
  "soldPricePerSqft": 671.35,
  "beds": 3,
  "bathsFull": 2,
  "sqft": 1780,
  "yearBuilt": 1920,
  "latitude": 29.782131,
  "longitude": -95.373238,
  "agentName": "Bill Baldwin",
  "brokerName": "Boulevard Realty",
  "url": "https://www.har.com/homedetail/2612-morrison-st-houston-tx-77009/7973783"
}
```

### Key output fields

| Field | Description |
| --- | --- |
| `listingType` | `sale`, `rent`, or `sold` |
| `mlsNumber` | MLS number |
| `address`, `city`, `state`, `zip` | Property location |
| `subdivision` | Neighbourhood / subdivision |
| `latitude`, `longitude` | GPS coordinates |
| `price` | List price (sale) or monthly rent (rent) |
| `soldPrice`, `soldDate` | Final sold price and date (sold rows) |
| `pricePerSqft`, `soldPricePerSqft` | Price per square foot |
| `beds`, `bathsFull`, `bathsHalf` | Bedroom / bathroom counts |
| `sqft`, `lotSize`, `yearBuilt`, `stories` | Size and age |
| `garage`, `pool`, `propertyType` | Property attributes |
| `newConstruction`, `foreclosure`, `daysOnMarket` | Listing signals |
| `photo`, `photosCount`, `videosCount` | Media |
| `agentName`, `agentId`, `brokerName` | Listing agent and brokerage |
| `url` | HAR.com property page |
| `avmValue`, `avmSource`, `avmPricePerSqft` | Home valuation (when `includeAvm` is on) |
| `description`, `schools`, `taxInfo`, `estimatedPayment` | Extra detail (when `includeDetails` is on) |

### FAQ

**Which areas are covered?**
All of Texas that HAR.com lists — Houston, Dallas–Fort Worth, Austin, San Antonio, and surrounding metros and towns.

**Can I get sold prices?**
Yes. Set `listingType` to `sold` and the actor collects closed-deal history — including final sold price, sold date and price per square foot — from agents active in the searched area.

**How many listings can I get per search?**
Searches return properties in large batches with accurate total counts. Very large areas are paged through automatically up to your `maxItems` cap.

**Do I need a login or API key?**
No. Just provide a location or URL and run.

**Does it include agent contact details?**
Every row includes the listing agent's name and brokerage. Full detail (schools, tax, description, mortgage estimate) is available via `includeDetails`.

**What formats can I export?**
JSON, CSV, Excel, or via the Apify API — like any Apify dataset.

### Support

Found a bug or need a field added? Open an issue on the actor's **Issues** tab and we'll take a look.

### Additional services

Need a custom real-estate data pipeline, scheduled runs, or delivery straight to your database or Google Sheet? Reach out through the actor's contact link — happy to help.

### Explore more scrapers

Looking for other property sources? Check the store for **Redfin**, **Realtor.com**, **Apartments.com** and more US real-estate scrapers.

### ⚠️ Disclaimer

This actor collects only publicly available information from HAR.com and is intended for legitimate uses such as market research, lead generation and data analysis. You are responsible for using the scraped data in compliance with HAR.com's terms, applicable MLS rules, and all relevant laws (including data-protection regulations). Do not use the data for spam or any unlawful purpose. This tool is not affiliated with or endorsed by the Houston Association of REALTORS® or HAR.com.

### SEO keywords

HAR.com scraper, HAR.com API, Houston real estate scraper, Texas real estate data, Texas MLS scraper, homes for sale Texas, Houston homes for sale data, Dallas real estate scraper, Austin real estate data, San Antonio homes, sold homes Texas, sold price data, real estate comps, property data extraction, real estate lead generation, listing agent leads, home valuation AVM, rental listings Texas, real estate market analysis, MLS data export.

# Actor input Schema

## `listingType` (type: `string`):

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.

## `locations` (type: `array`):

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.

## `startUrls` (type: `array`):

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.

## `addresses` (type: `array`):

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).

## `includeDetails` (type: `boolean`):

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.

## `includeAvm` (type: `boolean`):

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.

## `minPrice` (type: `integer`):

Lowest list price (for sale) or monthly rent (for rent).

## `maxPrice` (type: `integer`):

Highest list price (for sale) or monthly rent (for rent).

## `propertyTypes` (type: `array`):

Restrict to specific property types. Leave empty for all.

## `minBeds` (type: `integer`):

Minimum number of bedrooms.

## `maxBeds` (type: `integer`):

Maximum number of bedrooms.

## `minBaths` (type: `integer`):

Minimum number of full bathrooms.

## `maxBaths` (type: `integer`):

Maximum number of full bathrooms.

## `hasHalfBath` (type: `boolean`):

Only return properties that have at least one half bathroom.

## `minSqft` (type: `integer`):

Minimum living area in square feet.

## `maxSqft` (type: `integer`):

Maximum living area in square feet.

## `minPricePerSqft` (type: `integer`):

Lowest price per square foot.

## `maxPricePerSqft` (type: `integer`):

Highest price per square foot.

## `minLotSize` (type: `integer`):

Minimum lot size in square feet.

## `maxLotSize` (type: `integer`):

Maximum lot size in square feet.

## `newConstruction` (type: `boolean`):

Only return newly-built homes.

## `hasPool` (type: `boolean`):

Only return homes with a private pool.

## `priceReduced` (type: `boolean`):

Only return homes with a recent price reduction.

## `hasOpenHouse` (type: `boolean`):

Only return homes with a scheduled open house.

## `waterfront` (type: `boolean`):

Only return waterfront homes.

## `foreclosure` (type: `boolean`):

Only return foreclosure / distressed properties.

## `maxHoaFee` (type: `integer`):

Highest monthly HOA / maintenance fee.

## `minYearBuilt` (type: `integer`):

Earliest construction year.

## `maxYearBuilt` (type: `integer`):

Latest construction year.

## `extraFilters` (type: `object`):

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` (type: `boolean`):

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.

## `agentName` (type: `string`):

Filter agents by name (first, last, or full).

## `minAgentRating` (type: `integer`):

Only agents with at least this client rating (0–5).

## `platinumAgentsOnly` (type: `boolean`):

Only HAR Platinum agents.

## `agentsWithEmailOnly` (type: `boolean`):

Skip agents that have no email address (most have one).

## `includeAgentStats` (type: `boolean`):

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.

## `sortBy` (type: `string`):

Ordering of results. A sort already present in a pasted HAR.com URL takes precedence.

## `maxSoldAgents` (type: `integer`):

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.

## `maxItems` (type: `integer`):

Hard cap on the number of properties collected across all searches. Use this to control billing.

## `maxConcurrency` (type: `integer`):

Maximum number of API calls processed in parallel.

## `proxy` (type: `object`):

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.

## Actor input object example

```json
{
  "listingType": "sale",
  "locations": [
    "Houston"
  ],
  "startUrls": [],
  "addresses": [],
  "includeDetails": false,
  "includeAvm": false,
  "hasHalfBath": false,
  "newConstruction": false,
  "hasPool": false,
  "priceReduced": false,
  "hasOpenHouse": false,
  "waterfront": false,
  "foreclosure": false,
  "instantDatabase": false,
  "platinumAgentsOnly": false,
  "agentsWithEmailOnly": false,
  "includeAgentStats": false,
  "sortBy": "newest",
  "maxSoldAgents": 25,
  "maxItems": 1000,
  "maxConcurrency": 10
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "locations": [
        "Houston"
    ],
    "startUrls": [],
    "addresses": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/har-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "locations": ["Houston"],
    "startUrls": [],
    "addresses": [],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/har-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locations": [
    "Houston"
  ],
  "startUrls": [],
  "addresses": []
}' |
apify call memo23/har-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/har-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
