# Remax Property Search Scraper (`stealth_mode/remax-property-search-scraper`) Actor

Scrape property listings from RE/MAX search results with comprehensive data. Collect 31+ fields including price, location, agent details, property specs, and images — perfect for real estate analysis, market research, and property aggregators.

- **URL**: https://apify.com/stealth\_mode/remax-property-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (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

from $3.00 / 1,000 results

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

## RE/MAX Property Search Scraper: Extract Real Estate Listings at Scale

---

### What Is RE/MAX?

RE/MAX is a global real estate network operating in over 110 countries, hosting millions of property listings for sale and rent. Their platform aggregates properties from local agents and offices, making it a valuable source for market analysis, competitive intelligence, and property data. Manually extracting listing data from RE/MAX search results is labor-intensive; the **RE/MAX Property Search Scraper** automates this workflow, delivering structured property records in seconds.

---

### Overview

The **RE/MAX Property Search Scraper** extracts property listings from RE/MAX search result pages, converting unstructured property cards into clean, structured data. It is ideal for:

- **Real estate analysts** tracking property trends and market conditions
- **Property aggregator platforms** building comprehensive listing databases
- **Investment researchers** analyzing market data across regions
- **Real estate professionals** monitoring competitor listings and pricing
- **Data scientists** building models for property valuation or market forecasting

The scraper handles pagination automatically, collects up to 200+ items per URL, and supports bulk runs across multiple geographic markets via configurable search parameters.

---

### Input Format

The scraper accepts a JSON configuration for search queries and collection limits:

