# Fast Property24 | Search | Property | Scraper (Richest output) (`memo23/property24-scraper`) Actor

Extract comprehensive South African property data including detailed listings, agent info, high-res images, and market trends. Get structured JSON output with fields for pricing, location, features, and historical data. Perfect for real estate analysis and investment research.

- **URL**: https://apify.com/memo23/property24-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 112 total users, 2 monthly users, 92.3% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$23.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period. You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#rental-actors

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Property24.com Scraper

**Unlock the Power of South African Real Estate Listings** - The most comprehensive scraper for extracting detailed property data from Property24.com. Whether you're an investor, real estate agent, or market analyst, our scraper delivers accurate, structured data to help you identify opportunities, analyze market trends, and make data-driven decisions.

*"From luxury estates to affordable homes, transform property listings into actionable insights."*

### Overview

The Property24.com Scraper is a robust tool designed to extract comprehensive real estate listing data from South Africa's leading property marketplace. Ideal for investors, real estate agents, and market researchers, it captures detailed property information, pricing, and features from listings across South Africa. With its easy setup and structured JSON output, it's the perfect solution for anyone looking to gather and analyze real estate market data.

### What does Property24.com Scraper do?

The Property24.com Scraper is a powerful tool that enables you to:

#### 🏠 Comprehensive Property Data

- **Detailed Listings**: Extract complete property details including descriptions, features, and specifications
- **Rich Media**: Download high-resolution images, floor plans, and virtual tours
- **Agent & Agency Info**: Access comprehensive contact details and performance metrics
- **Market Insights**: Gather historical price data, price changes, and time on market

#### ⚡ Advanced Functionality

- **Smart Monitoring**: Track price changes, new listings, and status updates
- **Delisting Detection**: Automatically identify when properties are sold or removed
- **Geolocation Data**: Precise coordinates and location-based insights
- **Flexible Export**: Multiple output formats (JSON, CSV, Excel) with custom field selection

#### 🛠 Technical Excellence

- **Resilient Scraping**: Automatic retries, proxy rotation, and CAPTCHA handling
- **Incremental Updates**: Only process new or modified listings in subsequent runs
- **High Performance**: Parallel processing for fast data extraction
- **Reliable Infrastructure**: Built on Apify's scalable cloud platform

#### Advanced Scraping Capabilities

- **Structured Data Extraction**: Leverages JSON-LD and embedded JavaScript data for reliable information
- **Pagination Handling**: Automatically navigates through all search result pages
- **Efficient Processing**: Processes only new or updated listings in subsequent runs
- **Change Detection**: Identifies price changes, status updates, and new listings
- **Scheduled Monitoring**: Set up automated runs to keep your business data current
- **Incremental Data Collection**: Build comprehensive business datasets over time
- **Proxy Support**: Built-in proxy rotation to prevent IP blocking
- **Retry Mechanism**: Automatic retries for failed requests to ensure data completeness

#### Flexible Scraping Options

- **Search Results**: Extract property listings by search criteria, location, or category
  - Example: `https://www.property24.com/for-sale/langebaan/western-cape/427?PropertyCategory=House%2cApartmentOrFlat%2cTownhouse%2cVacantLandOrPlot%2cFarm%2cCommercial%2cIndustrial`
  - Example: `hhttps://www.property24.com/to-rent/postmasburg/northern-cape/509`
- **Individual Listings**: Target specific properties using direct URLs
  - Example: `https://www.property24.com/for-sale/val-de-vie-estate/paarl/western-cape/11726/114206254`

### Who is this tool for?

This scraper is specifically designed for:

- **Real Estate Agents**
  - Maintain an up-to-date database of properties for sale and rent
  - Monitor competitor listings and market positioning
  - Identify potential buyers by analyzing search patterns

- **Investors & Acquirers**
  - Discover investment opportunities across industries and regions
  - Track price trends and valuation metrics
  - Build a pipeline of potential acquisition targets

- **Market Researchers**
  - Analyze business valuation trends across sectors
  - Track industry-specific market activity
  - Generate reports on business-for-sale market dynamics

- **Entrepreneurs**
  - Research business opportunities in specific locations
  - Understand pricing and valuation of similar businesses
  - Identify market gaps and opportunities

- **Data Analysts**
  - Build comprehensive datasets of business listings
  - Perform competitive analysis across industries
  - Create custom business valuation models

### Features

- **Comprehensive Data Extraction**: Extract detailed business information including:
  - Business descriptions and key highlights
  - Financial data (asking price, revenue, cash flow)
  - Operational details and business model
  - Location and property information
  - Seller information and contact details

