# Property24 Scraper: Real Estate Listings, Prices & Broker Leads (`getascraper/property24-scraper`) Actor

Extract property listings, asking prices, bedrooms, bathrooms, floor sizes, agencies, and WhatsApp agent contact links across nine African countries from Property24.com. Export clean tables to Google Sheets, Make, or Zapier, or schedule daily new-listing and price-change alerts. Pay per result.

- **URL**: https://apify.com/getascraper/property24-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 16 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.52 / 1,000 property listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🏠 Property24 Scraper: Real Estate Listings, Prices & Broker Leads

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#E6F2EC;border:1px solid #B3D9C4;border-top:4px solid #007749;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Nine African markets, one dataset, agent WhatsApp links on every deep-scrape row</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pull Property24 listings for sale, to rent, or recently sold in any city or suburb. Fast list mode returns core fields in minutes. Deep scrape adds agent phone numbers, WhatsApp links, geo coordinates, and photo galleries.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B3D9C4;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 0 10px">
<span style="font-size:15px;font-weight:800;color:#007749">🌍 Nine countries, one run</span><br>
<span style="font-size:12px;color:#57534E">Cover South Africa, Kenya, Namibia, and six more African markets without building separate scrapers for each.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B3D9C4;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#007749">📱 WhatsApp links per agent</span><br>
<span style="font-size:12px;color:#57534E">Every deep-scrape row includes a ready-to-click WhatsApp contact link for the listing agent.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B3D9C4;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#007749">🔔 Daily change alerts</span><br>
<span style="font-size:12px;color:#57534E">Schedule the run and receive only new listings, price shifts, and status changes since the last run.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B3D9C4;border-left:none;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 10px 0">
<span style="font-size:15px;font-weight:800;color:#007749">🏷️ Fast or deep, your choice</span><br>
<span style="font-size:12px;color:#57534E">Core fields from search pages in seconds. Full agent contacts and photos with one toggle.</span>
</td>
</tr>
</table>

Get structured property data from Property24 across nine African markets in minutes. Pick a location, set your filters, and download a spreadsheet of live listings. No login required.

### 🏠 What does Property24 scraper do?

It collects property listings from Property24 and returns them as a clean, flat table you can open in Excel, Google Sheets, or feed into your own tools.

You can scrape:

- Properties for sale, to rent, or recently sold
- Any city, suburb, or region across South Africa, Namibia, Kenya, Botswana, Zimbabwe, Zambia, Nigeria, Tanzania, and Mozambique
- Asking price, price per square meter, bedrooms, bathrooms, garages, floor size, and plot size
- The listing agent, agency, direct phone number, and WhatsApp contact link
- Full descriptions, amenities, levies, rates, and image galleries

Enter a location name and it builds the search for you. Or paste your own Property24 search and listing URLs if you already have them.

### 💡 Who uses this?

- **I am a property fund analyst** tracking the Cape Town and Sandton markets. I pull every new listing in my target suburbs each morning, with price per square meter already calculated, so I can spot mispriced stock before anyone else.
- **I am a real estate lead-gen service** that needs agent contacts at scale. I turn on deep scrape and every row comes with the agent name, agency, phone, and a ready-to-use WhatsApp link. No manual browsing required.
- **I am a relocation agent** comparing rentals for a client. I filter by price, bedrooms, and minimum floor size, then hand my client a single sheet of every matching home with photos and a map pin.
- **I am a data analyst** building a housing price model. I export thousands of listings with consistent numeric fields: price, floor area, plot size, levies, and rates. The data lands analysis ready.

### ⚡ Two ways to run it

**Fast list mode (default).** Reads search result pages and returns the core fields for every listing: title, price, type, location, bedrooms, bathrooms, and the listing URL. Best when you want a wide sweep of the market quickly and cheaply.

**Deep scrape mode.** Visits each listing page to add the high-value extras: agent name and phone, agency, WhatsApp link, latitude and longitude, floor and plot size, levies, rates, full description, amenities, and image gallery. Best for lead generation and detailed analysis. Turn it on with a single toggle.

