# MHVillage Manufactured & Mobile Home Scraper (`crawlerbros/mhvillage-scraper`) Actor

Scrape MHVillage.com - the largest US manufactured/mobile home marketplace. Search homes for sale or rent by state, city, or ZIP+radius, browse a specific community's inventory, or pull a dealer's lot. Get price, beds/baths, sqft, community details, photos, and listing URLs.

- **URL**: https://apify.com/crawlerbros/mhvillage-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## MHVillage Manufactured & Mobile Home Scraper

Scrape **MHVillage.com** — the largest online marketplace for manufactured and mobile homes in the United States. Search homes for sale or rent by state, city, or ZIP code + radius, browse the full inventory of a single community, or pull a dealer's lot. Get price, beds/baths, square footage, address, community/park details, photos, and the listing detail URL.

### What this actor does

- **Three modes:** `search` (state, city, or ZIP + radius), `byCommunity` (a single park's inventory), `byDealer` (a single dealer's lot)
- **Listing type filter:** for sale, for rent, rent to own, seasonal rental
- **Price, bedroom, bathroom, square footage, and year-built filters**
- **Sort order:** best match, price, year built, bedrooms, bathrooms, recently listed, recently updated, or distance (with a ZIP code)
- **Reliable pagination:** paginates using the site's own authoritative result count, so results aren't silently truncated
- **Empty fields are omitted** — every record only contains fields with real data

### Output per listing

- `listingId`, `title`, `description`
- `price`, `priceCurrency`, `rentalPrice`, `rentToOwnPrice`, `lotRent`
- `isForSale`, `isForRent`, `isRentToOwn`, `isSeasonalRental`, `isSold`, `isSalePending`, `isRecentlyListed`, `isOnDealerLot`, `isPriceReduced`, `isChattel`
- `status` (e.g. `Active`), `locationType` (e.g. `Community`)
- `yearBuilt`, `make`, `model`
- `dimensionLength`, `dimensionWidth`, `dimensionUnit`, `dimensionOrientation`
- `bedrooms`, `bathrooms`, `squareFeet`
- `serialNumber`, `dohNumber`, `structuralAdditions[]`
- `sellerContactName`, `sellerWebsite`, `terms`, `virtualTourUrl`, `listingPackage`
- `address`, `address2`, `city`, `state`, `postalCode`, `county`, `schoolDistrict`, `latitude`, `longitude`
- `communityKey`, `communityName`, `communityTagline`, `communityDescription`, `communityIsResidentOwned`, `communityIsShowcase`, `communityAgeRestrictionDescription`, `communityPetsAllowedDescription`, `communityEstablishedYear`, `communityAverageMonthlyRent`, `communityWebsite`, `communityUrl`
- `photoUrls[]` (up to 25), `primaryPhotoUrl`, `photoCount`
- `listingUrl`
- `recordType: "listing"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `search` | `search`, `byCommunity`, or `byDealer` |
| `state` | select | `FL` | 2-letter US state code (mode=search) |
| `city` | string | – | City name to narrow the search (mode=search, optional — leave empty to search the whole state) |
| `zipCode` | string | – | 5-digit ZIP; overrides state/city (mode=search, optional) |
| `radiusMiles` | select | `20` | Search radius around the ZIP code |
| `communityKey` | string | – | Numeric community/park ID (mode=byCommunity) |
| `dealerKey` | string | – | Numeric dealer/sales-center ID (mode=byDealer) |
| `listingType` | select | `sale` | Listing type filter |
| `priceMin` | int | – | Minimum listing price ($) |
| `priceMax` | int | – | Maximum listing price ($) |
| `bedroomsMin` | select | `0` (any) | Minimum bedrooms |
| `bathroomsMin` | select | `0` (any) | Minimum bathrooms |
| `sqftMin` | int | – | Minimum square footage |
| `sqftMax` | int | – | Maximum square footage |
| `yearBuiltMin` | int | – | Minimum year built |
| `yearBuiltMax` | int | – | Maximum year built |
| `hasPhotosOnly` | boolean | `false` | Only listings with at least one photo |
| `hasVirtualTourOnly` | boolean | `false` | Only listings with a virtual tour |
| `sortBy` | select | `best-match` | Sort order: best match, price, year built, bedrooms, bathrooms, recently listed/updated, or distance (ZIP searches only) |
| `maxItems` | int | `30` | Hard cap on emitted records (1–1000) |
| `proxyConfiguration` | object | US AUTO proxy | Required — see below |

#### Example: manufactured homes for sale in Orlando, FL

```json
{
  "mode": "search",
  "state": "FL",
  "city": "Orlando",
  "listingType": "sale",
  "maxItems": 50
}
````

