# Property24 Scraper — South Africa Property Listings (`hipersoft/property24-scraper`) Actor

Scrape South African property listings from Property24, for sale or to rent: price, title, suburb, bedrooms, bathrooms, parking, floor and erf size, agency, images and listing URL. Export one clean row per property as JSON, CSV or Excel for research, valuation and lead generation.

- **URL**: https://apify.com/hipersoft/property24-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Categories:** Real estate, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.0015 / property listing scraped

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/actors/running/actors-in-store.md#pay-per-event

## 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 Scraper — South Africa Property Listings

Scrape **South African property listings from Property24** as clean, structured **JSON, CSV, Excel or XML**. Choose **for sale** or **to rent**, point it at any city, suburb or filtered search, and it returns one tidy row per property — **price, title, suburb, bedrooms, bathrooms, parking, floor and erf size, agency, main image** and the **listing URL**. Turn on full details to also pull the complete description, feature list, agent and photo gallery. Perfect for property-market research, valuation, lead generation and automation.

### What does Property24 Scraper do?

This actor turns Property24 search results into a ready-to-use dataset. Give it a location (as a simple `city/province/areaId` path) or paste one or more Property24 results-page URLs straight from your browser, pick **for sale** or **to rent**, and it walks every results page and collects each property with rich, structured fields. Enable **Include full details** and it opens each property's own page for the full description, complete feature list, agent name and image gallery.

### What data can you get?

**Per property:**

| Field | Description |
| --- | --- |
| `listingNumber` | Property24 listing reference. |
| `listingType` | `for-sale` or `to-rent`. |
| `title` | Listing title (e.g. "3 Bedroom Apartment for sale in Marina Da Gama"). |
| `price` | Price as a number, in South African Rand. |
| `priceText` | Price exactly as shown (e.g. "R 3 300 000"). |
| `currency` | Currency code (ZAR). |
| `description` | Short listing description. |
| `suburb` | Suburb / area name. |
| `address` | Street address, when shown. |
| `bedrooms` | Number of bedrooms. |
| `bathrooms` | Number of bathrooms. |
| `parking` | Number of parking spaces. |
| `floorSize` | Floor size (e.g. "80 m²"). |
| `erfSize` | Erf / plot size, when shown. |
| `agency` | Listing agency, when shown. |
| `image` | Main listing image URL. |
| `url` | Link to the property page. |
| `collectedAt` | Timestamp when the row was collected. |

**Include full details** can additionally attempt to enrich each row, where the property page is reachable, with `fullDescription`, `agent`, an `images` gallery and a `details` object (type of property, price per m², levies, rates, and more).

### Use cases

- **Property-market research** — map prices, sizes and stock across suburbs and cities.
- **Valuation & comparables** — pull comparable listings by area, size and price band.
- **Lead generation** — build lists of listings and agencies for outreach.
- **Price & stock monitoring** — track asking prices and new listings over time.
- **Dashboards** — power property dashboards and reports from clean, structured rows.
- **Automation** — feed fresh listing data into your own pipelines on a schedule.

### How to use it

1. Add **Property24 Scraper** to your Apify account and open its input.
2. Choose the **Listing intent** — For sale or To rent.
3. Enter a **Location path** like `cape-town/western-cape/432` (copy it from a Property24 results URL), **or** paste one or more **Start URLs** from your browser.
4. Optionally turn on **Include full details** for the full description, features, agent and gallery.
5. Set **Max items** to cap the output, then click **Run**.
6. Export the results as JSON, CSV, Excel or XML.

### Input

```json
{
  "intent": "for-sale",
  "locationUrlPath": "cape-town/western-cape/432",
  "maxItems": 100,
  "includeDetails": false
}
```

| Field | Description |
| --- | --- |
| `startUrls` | Optional Property24 results-page URLs to scrape. Overrides intent + location path. |
| `intent` | `for-sale` or `to-rent`. |
| `locationUrlPath` | Location path `city/province/areaId`, e.g. `cape-town/western-cape/432`. |
| `maxItems` | Cap the number of properties. `0` = no limit. |
| `includeDetails` | Also collect each property's full description, features, agent and gallery. |
| `maxConcurrency` | How many detail pages to fetch in parallel when full details are on. |

### What you get

One flat JSON row per property, ready to export to CSV, Excel, JSON or XML.

```json
{
  "listingNumber": "117588912",
  "listingType": "for-sale",
  "title": "3 Bedroom Apartment / Flat for sale in Marina Da Gama",
  "price": 3300000,
  "priceText": "R 3 300 000",
  "currency": "ZAR",
  "description": "3 Bedroom Apartment in Marina Da Gama",
  "suburb": "Marina Da Gama",
  "bedrooms": 3,
  "bathrooms": 2,
  "parking": 2,
  "floorSize": "80 m²",
  "image": "https://images.prop24.com/385970316/Crop526x328",
  "url": "https://www.property24.com/for-sale/marina-da-gama/cape-town/western-cape/10213/117588912"
}
```

### FAQ

**Which areas are covered?**
Anywhere on Property24 across South Africa. Use a location path like `city/province/areaId` (copy it from a results URL), or paste full Start URLs for your exact search.

**Can I scrape rentals?**
Yes — set **Listing intent** to *To rent*, or paste a to-rent results URL.

**Can I get more than the summary fields?**
Turn on **Include full details** to additionally attempt to collect each property's full description, feature list, agent and photo gallery where the property page is reachable.

**What export formats are supported?**
JSON, CSV, Excel and XML — plus the Apify API and integrations for automation.

# Actor input Schema

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

Optional. One or more Property24 search/result page URLs to scrape (e.g. a for-sale or to-rent results page for a city, suburb or filtered search). Paste the URL straight from your browser. When set, this overrides the Intent and Location path fields. The scraper follows the page's own pagination automatically.

## `intent` (type: `string`):

Choose whether to scrape properties for sale or to rent. Used together with the Location path when no Start URLs are provided.

## `locationUrlPath` (type: `string`):

The Property24 location path to search, in the form 'city/province/areaId' — for example 'cape-town/western-cape/432' or 'johannesburg/gauteng/95'. You can copy this straight out of a Property24 results URL (the part after /for-sale/ or /to-rent/). Ignored when Start URLs are set.

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

Maximum number of properties to collect (0 = no limit; collect everything the search returns).

## `includeDetails` (type: `boolean`):

Also open each property's own page to collect the full description, complete feature list, agent name and image gallery. This makes runs slower but returns richer data.

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

How many property detail pages to fetch in parallel when 'Include full details' is on.

## Actor input object example

```json
{
  "intent": "for-sale",
  "locationUrlPath": "cape-town/western-cape/432",
  "maxItems": 100,
  "includeDetails": false,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# 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 = {
    "locationUrlPath": "cape-town/western-cape/432"
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/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 = { "locationUrlPath": "cape-town/western-cape/432" }

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/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 '{
  "locationUrlPath": "cape-town/western-cape/432"
}' |
apify call hipersoft/property24-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/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/pRB7MMHJfpJpAawiB/builds/SLEGKvOsSuNaS7EEs/openapi.json
