# Movoto Property Search Scraper (`alexist/movoto-property-search-scraper`) Actor

Scrape property listings from Movoto.com with precision. Collect prices, MLS data, photos, agent details, and 40+ fields per property — perfect for real estate investors, market analysts, and property aggregators.

- **URL**: https://apify.com/alexist/movoto-property-search-scraper.md
- **Developed by:** [Alex](https://apify.com/alexist) (community)
- **Categories:** Automation, Developer tools, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Movoto Property Search Scraper: Extract Real Estate Listings Instantly

***

### What Is Movoto.com?

Movoto.com is a leading real estate search platform aggregating property listings from Multiple Listing Services (MLS), banks, foreclosures, and other sources across the United States. It provides detailed property information including pricing, photos, open house schedules, and agent contact details. For real estate professionals and data-driven investors, manually collecting this information is inefficient. The **Movoto Property Search Scraper** automates extraction, delivering structured property records at scale from any Movoto search result page.

***

### Overview

The **Movoto Property Scraper** extracts comprehensive property details from Movoto.com search results and listing pages, converting unstructured web data into clean, structured records. It is ideal for:

- **Real estate investors** identifying opportunities and tracking market trends
- **Wholesalers** sourcing off-market properties at scale
- **Market researchers** analyzing regional pricing and inventory patterns
- **Real estate platforms** aggregating and redistributing property data
- **Realtors** conducting competitive market analysis (CMA)

Key features include configurable collection volume, automatic handling of failed URLs, and access to 40+ data fields per property including MLS numbers, pricing history, photos, and agent information.

***

### Input Format

The scraper accepts a JSON configuration object specifying target URLs and collection parameters:

```json
{
    "urls": [
        "https://www.movoto.com/dayton-tx/"
    ],
    "max_items_per_url": 200,
    "ignore_url_failures": true
}
```

| Field | Type | Description |
|---|---|---|
| `urls` | Array | Direct links to Movoto search result pages or filtered property listings (e.g., by location, price range, property type). Multiple URLs supported. |
| `max_items_per_url` | Integer | Maximum properties to scrape per URL (e.g., `200`). Useful for large searches; prevents excessive data collection. |
| `ignore_url_failures` | Boolean | If `true`, skips failed URLs and continues; if `false`, halts on errors. Recommended: `true` for bulk runs. |

> **Example URLs:**
>
> - `https://www.movoto.com/dayton-tx/` (all properties in a city)
> - `https://www.movoto.com/dayton-tx/houses-for-sale/` (filtered by type)
> - `https://www.movoto.com/dayton-tx/?minprice=100000&maxprice=500000` (price-filtered searches)

***

### Output Format

**Sample output**

```json
{
  "close_price": null,
  "days_on_movoto": 0,
  "id": "4e5152f8-ea5a-4422-840e-118d065bc708",
  "tn_img_path": "https://pi.movoto.com/p/2002/6af75818b93c036b_0_vvjIF6_p.webp",
  "list_date": null,
  "listing_agent": "",
  "list_price": 223990,
  "lot_size": null,
  "sqft_total": 1776,
  "mls_db_number": 2002,
  "mls": {
    "date_hidden": null,
    "id": 2002
  },
  "mls_number": "6af75818b93c036b",
  "bath": 2,
  "bed": 4,
  "open_houses": [],
  "office_list_name": "",
  "office_list_phone": null,
  "photo_count": 37,
  "property_type": "SINGLE_FAMILY_HOUSE",
  "property_type_display_name": "Residential - Single Family",
  "year_built": null,
  "zip_code": "77535",
  "path": "dayton-tx/85-knight-bayou-dr-dayton-tx-77535/pid_namtp99gvt1i/",
  "status": "Active",
  "house_real_status": "ACTIVE",
  "hoafee": 0,
  "price_changed_date": "2026-07-23 00:00:00",
  "price_change": null,
  "property_id": "de85bebd-c3ed-45f0-87d9-964dacc1d3ac",
  "visibility": "NO_RESTRICTION",
  "permit_avm": false,
  "sold_date": null,
  "created_at": "2026-07-23 01:19:33",
  "image_downloader_status": 7,
  "image_format": "webp",
  "garage": 2,
  "virtual_tour_link": null,
  "rental_potential": false,
  "brokerage_details": null,
  "show_on_market_time": true,
  "geo": {
    "state": "TX",
    "city": "Dayton",
    "county": "Liberty County",
    "lat": 29.977415,
    "lng": -94.90101,
    "zipcode": "77535",
    "zipcode_id": "60304",
    "sub_premise": "",
    "address": "85 Knight Bayou Dr",
    "neighborhood_s": null,
    "neighborhood_m": null,
    "neighborhood_n": null,
    "format_address": "85 Knight Bayou Dr Dayton, TX 77535",
    "sitemap_neighborhood_page_url": "",
    "neighborhood_path": ""
  },
  "is_rdc": null,
  "is_rentals": false,
  "rdc_builder_key": "BU-LHNH-9828",
  "rdc_builder_name": "Lennar",
  "rdc_listing_key_original": "SP-LHNH-5ffb57a6b25ccd65954a2a8dca3c241b",
  "rdc_listing_key_trimmed": "5ffb57a6b25ccd65954a2a8dca3c241b",
  "rdc_listing_type": "Spec",
  "rdc_subdivision_key_original": "SD-LHNH-717000112241",
  "rdc_is_product_assigned": "Yes",
  "is_sold": false,
  "listing_by_movoto": "",
  "is_video_tour": false,
  "is_3d_tour": null,
  "video_tour_link": "",
  "from_url": "https://www.movoto.com/dayton-tx/"
}
```

Each scraped property returns a detailed record with 40+ fields across multiple categories:

#### Identification & Core Data

| Field | Meaning |
|---|---|
| `ID` | Unique Movoto identifier for the property |
| `Property ID` | MLS or source system property ID |
| `Path` | URL path to the property on Movoto |
| `MLS Number` | Official MLS listing number |
| `MLS` | MLS board/source name |
| `MLS DB Number` | MLS database reference |
| `Thumbnail Image Path` | URL to property thumbnail photo |

#### Pricing & Financial

| Field | Meaning |
|---|---|
| `List Price` | Original asking price when listed |
| `Close Price` | Final sale price (if sold) |
| `Price Changed Date` | Last date price was modified |
| `Price Change` | Amount of most recent price adjustment |
| `HOA Fee` | Homeowners Association monthly fee |
| `Permit AVM` | Automated valuation model estimate |

#### Property Characteristics

| Field | Meaning |
|---|---|
| `Bed` | Number of bedrooms |
| `Bath` | Number of bathrooms |
| `Square Foot Total` | Total livable square footage |
| `Lot Size` | Land area size |
| `Year Built` | Original construction year |
| `Garage` | Number of garage spaces |
| `Property Type` | Internal property classification |
| `Property Type Display Name` | User-friendly property type (e.g., Single Family, Condo) |
| `Zip Code` | Postal code of the property |

#### Listing & Agent Information

| Field | Meaning |
|---|---|
| `Listing Agent` | Name of the listing agent |
| `Office List Name` | Real estate office/brokerage name |
| `Office List Phone` | Office phone number |
| `Brokerage Details` | Extended broker contact and info |
| `List Date` | Date the property was listed for sale |
| `Listing By Movoto` | Whether listing is managed by Movoto directly |

#### Status & Timeline

| Field | Meaning |
|---|---|
| `Status` | Current listing status (active, pending, sold, etc.) |
| `House Real Status` | Detailed status description |
| `Sold Date` | Date property closed/sold |
| `Days On Movoto` | Number of days property has been visible |
| `Show On Market Time` | Market time data |
| `Created At` | When the record was first indexed |

#### Media & Presentation

| Field | Meaning |
|---|---|
| `Photo Count` | Total number of listing photos available |
| `Image Downloader Status` | Status of image download process |
| `Image Format` | File format of photos (JPEG, WebP, etc.) |
| `Virtual Tour Link` | URL to 360° or virtual walkthrough |
| `Is Video Tour` | Whether property includes video tour |
| `Is 3D Tour` | Whether property includes 3D virtual tour |
| `Video Tour Link` | URL to video tour content |

#### MLS & Source Data

| Field | Meaning |
|---|---|
| `Is RDC` | Whether sourced from Realtor.com data |
| `RDC Builder Key` | Realtor.com builder identifier |
| `RDC Builder Name` | Builder name from Realtor.com |
| `RDC Listing Key Original` | Original Realtor.com listing key |
| `RDC Listing Key Trimmed` | Cleaned Realtor.com listing key |
| `RDC Listing Type` | Listing type classification |
| `RDC Subdivision Key Original` | Realtor.com subdivision identifier |
| `RDC Is Product Assigned` | Whether Realtor.com product assigned |

#### Additional Flags

| Field | Meaning |
|---|---|
| `Is Sold` | Boolean indicating if property sold |
| `Is Rentals` | Whether property is rental/investment |
| `Open Houses` | Upcoming or recent open house dates |
| `Rental Potential` | Estimated rental income potential |
| `Geo` | Geographic coordinates (lat/lng) |
| `Visibility` | Listing visibility status |

***

### How to Use

1. **Identify target URLs** — Navigate to Movoto.com, perform a search (by city, price range, property type), and copy the URL from the results page.
2. **Configure input** — Paste URL(s) into the `urls` array. Set `max_items_per_url` based on desired volume (typically 100–500 for thorough collection).
3. **Enable fallback** — Set `ignore_url_failures: true` to ensure the scraper continues if one URL fails.
4. **Run the scraper** — Initiate the actor and monitor progress via the run log.
5. **Export data** — Download results as JSON, CSV, or Excel for analysis in your CRM, spreadsheet, or database.

**Best practices:**

- Use narrow location or price filters to keep result counts manageable.
- Set `max_items_per_url` to 200–500 for balanced speed and data completeness.
- Verify returned MLS numbers match your intended market.

***

### Use Cases & Business Value

- **Investment analysis:** Identify deals, track inventory turnover, and monitor competition in target ZIP codes
- **Competitive intelligence:** Monitor comps and recent sales for accurate pricing strategies
- **Market research:** Analyze regional trends in days-on-market, price-per-sqft, and inventory levels
- **Lead generation:** Extract agent contacts and property owner data for outreach
- **Aggregation:** Feed Movoto data into your own real estate platform or portal
- **Valuation:** Benchmark property values using recent comp sales and listing prices

By automating property data extraction, the Movoto scraper reduces manual research time from hours to minutes, enabling data-driven decision-making across your real estate business.

***

### Conclusion

The **Movoto Property Search Scraper** transforms real estate data collection from tedious manual work into a scalable, automated process. With 40+ detailed fields per property and flexible configuration, it delivers the market intelligence you need to compete effectively. Whether you're a solo investor, wholesaler, or platform builder, this scraper accelerates your workflow and unlocks insights at scale.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the property list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.movoto.com/dayton-tx/"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}
```

# 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 = {
    "urls": [
        "https://www.movoto.com/dayton-tx/"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/movoto-property-search-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 = {
    "urls": ["https://www.movoto.com/dayton-tx/"],
    "ignore_url_failures": True,
    "max_items_per_url": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/movoto-property-search-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 '{
  "urls": [
    "https://www.movoto.com/dayton-tx/"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}' |
apify call alexist/movoto-property-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/boNqlM5w7hLI20o22/builds/O2tchtS3j3r3iak41/openapi.json