#### Example: rentals within 30 miles of a ZIP code, 2+ beds

```json
{
  "mode": "search",
  "zipCode": "32826",
  "radiusMiles": "30",
  "listingType": "rent",
  "bedroomsMin": "2",
  "maxItems": 50
}
```

#### Example: statewide search with price band and year-built filter

```json
{
  "mode": "search",
  "state": "TX",
  "listingType": "sale",
  "priceMin": 50000,
  "priceMax": 150000,
  "yearBuiltMin": 2015,
  "maxItems": 100
}
```

#### Example: browse a single community's full inventory

```json
{
  "mode": "byCommunity",
  "communityKey": "7670",
  "listingType": "sale",
  "maxItems": 100
}
```

### Use cases

- **Home shoppers & relocation** — build a searchable database of manufactured homes for sale or rent in a target area
- **Real estate & PropTech data feeds** — power listing search UIs with fresh, structured manufactured-housing data
- **Community/park operators** — track a single community's active inventory and pricing
- **Market research** — analyze pricing and inventory mix by state or metro
- **Investment analysis** — filter by price, size, and year built across markets

### FAQ

**Do I need a login or cookies?** No. MHVillage listing data is scraped from public, unauthenticated pages and its public search API — no account or cookies required.

**Why does this actor require a proxy?** MHVillage.com shows a "not available in your area" page to visitors from outside the United States, on every page including its search API. A US-pinned Apify proxy (the free AUTO/datacenter group) resolves this — no paid residential proxy is needed.

**How does pagination work?** Each search response includes MHVillage's own authoritative total result count. The actor keeps fetching pages until it has covered that count, hit `maxItems`, or a page returns no new listings — it never silently stops early on a guessed page size.

**Why do `rent-to-own` and `seasonal-rental` sometimes return fewer results than `sale`/`rent`?** MHVillage's site only exposes a dedicated toggle for sale vs. rent; `rent-to-own`/`seasonal-rental` are matched from within the default result set using each listing's own flags, so coverage depends on what's present there.

**What is `lotRent`?** The monthly lot/land rent charged by the community, when the home sits on leased land. It's omitted for land-owned homes and any listing where MHVillage doesn't report a value.

**How do I find a community or dealer ID for `byCommunity`/`byDealer` mode?** Browse MHVillage.com and open a community or dealer page; the numeric ID appears in the page's URL.

**How do I get the cheapest or newest listings first?** Set `sortBy` to `price-asc` (cheapest first), `price-desc` (most expensive first), `year-desc` (newest built first), or `recently-listed`. Any sort other than the default `best-match` is applied via MHVillage's own search API, so results stay accurate even for state/city searches.

**What if my search returns 0 results?** The actor sets a clear status message and finishes with an empty dataset rather than erroring — check the run's status message for details.

**What states/ZIPs are supported?** All 50 US states + DC, and any valid 5-digit US ZIP code within MHVillage's coverage area.

**How fresh is the data?** Listings are served live from MHVillage.com at scrape time.

**Is this affiliated with MHVillage?** No — this is an independent, third-party actor that uses MHVillage's publicly accessible pages and search API.

# Actor input Schema

## `mode` (type: `string`):

How to locate listings.

## `state` (type: `string`):

2-letter US state code, e.g. `FL`, `TX`, `AZ`. Required for mode=search unless a ZIP code is provided instead.

## `city` (type: `string`):

City name to narrow the search, e.g. `Orlando`. Leave empty to search the whole state.

## `zipCode` (type: `string`):

5-digit US ZIP code. When set, this overrides state/city and searches within `radiusMiles` of the ZIP.

## `radiusMiles` (type: `string`):

How far from the ZIP code to search. Only applies when `zipCode` is set.

## `communityKey` (type: `string`):

Numeric MHVillage community/park ID, found in the community's MHVillage URL. Required for mode=byCommunity.

## `dealerKey` (type: `string`):

Numeric MHVillage dealer/sales-center ID, found in the dealer's MHVillage URL. Required for mode=byDealer.

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

Type of listing to search for. `sale` and `rent` are applied server-side; `rent-to-own`/`seasonal-rental` are matched against the listing's own flags within the default result set.

## `priceMin` (type: `integer`):

Drop listings priced below this amount.

## `priceMax` (type: `integer`):

Drop listings priced above this amount.

## `bedroomsMin` (type: `string`):

Drop listings with fewer bedrooms than this.

## `bathroomsMin` (type: `string`):