### 🚀 How to use Property24 scraper

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#E6F2EC;border:1px solid #B3D9C4;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#007749;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick your location</span><br>
<span style="font-size:12px;color:#57534E">Type a suburb or city name, select a country, and choose listing type. Or paste a Property24 URL directly.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#E6F2EC;border:1px solid #B3D9C4;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#007749;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set filters and depth</span><br>
<span style="font-size:12px;color:#57534E">Filter by price range, bedrooms, and property type. Toggle deep scrape for agent contacts and full property details.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#E6F2EC;border:1px solid #B3D9C4;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#007749;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Download and act</span><br>
<span style="font-size:12px;color:#57534E">Export as Excel, CSV, or JSON. Schedule for daily market alerts and connect to Google Sheets, Make, or Zapier.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `startUrls` | array of URLs | No | Property24 search, category, or direct listing URLs. Overrides the country and location fields when provided. |
| `searchLocations` | array of strings | No | One or more place names to search, such as Cape Town, Sandton, or Nairobi CBD. The scraper builds the search URL for you. |
| `locations` | array of strings | No | Additional city, suburb, or region names to match in returned listings. `searchLocations` remains the primary URL seed field. |
| `country` | enum | No | Which Property24 country site to target when no start URLs are given. Covers South Africa, Namibia, Kenya, Botswana, Zimbabwe, Zambia, Nigeria, Tanzania, and Mozambique. Defaults to South Africa. |
| `countries` | array of enum | No | Run the same search across multiple country sites at once. Ignored when start URLs are provided. |
| `listingType` | enum | No | Scrape properties for sale, to rent, or recently sold. Defaults to for sale. |
| `propertyType` | enum | No | Narrow results to houses, apartments, townhouses, vacant land, farms, or commercial. Defaults to any type. |
| `maxItems` | integer | No | Maximum number of listings to return across all searches. Defaults to 100. |
| `minPrice` | integer | No | Only return listings at or above this asking price. |
| `maxPrice` | integer | No | Only return listings at or below this asking price. |
| `bedrooms` | integer | No | Only return listings with at least this many bedrooms. |
| `bathroomsMin` | integer | No | Only return listings with at least this many bathrooms. |
| `minFloorSize` | integer | No | Only return listings at or above this floor area in square meters. Works best with deep scrape on. |
| `maxFloorSize` | integer | No | Only return listings at or below this floor area in square meters. |
| `sortBy` | enum | No | Order results by newest, price ascending, price descending, or floor size. Defaults to relevance. |
| `deepScrape` | boolean | No | Visit each listing page to add agent contacts, WhatsApp links, coordinates, sizes, levies, rates, and photos. Defaults to false. |
| `monitorMode` | enum | No | Snapshot returns the current matching listings on every run. Changes compares against the stored state and emits only transitions. Defaults to snapshot. |
| `monitorScope` | string | No | Key to separate independent monitoring cohorts. Keep it stable for the same country, location, and filter combination. Defaults to property24-default. |
| `emitUnchanged` | boolean | No | In changes mode, also emit listings whose fields did not change since the last run. Defaults to false. |
| `proxyConfiguration` | object | Yes | Proxy settings. Residential proxies are recommended for South African domains. Datacenter proxies typically work for other countries. |

### 📤 Output

Each listing is saved as one row. Here is a single enriched record from a deep scrape run:

