# Estately Property Search Scraper (`alexist/estately-property-search-scraper`) Actor

Scrape residential property listings from Estately.com across all U.S. markets. Extract 25+ fields including prices, coordinates, bedrooms, bathrooms, images, and agent details — perfect for real estate aggregators, market researchers, and investment analysts.

- **URL**: https://apify.com/alexist/estately-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

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

***

### What Is Estately.com?

Estately.com is a comprehensive real estate platform featuring millions of property listings across the United States. It aggregates MLS data, rental properties, and sales information, making it a valuable resource for buyers, sellers, investors, and researchers. Collecting property data manually from multiple search results pages is tedious and error-prone — the **Estately Property Search Scraper** automates this process, delivering structured datasets of hundreds of listings per search.

***

### Overview

The **Estately Property Search Scraper** extracts property listings from Estately.com search results pages, transforming raw HTML into clean, actionable data. It is ideal for:

- **Real estate aggregators** building comprehensive property databases
- **Investment analysts** tracking market conditions by region
- **Market researchers** studying pricing trends and inventory
- **Developers** integrating Estately data into real estate platforms
- **Investors** monitoring properties in target neighborhoods

Key strengths include batch processing up to 200 items per URL, automatic handling of pagination, proxy support for reliability, and graceful failure handling via `ignore_url_failures`.

***

### Input Format

The scraper accepts a JSON configuration object:

```json
{
    "urls": [
        "https://www.estately.com/TX/Houston?page=2"
    ],
    "max_items_per_url": 200,
    "ignore_url_failures": true
}
```

| Field | Type | Description |
|---|---|---|
| `urls` | array | Direct links to Estately search results pages. Format: `https://www.estately.com/[STATE]/[CITY]?page=[N]`. One URL per entry. |
| `max_items_per_url` | integer | Maximum number of properties to scrape per URL (range: 1–200, default: 100). Higher values capture more listings but increase runtime. |
| `ignore_url_failures` | boolean | If `true`, scraper continues if some URLs fail. If `false`, the entire run stops on first failure. Recommended: `true` for bulk scrapes. |

**Example URL formats:**

- `https://www.estately.com/TX/Houston?page=1` (Listings in Houston, Texas)
- `https://www.estately.com/CA/Los-Angeles?page=1` (Los Angeles, California)
- `https://www.estately.com/NY/Manhattan?page=1` (Manhattan, New York)

> **Tip:** To scrape multiple pages, add each URL separately (e.g., page 1, page 2, page 3).

***

### Output Format

#### Sample Output

```json
{
  "address": "930 Mckinney Park Lane",
  "bathrooms": 3.0,
  "bedrooms": 3,
  "city": "Houston",
  "coords": {
    "lat": 29.746112,
    "lng": -95.346168
  },
  "featured_image": [
    {
      "width": 900,
      "url": "https://images.estately.net/226_20927553_0_1784683599.jpg"
    },
    {
      "width": 636,
      "url": "https://images.estately.net/226_20927553_0_1784683599_636x435.jpg"
    },
    {
      "width": 320,
      "url": "https://images.estately.net/226_20927553_0_1784683599_320x212a.jpg"
    },
    {
      "width": 100,
      "url": "https://images.estately.net/226_20927553_0_1784683599_100x74.jpg"
    }
  ],
  "image_count": 42,
  "land_lease_eligible": false,
  "link_title": "930 Mckinney Park Lane for sale in Houston, TX for $315,000",
  "ln_for_display": "20927553",
  "lot_sqft": 2757,
  "monthly_savings": 0,
  "office_name": "Compass RE Texas, LLC - The Woodlands",
  "office_phone": "832-899-4788",
  "path": "/listings/info/930-mckinney-park-lane-houston-tx-77003",
  "price": "$315,000",
  "property_type": "house",
  "rental": false,
  "show_address": true,
  "sold_date": null,
  "sqft": 1632,
  "state": "TX",
  "status": "Active",
  "time_on_site": "1 day",
  "zip": "77003",
  "from_url": "https://www.estately.com/TX/Houston?page=2"
}
```

Each scraped property returns a rich record with 25+ fields:

#### Property Identification & Location