Drop listings with fewer bathrooms than this.

## `sqftMin` (type: `integer`):

Drop listings with fewer square feet than this.

## `sqftMax` (type: `integer`):

Drop listings with more square feet than this.

## `yearBuiltMin` (type: `integer`):

Drop homes built before this year.

## `yearBuiltMax` (type: `integer`):

Drop homes built after this year.

## `hasPhotosOnly` (type: `boolean`):

Only include listings that have at least one photo.

## `hasVirtualTourOnly` (type: `boolean`):

Only include listings that have a virtual tour.

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

How to order results. `Distance` only has an effect when a ZIP code is set. Any sort other than `Best match` is applied via MHVillage's own JSON search API (used automatically even for state/city searches).

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

Hard cap on emitted records.

## `proxyConfiguration` (type: `object`):

MHVillage.com blocks requests from outside the United States with a geo-block page. A US-pinned Apify proxy (free AUTO/datacenter group) is required.

## Actor input object example

```json
{
  "mode": "search",
  "state": "FL",
  "city": "Orlando",
  "radiusMiles": "20",
  "communityKey": "7637",
  "listingType": "sale",
  "bedroomsMin": "0",
  "bathroomsMin": "0",
  "hasPhotosOnly": false,
  "hasVirtualTourOnly": false,
  "sortBy": "best-match",
  "maxItems": 30,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset containing all scraped MHVillage home listings.

# 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 = {
    "mode": "search",
    "state": "FL",
    "city": "Orlando",
    "radiusMiles": "20",
    "communityKey": "7637",
    "listingType": "sale",
    "bedroomsMin": "0",
    "bathroomsMin": "0",
    "hasPhotosOnly": false,
    "hasVirtualTourOnly": false,
    "sortBy": "best-match",
    "maxItems": 30,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/mhvillage-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 = {
    "mode": "search",
    "state": "FL",
    "city": "Orlando",
    "radiusMiles": "20",
    "communityKey": "7637",
    "listingType": "sale",
    "bedroomsMin": "0",
    "bathroomsMin": "0",
    "hasPhotosOnly": False,
    "hasVirtualTourOnly": False,
    "sortBy": "best-match",
    "maxItems": 30,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/mhvillage-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 '{
  "mode": "search",
  "state": "FL",
  "city": "Orlando",
  "radiusMiles": "20",
  "communityKey": "7637",
  "listingType": "sale",
  "bedroomsMin": "0",
  "bathroomsMin": "0",
  "hasPhotosOnly": false,
  "hasVirtualTourOnly": false,
  "sortBy": "best-match",
  "maxItems": 30,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call crawlerbros/mhvillage-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "MHVillage Manufactured & Mobile Home Scraper",
        "description": "Scrape MHVillage.com - the largest US manufactured/mobile home marketplace. Search homes for sale or rent by state, city, or ZIP+radius, browse a specific community's inventory, or pull a dealer's lot. Get price, beds/baths, sqft, community details, photos, and listing URLs.",
        "version": "1.0",
        "x-build-id": "7YEd7tTNj0NQiiQEL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~mhvillage-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-mhvillage-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/crawlerbros~mhvillage-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-mhvillage-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/crawlerbros~mhvillage-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-mhvillage-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",
                "required": [
                    "mode",
                    "listingType",
                    "proxyConfiguration"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "byCommunity",
                            "byDealer"
                        ],
                        "type": "string",
                        "description": "How to locate listings.",
                        "default": "search"
                    },
                    "state": {
                        "title": "State (mode=search)",
                        "enum": [
                            "AL",
                            "AK",
                            "AZ",
                            "AR",
                            "CA",
                            "CO",
                            "CT",
                            "DE",
                            "DC",
                            "FL",
                            "GA",
                            "HI",
                            "ID",
                            "IL",
                            "IN",
                            "IA",
                            "KS",
                            "KY",
                            "LA",
                            "ME",
                            "MD",
                            "MA",
                            "MI",
                            "MN",
                            "MS",
                            "MO",
                            "MT",
                            "NE",
                            "NV",
                            "NH",
                            "NJ",
                            "NM",
                            "NY",
                            "NC",
                            "ND",
                            "OH",
                            "OK",
                            "OR",
                            "PA",
                            "RI",
                            "SC",
                            "SD",
                            "TN",
                            "TX",
                            "UT",
                            "VT",
                            "VA",
                            "WA",
                            "WV",
                            "WI",
                            "WY"
                        ],
                        "type": "string",
                        "description": "2-letter US state code, e.g. `FL`, `TX`, `AZ`. Required for mode=search unless a ZIP code is provided instead.",
                        "default": "FL"
                    },
                    "city": {
                        "title": "City (mode=search, optional)",
                        "type": "string",
                        "description": "City name to narrow the search, e.g. `Orlando`. Leave empty to search the whole state."
                    },
                    "zipCode": {
                        "title": "ZIP code (mode=search, optional)",
                        "type": "string",
                        "description": "5-digit US ZIP code. When set, this overrides state/city and searches within `radiusMiles` of the ZIP."
                    },
                    "radiusMiles": {
                        "title": "Search radius in miles (used with ZIP code)",
                        "enum": [
                            "5",
                            "10",
                            "20",
                            "30",
                            "40",
                            "50",
                            "60",
                            "70",
                            "80",
                            "90",
                            "100"
                        ],
                        "type": "string",
                        "description": "How far from the ZIP code to search. Only applies when `zipCode` is set.",
                        "default": "20"
                    },
                    "communityKey": {
                        "title": "Community (park) ID (mode=byCommunity)",
                        "type": "string",
                        "description": "Numeric MHVillage community/park ID, found in the community's MHVillage URL. Required for mode=byCommunity."
                    },
                    "dealerKey": {
                        "title": "Dealer (sales center) ID (mode=byDealer)",
                        "type": "string",
                        "description": "Numeric MHVillage dealer/sales-center ID, found in the dealer's MHVillage URL. Required for mode=byDealer."
                    },
                    "listingType": {
                        "title": "Listing type",
                        "enum": [
                            "sale",
                            "rent",
                            "rent-to-own",
                            "seasonal-rental"
                        ],
                        "type": "string",
                        "description": "Type of listing to search for. `sale` and `rent` are applied server-side; `rent-to-own`/`seasonal-rental` are matched against the listing's own flags within the default result set.",
                        "default": "sale"
                    },
                    "priceMin": {
                        "title": "Min price ($)",
                        "minimum": 0,
                        "maximum": 10000000,
                        "type": "integer",
                        "description": "Drop listings priced below this amount."
                    },
                    "priceMax": {
                        "title": "Max price ($)",
                        "minimum": 0,
                        "maximum": 10000000,
                        "type": "integer",
                        "description": "Drop listings priced above this amount."
                    },
                    "bedroomsMin": {
                        "title": "Min bedrooms",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5"
                        ],
                        "type": "string",
                        "description": "Drop listings with fewer bedrooms than this.",
                        "default": "0"
                    },
                    "bathroomsMin": {
                        "title": "Min bathrooms",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "4"
                        ],
                        "type": "string",
                        "description": "Drop listings with fewer bathrooms than this.",
                        "default": "0"
                    },
                    "sqftMin": {
                        "title": "Min square footage",
                        "minimum": 0,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Drop listings with fewer square feet than this."
                    },
                    "sqftMax": {
                        "title": "Max square footage",
                        "minimum": 0,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Drop listings with more square feet than this."
                    },
                    "yearBuiltMin": {
                        "title": "Min year built",
                        "minimum": 1900,
                        "maximum": 2027,
                        "type": "integer",
                        "description": "Drop homes built before this year."
                    },
                    "yearBuiltMax": {
                        "title": "Max year built",
                        "minimum": 1900,
                        "maximum": 2027,
                        "type": "integer",
                        "description": "Drop homes built after this year."
                    },
                    "hasPhotosOnly": {
                        "title": "Only listings with photos",
                        "type": "boolean",
                        "description": "Only include listings that have at least one photo.",
                        "default": false
                    },
                    "hasVirtualTourOnly": {
                        "title": "Only listings with a virtual tour",
                        "type": "boolean",
                        "description": "Only include listings that have a virtual tour.",
                        "default": false
                    },
                    "sortBy": {
                        "title": "Sort order",
                        "enum": [
                            "best-match",
                            "price-asc",
                            "price-desc",
                            "year-asc",
                            "year-desc",
                            "bedrooms-asc",
                            "bedrooms-desc",
                            "bathrooms-asc",
                            "bathrooms-desc",
                            "recently-listed",
                            "recently-updated",
                            "distance"
                        ],
                        "type": "string",
                        "description": "How to order results. `Distance` only has an effect when a ZIP code is set. Any sort other than `Best match` is applied via MHVillage's own JSON search API (used automatically even for state/city searches).",
                        "default": "best-match"
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap on emitted records.",
                        "default": 30
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "MHVillage.com blocks requests from outside the United States with a geo-block page. A US-pinned Apify proxy (free AUTO/datacenter group) is required.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