```json
{
  "listing_id": "117156004",
  "title": "6 Bedroom House in Camps Bay",
  "listing_type": "For Sale",
  "property_type": "House",
  "country": "South Africa",
  "province": "Western Cape",
  "city": "Cape Town",
  "suburb": "Camps Bay",
  "street_address": "Geneva Drive",
  "postal_code": "8005",
  "latitude": -33.9508,
  "longitude": 18.3776,
  "description": "Architectural masterpiece with uninterrupted Atlantic views...",
  "price": 75000000,
  "price_text": "75000000 (ZAR)",
  "price_per_sqm": 125000,
  "bedrooms": 6,
  "bathrooms": 6,
  "garages": 3,
  "parking_spaces": 4,
  "floor_size": 600,
  "erf_size": 850,
  "levies": 0,
  "rates_taxes": 12500,
  "has_solar": "Yes",
  "pet_friendly": "Yes",
  "garden": "Yes",
  "picture_url": "https://images.prop24.com/117156004/Crop600x400",
  "agency_name": "Seeff Atlantic Seaboard",
  "agent_name": "Jane Smith",
  "agent_phone": "+27821234567",
  "whatsapp_link": "https://wa.me/27821234567",
  "listing_url": "https://www.property24.com/for-sale/camps-bay/cape-town/western-cape/11014/117156004",
  "scraped_at": "2026-06-24T18:33:22.000Z"
}
```

In fast list mode, contact, coordinate, and size fields are omitted. Only core listing fields are returned.

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `listing_id` | string | Unique Property24 listing identifier. |
| `title` | string | Listing headline, such as "3 Bedroom House in Rondebosch". |
| `listing_type` | string | For Sale, To Rent, or Recently Sold. |
| `listing_status` | string | Current status of the listing on the platform. |
| `property_type` | string | House, Apartment, Townhouse, and similar. |
| `country` | string | Country the listing is in. |
| `province` | string | Province or region. |
| `city` | string | City. |
| `suburb` | string | Suburb or neighborhood. |
| `street_address` | string | Street address when published. Deep scrape only. |
| `postal_code` | string | Postal code when published. Deep scrape only. |
| `latitude` | number | Map latitude. Deep scrape only. |
| `longitude` | number | Map longitude. Deep scrape only. |
| `description_header` | string | Short headline above the description. Deep scrape only. |
| `description` | string | Full property description. |
| `price` | number | Asking price as a clean number. |
| `price_text` | string | Price as displayed, with currency. |
| `price_per_sqm` | number | Price divided by floor size. Deep scrape only. |
| `bedrooms` | number | Number of bedrooms. |
| `bathrooms` | number | Number of bathrooms. |
| `garages` | number | Number of garages. Deep scrape only. |
| `parking_spaces` | number | Number of open parking bays. |
| `floor_size` | number | Internal floor area in square meters. Deep scrape only. |
| `erf_size` | number | Plot or land size in square meters. Deep scrape only. |
| `listed_date` | string | Date the listing was posted. Deep scrape only. |
| `freshness_days` | number | Number of days since the listing was posted. Deep scrape only. |
| `levies` | number | Monthly levy amount. Deep scrape only. |
| `rates_taxes` | number | Monthly municipal rates and taxes. Deep scrape only. |
| `has_solar` | string | Yes or No for solar power. Deep scrape only. |
| `has_backup_battery` | string | Yes or No for battery or inverter backup. Deep scrape only. |
| `pet_friendly` | string | Yes or No for pet-friendly. Deep scrape only. |
| `garden` | string | Yes or No for a garden. Deep scrape only. |
| `picture_url` | string | Main listing photo URL. |
| `images_list` | string | Comma-separated gallery image links. Deep scrape only. |
| `agency_id` | string | Listing agency identifier. Deep scrape only. |
| `agency_name` | string | Listing agency name. Deep scrape only. |
| `agency_logo` | string | Agency logo image link. Deep scrape only. |
| `agent_id` | string | Listing agent identifier. Deep scrape only. |
| `agent_name` | string | Listing agent name. Deep scrape only. |
| `agent_photo` | string | Agent profile photo link. Deep scrape only. |
| `agent_phone` | string | Agent phone number. Deep scrape only. |
| `agent_email` | string | Agent email when published. Deep scrape only. |
| `whatsapp_link` | string | Direct WhatsApp link to the agent. Deep scrape only. |
| `contact_completeness` | number | Score from 0 to 1 for how complete the agent contact data is. Deep scrape only. |
| `lead_score` | number | Composite score combining contact completeness and listing quality signals. |
| `lead_score_breakdown` | object | Per-signal breakdown behind the lead score. |
| `listing_url` | string | Link to the original Property24 listing. |
| `scraped_at` | string | Time the record was collected. |
| `changeType` | string | Changes mode only: NEW, UPDATED, PRICE_CHANGED, STATUS_CHANGED, REMOVED, REAPPEARED, or UNCHANGED. |
| `changedFields` | array | Changes mode only: which fields changed since the last run. |
| `firstSeenAt` | string | Changes mode only: when this listing was first seen. |
| `lastSeenAt` | string | Changes mode only: when this listing was last seen. |