- **Dual Scraping Modes**:
  - **Search Results**: Scrape all businesses from search results with automatic pagination
    - Filter by location, industry, price range, and other criteria
    - Example: `https://www.property24.com/for-sale/val-de-vie-estate/paarl/western-cape/11726?sp=bd%3d5`
  - **Individual Listings**: Target specific businesses using direct URLs
    - Get complete details for a single business listing
    - Example: `https://www.property24.com/for-sale/three-rivers/vereeniging/gauteng/3754/116269357?plId=2106891&plt=6`

- **Advanced Data Processing**:
  - Extract and parse JSON-LD structured data
  - Process embedded JavaScript objects for additional metadata
  - Clean and normalize data for consistency
  - Handle international character sets and formatting

- **Performance & Reliability**:
  - Configurable concurrency for optimal performance
  - Automatic retry mechanism for failed requests
  - Built-in proxy support to prevent IP blocking
  - Efficient resource management for large-scale scraping

- **Output & Integration**:
  - Structured JSON output for easy processing
  - Support for custom data transformations
  - Seamless integration with data analysis tools
  - Compatible with Apify's data storage and export options

### Competitive Advantage

| Feature | Our Scraper | Competitor A |
|---------|-------------|--------------|
| Price Monitoring | ✅ Real-time | ❌ Limited |
| Delisting Alerts | ✅ Yes | ❌ No |
| Image Downloads | ✅ Full Quality | ⚠️ Limited |
| API Access | ✅ Full Access | ❌ Restricted |
| Support | ✅ 24/7 | ⏳ Business Hours |
| Data Freshness | ✅ < 5 min | 🕒 1+ hour |
| Custom Fields | ✅ Fully Customizable | ⚠️ Limited |
| Proxy Rotation | ✅ Built-in | ❌ Extra Cost |

### Quick Start

Get started with the Property24.com Scraper in just a few simple steps:

