# Homes.com Scraper with Contacts & History (`fatihtahta/homes-com-scraper`) Actor

Extract Homes.com listings at scale with rich property detail, agent and agency contacts, pricing, media, sale and rental history, MLS data, and flexible market filters. Built for enterprise-grade real estate intelligence, lead enrichment, inventory monitoring, and automated analytics pipelines.

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

## Pricing

from $0.70 / 1,000 property listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 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

## Homes.com Scraper

**Slug:** `fatihtahta/homes-com-scraper`

### Overview

Homes.com Scraper collects structured real estate listing records from Homes.com, including listing identity, listing URL, status, deal type, pricing, location, property characteristics, media counts, contact details, and source context. [Homes.com](https://www.homes.com) is a public real estate marketplace where current and historical property inventory can be useful for market research, operational reporting, competitive monitoring, and enrichment workflows. The actor turns location-based Homes.com searches into repeatable JSON datasets that can be used in analytics tools, data warehouses, CRMs, and internal applications. It is designed for automation and recurring data acquisition, with consistent record structures that make repeated runs easier to compare, deduplicate, and synchronize. Output availability depends on what Homes.com publicly exposes at run time, but the actor is structured to support dependable, operationally consistent collection workflows.

### Why Use This Actor

- **Market research and analytics teams:** collect structured property inventory for market intelligence, pricing studies, availability tracking, neighborhood comparison, and operational reporting.
- **Product and content teams:** populate real estate experiences, internal directories, editorial research, or listing comparison tools with normalized public listing attributes.
- **Developers and data engineering teams:** feed downstream systems with JSON records that are suitable for ETL pipelines, scheduled exports, warehouse ingestion, and dataset normalization.
- **Lead generation and enrichment teams:** build targeted real estate prospect lists using public listing, location, property, and contact attributes where available.
- **Monitoring and competitive tracking teams:** schedule repeatable collection jobs to observe inventory movement, recent listings, price changes, and listing mix across selected markets.

### Common Use Cases

- **Market intelligence:** monitor supply, pricing, availability, property types, locations, and listing status movement across target markets.
- **Lead generation:** build targeted prospect lists from public property listings and available contact information.
- **Competitive monitoring:** track listing changes across neighborhoods, price bands, property categories, or sale and rental segments.
- **Catalog and directory building:** populate internal databases with structured public real estate records.
- **Data enrichment:** add current public property attributes to existing CRM, BI, analytics, or research datasets.
- **Recurring reporting:** schedule periodic runs for dashboards, alerts, regional summaries, or trend analysis.
- **Targeted inventory review:** collect listings that match specific criteria such as price, bedrooms, bathrooms, lot size, year built, publication age, or keyword.

### Quick Start

1. Choose a required `location`, such as a city, state, ZIP code, neighborhood, or market name.
2. Select the `deal_type` that matches your goal: for-sale, rental, sold, not-for-sale, or all available inventory.
3. Add optional filters such as price, property type, bedrooms, bathrooms, building size, lot size, listing status, publication date, or keyword.
4. Set a small `limit` for the first validation run so you can inspect the output shape quickly.
5. Run the actor in Apify Console and review the first dataset records.
6. Increase the limit, broaden coverage, adjust filters, or schedule the actor once the output matches your workflow.

### Input Parameters

Provide a required Homes.com `location`, then choose the listing mode, optional property filters, sort order, enrichment setting, coverage setting, and output limit.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `location` | string | Required Homes.com market or area. Use a city, state, ZIP code, neighborhood, or market name. | – |
| `deal_type` | string | Listing mode. Allowed values: `buy`, `rent`, `sold`, `not_for_sale`, `all`. | `buy` |
| `min_price` | integer | Minimum listing price in USD. Applies to price-filtered listing searches where supported. | – |
| `max_price` | integer | Maximum listing price in USD. Applies to price-filtered listing searches where supported. | – |
| `property_type` | array of strings | Property categories to include. Allowed values: `house`, `townhouse`, `condo`, `co_op`, `lot_land`, `mobile_homes`, `multifamily`, `other`, `apartment`. | – |
| `min_bedroom` | string | Minimum bedroom count. Allowed values: `studio`, `1`, `2`, `3`, `4`, `5+`. | – |
| `max_bedroom` | string | Maximum bedroom count. Allowed values: `studio`, `1`, `2`, `3`, `4`, `5+`. | – |
| `min_bathroom` | string | Minimum bathroom count. Allowed values: `1`, `2`, `3`, `4`, `5+`. | – |
| `max_bathroom` | string | Maximum bathroom count. Allowed values: `1`, `2`, `3`, `4`, `5+`. | – |
| `min_building_area` | string | Minimum building area in square feet. Allowed values: `500`, `750`, `1000`, `1250`, `1500`, `1750`, `2000`, `2250`, `2500`, `2750`, `3000`, `3500`, `4000`, `4500`, `5000`, `6000`, `7000`, `8000`, `9000`, `10000`. | – |
| `max_building_area` | string | Maximum building area in square feet. Allowed values: `500`, `750`, `1000`, `1250`, `1500`, `1750`, `2000`, `2250`, `2500`, `2750`, `3000`, `3500`, `4000`, `4500`, `5000`, `6000`, `7000`, `8000`, `9000`, `10000`. | – |
| `min_land_area` | string | Minimum lot size. Allowed values: `3000_sqft`, `5000_sqft`, `7000_sqft`, `0.25_acre`, `0.5_acre`, `0.75_acre`, `1_acre`, `1.5_acres`, `2_acres`, `2.5_acres`, `3_acres`, `4_acres`, `5_acres`, `10_acres`, `15_acres`, `20_acres`, `50_acres`, `100_acres`, `500_acres`, `1000_acres`. | – |
| `max_land_area` | string | Maximum lot size. Allowed values: `3000_sqft`, `5000_sqft`, `7000_sqft`, `0.25_acre`, `0.5_acre`, `0.75_acre`, `1_acre`, `1.5_acres`, `2_acres`, `2.5_acres`, `3_acres`, `4_acres`, `5_acres`, `10_acres`, `15_acres`, `20_acres`, `50_acres`, `100_acres`, `500_acres`, `1000_acres`. | – |
| `min_psf` | integer | Minimum price per square foot in USD. Applies to price-per-square-foot searches where supported. | – |
| `max_psf` | integer | Maximum price per square foot in USD. Applies to price-per-square-foot searches where supported. | – |
| `keyword` | string | Keyword or phrase used to narrow listings by matching public listing text or attributes. | – |
| `mls_number` | string | MLS number used to target a known listing when available. | – |
| `sale_listing_status` | array of strings | For-sale listing statuses to include. Allowed values: `coming_soon`, `active`, `under_contract`, `pending`. | `["coming_soon", "active"]` |
| `sale_listing_type` | array of strings | For-sale listing types to include. Allowed values: `resale`, `new_construction`, `pre_foreclosure`, `foreclosure`, `short_sale`, `auction`. | – |
| `publication_date` | string | Listing age window for sale and rental searches. Allowed values: `last_24_hours`, `less_than_3_days`, `less_than_7_days`, `less_than_1_month`, `more_than_7_days`, `more_than_14_days`, `more_than_1_month`, `more_than_3_months`, `more_than_6_months`, `more_than_1_year`. | – |
| `price_reduction_period` | string | Price reduction timing window for for-sale searches. Allowed values: `last_3_days`, `last_7_days`, `last_14_days`, `last_30_days`, `over_1_month`, `over_2_months`, `over_3_months`. | – |
| `min_parking` | string | Minimum parking spaces. Allowed values: `1+`, `2+`, `3+`, `4+`. | – |
| `garage_parking` | boolean | Require garage parking when parking filters are relevant. | `false` |
| `open_house_and_tours` | string | Open house or media availability filter. Allowed values: `open_house`, `3d_tours`, `matterport_3d_tour`, `video`. | – |
| `min_greatschools_rating` | string | Minimum GreatSchools rating. Allowed values: `5+`, `6+`, `7+`, `8+`, `9+`, `10`. | – |
| `min_niche_grade_rating` | string | Minimum Niche grade. Allowed values: `C`, `B`, `B+`, `A-`, `A`, `A+`. | – |
| `views` | array of strings | View types to include for sale or rental listings. Allowed values: `mountain_hills`, `water`, `city`, `woods`, `other`. | – |
| `min_building_year` | string | Earliest year built. Allowed values: `1900`, `1925`, `1950`, `1960`, `1970`, `1980`, `1990`, `2000`, `2005`, `2010`, `2015`, `2018`, `2019`, `2020`, `2021`, `2022`, `2023`, `2024`, `2025`, `2026`. | – |
| `max_building_year` | string | Latest year built. Allowed values: `1900`, `1925`, `1950`, `1960`, `1970`, `1980`, `1990`, `2000`, `2005`, `2010`, `2015`, `2018`, `2019`, `2020`, `2021`, `2022`, `2023`, `2024`, `2025`, `2026`. | – |
| `min_stories` | string | Minimum number of stories. Allowed values: `1`, `2`, `3`. | – |
| `max_stories` | string | Maximum number of stories. Allowed values: `1`, `2`, `3`. | – |
| `sort_by` | string | Result ordering. Allowed values: `recommended`, `newest`, `price_low_to_high`, `price_high_to_low`, `rental_rate_low_to_high`, `rental_rate_high_to_low`, `year_built`. | `recommended` |
| `enrich_data` | boolean | Collect richer details from individual listing pages when available, such as highlights, MLS information, property details, and history tables. This can make runs slower. | `false` |
| `maximize_coverage` | boolean | Use for broad markets when you want a stronger effort to collect more available results. May increase run time. | `false` |
| `limit` | integer | Maximum number of records to save. Minimum value: `1`. Leave empty to collect as many matching results as the configured search can return. | – |

### Choosing Inputs

Start with the most important scope decision: `location`. A specific city, ZIP code, neighborhood, or market produces a more focused dataset, while a broader location improves discovery but may require a higher `limit` or `maximize_coverage`.

Use `deal_type` to align the run with the inventory you need: for-sale listings, rentals, sold properties, not-for-sale properties, or all available inventory. Add filters gradually. Narrow filters such as price, bedrooms, bathrooms, lot size, school ratings, publication date, or keyword produce more targeted records, while broader filters increase discovery and help market exploration.

For validation, set a small `limit` first and inspect the dataset. After confirming the output shape and coverage, increase `limit`, adjust `sort_by`, or enable `maximize_coverage` for large markets where broader collection is needed.

### Example Inputs

#### For-sale market validation

```json
{
  "location": "Los Angeles, CA",
  "deal_type": "buy",
  "property_type": ["house", "townhouse"],
  "min_price": 500000,
  "max_price": 1200000,
  "sort_by": "newest",
  "limit": 25
}
````

#### Rental inventory review

```json
{
  "location": "Austin, TX",
  "deal_type": "rent",
  "property_type": ["apartment"],
  "min_bedroom": "1",
  "max_price": 3000,
  "sort_by": "rental_rate_low_to_high",
  "limit": 50
}
```

#### Broad discovery with conservative coverage

```json
{
  "location": "Phoenix, AZ",
  "deal_type": "all",
  "min_building_year": "2000",
  "max_building_area": "3000",
  "maximize_coverage": true,
  "limit": 100
}
```

### Output

#### Output destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

The example below documents the listing record shape. If additional entity types or record shapes are returned in future versions, each shape should be documented separately based on its example output.

#### Record envelope and stable identifiers

Each record is a Homes.com listing object with top-level identity fields, grouped listing attributes, and source context. The recommended idempotency key is `listing_id`; when a workflow needs an additional guard, use a composite key such as `listing_id` plus `url`, or compare `source_context.fingerprint`.

Use the recommended key for deduplication and upserts when loading records into warehouses, CRMs, search indexes, or internal databases. Stable identifiers make records easier to merge, deduplicate, and sync across repeated runs.

The `source_context.fingerprint` field provides an additional comparison value for repeat collection workflows.

When `enrich_data` is enabled, records keep the same base shape and may include additional optional fields under `pricing`, `location`, `property`, `contact`, `listing_details`, `history`, and `source_context`. The actor only enriches listings discovered from the requested search scope.

#### Examples

##### Example: listing record

```json
{
  "listing_id": "vqrb8jewftvgn",
  "url": "https://www.homes.com/property/12401-filmore-637-st-sylmar-ca-unit-637/vqrb8jewftvgn/",
  "title": "12401 Filmore #637 St Unit 637, Sylmar, CA 91342",
  "status": "for sale",
  "deal_type": "buy",
  "pricing": {
    "price": "$120,000",
    "map_price": "120K",
    "currency": "USD"
  },
  "location": {
    "address": "12401 Filmore #637 St Unit 637, Sylmar, CA 91342",
    "latitude": 34.28713,
    "longitude": -118.40353
  },
  "property": {
    "property_type": "ManufacturedHome",
    "beds": "1 Bed",
    "baths": "1 Bath",
    "sqft": "460 Sq Ft",
    "description": "The home has been remodeled inside-out with new appointments, such as new kitchen with stove and microwave included in the sale,1 new mini-split for your comfort. The flooring, dual-pane windows, paint inside and outside, just about everithng is new. The remodeling was done with excellent taste and decor to blend with the necessities of today's world. The complex has a pool and entertainments"
  },
  "media": {
    "primary_image_url": "https://images.homes.com/listings/115/1184088684-117623812/12401-filmore-637-st-sylmar-ca-primaryphoto.jpg",
    "image_count": 14
  },
  "contact": {
    "agent_name": "Federico Triebel",
    "agency_name": "Federico J. Triebel",
    "agency_phone": "(747) 946-5552"
  },
  "source_context": {
    "seed_id": "a4c67fb8079a88949510",
    "seed_type": "search",
    "seed_value": "Los Angeles, CA",
    "page_index": 1,
    "fingerprint": "0efff9064f9cd0e8ce52",
    "source_keys": {
      "location_key": "8cxzcm6d86l58",
      "property_asset_key": "ng2c9tq"
    }
  }
}
```

### Field Reference

#### Listing Record

**listing\_id** *(string, required)*: Stable Homes.com listing identifier when available.

**url** *(string, required)*: Public Homes.com listing URL.

**title** *(string, optional)*: Human-readable listing title or address-style heading.

**status** *(string, optional)*: Listing status, such as `for sale`.

**deal\_type** *(string, required)*: Collection mode used for the listing, such as `buy`, `rent`, `sold`, `not_for_sale`, or `all`.

**pricing.price** *(string, optional)*: Display price exactly as available from the listing.

**pricing.map\_price** *(string, optional)*: Compact price label when available.

**pricing.price\_per\_sqft** *(string, optional)*: Listing-page price per square foot label when enrichment is enabled and available.

**pricing.estimated\_payment** *(string, optional)*: Estimated payment text from the listing page when enrichment is enabled and available.

**pricing.monthly\_price\_label** *(string, optional)*: Rental price label from the listing page, such as `total monthly price`, when enrichment is enabled and available.

**pricing.currency** *(string, optional)*: Currency code, such as `USD`.

**location.address** *(string, optional)*: Public listing address or location label.

**location.latitude** *(number, optional)*: Latitude coordinate when available.

**location.longitude** *(number, optional)*: Longitude coordinate when available.

**location.building\_name** *(string, optional)*: Building or community name from the listing page when available.

**location.neighborhood** *(string, optional)*: Neighborhood label from the listing page when available.

**property.property\_type** *(string, optional)*: Property category or type label.

**property.beds** *(string, optional)*: Bedroom count as displayed by the source.

**property.baths** *(string, optional)*: Bathroom count as displayed by the source.

**property.sqft** *(string, optional)*: Building area as displayed by the source.

**property.description** *(string, optional)*: Public listing description when available.

**property.year\_built** *(integer or string, optional)*: Year-built value when available.

**property.lease\_term** *(string, optional)*: Rental lease term text from the listing page when enrichment is enabled and available.

**property.highlights** *(array, optional)*: Listing-page highlight labels when enrichment is enabled and available.

**property.details** *(object, optional)*: Grouped listing-page property details when enrichment is enabled and available.

**property.fees\_and\_policies** *(object, optional)*: Rental fees and policies sections, such as pet policy categories and fee rows, when enrichment is enabled and available.

**media.primary\_image\_url** *(string, optional)*: Primary listing image URL.

**media.image\_count** *(integer, optional)*: Number of listing images when available.

**contact.agent\_name** *(string, optional)*: Listing agent name when publicly available.

**contact.agency\_name** *(string, optional)*: Agency or brokerage name when publicly available.

**contact.agency\_phone** *(string, optional)*: Agency or listing phone number when publicly available.

**contact.property\_manager\_label** *(string, optional)*: Rental contact label, such as `PROPERTY MANAGER`, when enrichment is enabled and available.

**contact.property\_manager\_name** *(string, optional)*: Rental property manager name when enrichment is enabled and available.

**contact.property\_manager\_phone** *(string, optional)*: Rental property manager or listing phone number when enrichment is enabled and available.

**contact.sold\_agents** *(array, optional)*: Last seller and buyer agent details from sold listing pages when enrichment is enabled and available.

**contact.affiliated\_agents** *(array, optional)*: Agents affiliated with a sold home, including role, company, phone, and sales labels when enrichment is enabled and available.

**listing\_details.mls\_number** *(string, optional)*: MLS number from the detail page when available.

**listing\_details.mls\_source** *(string, optional)*: MLS or source attribution from the detail page when available.

**listing\_details.apn** *(string, optional)*: Assessor parcel number from the detail page when available.

**listing\_details.date\_posted** *(string, optional)*: Listing posted date from structured detail metadata when available.

**listing\_details.date\_modified** *(string, optional)*: Listing modified date from structured detail metadata when available.

**listing\_details.availability** *(string, optional)*: Structured availability value from the detail page when available.

**listing\_details.total\_views** *(string, optional)*: Total views label from the detail page when available.

**listing\_details.meta\_description** *(string, optional)*: Detail-page meta description when available.

**listing\_details.listing\_provider** *(string, optional)*: Detail-page listing provider attribution when enrichment is enabled and available.

**listing\_details.sale\_details** *(object, optional)*: Sold-listing sale summary, such as sold date, sold price per square foot, list-to-sale difference, and time on market, when enrichment is enabled and available.

**history.price** *(array, optional)*: Listing price history rows when enrichment is enabled and available.

**history.tax** *(array, optional)*: Tax history rows when enrichment is enabled and available.

**history.purchase** *(array, optional)*: Purchase history rows when enrichment is enabled and available.

**source\_context.seed\_id** *(string, optional)*: Identifier for the configured input scope that produced the record.

**source\_context.seed\_type** *(string, optional)*: Input scope type, such as `search`.

**source\_context.seed\_value** *(string, optional)*: Input value that produced the record, such as the requested location.

**source\_context.page\_index** *(integer, optional)*: Result page index associated with the record when available.

**source\_context.fingerprint** *(string, optional)*: Stable comparison value for deduplication and repeated collection workflows.

**source\_context.detail\_source\_url** *(string, optional)*: Listing page URL used for enrichment when available.

**source\_context.detail\_status\_code** *(integer, optional)*: HTTP status from the enrichment detail request when available.

**source\_context.enriched** *(boolean, optional)*: Indicates that detail-page data was merged into the base record.

**source\_context.source\_keys.location\_key** *(string, optional)*: Source-provided location key when available.

**source\_context.source\_keys.property\_asset\_key** *(string, optional)*: Source-provided property asset key when available.

### Data Quality, Guarantees, And Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, listing type, or source-side presentation changes.
- **Optional fields:** null-check optional fields in downstream code, especially media, contact, coordinates, descriptions, and source-specific keys.
- **Deduplication:** use `listing_id` as the primary key where available; for stronger matching, combine it with `url` or compare `source_context.fingerprint`.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, or search indexes.

### Tips For Best Results

- Start with a small `limit` to validate the output shape before scaling up.
- Use one `location` or market segment per run when you need cleaner segmentation.
- Leave optional filters empty when the goal is broad discovery.
- Add filters gradually to understand how each field changes coverage.
- Use `deal_type` and `sort_by` together when monitoring specific inventory segments.
- Enable `maximize_coverage` for broad markets only after a smaller validation run looks correct.
- Use `listing_id` and `source_context.fingerprint` for deduplication when storing results over time.

### How to Run on Apify

1. Open the actor in Apify Console.
2. Configure the available input fields for the target location and listing scope.
3. Set the maximum number of outputs to collect with `limit`.
4. Click **Start** and wait for the run to finish.
5. Open the dataset and review the first records.
6. Download results in JSON, CSV, Excel, or other supported formats.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

Schedule runs to keep Homes.com listing datasets fresh for recurring analysis, enrichment, monitoring, and reporting workflows. Use schedules when you need consistent collection intervals rather than manual one-off runs.

- Navigate to **Schedules** in Apify Console
- Create a new schedule: daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **CRM enrichment:** sync public listing, location, price, property, and contact attributes into account or lead records.
- **BI dashboards:** monitor pricing, availability, property mix, market coverage, and listing movement over time.
- **Data warehouses:** load normalized listing records into historical tables for trend analysis and reporting.
- **Google Sheets or Airtable:** review smaller market samples, validate records, and coordinate lightweight operations.
- **Webhooks:** trigger ingestion, validation, alerts, or notification workflows after each completed run.
- **Data enrichment pipelines:** join Homes.com listing data with internal market, lead, geography, or valuation datasets.

### Export Formats And Downstream Use

Apify datasets can be exported from the platform or consumed by downstream systems. Choose the format that matches your operational workflow.

- **JSON:** for APIs, applications, and data pipelines.
- **CSV or Excel:** for spreadsheet workflows and manual review.
- **API access:** for automated ingestion into internal systems.
- **BI and warehouses:** for reporting, dashboards, and historical analysis.

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~3-5 minutes
- **Medium runs (1,000-5,000 outputs):** ~5-15 minutes
- **Large runs (5,000+ outputs):** ~15-30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery, `maximize_coverage`, or `enrich_data` runs may take longer.

### Limitations

- Availability depends on what [Homes.com](https://www.homes.com) publicly exposes at run time.
- Some optional fields may be missing on sparse records, listing previews, regional variants, or records with limited public information.
- Very broad searches may take longer or require higher `limit` values.
- Target-side changes can affect field availability, naming, or display formatting.
- Regional, account, or availability differences may change visible results.
- Price, date, status, and property filters depend on the selected `deal_type` and what matching public inventory contains.

### Troubleshooting

- **No results returned:** check filter combinations, location spelling, and whether Homes.com has matching public records for the selected scope.
- **Fewer results than expected:** broaden filters, raise `limit`, or verify that the target market contains enough matching records.
- **Some fields are empty:** optional fields depend on what each listing publicly provides.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, turn off `enrich_data` when lightweight records are enough, or split broad collection into smaller locations or segments.
- **Output changed:** compare the current output with the field reference and include a small sample when reporting an issue.

### FAQ

#### What data does this actor collect?

It collects public Homes.com listing records, including listing identity, URL, title, status, deal type, pricing, location, property attributes, media information, contact fields when available, and source context. When `enrich_data` is enabled, it may also add listing-page details such as highlights, MLS information, property detail groups, and history tables.

#### Can I filter by location, category, date, price, or other criteria?

Yes. The actor requires `location` and supports filters such as `deal_type`, price range, property type, bedrooms, bathrooms, building size, lot size, price per square foot, keyword, MLS number, listing status, listing type, publication date, price reduction period, parking, tours, school ratings, views, year built, stories, sort order, and output limit.

#### Why did I receive fewer results than my limit?

The `limit` is a maximum, not a guarantee. A run may return fewer records when the selected market has fewer matching public listings, when filters are narrow, or when some records are not available at run time.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cron schedule for monitoring, reporting, and enrichment workflows.

#### How do I avoid duplicates across runs?

Use `listing_id` as the primary idempotency key where available. For stricter matching, combine `listing_id` with `url` or compare `source_context.fingerprint`.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support JSON, CSV, Excel, and other export formats from the dataset interface.

#### Does this actor collect private data?

No. The actor is intended to collect publicly available listing information from Homes.com. Users are responsible for using the data in accordance with applicable laws, regulations, and terms.

#### What should I include when reporting an issue?

Include the input used, with sensitive values redacted if needed, the run ID, expected versus actual behavior, and a small output sample when it helps explain the issue.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available real estate listing information from [Homes.com](https://www.homes.com) for legitimate business purposes, including:

- **Real estate** research and market analysis
- **Listing monitoring** for pricing, availability, and inventory changes
- **Data enrichment** for analytics, reporting, and operational workflows

This section is informational and not legal advice. Users are responsible for determining whether their use of the collected data complies with applicable laws, regulations, contractual obligations, and platform terms.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site's terms.
- Respect individual privacy and personal information.
- Use data responsibly and avoid disruptive or excessive collection.
- Do not use this actor for spamming, harassment, or other harmful purposes.
- Follow relevant data protection requirements where applicable, including GDPR and CCPA.

### Support

For help, use the actor page or the Issues section associated with the actor. Include the input used, with sensitive values redacted if needed, the run ID, expected versus actual behavior, and a small output sample when relevant.

# Actor input Schema

## `location` (type: `string`):

Provide a city, state, ZIP code, neighborhood, or market name. Use a specific area for targeted runs or a broader market for wider discovery.

## `deal_type` (type: `string`):

Choose whether to collect for-sale listings, rental listings, sold properties, not-for-sale properties, or all available inventory for the selected location.

## `min_price` (type: `integer`):

Only include listings priced at or above this amount. Leave empty when no lower price boundary is needed.

## `max_price` (type: `integer`):

Only include listings priced at or below this amount. Leave empty when no upper price boundary is needed.

## `property_type` (type: `array`):

Select one or more property types to include. Sale, sold, not-for-sale, and all-inventory searches support residential ownership categories; rental searches support rental-focused categories such as apartments.

## `min_bedroom` (type: `string`):

Only include listings with at least this many bedrooms. Leave empty when no minimum bedroom count is required.

## `max_bedroom` (type: `string`):

Only include listings with no more than this many bedrooms. Leave empty when no maximum bedroom count is required.

## `min_bathroom` (type: `string`):

Only include listings with at least this many bathrooms. Leave empty when no minimum bathroom count is required.

## `max_bathroom` (type: `string`):

Only include listings with no more than this many bathrooms. Leave empty when no maximum bathroom count is required.

## `min_building_area` (type: `string`):

Only include listings with at least this many square feet of building area. Leave empty when no minimum size is required.

## `max_building_area` (type: `string`):

Only include listings with no more than this many square feet of building area. Leave empty when no maximum size is required.

## `min_land_area` (type: `string`):

Only include listings with at least this lot size. Leave empty when no minimum land area is required.

## `max_land_area` (type: `string`):

Only include listings with no more than this lot size. Leave empty when no maximum land area is required.

## `min_psf` (type: `integer`):

Only include listings with price per square foot at or above this amount. Leave empty when no lower value-density boundary is needed.

## `max_psf` (type: `integer`):

Only include listings with price per square foot at or below this amount. Leave empty when no upper value-density boundary is needed.

## `keyword` (type: `string`):

Enter a keyword or phrase to narrow matching listings. Leave empty when you want the location and other filters to define the search.

## `mls_number` (type: `string`):

Enter a specific MLS number to narrow the run to matching listing records. Leave empty for normal market searches.

## `sale_listing_status` (type: `array`):

Select the sale listing statuses to include. This setting only applies when the listing type is set to properties for sale.

## `sale_listing_type` (type: `array`):

Select the sale listing types to include. This setting only applies when the listing type is set to properties for sale.

## `publication_date` (type: `string`):

Only include listings within the selected publication-date window. This applies to properties for sale and properties for rent.

## `price_reduction_period` (type: `string`):

Only include listings with price reductions in the selected period. This applies only when the listing type is set to properties for sale.

## `min_parking` (type: `string`):

Only include listings with at least this many parking spaces. Leave empty when parking should not narrow the search.

## `garage_parking` (type: `boolean`):

Only include listings with garage parking. This setting only matters when minimum parking is set.

## `open_house_and_tours` (type: `string`):

Only include listings with the selected open house, 3D tour, Matterport tour, or video option.

## `min_greatschools_rating` (type: `string`):

Only include listings with GreatSchools ratings at or above the selected value. Leave empty when this rating should not narrow the search.

## `min_niche_grade_rating` (type: `string`):

Only include listings with Niche grade ratings at or above the selected grade. Leave empty when this rating should not narrow the search.

## `views` (type: `array`):

Only include for-sale or rental listings with the selected view types. Leave empty to keep view type unrestricted.

## `min_building_year` (type: `string`):

Only include listings built in or after this year. Leave empty when no earliest construction year is required.

## `max_building_year` (type: `string`):

Only include listings built in or before this year. Leave empty when no latest construction year is required.

## `min_stories` (type: `string`):

Only include listings with at least this many stories. Leave empty when no minimum story count is required.

## `max_stories` (type: `string`):

Only include listings with no more than this many stories. Leave empty when no maximum story count is required.

## `sort_by` (type: `string`):

Select the order used for matching listings. Some price-based options are intended for sale prices, while rental-rate options are intended for rental searches.

## `maximize_coverage` (type: `boolean`):

Enable this for large markets when you want the actor to make a stronger effort to collect more available results. It can increase run time, so leave it off for quick validation runs or tightly filtered searches.

## `limit` (type: `integer`):

Set the maximum number of records to save. Leave empty to collect as many matching results as the configured search can return.

## Actor input object example

```json
{
  "location": "Los Angeles",
  "deal_type": "buy",
  "sale_listing_status": [
    "coming_soon",
    "active"
  ],
  "garage_parking": false,
  "sort_by": "recommended",
  "maximize_coverage": false,
  "limit": 100
}
```

# 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 = {
    "location": "Los Angeles",
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/homes-com-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 = {
    "location": "Los Angeles",
    "limit": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("fatihtahta/homes-com-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 '{
  "location": "Los Angeles",
  "limit": 100
}' |
apify call fatihtahta/homes-com-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Homes.com Scraper with Contacts & History",
        "description": "Extract Homes.com listings at scale with rich property detail, agent and agency contacts, pricing, media, sale and rental history, MLS data, and flexible market filters. Built for enterprise-grade real estate intelligence, lead enrichment, inventory monitoring, and automated analytics pipelines.",
        "version": "0.0",
        "x-build-id": "sF34VWXe3vUOPG4bB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~homes-com-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-homes-com-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/fatihtahta~homes-com-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-homes-com-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/fatihtahta~homes-com-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-homes-com-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": [
                    "location"
                ],
                "properties": {
                    "location": {
                        "title": "Enter Search Location",
                        "type": "string",
                        "description": "Provide a city, state, ZIP code, neighborhood, or market name. Use a specific area for targeted runs or a broader market for wider discovery."
                    },
                    "deal_type": {
                        "title": "Choose Listing Type",
                        "enum": [
                            "buy",
                            "rent",
                            "sold",
                            "not_for_sale",
                            "all"
                        ],
                        "type": "string",
                        "description": "Choose whether to collect for-sale listings, rental listings, sold properties, not-for-sale properties, or all available inventory for the selected location.",
                        "default": "buy"
                    },
                    "min_price": {
                        "title": "Set Minimum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings priced at or above this amount. Leave empty when no lower price boundary is needed."
                    },
                    "max_price": {
                        "title": "Set Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings priced at or below this amount. Leave empty when no upper price boundary is needed."
                    },
                    "property_type": {
                        "title": "Choose Property Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more property types to include. Sale, sold, not-for-sale, and all-inventory searches support residential ownership categories; rental searches support rental-focused categories such as apartments.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "house",
                                "townhouse",
                                "condo",
                                "co_op",
                                "lot_land",
                                "mobile_homes",
                                "multifamily",
                                "other",
                                "apartment"
                            ],
                            "enumTitles": [
                                "House",
                                "Townhouse",
                                "Condo",
                                "Co-op",
                                "Lot / land",
                                "Mobile home",
                                "Multifamily",
                                "Other",
                                "Apartment"
                            ]
                        }
                    },
                    "min_bedroom": {
                        "title": "Set Minimum Bedrooms",
                        "enum": [
                            "studio",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5+"
                        ],
                        "type": "string",
                        "description": "Only include listings with at least this many bedrooms. Leave empty when no minimum bedroom count is required."
                    },
                    "max_bedroom": {
                        "title": "Set Maximum Bedrooms",
                        "enum": [
                            "studio",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5+"
                        ],
                        "type": "string",
                        "description": "Only include listings with no more than this many bedrooms. Leave empty when no maximum bedroom count is required."
                    },
                    "min_bathroom": {
                        "title": "Set Minimum Bathrooms",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4",
                            "5+"
                        ],
                        "type": "string",
                        "description": "Only include listings with at least this many bathrooms. Leave empty when no minimum bathroom count is required."
                    },
                    "max_bathroom": {
                        "title": "Set Maximum Bathrooms",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4",
                            "5+"
                        ],
                        "type": "string",
                        "description": "Only include listings with no more than this many bathrooms. Leave empty when no maximum bathroom count is required."
                    },
                    "min_building_area": {
                        "title": "Set Minimum Building Size",
                        "enum": [
                            "500",
                            "750",
                            "1000",
                            "1250",
                            "1500",
                            "1750",
                            "2000",
                            "2250",
                            "2500",
                            "2750",
                            "3000",
                            "3500",
                            "4000",
                            "4500",
                            "5000",
                            "6000",
                            "7000",
                            "8000",
                            "9000",
                            "10000"
                        ],
                        "type": "string",
                        "description": "Only include listings with at least this many square feet of building area. Leave empty when no minimum size is required."
                    },
                    "max_building_area": {
                        "title": "Set Maximum Building Size",
                        "enum": [
                            "500",
                            "750",
                            "1000",
                            "1250",
                            "1500",
                            "1750",
                            "2000",
                            "2250",
                            "2500",
                            "2750",
                            "3000",
                            "3500",
                            "4000",
                            "4500",
                            "5000",
                            "6000",
                            "7000",
                            "8000",
                            "9000",
                            "10000"
                        ],
                        "type": "string",
                        "description": "Only include listings with no more than this many square feet of building area. Leave empty when no maximum size is required."
                    },
                    "min_land_area": {
                        "title": "Set Minimum Lot Size",
                        "enum": [
                            "3000_sqft",
                            "5000_sqft",
                            "7000_sqft",
                            "0.25_acre",
                            "0.5_acre",
                            "0.75_acre",
                            "1_acre",
                            "1.5_acres",
                            "2_acres",
                            "2.5_acres",
                            "3_acres",
                            "4_acres",
                            "5_acres",
                            "10_acres",
                            "15_acres",
                            "20_acres",
                            "50_acres",
                            "100_acres",
                            "500_acres",
                            "1000_acres"
                        ],
                        "type": "string",
                        "description": "Only include listings with at least this lot size. Leave empty when no minimum land area is required."
                    },
                    "max_land_area": {
                        "title": "Set Maximum Lot Size",
                        "enum": [
                            "3000_sqft",
                            "5000_sqft",
                            "7000_sqft",
                            "0.25_acre",
                            "0.5_acre",
                            "0.75_acre",
                            "1_acre",
                            "1.5_acres",
                            "2_acres",
                            "2.5_acres",
                            "3_acres",
                            "4_acres",
                            "5_acres",
                            "10_acres",
                            "15_acres",
                            "20_acres",
                            "50_acres",
                            "100_acres",
                            "500_acres",
                            "1000_acres"
                        ],
                        "type": "string",
                        "description": "Only include listings with no more than this lot size. Leave empty when no maximum land area is required."
                    },
                    "min_psf": {
                        "title": "Set Minimum Price Per Square Foot",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings with price per square foot at or above this amount. Leave empty when no lower value-density boundary is needed."
                    },
                    "max_psf": {
                        "title": "Set Maximum Price Per Square Foot",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings with price per square foot at or below this amount. Leave empty when no upper value-density boundary is needed."
                    },
                    "keyword": {
                        "title": "Add a Keyword Filter",
                        "type": "string",
                        "description": "Enter a keyword or phrase to narrow matching listings. Leave empty when you want the location and other filters to define the search."
                    },
                    "mls_number": {
                        "title": "Enter MLS Number",
                        "type": "string",
                        "description": "Enter a specific MLS number to narrow the run to matching listing records. Leave empty for normal market searches."
                    },
                    "sale_listing_status": {
                        "title": "Choose Sale Statuses",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select the sale listing statuses to include. This setting only applies when the listing type is set to properties for sale.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "coming_soon",
                                "active",
                                "under_contract",
                                "pending"
                            ],
                            "enumTitles": [
                                "Coming soon",
                                "Active",
                                "Under contract",
                                "Pending"
                            ]
                        },
                        "default": [
                            "coming_soon",
                            "active"
                        ]
                    },
                    "sale_listing_type": {
                        "title": "Choose Sale Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select the sale listing types to include. This setting only applies when the listing type is set to properties for sale.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "resale",
                                "new_construction",
                                "pre_foreclosure",
                                "foreclosure",
                                "short_sale",
                                "auction"
                            ],
                            "enumTitles": [
                                "Resale",
                                "New construction",
                                "Pre-foreclosure",
                                "Foreclosure",
                                "Short sale",
                                "Auction"
                            ]
                        }
                    },
                    "publication_date": {
                        "title": "Choose Listing Age",
                        "enum": [
                            "last_24_hours",
                            "less_than_3_days",
                            "less_than_7_days",
                            "less_than_1_month",
                            "more_than_7_days",
                            "more_than_14_days",
                            "more_than_1_month",
                            "more_than_3_months",
                            "more_than_6_months",
                            "more_than_1_year"
                        ],
                        "type": "string",
                        "description": "Only include listings within the selected publication-date window. This applies to properties for sale and properties for rent."
                    },
                    "price_reduction_period": {
                        "title": "Choose Price Reduction Window",
                        "enum": [
                            "last_3_days",
                            "last_7_days",
                            "last_14_days",
                            "last_30_days",
                            "over_1_month",
                            "over_2_months",
                            "over_3_months"
                        ],
                        "type": "string",
                        "description": "Only include listings with price reductions in the selected period. This applies only when the listing type is set to properties for sale."
                    },
                    "min_parking": {
                        "title": "Set Minimum Parking",
                        "enum": [
                            "1+",
                            "2+",
                            "3+",
                            "4+"
                        ],
                        "type": "string",
                        "description": "Only include listings with at least this many parking spaces. Leave empty when parking should not narrow the search."
                    },
                    "garage_parking": {
                        "title": "Require Garage Parking",
                        "type": "boolean",
                        "description": "Only include listings with garage parking. This setting only matters when minimum parking is set.",
                        "default": false
                    },
                    "open_house_and_tours": {
                        "title": "Choose Tour Availability",
                        "enum": [
                            "open_house",
                            "3d_tours",
                            "matterport_3d_tour",
                            "video"
                        ],
                        "type": "string",
                        "description": "Only include listings with the selected open house, 3D tour, Matterport tour, or video option."
                    },
                    "min_greatschools_rating": {
                        "title": "Set Minimum GreatSchools Rating",
                        "enum": [
                            "5+",
                            "6+",
                            "7+",
                            "8+",
                            "9+",
                            "10"
                        ],
                        "type": "string",
                        "description": "Only include listings with GreatSchools ratings at or above the selected value. Leave empty when this rating should not narrow the search."
                    },
                    "min_niche_grade_rating": {
                        "title": "Set Minimum Niche Grade",
                        "enum": [
                            "C",
                            "B",
                            "B+",
                            "A-",
                            "A",
                            "A+"
                        ],
                        "type": "string",
                        "description": "Only include listings with Niche grade ratings at or above the selected grade. Leave empty when this rating should not narrow the search."
                    },
                    "views": {
                        "title": "Choose View Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include for-sale or rental listings with the selected view types. Leave empty to keep view type unrestricted.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "mountain_hills",
                                "water",
                                "city",
                                "woods",
                                "other"
                            ],
                            "enumTitles": [
                                "Mountain / hills",
                                "Water",
                                "City",
                                "Woods",
                                "Other"
                            ]
                        }
                    },
                    "min_building_year": {
                        "title": "Set Earliest Year Built",
                        "enum": [
                            "1900",
                            "1925",
                            "1950",
                            "1960",
                            "1970",
                            "1980",
                            "1990",
                            "2000",
                            "2005",
                            "2010",
                            "2015",
                            "2018",
                            "2019",
                            "2020",
                            "2021",
                            "2022",
                            "2023",
                            "2024",
                            "2025",
                            "2026"
                        ],
                        "type": "string",
                        "description": "Only include listings built in or after this year. Leave empty when no earliest construction year is required."
                    },
                    "max_building_year": {
                        "title": "Set Latest Year Built",
                        "enum": [
                            "1900",
                            "1925",
                            "1950",
                            "1960",
                            "1970",
                            "1980",
                            "1990",
                            "2000",
                            "2005",
                            "2010",
                            "2015",
                            "2018",
                            "2019",
                            "2020",
                            "2021",
                            "2022",
                            "2023",
                            "2024",
                            "2025",
                            "2026"
                        ],
                        "type": "string",
                        "description": "Only include listings built in or before this year. Leave empty when no latest construction year is required."
                    },
                    "min_stories": {
                        "title": "Set Minimum Stories",
                        "enum": [
                            "1",
                            "2",
                            "3"
                        ],
                        "type": "string",
                        "description": "Only include listings with at least this many stories. Leave empty when no minimum story count is required."
                    },
                    "max_stories": {
                        "title": "Set Maximum Stories",
                        "enum": [
                            "1",
                            "2",
                            "3"
                        ],
                        "type": "string",
                        "description": "Only include listings with no more than this many stories. Leave empty when no maximum story count is required."
                    },
                    "sort_by": {
                        "title": "Set Result Order",
                        "enum": [
                            "recommended",
                            "newest",
                            "price_low_to_high",
                            "price_high_to_low",
                            "rental_rate_low_to_high",
                            "rental_rate_high_to_low",
                            "year_built"
                        ],
                        "type": "string",
                        "description": "Select the order used for matching listings. Some price-based options are intended for sale prices, while rental-rate options are intended for rental searches.",
                        "default": "recommended"
                    },
                    "maximize_coverage": {
                        "title": "Maximize Broad-Market Coverage",
                        "type": "boolean",
                        "description": "Enable this for large markets when you want the actor to make a stronger effort to collect more available results. It can increase run time, so leave it off for quick validation runs or tightly filtered searches.",
                        "default": false
                    },
                    "limit": {
                        "title": "Set Maximum Results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Set the maximum number of records to save. Leave empty to collect as many matching results as the configured search can return."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