### 💰 Pricing

This Actor runs on a pay-per-result model. You pay only for the listings successfully written to your dataset. Empty runs cost nothing and there are no monthly subscriptions. Deep scrape mode charges an additional fee per enriched record because each one visits the full listing page. Run it once for a market snapshot or schedule it daily and pay only for what you use.

### ⭐ Enjoying Property24 Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#E6F2EC;border:1px solid #B3D9C4;border-left:5px solid #007749;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this scraper saved you from opening fifty listings by hand, spend ten seconds on a rating.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other property investors and real estate lead-gen teams find this actor. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#007749;border:1px solid #007749;border-left:5px solid #007749;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#FFFFFF">
<a href="https://apify.com/getascraper/property24-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ Frequently asked questions

##### Is scraping Property24 legal?

Yes, collecting publicly available listing data is generally legal. This Actor only reads pages that anyone can view in a browser. You are responsible for how you use the data and for following Property24's terms and your local regulations.

##### Which countries does it cover?

Nine African markets: South Africa, Namibia, Kenya, Botswana, Zimbabwe, Zambia, Nigeria, Tanzania, and Mozambique. Pick one in the country setting, run across several at once, or paste a URL from any of these sites.

##### Do I get agent phone numbers and WhatsApp links?

Yes, when deep scrape is on. Each record includes the agent name, agency, phone number, and a ready-to-use WhatsApp link where Property24 publishes them.

##### Why do some runs return fewer details than others?

Fast list mode returns only the core fields from search pages. To get coordinates, agent contacts, sizes, levies, and photos, turn on deep scrape so the Actor visits each listing page.

##### Can I schedule it to run automatically?

Yes. Use the Apify scheduler to run it daily, weekly, or at any interval, and connect the output to Google Sheets, Make, Zapier, or your own systems.

### 🛟 Support

Found a bug or need a new field? Open an issue on the Actor's Issues tab. Suggestions and feature requests are welcome.

### ⚠️ Disclaimer

This Actor collects only publicly available data and does not bypass logins or access private information. Use the data responsibly and in line with Property24's terms of service and the data protection laws that apply to you.

### 🔗 Other actors