1. **Sign Up for Apify**
   - Create a free Apify account at [apify.com](https://console.apify.com/sign-up)
   - No credit card required to get started

2. **Access the Scraper**
   - Go to the [Property24 Scraper](https://apify.com/your-username/property24-scraper) page
   - Click "Try for free" to open the configuration page

3. **Configure Your Scrape**
   - Click "Try for free" to open the configuration page
   - Add your target URLs in the `startUrls` field:
     - Search results (e.g., `https://www.property24.com/to-rent/postmasburg/northern-cape/509`)
     - Individual listings (e.g., `https://www.property24.com/for-sale/the-cove/langebaan/western-cape/12190/116223063`)
   - Adjust advanced settings if needed (concurrency, proxy, etc.)

4. **Run the Scraper**
   - Click "Start" to begin the scrape
   - Monitor progress in real-time
   - Download results in JSON, CSV, Excel, or other formats

5. **Analyze Your Data**
   - Use the built-in dataset preview
   - Export to your preferred analysis tools
   - Set up webhooks for automated data delivery

#### Next Steps

- Check out the [Input Configuration](#input-configuration) section for advanced options
- Learn about [monitoring mode](#monitoring-mode) for tracking new listings
- Explore the [sample output](#sample-json-output) to understand the data structure

### Input Configuration

The BusinessesForSale.com Scraper is highly configurable to meet your specific data extraction needs. Below is a comprehensive guide to configuring the scraper's input parameters.

#### Basic Configuration Example

```json
{
    "startUrls": [
        {
            "url": "https://www.property24.com/for-sale/vereeniging/gauteng/103",
            "userData": {
                "label": "RESTAURANTS_CALIFORNIA",
                "priority": 1
            }
        },
        {
            "url": "https://www.property24.com/for-sale/the-cove/langebaan/western-cape/12190/116223063",
            "userData": {
                "label": "DETAIL_PAGE"
            }
        }
    ],
    "maxItems": 500,
    "maxConcurrency": 5,
    "minConcurrency": 1,
    "maxRequestRetries": 5,
    "requestTimeoutSecs": 60,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    },
    
}
```

#### Input Fields Explanation

##### Core Configuration

- **`startUrls`** (Array, Required)
  - List of URLs to start scraping from
  - Each URL can include additional metadata in the `userData` object
  - Supports both search result pages and individual business listings
  - Example: `https://www.property24.com/for-sale/vereeniging/gauteng/103`

- **`maxItems`** (Number, Optional, Default: `1000`)
  - Maximum number of business listings to scrape
  - Set to `0` for unlimited (not recommended for large searches)

- **`monitoringMode`** (Boolean, Optional, Default: `false`)
  - When enabled, only new or updated listings will be scraped
  - Uses stored data from previous runs to determine changes
  - Ideal for tracking price changes or new listings

##### Performance Settings

- **`maxConcurrency`** (Number, Optional, Default: `10`)
  - Maximum number of concurrent page requests
  - Higher values may lead to faster scraping but increased risk of being blocked

- **`minConcurrency`** (Number, Optional, Default: `1`)
  - Minimum number of concurrent page requests
  - Helps maintain a steady scraping speed

- **`maxRequestRetries`** (Number, Optional, Default: `5`)
  - Number of retry attempts for failed requests
  - Helps handle temporary network issues or rate limiting

- **`requestTimeoutSecs`** (Number, Optional, Default: `60`)
  - Maximum time (in seconds) to wait for a page to load
  - Increase for slower connections or when scraping detailed pages

### Output Structure

#### Sample JSON Output

Below is an example of the structured output, combining data from multiple sources:

```json
{
    "agencyId": 30507,
    "agencyName": "Greeff Christie's International Real Estate - Stellenbosch & Franschhoek",
    "agencyImageUrl": "https://images.prop24.com/201194560",
    "descriptionHeader": "The Crowning Jewel of the Esteemed Val de Vie Gentlemen’s Estate",
    "description": "Distinguished Country Manor Set Amidst Unsurpassed Splendour.\n\nPresenting a rare confluence of refined living and verdant charm, this magnificent estate—encompassing an unsurpassed expanse of 25,635 square metres—lies gracefully within the noble confines of the Val de Vie Gentlemen’s Estate, a sanctuary of prestige and quiet dignity.\n\nHerein lies a residence of exceptional stature, wherein the comforts of modernity are seamlessly woven into the very fabric of nature. The property boasts a multitude of well-appointed bedroom suites, formal drawing rooms with both indoor and alfresco spaces elegantly customised for the entertainment of the most discerning residents. \n\nA lap pool sheltered by vibrant lilac trellises of jacaranda blossoms, accompanied by a piping hot jacuzzi, commands a splendid vista of the noble Simonsberg mountain range, offering an ever-changing private vista of nature’s majesty at your doorstep.\n\nEnsconced within a privately governed estate, the property assures peace of mind and security of the highest order, with vigilant patrols by trained guards, precision controlled access points, and ever-watchful world class surveillance software, ensuring that your Family remains sheltered and at ease.\n\nThe Val de Vie Estate stands as a bastion of protection and privilege, bestowing upon its residents both safety and the serenity of a pastoral lifestyle.\n\nOne is invited to partake in the finest pursuits—unwind with colleagues upon a championship golf course, or enjoy a tranquil repose beside the shimmering waters of the private pool... while every equestrian endeavour is catered for by the world class stables and magnificent polo facilities. \n\nThe principal residence spans over 2,000 square metres, comprising multiple barbecue enclaves, a dedicated cinema theatre and seamless multiple outdoor living quarters. The entertainment wing flows with grace into a landscaped garden adorned by an eco-conscious lake, a central boma with fire pit, a wood-fired jacuzzi, an open-air cinema, and a heated swimming pool, all harmoniously arranged to foster both festivity and repose.\n\nThe master suite is a haven unto itself, featuring an opulent spa bath and a dressing room of elegant proportions. The children’s wing houses four en-suite bedrooms, affording comfort and privacy to the younger members of your household.\n\nAdditional accommodation includes a soundproofed cinema or music parlour, a self-contained apartment, a home office, two guest suites, and a staff quarters comprising four en-suite rooms and a dedicated living area.\n\nLet not this rare offering elude you—a private Legacy Property: where the grandeur of nature meets the hallmarks of luxury. \nHere, in this cherished haven, one may lead a life of both distinction and discretion.",
    "photos": [
        {
            "caption": "Image",
            "imageUrl": "https://images.prop24.com/360568809/Crop676x507",
            "midSizeImageUrl": "https://images.prop24.com/360568809/Crop600x400",
            "originalUrl": "https://images.prop24.com/360568809",
            "thumbnailUrl": "https://images.prop24.com/360568809/Crop107x80",
            "imageIdentifier": {
                "imageId": 433003785,
                "isNotFound": false
            }
        },
        {
            "caption": "Image",
            "imageUrl": "https://images.prop24.com/360568810/Crop676x507",
            "midSizeImageUrl": "https://images.prop24.com/360568810/Crop600x400",
            "originalUrl": "https://images.prop24.com/360568810",
            "thumbnailUrl": "https://images.prop24.com/360568810/Crop107x80",
            "imageIdentifier": {
                "imageId": 433003786,
                "isNotFound": false
            }
        },
        ...
    ],
    "floorPlans": [],
    "contacts": [
        {
            "isPrivateContact": false,
            "id": 516610,
            "name": "Carryn Todd",
            "contactType": "Agent",
            "photoUrl": "https://images.prop24.com/352244347/Crop204x306",
            "emailAddress": "",
            "contactNumbers": [
                {
                    "numberType": "Mobile",
                    "displayNumber": "076 522 3323",
                    "internationalNumber": "+27765223323"
                },
                {
                    "numberType": "Office",
                    "displayNumber": "021 007 0673",
                    "internationalNumber": "+27210070673"
                }
            ],
            "agentWhatsappContact": {
                "whatsappContactLink": "https://wa.me/27765223323?text=Hi%20Carryn%2C%20I%E2%80%99m%20interested%20in%20this%20property%2C%20please%20contact%20me.%20https%3A%2F%2Fwww.property24.com%2Ffor-sale%2Fval-de-vie-estate%2Fpaarl%2Fwestern-cape%2F11726%2F116173830"
            }
        }
    ],
    "keyFeatures": [
        {
            "text": "Bedrooms",
            "icon": "/Content/images/Optimized/Icons/icon_bed_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30",
            "value": "12"
        },
        {
            "text": "Bathrooms",
            "icon": "/Content/images/Optimized/Icons/icon_bathroom_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30",
            "value": "12.5"
        },
        {
            "text": "Garages",
            "icon": "/Content/images/Optimized/Icons/icon_garage_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30",
            "value": "9"
        },
        {
            "text": "Parking",
            "icon": "/Content/images/Optimized/Icons/icon_secure_parking_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30",
            "value": "10"
        },
        {
            "text": "Study",
            "icon": "/Content/images/Optimized/Icons/icon_study_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Pet Friendly",
            "icon": "/Content/images/Optimized/Icons/icon_pet_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Flatlet",
            "icon": "/Content/images/Optimized/Icons/icon_flatlet_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Garden",
            "icon": "/Content/images/Optimized/Icons/icon_garden_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Borehole, Water Tank",
            "icon": "/Content/images/Optimized/Icons/icon_faucet_drip.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Solar Panels, Solar Geyser",
            "icon": "/Content/images/Optimized/Icons/icon_solar_panel.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Backup Battery / Inverter",
            "icon": "/Content/images/Optimized/Icons/icon_battery_bolt.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        }
    ],
    "keyFeaturesLeft": [
        {
            "text": "Bedrooms",
            "icon": "/Content/images/Optimized/Icons/icon_bed_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30",
            "value": "12"
        },
        {
            "text": "Bathrooms",
            "icon": "/Content/images/Optimized/Icons/icon_bathroom_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30",
            "value": "12.5"
        },
        {
            "text": "Garages",
            "icon": "/Content/images/Optimized/Icons/icon_garage_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30",
            "value": "9"
        },
        {
            "text": "Parking",
            "icon": "/Content/images/Optimized/Icons/icon_secure_parking_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30",
            "value": "10"
        },
        {
            "text": "Study",
            "icon": "/Content/images/Optimized/Icons/icon_study_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Pet Friendly",
            "icon": "/Content/images/Optimized/Icons/icon_pet_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        }
    ],
    "keyFeaturesRight": [
        {
            "text": "Flatlet",
            "icon": "/Content/images/Optimized/Icons/icon_flatlet_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Garden",
            "icon": "/Content/images/Optimized/Icons/icon_garden_blue.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Borehole, Water Tank",
            "icon": "/Content/images/Optimized/Icons/icon_faucet_drip.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Solar Panels, Solar Geyser",
            "icon": "/Content/images/Optimized/Icons/icon_solar_panel.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        },
        {
            "text": "Backup Battery / Inverter",
            "icon": "/Content/images/Optimized/Icons/icon_battery_bolt.svg?35-30-2E-33-38-2E-37-34-35-2E-30"
        }
    ],
    "details": [
        {
            "categoryItems": [
                {
                    "name": "Listing Number",
                    "values": [
                        "116173830"
                    ]
                },
                {
                    "name": "Type of Property",
                    "values": [
                        "House"
                    ]
                },
                {
                    "name": "List Date",
                    "values": [
                        "07 July 2025"
                    ]
                },
                {
                    "name": "Erf Size",
                    "values": [
                        "25 635 m²"
                    ]
                },
                {
                    "name": "Floor Size",
                    "values": [
                        "2335 m²"
                    ]
                },
                {
                    "name": "Pets Allowed",
                    "values": [
                        "Yes"
                    ]
                }
            ],
            "name": "Property Details"
        },
        {
            "categoryItems": [
                {
                    "name": "Bedroom",
                    "values": [
                        "12"
                    ]
                },
                {
                    "name": "Bathrooms",
                    "values": [
                        "12.5"
                    ]
                },
                {
                    "name": "Kitchens",
                    "values": [
                        "3"
                    ]
                },
                {
                    "name": "Office/study",
                    "values": [
                        "1"
                    ]
                },
                {
                    "name": "Domestic",
                    "values": [
                        "1"
                    ]
                },
                {
                    "name": "Reception Rooms",
                    "values": [
                        "8"
                    ]
                }
            ],
            "name": "Rooms"
        },
        {
            "categoryItems": [
                {
                    "name": "Garage",
                    "values": [
                        "9"
                    ]
                },
                {
                    "name": "Parking",
                    "values": [
                        "10"
                    ]
                },
                {
                    "name": "Garden",
                    "values": [
                        "Yes"
                    ]
                }
            ],
            "name": "External Features"
        },
        {
            "categoryItems": [
                {
                    "name": "Backup Power",
                    "values": [
                        "Backup Battery / Inverter"
                    ]
                }
            ],
            "name": "Building"
        },
        {
            "categoryItems": [
                {
                    "name": "Flatlet",
                    "values": [
                        "Yes"
                    ]
                }
            ],
            "name": "Other Features"
        }
    ],
    "pointsOfInterest": [
        {
            "id": 6,
            "name": "Transport and Public Services",
            "pointsOfInterestItems": [
                {
                    "distance": "1.85km",
                    "name": "Cillie"
                },
                {
                    "distance": "3.39km",
                    "name": "Simondium"
                },
                {
                    "distance": "4.69km",
                    "name": "Paarl"
                },
                {
                    "distance": "5.72km",
                    "name": "Fairview"
                },
                {
                    "distance": "6.37km",
                    "name": "Groot-Drakenstein"
                }
            ]
        },
        {
            "id": 1,
            "name": "Education",
            "pointsOfInterestItems": [
                {
                    "distance": "3.75km",
                    "name": "Simond Privaatskool"
                },
                {
                    "distance": "3.84km",
                    "name": "Courtrai Primary"
                },
                {
                    "distance": "4.00km",
                    "name": "Simondium Primary"
                },
                {
                    "distance": "4.83km",
                    "name": "Montessori @ Home Independent School"
                },
                ...
            ]
        },
        {
            "id": 5,
            "name": "Sports and Leisure",
            "pointsOfInterestItems": [
                {
                    "distance": "4.38km",
                    "name": "Boschenmeer Golf Course"
                },
                {
                    "distance": "7.01km",
                    "name": "Haweqwa Nature Reserve"
                },
                {
                    "distance": "8.27km",
                    "name": "Picnic spot"
                }
            ]
        },
        {
            "id": 2,
            "name": "Food and Entertainment",
            "pointsOfInterestItems": [
                {
                    "distance": "5.71km",
                    "name": "Fairview"
                },
                {
                    "distance": "7.07km",
                    "name": "Hennie's Paarl Restaurant"
                },
                {
                    "distance": "7.29km",
                    "name": "Cattle Baron - Paarl"
                }
            ]
        }
    ],
    "nextShowDate": "0001-01-01T00:00:00+02:00",
    "nextShowEndDate": "0001-01-01T00:00:00+02:00",
    "showDays": [],
    "listingUrl": "https://www.property24.com/for-sale/val-de-vie-estate/paarl/western-cape/11726/116173830",
    "sourceReference": "RL24794",
    "listingMedia": {
        "youTubeVideoTourId": "Lajz4VWPEQo",
        "matterportSpaceId": "",
        "eyeSpy360Id": ""
    },
    "auctionVenue": "",
    "hasVenue": false,
    "soldPrices": [
        {
            "year": 2025,
            "month": 7,
            "price": 22500000,
            "url": "https://www.property24.com/property-values/552-arena-place/val-de-vie-estate/paarl/western-cape/uuicbb7dkjccoayasjiyd2kr7dbhe3x7dskum76u5ljo2zf7coe4eyqc2hmy6mnxao2t4ilyy5uhc",
            "streetNumber": "552",
            "streetName": "Arena Place",
            "suburb": "Val de Vie Estate"
        },
        {
            "year": 2025,
            "month": 7,
            "price": 9000000,
            "url": "https://www.property24.com/property-values/99-grenache-close/val-de-vie-estate/paarl/western-cape/uq6vowa7e432zcjs3iokui5dyrrhmmcqoaq67y7ubmuuxdhbr2lazdypjvqcuvkxstciw2zssggmm",
            "streetNumber": "99",
            "streetName": "Grenache Close",
            "suburb": "Val de Vie Estate"
        },
        {
            "year": 2025,
            "month": 7,
            "price": 11600000,
            "url": "https://www.property24.com/property-values/835-muscat-crescent/val-de-vie-estate/paarl/western-cape/at7zmyaumi734afas5v3ygafhk6seljb23v2jstqjtgs6d4ucorr4oknxbymjfdq26prandavingg",
            "streetNumber": "835",
            "streetName": "Muscat Crescent",
            "suburb": "Val de Vie Estate"
        }
    ],
    "suburbTrendsUrl": "https://www.property24.com/paarl/val-de-vie-estate/property-trends/11726",
    "soldPriceSuburbUrl": "https://www.property24.com/property-values/val-de-vie-estate/paarl/western-cape/11726",
    "suburbName": "Val de Vie Estate",
    "cityName": "Paarl",
    "provinceName": "Western Cape",
    "suburbId": 11726,
    "cityId": 344,
    "provinceId": 9,
    "suburbResultsUrl": "https://www.property24.com/ResolveUrl/suburb?SuburbId=11726&ListingType=Sale",
    "status": "Active",
    "listingType": "Sale",
    "onShow": false,
    "repossessed": false,
    "auction": false,
    "listingNumber": "P24-116173830",
    "displayPrice": "R 140 000 000",
    "price": 140000000,
    "bedrooms": 12,
    "bathrooms": 12.5,
    "garages": 9,
    "parkingSpaces": 19,
    "size": {
        "unit": "m²",
        "value": 25635
    },
    "sizeType": "Erf",
    "thumbnailUrl": "https://images.prop24.com/360568809/Crop237x198",
    "tileType": "Normal",
    "midSizeImageUrl": "https://images.prop24.com/360568809/Crop600x400",
    "propertyTypeId": 4,
    "hasGroupedDuplicates": false,
    "agencyBrandingLogoType": "Default",
    "isPrivateListing": false,
    "isOffPortal": false,
    "banners": {},
    "badges": {
        "badges": []
    },
    "basicInfo": {
        "suburbName": "Val de Vie Estate",
        "cityName": "Paarl",
        "provinceName": "Western Cape",
        "suburbId": 11726,
        "cityId": 344,
        "provinceId": 9,
        "suburbResultsUrl": "https://www.property24.com/ResolveUrl/suburb?SuburbId=11726&ListingType=Sale",
        "status": "Active",
        "listingType": "Sale",
        "onShow": false,
        "repossessed": false,
        "auction": false,
        "listingNumber": "P24-116173830",
        "displayPrice": "R 140 000 000",
        "price": 140000000,
        "bedrooms": 12,
        "bathrooms": 12.5,
        "garages": 9,
        "parkingSpaces": 19,
        "size": {
            "unit": "m²",
            "value": 25635
        },
        "sizeType": "Erf",
        "thumbnailUrl": "https://images.prop24.com/360568809/Crop237x198",
        "tileType": "Boosted",
        "midSizeImageUrl": "https://images.prop24.com/360568809/Crop600x400",
        "propertyTypeId": 4,
        "hasGroupedDuplicates": false,
        "newFeaturedListingAgencyBranding": {
            "backgroundColourRGB": -11710635,
            "textColourRGB": -1,
            "thumbImageUrls": [
                "https://images.prop24.com/360568810/Crop162x108",
                "https://images.prop24.com/360568811/Crop162x108",
                "https://images.prop24.com/360568812/Crop162x108"
            ],
            "agentLogoUrl": "https://images.prop24.com/352244347/Crop204x306",
            "agentName": "Carryn Todd"
        },
        "agencyBrandingLogoUrl": "https://images.prop24.com/214388067/Ensure528x153",
        "agencyBrandingLogoType": "Wide",
        "isPrivateListing": false,
        "isOffPortal": false,
        "banners": {},
        "badges": {
            "badges": []
        },
        "promotedListingId": 2097976
    }
}
```

### Output Fields Explanation

The scraper returns a comprehensive dataset for each property listing on Property24.com. Below is a detailed explanation of all fields in the JSON output.

#### Agency Information

- `agencyId` (Number): Unique identifier for the real estate agency
- `agencyName` (String): Name of the real estate agency
- `agencyImageUrl` (String): URL to the agency's logo/image

#### Property Description

- `descriptionHeader` (String): Main heading/title of the property listing
- `description` (String): Detailed description of the property with formatting

#### Media and Visuals

- `photos` (Array): Collection of property images with various sizes and formats
  - `caption` (String): Description of the image
  - `imageUrl` (String): URL to the standard-sized image
  - `midSizeImageUrl` (String): URL to medium-sized image (600x400)
  - `originalUrl` (String): URL to the original, full-resolution image
  - `thumbnailUrl` (String): URL to the thumbnail version of the image
  - `imageIdentifier` (Object): Contains image identification details
    - `imageId` (Number): Unique identifier for the image
    - `isNotFound` (Boolean): Indicates if the image is missing

#### Contact Information

- `contacts` (Array): List of real estate agents/contacts for the property
  - `isPrivateContact` (Boolean): Indicates if the contact is private
  - `id` (Number): Unique identifier for the contact
  - `name` (String): Full name of the contact person
  - `contactType` (String): Type of contact (e.g., "Agent")
  - `photoUrl` (String): URL to the contact's profile photo
  - `contactNumbers` (Array): List of phone numbers
    - `numberType` (String): Type of number (e.g., "Mobile", "Office")
    - `displayNumber` (String): Formatted phone number for display
    - `internationalNumber` (String): Phone number in international format
  - `agentWhatsappContact` (Object): WhatsApp contact information
    - `whatsappContactLink` (String): Direct WhatsApp chat link

#### Property Features

- `keyFeatures` (Array): List of key features with icons and values
  - `text` (String): Feature name (e.g., "Bedrooms", "Bathrooms")
  - `icon` (String): URL to the feature icon
  - `value` (String, optional): Feature value (e.g., number of bedrooms)
- `keyFeaturesLeft` (Array): Left column of key features (for UI display)
- `keyFeaturesRight` (Array): Right column of key features (for UI display)

#### Detailed Property Information

- `details` (Array): Categorized property details
  - `name` (String): Category name (e.g., "Property Details", "Rooms")
  - `categoryItems` (Array): List of items in the category
    - `name` (String): Property attribute name
    - `values` (Array): Array of values for the attribute

#### Location and Points of Interest

- `pointsOfInterest` (Array): Nearby points of interest grouped by category
  - `id` (Number): Category identifier
  - `name` (String): Category name (e.g., "Education", "Transport")
  - `pointsOfInterestItems` (Array): List of POIs in this category
    - `distance` (String): Distance from the property
    - `name` (String): Name of the point of interest

#### Property Listing Information

- `listingUrl` (String): Direct URL to the property listing
- `sourceReference` (String): Internal reference code from the agency
- `listingMedia` (Object): Contains IDs for various media types
  - `youTubeVideoTourId` (String): YouTube video ID for property tour
  - `matterportSpaceId` (String): Matterport 3D tour ID
  - `eyeSpy360Id` (String): 360° virtual tour ID

#### Location Data

- `suburbName` (String): Name of the suburb where the property is located
- `cityName` (String): Name of the city
- `provinceName` (String): Name of the province
- `suburbId` (Number): Unique identifier for the suburb
- `cityId` (Number): Unique identifier for the city
- `provinceId` (Number): Unique identifier for the province

#### Listing Status and Type

- `status` (String): Current status of the listing (e.g., "Active")
- `listingType` (String): Type of listing (e.g., "Sale", "Rent")
- `onShow` (Boolean): Indicates if the property is available for viewings
- `repossessed` (Boolean): Indicates if the property is a bank repossession
- `auction` (Boolean): Indicates if the property is being sold via auction
- `listingNumber` (String): Unique identifier for the listing (e.g., "P24-116173830")

#### Pricing and Financials

- `displayPrice` (String): Formatted price string (e.g., "R 140 000 000")
- `price` (Number): Numeric price value

#### Property Specifications

- `bedrooms` (Number): Number of bedrooms
- `bathrooms` (Number): Number of bathrooms (can be a decimal for half-baths)
- `garages` (Number): Number of garages
- `parkingSpaces` (Number): Total number of parking spaces
- `size` (Object): Property size information
  - `unit` (String): Unit of measurement (e.g., "m²")
  - `value` (Number): Numeric size value
- `sizeType` (String): Type of size measurement (e.g., "Erf", "Floor Area")

#### Media and Visuals (Additional)

- `thumbnailUrl` (String): URL to the property's thumbnail image
- `tileType` (String): Type of property tile/listing (e.g., "Normal", "Boosted")
- `midSizeImageUrl` (String): URL to medium-sized property image
- `propertyTypeId` (Number): Numeric identifier for the property type

#### Agency Branding

- `agencyBrandingLogoUrl` (String): URL to the agency's branding logo
- `agencyBrandingLogoType` (String): Type of branding logo (e.g., "Default", "Wide")

#### Additional Flags

- `isPrivateListing` (Boolean): Indicates if the listing is private
- `isOffPortal` (Boolean): Indicates if the listing is from an external portal
- `hasGroupedDuplicates` (Boolean): Indicates if there are duplicate listings grouped together

#### Sold Price Data (if applicable)

- `soldPrices` (Array): Historical sold price data for the property or area
  - `year` (Number): Year of sale
  - `month` (Number): Month of sale (1-12)
  - `price` (Number): Sale price
  - `url` (String): URL to the sold property details
  - `streetNumber` (String): Street number of the sold property
  - `streetName` (String): Street name of the sold property
  - `suburb` (String): Suburb of the sold property

***

### Data Quality Assurance

- **Validation**: Automatic data validation and cleaning
- **Consistency**: Standardized output format across all listings
- **Completeness**: Optional fallback mechanisms for missing data
- **Accuracy**: Regular updates to handle website changes

### Support & Maintenance

- **Regular Updates**: We continuously update our scraper to adapt to website changes
- **Dedicated Support**: Get help from our technical team
- **Documentation**: Comprehensive guides and API references
- **SLA**: 99.9% uptime guarantee for enterprise users

### Explore More Scrapers

If you found this Apify Scraper useful, be sure to check out our other powerful scrapers and actors at [memo23's Apify profile](https://apify.com/memo23). We offer a wide range of tools to enhance your web scraping and automation needs across various platforms and use cases.

### Support

- For issues or feature requests, please use the [Issues](https://console.apify.com/actors/L0FBskQdtIJdnZTg6/issues) section of this actor.
- If you need customization or have questions, feel free to contact the author:
  - Author's website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional Services

- Request customization or whole dataset: <muhamed.didovic@gmail.com>
- If you need anything else scraped, or this actor customized, email: <muhamed.didovic@gmail.com>
- For API services of this scraper (no Apify fee, just usage fee for the API), contact: <muhamed.didovic@gmail.com>
- Email: muhamed.didovic@gmail.com

# Actor input Schema

## `startUrls` (type: `array`):

URLs to start with. The actor currently supports URLs such as `https://www.property24.com/for-sale/val-de-vie-estate/paarl/western-cape/11726?sp=pt%3d15000000%26bd%3d4`.

## `monitoringMode` (type: `boolean`):

If checked, it will only scrape newly listings compared to what has been scraped in previous runs.

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

Maximum number of items that will be scraped.

## `maxConcurrency` (type: `integer`):

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

## `maxRequestRetries` (type: `integer`):

Number of times the crawler will retry a failed request before giving up.

## `enrichEmails` (type: `boolean`):

If enabled, finds a contact email for each result from its own website (or by discovering it from the name). Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort.

## `proxy` (type: `object`):

Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.property24.com/for-sale/val-de-vie-estate/paarl/western-cape/11726?sp=pt%3d15000000%26bd%3d4"
  ],
  "monitoringMode": false,
  "maxItems": 1000,
  "maxConcurrency": 2,
  "minConcurrency": 1,
  "maxRequestRetries": 100,
  "enrichEmails": false
}
```

# 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 = {
    "startUrls": [
        "https://www.property24.com/for-sale/val-de-vie-estate/paarl/western-cape/11726?sp=pt%3d15000000%26bd%3d4"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/property24-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 = { "startUrls": ["https://www.property24.com/for-sale/val-de-vie-estate/paarl/western-cape/11726?sp=pt%3d15000000%26bd%3d4"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/property24-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.property24.com/for-sale/val-de-vie-estate/paarl/western-cape/11726?sp=pt%3d15000000%26bd%3d4"
  ]
}' |
apify call memo23/property24-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/property24-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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