| Field | Meaning |
|---|---|
| `Address` | Full street address of the property |
| `City` | City name where the property is located |
| `State` | Two-letter state abbreviation (e.g., TX, CA, NY) |
| `ZIP` | Five-digit postal code |
| `Coordinates` | Latitude and longitude for map integration (format: `[lat, lng]`) |
| `Path` | URL path slug for the property's Estately page |

#### Property Specifications

| Field | Meaning |
|---|---|
| `Bedrooms` | Number of bedrooms in the property |
| `Bathrooms` | Number of bathrooms (may include half-baths) |
| `Sqft` | Total square footage of the building |
| `Lot Sqft` | Total land area in square feet |
| `Property Type` | Classification (e.g., House, Condo, Townhouse, Land) |

#### Pricing & Financial

| Field | Meaning |
|---|---|
| `Price` | Listed sale price in USD |
| `Monthly Savings` | Estimated monthly savings or mortgage info (if applicable) |
| `Rental` | Monthly rent price (for rental listings) |
| `Sold Date` | Date the property was sold (if applicable) |

#### Status & Visibility

| Field | Meaning |
|---|---|
| `Status` | Current listing status (e.g., For Sale, Sold, For Rent, Pending) |
| `Time On Site` | Days the property has been listed on Estately |
| `Show Address` | Boolean flag indicating if full address is publicly displayed |
| `Land Lease Eligible` | Boolean flag for leasehold or land lease eligibility |
| `Featured` | Whether the property is promoted or featured |

#### Media & Images

| Field | Meaning |
|---|---|
| `Featured Image` | URL to the primary property photo |
| `Image Count` | Total number of photos available for the property |

#### Agent & Office Information

| Field | Meaning |
|---|---|
| `Office Name` | Real estate brokerage or agency name |
| `Office Phone` | Phone number of the listing office |
| `Link Title` | Agent or office title displayed on the listing |
| `LN For Display` | Agent's name or label shown to buyers |

***

### How to Use

1. **Identify target searches** — Visit Estately.com, search for properties in your target location and price range, and copy the resulting URL (including page number).

2. **Prepare URLs** — Collect all desired URLs (e.g., multiple pages, different cities). Each URL should point to a search results page.

3. **Configure input** — Paste URLs into the `urls` array. Set `max_items_per_url` based on your needs (100–200 typical; lower for faster runs).

4. **Set failure handling** — Set `ignore_url_failures: true` to skip broken URLs without stopping the run (recommended for bulk operations).

5. **Run the scraper** — Execute the actor and monitor progress in the run log.

6. **Export data** — Download results as JSON, CSV, or Excel for analysis in spreadsheets or databases.

**Best practices:**

- Start with `max_items_per_url: 100` to test; increase to 200 once validated.
- Use one URL per page to avoid duplicate listings across runs.
- For multi-city analysis, organize URLs by state/city for easier data management.
- Schedule recurring runs to track price changes and new listings over time.

***

### Use Cases & Business Value

- **Real estate portals:** Aggregate Estately listings with other MLS sources for comprehensive property databases.
- **Market analytics:** Track median prices, average days on market, and supply/demand by region.
- **Investment scouting:** Monitor properties matching specific criteria (e.g., 3+ bedrooms under $500k in Texas).
- **Lead generation:** Build contact lists of agents handling properties in target neighborhoods.
- **Comparative market analysis:** Analyze sold properties and pricing trends for appraisal reports.

The Estately Property Search Scraper eliminates hours of copying data manually, providing clean, standardized records that feed directly into CRM systems, databases, and analytics tools.

***

### Conclusion

The **Estately Property Search Scraper** is an essential tool for professionals in real estate, investment, and market research. With support for 25+ data fields, flexible pagination, and batch processing, it transforms Estately search results into structured datasets ready for analysis. Whether you're building an aggregator, analyzing markets, or scouting investments, this scraper delivers reliable, actionable property data 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.estately.com/TX/Houston?page=2"
  ],
  "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.estately.com/TX/Houston?page=2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/estately-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.estately.com/TX/Houston?page=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/estately-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.estately.com/TX/Houston?page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}' |
apify call alexist/estately-property-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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