- [🏢 CommercialRealEstate.com.au scraper: prices, agents, and deal status ready for your spreadsheet](https://apify.com/getascraper/commercialrealestate-au-scraper) ↗ - extracts Australian commercial property listings, prices, and agent contacts.
- [🏘️ Etagi Real Estate Scraper: Парсер Этажи](https://apify.com/getascraper/etagi-property-scraper) ↗ - collects Russian residential property listings and prices from Etagi.
- [🏠 Yandex Realty Scraper: Яндекс Недвижимость](https://apify.com/getascraper/yandex-realty-scraper) ↗ - pulls property listings from Yandex's real estate portal.
- [FastExpert Scraper](https://apify.com/getascraper/fastexpert-scraper) ↗ - gathers real estate agent profiles, transaction counts, and contact details from FastExpert.
- [CIAN Real Estate Scraper: Недвижимость ЦИАН](https://apify.com/getascraper/cian-real-estate-scraper) ↗ - extracts real estate listings from Cian, Russia's largest property portal.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/property24-scraper/changelog.md

# Actor input Schema

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

Property24 search, category, or direct listing URLs. Overrides country, listingType, and searchLocations when provided.

## `searchLocations` (type: `array`):

One or more location names to search (e.g. 'Cape Town', 'Sandton', 'Nairobi CBD'). Each becomes a ?SearchString= query.

## `locations` (type: `array`):

Additional city, suburb, or region names to match in returned listings. Search Locations remains the URL seed field.

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

Select which Property24 country subdomain to scrape. Used when no startUrls are provided.

## `countries` (type: `array`):

Run the same listing search across multiple Property24 country subdomains. Ignored when Start URLs are provided.

## `listingType` (type: `string`):

Select whether to scrape properties for sale, to rent, or recently sold.

## `propertyType` (type: `string`):

Filter results to a specific property category. Uses title-text matching on listing cards.

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

Maximum total property listings to scrape across all search URLs.

## `minPrice` (type: `integer`):

Only return listings with prices at or above this value (e.g. 500000).

## `maxPrice` (type: `integer`):

Only return listings with prices at or below this value (e.g. 10000000).

## `bedrooms` (type: `integer`):

Only return listings with at least this many bedrooms.

## `bathroomsMin` (type: `integer`):

Only return listings with at least this many bathrooms.

## `minFloorSize` (type: `integer`):

Only return listings where the floor size is at least this many square meters. Requires deepScrape to be accurate.

## `maxFloorSize` (type: `integer`):

Only return listings where the published floor size is at or below this value.

## `sortBy` (type: `string`):

Control the order in which Property24 returns listings for search URLs.

## `deepScrape` (type: `boolean`):

Fetch individual listing pages to extract agent contacts, WhatsApp links, full descriptions, amenities, levies, rates, and accurate floor/erf sizes.

## `monitorMode` (type: `string`):

Snapshot returns the current matching listings. Changes compares complete scans with the state stored under the monitor scope and emits only transitions plus failures.

## `monitorScope` (type: `string`):

Explicit Key-Value Store scope for this monitoring cohort. Keep it stable for the same countries, locations, and filters.

## `emitUnchanged` (type: `boolean`):

In changes mode, also emit listings whose source-backed fields did not change.

## `proxyConfiguration` (type: `object`):

Residential proxies recommended for South African domains. For other countries, datacenter proxies typically work.

## Actor input object example

```json
{
  "startUrls": [],
  "searchLocations": [
    "Cape Town"
  ],
  "locations": [],
  "country": "south_africa",
  "countries": [
    "south_africa"
  ],
  "listingType": "sale",
  "propertyType": "any",
  "maxItems": 100,
  "sortBy": "default",
  "deepScrape": false,
  "monitorMode": "snapshot",
  "monitorScope": "property24-default",
  "emitUnchanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [],
    "searchLocations": [
        "Cape Town"
    ],
    "country": "south_africa",
    "listingType": "sale",
    "propertyType": "any",
    "maxItems": 100,
    "sortBy": "default",
    "deepScrape": false,
    "monitorMode": "snapshot",
    "monitorScope": "property24-default",
    "emitUnchanged": false,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/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": [],
    "searchLocations": ["Cape Town"],
    "country": "south_africa",
    "listingType": "sale",
    "propertyType": "any",
    "maxItems": 100,
    "sortBy": "default",
    "deepScrape": False,
    "monitorMode": "snapshot",
    "monitorScope": "property24-default",
    "emitUnchanged": False,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/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": [],
  "searchLocations": [
    "Cape Town"
  ],
  "country": "south_africa",
  "listingType": "sale",
  "propertyType": "any",
  "maxItems": 100,
  "sortBy": "default",
  "deepScrape": false,
  "monitorMode": "snapshot",
  "monitorScope": "property24-default",
  "emitUnchanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/property24-scraper --silent --output-dataset

```

## MCP server setup

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