```json
{
  "ignore_url_failures": true,
  "max_items_per_url": 200,
  "urls": [
    "https://www.remax.com/gbr/en/real-estate/124299?searchQuery={...}"
  ]
}
````

#### Input Parameters Explained

| Parameter | Description | Example |
|---|---|---|
| `urls` | RE/MAX search result page URLs with embedded filters and location parameters | Search URLs for properties in specific cities or regions |
| `max_items_per_url` | Maximum number of property listings to extract per URL (1–200+) | `200` |
| `ignore_url_failures` | If `true`, continues scraping if a URL fails; if `false`, stops the entire run | `true` |

#### URL Structure

RE/MAX search URLs include a `searchQuery` parameter containing:

- **place:** Geographic target (city, placeId, placeType, state/province)
- **filters:** Transaction type (Sale, Rent), price ranges, property types
- **sortKey & sortDirection:** Result ordering
- **mapState:** Map display preference
- **lat, lng, zoom:** Map coordinates
- **pageNumber:** Results page to scrape

> **Tip:** Build URLs using RE/MAX's search interface, then paste into the scraper. The embedded query automatically handles pagination.

***

### Output Format

**Sample output**

```json
{
  "banners": [],
  "baths": "1",
  "beds": "2",
  "courtesy_of_statement": "",
  "list_agent_full_name": "",
  "list_agent_preferred_phone": null,
  "list_office_email": null,
  "list_office_name": "$undefined",
  "list_office_phone": null,
  "listing_images": [
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/ac8095f7b9d8ae1744b59dd0afd4207786cdc975-1-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image ac8095f7b9d8ae1744b59dd0afd4207786cdc975"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/2d86f83fe7baf92b36b5f965c7ca2c08e9ba738b-2-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 2d86f83fe7baf92b36b5f965c7ca2c08e9ba738b"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/c9432212bf68ccc21fdf95b1d835d4b11ab501d1-3-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image c9432212bf68ccc21fdf95b1d835d4b11ab501d1"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/d377ab0244946889bd0e91b058d0089799b9c3f5-4-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image d377ab0244946889bd0e91b058d0089799b9c3f5"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/6d2f6635b751a87fbdbdc9b75cf5490c99aae58a-5-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 6d2f6635b751a87fbdbdc9b75cf5490c99aae58a"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/de065803d1129bfb9094d33bda3dda8d318cc6a8-6-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image de065803d1129bfb9094d33bda3dda8d318cc6a8"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/df51ac381ef32a04d86c284ba17181efe04076ec-7-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image df51ac381ef32a04d86c284ba17181efe04076ec"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/45ff95f72f51fb487e644085f3212be792bfde6f-8-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 45ff95f72f51fb487e644085f3212be792bfde6f"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/49755096fb4f3545a2841a4e15739b6c1aa3240f-9-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 49755096fb4f3545a2841a4e15739b6c1aa3240f"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/37895ee1d3d1ccf402edf3c1f80cb9a4434726a7-10-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 37895ee1d3d1ccf402edf3c1f80cb9a4434726a7"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/1a6770dc6b655cdb532bdadc18eb8d81d8e41be5-11-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 1a6770dc6b655cdb532bdadc18eb8d81d8e41be5"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/34b641a7935edb84f737b1ee9f1b814a04467541-12-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 34b641a7935edb84f737b1ee9f1b814a04467541"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/fe6e142d68e77d465cb3e1b361b65ad9ef2ea024-13-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image fe6e142d68e77d465cb3e1b361b65ad9ef2ea024"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/11967a71d04fa637542258c9af70369801190501-14-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 11967a71d04fa637542258c9af70369801190501"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/422adccd6b09f8830711e293a5c25b153c9466df-15-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 422adccd6b09f8830711e293a5c25b153c9466df"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/b18b92664d8dee430bc2e668f5d22dca0d2f8dda-16-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image b18b92664d8dee430bc2e668f5d22dca0d2f8dda"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/9d343bd261aa8c22e06c8970bf64292af5ec8da9-17-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 9d343bd261aa8c22e06c8970bf64292af5ec8da9"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/fb73e5f6a4d4afb70ede08caf242731fd9bc5854-18-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image fb73e5f6a4d4afb70ede08caf242731fd9bc5854"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/ce8ccec7e0c22b5f4dbc44779480af1e00b087d4-19-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image ce8ccec7e0c22b5f4dbc44779480af1e00b087d4"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/5a032262b5415b8721da1254f3d6c3f36cbe159e-20-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 5a032262b5415b8721da1254f3d6c3f36cbe159e"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/252b95971cbfc0b3a897c2e2a240d4facc3441ea-21-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 252b95971cbfc0b3a897c2e2a240d4facc3441ea"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/29e515a223a60be2692df99ad69ee789e6ac1344-22-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 29e515a223a60be2692df99ad69ee789e6ac1344"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/7d31dffd2f97b4283c442d04cd5a64a2d2bbc660-23-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 7d31dffd2f97b4283c442d04cd5a64a2d2bbc660"
    },
    {
      "src": "https://images.remax.com/webapi-properties-gryphtech-global/344793f855c117358d6de526044ba9e563cb4085-24-large.jpeg",
      "alt": "10B RUE DES ARMOISIÈRES, METZ, GRAND EST 57000 - Image 344793f855c117358d6de526044ba9e563cb4085"
    }
  ],
  "listing_address_full": "ADDRESS PRIVATE",
  "listing_address1": "10B RUE DES ARMOISIÈRES",
  "listing_address2": "METZ, GRAND EST 57000",
  "unique_listing_id": "M73000104-74-750441003-70",
  "listing_url": "/fra/en/residential/property/metz/address-private/14766563827808779264?RID=m73000104-74-750441003-70",
  "open_houses": "$undefined",
  "price_type": "",
  "property_type": "Condo/Townhome",
  "ui_transaction_type": "Sale",
  "display_logo_detail": false,
  "display_logo_alt": "IDX Logo",
  "is_rental": false,
  "list_price": "€195,000",
  "list_price_raw": 195000,
  "listing_size": {
    "value": "N/A",
    "text": "Sq Ft"
  },
  "location": {
    "city": "METZ",
    "country": "FRA",
    "listing_address_full": "ADDRESS PRIVATE",
    "listing_address1": "10B RUE DES ARMOISIÈRES",
    "listing_address2": "METZ, GRAND EST 57000",
    "postal_code": "57000",
    "state": "GRAND EST",
    "timezone": ""
  },
  "o_uid": null,
  "listing_id": "74-750441003-70",
  "u_pi": null,
  "geo": [
    {
      "raw_components": {
        "state_or_province": "MOSELLE",
        "formatted_street": "10B RUE DES ARMOISIERES",
        "country": "FRA",
        "postal_code": "57000",
        "city": "METZ",
        "u_p_i": "14766563827808779264"
      },
      "mls_display_name": "10B RUE DES ARMOISIERES, METZ, MOSELLE 57000",
      "provider": "aWS",
      "parent_u_p_i_seed": "aQAAAGEAsfBlVlie30tiujUJH3qYHgHldUiRde8jqC4q2_dA08L4vVvdXLQ4ZW_bapnAYgz3lwNMsk0Cthmno7zSMFqqjYsCf9qWP3bKltQYMutrFsaOPEagAHFjlJPDrs23GQ3SrraeyPRmq7wLukR1f2bOoSdIt1UWRjqv752K6TVPhE6o",
      "location_shape": {
        "coordinates": [
          6.18637,
          49.07796
        ],
        "type": "point"
      },
      "address_components": {
        "last_line": "Metz, Grand Est 57000",
        "number": "10B",
        "state_or_province": "Grand Est",
        "formatted_street": "10B Rue des Armoisières",
        "country": "FRA",
        "postal_code": "57000",
        "street": "Rue des Armoisières",
        "city": "Metz",
        "state": null
      },
      "u_p_i_seed": "aQAAAGEAsfBlVlie30tiujUJH3qYHgHldUiRde8jqC4q2_dA08L4vVvdXLQ4ZW_bapnAYgz3lwNMsk0Cthmno7zSMFqqjYsCf9qWP3bKltQYMutrFsaOPEagAHFjlJPDrs23GQ3SrraeyPRmq7wLukR1f2bOoSdIt1UWRjqv752K6TVPhE6o",
      "location": {
        "lon": 6.18637,
        "lat": 49.07796
      }
    }
  ],
  "autocomplete": {
    "country": {
      "admin_level": 2,
      "display_name": "France",
      "display_name_english": "France",
      "id": "4404325"
    },
    "global_places": {
      "admin_level": 3,
      "display_name": "France métropolitaine, France",
      "display_name_english": "Metropolitan France, France",
      "id": "2807833"
    },
    "zipcode": null,
    "places": null,
    "neighborhoods": null,
    "schools": null,
    "county": null,
    "school_districts": null,
    "state": null
  },
  "global_listing_url": "/fra/en/residential/property/metz/address-private/14766563827808779264?RID=M73000104-74-750441003-70",
  "from_url": "https://www.remax.com/fra/en/real-estate/4404325?searchQuery={%22place%22:{%22city%22:%22_%22,%22placeId%22:%224404325%22,%22placeType%22:%22places%22,%22stateOrProvince%22:%22_%22},%22filters%22:{%22city%22:%22_%22,%22stateOrProvince%22:%22_%22,%22uiTransactionType%22:%22Sale%22},%22sortKey%22:%221%22,%22sortDirection%22:%221%22,%22hasPolygon%22:false,%22mapState%22:%22hidden-all%22,%22lat%22:46.227638,%22lng%22:2.213749,%22zoom%22:6,%22pageNumber%22:325}"
}
```

Each property listing returns a rich record with 31 fields covering pricing, location, property details, and agent information:

#### Property Identification

| Field | Description |
|---|---|
| `Unique Listing ID` | RE/MAX's unique identifier for the property |
| `Listing ID` | Alternative internal ID reference |
| `Listing URL` | Direct link to the property detail page |
| `Global Listing URL` | International URL version of the property |
| `U PI` | Universal Property Identifier (if available) |
| `O UID` | Office/Office User ID |

#### Property Address & Location

| Field | Description |
|---|---|
| `Listing Address Full` | Complete street address with city, state, ZIP |
| `Listing Address 1` | Primary address line |
| `Listing Address 2` | Secondary address line (unit, suite, etc.) |
| `Location` | Geocoded location data (latitude, longitude) |
| `Geo` | Geographic metadata and boundaries |
| `Autocomplete` | Search autocomplete formatting |

#### Physical Specifications

| Field | Description |
|---|---|
| `Beds` | Number of bedrooms |
| `Baths` | Number of bathrooms |
| `Listing Size` | Property size in square feet or meters |
| `Property Type` | Category (e.g., house, condo, townhouse, land) |
| `UI Transaction Type` | Transaction type (Sale, Rent, Lease) |
| `Is Rental` | Boolean flag indicating if property is for rent |

#### Pricing & Financial

| Field | Description |
|---|---|
| `List Price` | Asking price formatted for display |
| `List Price Raw` | Numeric price value for sorting/filtering |
| `Price Type` | Price format (e.g., per month for rentals) |

#### Listing Details & Features

| Field | Description |
|---|---|
| `Listing Images` | Array of property photos and URLs |
| `Banners` | Promotional banners or special labels (e.g., "New Listing", "Reduced Price") |
| `Open Houses` | Scheduled open house dates and times |
| `Courtesy Of Statement` | Legal courtesy/attribution statement |

#### Agent & Office Information

| Field | Description |
|---|---|
| `List Agent Full Name` | Full name of the listing agent |
| `List Agent Preferred Phone` | Agent's primary contact phone number |
| `List Office Name` | Name of the office managing the listing |
| `List Office Email` | Office email address |
| `List Office Phone` | Office main phone number |
| `Display Logo Detail` | Office logo URL for detail views |
| `Display Logo Alt` | Alternate logo or text label |

***

### How to Use

1. **Build a search URL** — Visit RE/MAX, filter by location, transaction type, and property criteria. Copy the full search results URL.
2. **Configure the JSON** — Paste the URL into the `urls` array. Set `max_items_per_url` (recommended: 100–200).
3. **Enable error handling** — Set `ignore_url_failures: true` for bulk runs across multiple regions.
4. **Run the scraper** — Start the actor and monitor progress in real-time.
5. **Export data** — Download as JSON, CSV, or Excel for analysis, imports, or integration.

**Best practices:**

- Test with a single URL first to validate the search query.
- Use specific location filters to avoid overly broad results.
- Run high-volume scrapes during off-peak hours to minimize server load.
- Update URLs periodically as market listings change.

**Handling common issues:**

- If no results appear, verify the URL is a search results page (not a detail page).
- Ensure the `searchQuery` parameter is URL-encoded correctly.
- Use `ignore_url_failures: true` to skip URLs that return errors.

***

### Benefits & Real-World Applications

**Time savings:** Collect hundreds of properties in minutes instead of hours of manual browsing.

**Market intelligence:** Track pricing trends, inventory levels, and agent performance across regions and property types.

**Property aggregation:** Feed scraped data into custom platforms, MLS systems, or real estate portals without manual data entry.

**Investment analysis:** Build datasets for comparative market analysis (CMA), investment property screening, and valuation modeling.

**Competitive monitoring:** Monitor competitor listings, pricing strategies, and market share in your target regions.

The output integrates seamlessly into spreadsheets, databases, and analytics tools, enabling data-driven decision-making for brokers, investors, and researchers.

***

### Conclusion

The **RE/MAX Property Search Scraper** transforms RE/MAX search results into actionable real estate data. With 31 fields covering pricing, location, property specs, and agent details, it is a powerful tool for market research, property aggregation, and investment analysis. Start scraping today and unlock insights from one of the world's largest real estate networks.

# 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.remax.com/gbr/en/real-estate/124299?searchQuery={%22place%22:{%22city%22:%22_%22,%22placeId%22:%22124299%22,%22placeType%22:%22places%22,%22stateOrProvince%22:%22_%22},%22filters%22:{%22city%22:%22_%22,%22stateOrProvince%22:%22_%22,%22uiTransactionType%22:%22Sale%22},%22sortKey%22:%221%22,%22sortDirection%22:%221%22,%22hasPolygon%22:false,%22mapState%22:%22hidden-all%22,%22lat%22:55.378051,%22lng%22:-3.435973,%22zoom%22:6,%22pageNumber%22:2}"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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.remax.com/gbr/en/real-estate/124299?searchQuery={%22place%22:{%22city%22:%22_%22,%22placeId%22:%22124299%22,%22placeType%22:%22places%22,%22stateOrProvince%22:%22_%22},%22filters%22:{%22city%22:%22_%22,%22stateOrProvince%22:%22_%22,%22uiTransactionType%22:%22Sale%22},%22sortKey%22:%221%22,%22sortDirection%22:%221%22,%22hasPolygon%22:false,%22mapState%22:%22hidden-all%22,%22lat%22:55.378051,%22lng%22:-3.435973,%22zoom%22:6,%22pageNumber%22:2}"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/remax-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.remax.com/gbr/en/real-estate/124299?searchQuery={%22place%22:{%22city%22:%22_%22,%22placeId%22:%22124299%22,%22placeType%22:%22places%22,%22stateOrProvince%22:%22_%22},%22filters%22:{%22city%22:%22_%22,%22stateOrProvince%22:%22_%22,%22uiTransactionType%22:%22Sale%22},%22sortKey%22:%221%22,%22sortDirection%22:%221%22,%22hasPolygon%22:false,%22mapState%22:%22hidden-all%22,%22lat%22:55.378051,%22lng%22:-3.435973,%22zoom%22:6,%22pageNumber%22:2}"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/remax-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.remax.com/gbr/en/real-estate/124299?searchQuery={%22place%22:{%22city%22:%22_%22,%22placeId%22:%22124299%22,%22placeType%22:%22places%22,%22stateOrProvince%22:%22_%22},%22filters%22:{%22city%22:%22_%22,%22stateOrProvince%22:%22_%22,%22uiTransactionType%22:%22Sale%22},%22sortKey%22:%221%22,%22sortDirection%22:%221%22,%22hasPolygon%22:false,%22mapState%22:%22hidden-all%22,%22lat%22:55.378051,%22lng%22:-3.435973,%22zoom%22:6,%22pageNumber%22:2}"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/remax-property-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Remax Property Search Scraper",
        "description": "Scrape property listings from RE/MAX search results with comprehensive data. Collect 31+ fields including price, location, agent details, property specs, and images — perfect for real estate analysis, market research, and property aggregators.",
        "version": "0.0",
        "x-build-id": "62ah518UBcc5BFetw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~remax-property-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-remax-property-search-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/stealth_mode~remax-property-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-remax-property-search-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/stealth_mode~remax-property-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-remax-property-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the property list urls to scrape",
                        "type": "array",
                        "description": "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.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
