# MHVillage Listings Scraper (`piotrv1001/mhvillage-listings-scraper`) Actor

The MHVillage Listings Scraper extracts home listings from MHVillage by state or ZIP radius, capturing asking price, beds, baths, square footage, year, make/model, full address, photos, plus community and dealer details — ideal for real estate research, investment analysis, and lead generation.

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

## Pricing

from $2.00 / 1,000 listings

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

### 🏡 MHVillage Listings Scraper

Easily extract **manufactured and mobile home listings** from MHVillage — the largest US marketplace for mobile and manufactured homes for sale and rent. The **MHVillage Listings Scraper** gathers clean, structured listing data for real estate research, investment analysis, lead generation, and market tracking.

Run it by **state** for a full nationwide or statewide sweep, or by **ZIP code + radius** to target a specific local market. Hosted on the [Apify platform](https://apify.com), it gives you API access, scheduling, integrations, and dataset exports in JSON, CSV, Excel, and more — no infrastructure to manage.

### ✨ Features

- 🏠 **Comprehensive Listing Data**: Asking price, beds, baths, square footage, year, make/model, home type, serial number, and full description.
- 📍 **Full Address & Geo Data**: Street, city, state, ZIP, county, plus exact latitude/longitude coordinates.
- 🖼️ **Photo Galleries**: Direct image URLs for every photo on a listing.
- 🏘️ **Community & Dealer Info**: Linked mobile-home community (park) and sales center / dealer details.
- 🔎 **Flexible Targeting**: Scrape an entire state, go nationwide, or focus on a ZIP code within a chosen radius.
- ⚡ **Fast & Reliable**: Lightweight extraction tuned for speed and accuracy across thousands of listings.

### 🛠️ How to use the MHVillage Listings Scraper

1. **Choose a location** – Pick a US state, or enter a ZIP code (with a search radius) to target a local area.
2. **Set a limit** – Use **Maximum listings** to control how many listings you collect (and your cost).
3. **Run the scraper** – Start the run and watch results stream into your dataset in real time.
4. **Export your data** – Download the dataset as JSON, CSV, Excel, or HTML, or pull it via the Apify API.

### 📥 Input

| Field                     | Description                                                                               |
| ------------------------- | ----------------------------------------------------------------------------------------- |
| **State**                 | US state to scrape, or "All states" for a nationwide run. Ignored when a ZIP code is set. |
| **ZIP code**              | Optional. Target listings within a radius of this ZIP code. Overrides the State filter.   |
| **Search radius (miles)** | Radius around the ZIP code to include (used only with a ZIP code).                        |
| **Maximum listings**      | Cap on how many listings to scrape. Set to `0` for no limit.                              |
| **Proxy configuration**   | Optional proxy settings (not required for this Actor).                                    |

#### Example input

```json
{
    "state": "AZ",
    "maxItems": 50
}
````

Or target a local market by ZIP code:

```json
{
    "zipCode": "85001",
    "radius": 50,
    "maxItems": 100
}
```

### 📊 Output

The scraper provides structured JSON output with rich listing details. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Example:

```json
[
    {
        "url": "https://www.mhvillage.com/homes/3520623",
        "key": 3520623,
        "title": "Beautiful 55+ home in Dolce Vita",
        "listingType": ["sale"],
        "status": {
            "isSold": false,
            "isSalePending": false,
            "isPriceReduced": false,
            "isRecentlyListed": false,
            "isOnDealerLot": false
        },
        "askingPrice": 259900,
        "currency": "USD",
        "bedrooms": 3,
        "bathrooms": 2,
        "squareFeet": 1716,
        "year": 2005,
        "make": "CAVCO",
        "homeType": "Mobile",
        "serialNumber": "CAVAZD050178X",
        "description": "Welcome to Dolce Vita, a 55+ age-qualified active community...",
        "address": {
            "street": "3301 S Goldfield Road Lot 3034",
            "city": "Apache Junction",
            "state": "AZ",
            "postalCode": "85119",
            "county": "Pinal",
            "latitude": 33.38326,
            "longitude": -111.50845
        },
        "sellerContactName": "Dolce Vita Sales",
        "community": { "name": "Dolce Vita At Superstition Mountain", "website": null },
        "dealer": { "name": "Dolce Vita", "website": null },
        "features": { "laundryRoom": true, "microwave": true, "refrigerator": true },
        "photos": ["https://images.mhvillage.com/listing-photos/81025877.jpg?type=600&mod=1780483635"]
    }
]
```

#### Data fields

| Field                                                          | Description                                                              |
| -------------------------------------------------------------- | ------------------------------------------------------------------------ |
| `url`, `key`                                                   | Listing URL and unique ID                                                |
| `title`                                                        | Listing headline / caption                                               |
| `listingType`                                                  | One or more of `sale`, `rent`, `rent-to-own`                             |
| `status`                                                       | Flags: sold, sale pending, price reduced, recently listed, on dealer lot |
| `askingPrice`, `rentalPrice`, `rentToOwnPrice`, `lotRentPrice` | Pricing fields (USD)                                                     |
| `bedrooms`, `bathrooms`, `squareFeet`, `year`                  | Core home specs                                                          |
| `make`, `model`, `homeType`, `serialNumber`, `dohNumber`       | Manufacturer & identity details                                          |
| `description`                                                  | Full listing description (plain text)                                    |
| `address`                                                      | Street, city, state, ZIP, county, latitude, longitude                    |
| `sellerContactName`, `salesPersonName`                         | Seller / agent name                                                      |
| `community`                                                    | Linked mobile-home community (park) name and website                     |
| `dealer`                                                       | Linked sales center / dealer name and website                            |
| `features`                                                     | Amenities present on the home (e.g. central air, garage, fireplace)      |
| `photos`                                                       | Array of listing photo URLs                                              |

### 💰 How much does it cost to scrape MHVillage?

This Actor uses a simple **pay-per-result** model: you pay **$2.00 per 1,000 listings** ($0.002 each) and only for the listings you actually collect. There are no platform usage fees on top — what you scrape is what you pay.

| Listings scraped | Approx. cost |
| ---------------- | ------------ |
| 100              | $0.20        |
| 1,000            | $2.00        |
| 10,000           | $20.00       |

New Apify accounts include free monthly usage credits, so you can try the Actor at no cost.

### 💡 Tips

- Start with a small **Maximum listings** value to preview the data, then scale up.
- Use **ZIP code + radius** for focused local market research; use **State** (or "All states") for broad coverage.
- Schedule the Actor to run daily or weekly to track new listings and price changes over time.
- Combine the output with Apify integrations (Google Sheets, Make, Zapier, webhooks) to push data straight into your workflow.

### ❓ FAQ

**Is scraping MHVillage legal?**
This Actor collects only publicly available listing information. As with any scraping, you are responsible for how you use the data and for complying with MHVillage's Terms of Service and applicable laws. Avoid collecting personal data you are not permitted to process.

**How much data can I get?**
MHVillage lists tens of thousands of active homes across the US. You can scrape a single state, a local ZIP radius, or go nationwide.

**Why are some fields empty?**
Not every listing includes every field (e.g. some have no model, serial number, or agent email). Empty values are returned as `null`.

### 🆘 Support

Found a bug or need an extra field? Open an issue from the Actor's **Issues** tab and we'll take a look. Custom scraping solutions are also available on request.

Start extracting MHVillage manufactured & mobile home listings today! 🏡

# Actor input Schema

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

US state to scrape manufactured & mobile home listings from. Choose "All states" to scrape nationwide. Ignored when a ZIP code is provided.

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

Optional. Scrape listings within a radius of this ZIP code. When set, it overrides the State filter and lets you target a specific local area.

## `radius` (type: `integer`):

Radius in miles around the ZIP code to include. Only used when a ZIP code is provided.

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

Maximum number of listings to scrape. Set to 0 for no limit.

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

Proxy settings. The target site does not require a proxy, so this can be left disabled.

## Actor input object example

```json
{
  "state": "AZ",
  "radius": 50,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "state": "AZ"
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/mhvillage-listings-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 = { "state": "AZ" }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/mhvillage-listings-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 '{
  "state": "AZ"
}' |
apify call piotrv1001/mhvillage-listings-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "MHVillage Listings Scraper",
        "description": "The MHVillage Listings Scraper extracts home listings from MHVillage by state or ZIP radius, capturing asking price, beds, baths, square footage, year, make/model, full address, photos, plus community and dealer details — ideal for real estate research, investment analysis, and lead generation.",
        "version": "0.0",
        "x-build-id": "HcmVpc5ZnkJ4FM1iq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/piotrv1001~mhvillage-listings-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-piotrv1001-mhvillage-listings-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/piotrv1001~mhvillage-listings-scraper/runs": {
            "post": {
                "operationId": "runs-sync-piotrv1001-mhvillage-listings-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/piotrv1001~mhvillage-listings-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-piotrv1001-mhvillage-listings-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": {
                    "state": {
                        "title": "State",
                        "enum": [
                            "all",
                            "AL",
                            "AK",
                            "AZ",
                            "AR",
                            "CA",
                            "CO",
                            "CT",
                            "DE",
                            "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": "US state to scrape manufactured & mobile home listings from. Choose \"All states\" to scrape nationwide. Ignored when a ZIP code is provided.",
                        "default": "AZ"
                    },
                    "zipCode": {
                        "title": "ZIP code",
                        "type": "string",
                        "description": "Optional. Scrape listings within a radius of this ZIP code. When set, it overrides the State filter and lets you target a specific local area."
                    },
                    "radius": {
                        "title": "Search radius (miles)",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Radius in miles around the ZIP code to include. Only used when a ZIP code is provided.",
                        "default": 50
                    },
                    "maxItems": {
                        "title": "Maximum listings",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of listings to scrape. Set to 0 for no limit.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. The target site does not require a proxy, so this can be left disabled.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
