# Property24 Africa Rentals Scraper (`ashersam01/property24-africa-rentals-scraper`) Actor

Extract rental property listings from Property24 across African markets including Namibia and South Africa. Collect rental prices, locations, property details, and listing links for market research, lead generation, and rental intelligence.

- **URL**: https://apify.com/ashersam01/property24-africa-rentals-scraper.md
- **Developed by:** [Asher Samwaka](https://apify.com/ashersam01) (community)
- **Categories:** Real estate, Travel, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 property listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 🏠 Property24 Africa Rentals Scraper

> **The only scraper covering rental listings across 9 African countries — structured, fast, and ready to use.**

Property24 is the #1 property portal across Southern and East Africa. This actor gives you instant, structured access to tens of thousands of active rental listings across 9 countries — ready to download as JSON, CSV, or Excel in minutes.

---

### 🌍 What You Get

Run once. Get a full country's worth of rental listings delivered straight to your dataset.

| Country | Listings | Time |
|---|---|---|
| 🇿🇦 **South Africa** | ~17,000 listings | ~45 min |
| 🇳🇦 **Namibia** | ~600 listings | ~3 min |
| 🇰🇪 **Kenya** | ~400 listings | ~3 min |
| 🇿🇼 **Zimbabwe** | ~150 listings | ~2 min |
| 🇧🇼 **Botswana** | ~200 listings | ~2 min |
| 🇿🇲 **Zambia** | ~300 listings | ~2 min |
| 🇳🇬 **Nigeria** | ~300 listings | ~2 min |
| 🇲🇿 **Mozambique** | ~100 listings | ~2 min |
| 🇲🇺 **Mauritius** | ~100 listings | ~2 min |

---

### 📊 Sample Output

Here's what a typical record looks like:

```json
{
  "listing_url": "https://www.property24.com/to-rent/sea-point/cape-town/western-cape/11021/117098155",
  "title": "2 Bedroom Apartment",
  "monthly_rental": "R 35 000",
  "suburb": "Sea Point",
  "property_type": null,
  "bedrooms": "2",
  "bathrooms": "2",
  "parking": "2",
  "floor_size": "129 m²",
  "erf_size": null,
  "image": "https://images.prop24.com/377180517/Crop600x400",
  "listing_type": "to_rent"
}
````

Every record includes **12 fields** — monthly rental, size, location, bedrooms, bathrooms, parking, and a direct link to the listing.

***

### 💼 What Can You Build With This?

Whether you're a developer, analyst, or business — this data opens doors:

**📈 Rental Market Research**
Track average rental prices by suburb, monitor inventory levels, identify affordable neighbourhoods, and benchmark price-per-m² across cities.

**🏦 Investment Analysis**
Calculate rental yields by comparing rental prices to for-sale prices. Identify high-demand suburbs and emerging rental markets across Africa.

**🔍 PropTech Products**
Power a rental price estimator, build a listing aggregator, or feed a tenant-matching platform — without manual scraping or expensive data subscriptions.

**📰 Journalism & Academic Research**
Housing affordability, rental inflation, urban migration — the data is all there, structured and ready for analysis.

**🤝 Lead Generation**
Build targeted databases of active rental listings for letting agencies, relocation services, or corporate housing providers.

***

### ⚙️ How To Use It

**Step 1 — Pick your country**

```json
{
  "country": "south_africa"
}
```

Available options: `south_africa` · `namibia` · `kenya` · `zimbabwe` · `botswana` · `zambia` · `nigeria` · `mozambique` · `mauritius`

**Step 2 — Hit Start**

Listings stream into your dataset in real time as pages are scraped. You can watch the count go up live.

**Step 3 — Export your data**

Download as **JSON**, **CSV**, or **Excel** with one click. Pipe it into your database, spreadsheet, or BI tool of choice.

That's it. No API keys. No browser automation. No setup headaches.

***

### 🛠️ Under The Hood

- Built with **Python + httpx** — fast async HTTP, no heavy browser overhead
- Uses **Apify residential proxies** for reliable, unblocked access
- Covers **provinces → suburbs → listings** in a fully parallel pipeline
- Records stream to the dataset as they're found — no waiting for the full run to finish
- Deduplication built in — no duplicate listings even across overlapping suburb areas
- South Africa uses a two-phase city discovery approach covering all 9 provinces

***

### 📝 Notes

- Covers **rental listings** only — looking for for-sale listings? Check the [Property24 Africa For-Sale Scraper](https://apify.com/ashersam01/property24-africa-scraper)
- Rental prices are in local currency (ZAR, NAD, KES, USD, BWP, ZMW, NGN, MZN, MUR)
- South Africa covers all 9 provinces and 400+ suburbs
- Listing counts fluctuate as properties are rented and new ones are listed — run regularly for fresh data

### ⚠️ Legal

This actor collects publicly available listing data. Use responsibly and ensure compliance with applicable laws in your jurisdiction.

***

*Made with ❤️ from Windhoek, Namibia 🇳🇦 — because African real estate data should be accessible to everyone.*

# Actor input Schema

## `country` (type: `string`):

Select which Property24 country site to scrape. Each country runs independently.

## Actor input object example

```json
{
  "country": "botswana"
}
```

# Actor output Schema

## `listing_url` (type: `string`):

Direct link to the property listing on Property24

## `title` (type: `string`):

Listing title, e.g. 2 Bedroom Apartment

## `monthly_rental` (type: `string`):

Monthly rental price in local currency

## `suburb` (type: `string`):

Suburb or neighbourhood where the property is located

## `property_type` (type: `string`):

Type of property, e.g. Apartment, House, Townhouse

## `bedrooms` (type: `string`):

Number of bedrooms

## `bathrooms` (type: `string`):

Number of bathrooms

## `parking` (type: `string`):

Number of parking spaces or garages

## `floor_size` (type: `string`):

Interior floor size, e.g. 85 m²

## `erf_size` (type: `string`):

Land size. Null for apartments.

## `image` (type: `string`):

URL of the primary listing image

## `listing_type` (type: `string`):

Always to\_rent for this actor

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("ashersam01/property24-africa-rentals-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("ashersam01/property24-africa-rentals-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 '{}' |
apify call ashersam01/property24-africa-rentals-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Property24 Africa Rentals Scraper",
        "description": "Extract rental property listings from Property24 across African markets including Namibia and South Africa. Collect rental prices, locations, property details, and listing links for market research, lead generation, and rental intelligence.",
        "version": "0.0",
        "x-build-id": "tSy5T5tpiforSEJjX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ashersam01~property24-africa-rentals-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ashersam01-property24-africa-rentals-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/ashersam01~property24-africa-rentals-scraper/runs": {
            "post": {
                "operationId": "runs-sync-ashersam01-property24-africa-rentals-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/ashersam01~property24-africa-rentals-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-ashersam01-property24-africa-rentals-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": {
                    "country": {
                        "title": "Country",
                        "enum": [
                            "south_africa",
                            "namibia",
                            "kenya",
                            "nigeria",
                            "zambia",
                            "zimbabwe",
                            "botswana",
                            "mozambique",
                            "mauritius"
                        ],
                        "type": "string",
                        "description": "Select which Property24 country site to scrape. Each country runs independently.",
                        "default": "botswana"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
