Private Property Scraper - South Africa Real Estate Listings
Pricing
from $0.70 / 1,000 results
Private Property Scraper - South Africa Real Estate Listings
Scrape privateproperty.co.za for South African real estate homes, rentals, farms, commercial listings, and developments with prices, rooms, sizes, amenities, security, photos, links, and advertiser details. Export JSON, CSV, or Excel datasets and connect property research to API or MCP workflows
Pricing
from $0.70 / 1,000 results
Rating
0.0
(0)
Developer
Iñigo Garcia Olaizola
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Private Property Scraper — South Africa Listings
Find and organize property listings from Private Property for sale and rent. Collect prices, locations, property details, photos, listing links, features, status information, and contact-ready advertiser details—including available phone numbers—for market research, lead generation, investment analysis, and property monitoring.
🤖 What does Private Property Scraper do?
Private Property Scraper helps you discover South African real estate listings in a clean, export-ready dataset. Search by city, suburb, or area and narrow results by price, rooms, property type, size, amenities, security, and listing status.
- For-sale listings — homes, apartments, townhouses, land, farms, commercial properties, and developments.
- Rental listings — residential, commercial, and farm properties with rental price-period options.
- Property research data — prices, addresses, floor and land areas, photos, descriptions, listing status, and advertiser information.
- Contact-ready details — enable detailed results to capture available advertiser mobile, work, and home numbers alongside the matching contact.
- Flexible exports — download JSON, CSV, or Excel files, or connect your results to an API or MCP workflow.
Great for: property market research, real-estate lead generation, investment shortlists, agency prospecting, and price monitoring.
SEO keywords: Private Property scraper, privateproperty.co.za scraper, South Africa real estate data, property listing scraper, rental listings scraper, real estate API alternative, Apify actor.
💡 Why use Private Property Scraper?
- 📈 Track local markets — compare asking prices and property supply across cities and suburbs.
- 🎯 Build prospect lists — find relevant listings with contact names and available phone numbers for agency and broker workflows.
- 🏠 Find investment opportunities — combine budgets, room counts, property types, and area requirements.
- 🔎 Monitor changes — identify new, featured, exclusive, on-show, or price-reduced listings.
- 📊 Create reusable datasets — send structured property data to spreadsheets, dashboards, CRMs, and research tools.
🚀 How to use
- Open Private Property Scraper in Apify Store and click Try for free.
- Keep the prefilled Cape Town location or enter a city, suburb, or area.
- Choose For sale or For rent, then add the filters you need.
- Set
maxItemsand click Start. - Review listings in the Dataset tab and download them as JSON, CSV, or Excel.
The default location is Cape Town, so the first run starts with a realistic local search. Use maxItems: 0 when you want all available matching listings.
💳 Pricing
Apify's Free plan includes monthly credits for testing and small collections. For larger market research projects, recurring monitoring, and high-volume exports, choose the Apify plan that fits your usage.
📝 Input parameters
All inputs are optional. The default search is for residential properties for sale in Cape Town.
| Parameter | Type | Required | Description |
|---|---|---|---|
maxItems | Integer | No | Maximum listings to save. Use 0 for all available matching listings. Default: 100. |
location | Text | No | City, suburb, or area name, such as Cape Town, Sandton, or Durban. Default: Cape Town. |
listingType | sale · rent | No | Choose For sale or For rent. Default: sale. |
category | residential · commercial · farm · development | No | Broad property category. development is available for sale searches. Default: residential. |
minPrice | Integer in ZAR | No | Minimum asking price. Use 0 for any price. |
maxPrice | Integer in ZAR | No | Maximum asking price. Use 0 for any price. |
bedrooms | Integer | No | Minimum bedrooms. Applies to residential and farm searches. |
bathrooms | Integer | No | Minimum bathrooms. Applies to residential and farm searches. |
garages | Integer | No | Minimum garages. Applies to residential searches. |
parkings | Integer | No | Minimum parking spaces. Applies to residential searches. |
minFloorSize | Integer in m² | No | Minimum indoor floor area. |
maxFloorSize | Integer in m² | No | Maximum indoor floor area. |
minLandSize | Integer in m² | No | Minimum land area. |
maxLandSize | Integer in m² | No | Maximum land area. |
propertyTypes | List of text values | No | Choose from house, townhouse, apartment, vacant_land, garden_cottage, commercial, industrial, retail, office, hospitality, farm, smallholding, farm_with_house, farmland, agricultural_holding, commercial_farm, or game_farm. |
amenities | List of text values | No | Choose from garden, patio_or_balcony, pets_allowed, pool, furnished, sea_view, staff_quarters, borehole, flatlet, or scenic_view. |
securityFeatures | List of text values | No | Choose from alarm, access_gate, electric_fencing, security_post, or intercom. |
specialFeatures | List of text values | No | For sale: on_show or bank_sale. For rent: electricity_included or water_included. |
sortBy | relevance · newest · price · size · available_from | No | Primary result ordering. available_from is for rental searches. Default: relevance. |
sortOrder | ascending · descending | No | Direction of the selected ordering. Default: descending. |
rentalPricePeriod | monthly · weekly · daily · per_square_metre | No | Price period for rental searches. |
fetchDetails | Boolean | No | Add extra detail information under _details, including available advertiser phone numbers matched to their contacts. This takes longer and uses more resources. Default: false. |
Example inputs
1️⃣ Residential homes for sale
{"location": "Cape Town","listingType": "sale","category": "residential","maxItems": 50,"minPrice": 1000000,"maxPrice": 3500000,"bedrooms": 3,"amenities": ["garden", "pool"],"securityFeatures": ["access_gate", "electric_fencing"],"sortBy": "newest"}
2️⃣ Furnished Johannesburg rentals
{"location": "Johannesburg","listingType": "rent","category": "residential","maxItems": 100,"maxPrice": 18000,"bedrooms": 2,"propertyTypes": ["apartment"],"amenities": ["furnished", "pets_allowed"],"specialFeatures": ["water_included"],"rentalPricePeriod": "monthly","sortBy": "price","sortOrder": "ascending"}
3️⃣ Commercial property research
{"location": "Durban","listingType": "sale","category": "commercial","propertyTypes": ["office", "retail"],"minFloorSize": 250,"maxItems": 25,"fetchDetails": true}
📊 Output and results
Each dataset item is a property listing. The actor preserves the listing information available for that result and adds _details when fetchDetails is enabled and additional information is available.
Field reference
listingId(number) — Private Property listing identifier.portalRef(text) — Listing reference shown by the advertiser.propertyTitle(text) — Listing headline.propertyTypeDescription(text) — Human-readable property type.listingPrice(object) — Asking price and price-status information.propertyAttributes(object) — Bedrooms, bathrooms, garages, floor area, and land area.propertyAddress(text) — Property address when provided.propertySuburbName(text) — Suburb or local area.shareUrl(link) — Link to the listing.mediaImageUrls(list) — Listing photo links.propertyDescription(text) — Advertiser's property description.listingAdvertiser(object) — Agency, office, and contact information when provided. WithfetchDetailsenabled,_details.listingAdvertiser.contactsincludes available mobile, work, and home numbers matched to each contact.listingStatuses(object) — New, on-show, and price-reduced status flags.isFeaturedListing(boolean) — Whether the listing is featured.isExclusiveListing(boolean) — Whether the listing is exclusive._details(object, optional) — Additional detail data whenfetchDetailsis enabled.
Example result
{"listingId": 11998043,"portalRef": "T5580025","propertyTitle": "13 Bedroom House","propertyTypeDescription": "House","listingPrice": {"price": 8500000,"isPoa": false,"isOnAuction": false},"propertyAttributes": {"beds": 13,"baths": 10,"garages": 3,"floorArea": "735 m²","landArea": "1200 m²"},"propertySuburbName": "Baysville","mediaImageUrls": ["https://images.pp.co.za/listing/11998043/example/600/450/contain/jpegorpng"],"shareUrl": "https://www.privateproperty.co.za/ld/T5580025","propertyDescription": "Spacious family home close to schools and local amenities.","listingAdvertiser": {"contact": { "name": "Violet Omwansa" },"office": { "officeName": "Chas Everitt East London" }},"listingStatuses": {"isNew": true,"isOnShow": false,"isPriceReduced": false},"isFeaturedListing": true,"isExclusiveListing": false,"_details": {"listingAdvertiser": {"contacts": [{"id": 1812854,"name": "Violet Omwansa","mobile": "082 555 0147","workNumber": "021 555 0198","homeNumber": ""}]}}}
🧭 Tips and common recipes
- Focused suburb search: use a suburb such as
SandtonorSea Pointinlocation. - Broad city search: use a city such as
Cape TownorJohannesburgfor more coverage. - Investor shortlist: combine
minPrice,maxPrice, bedrooms, bathrooms, and size limits. - New listing monitoring: set
sortBytonewestand run the actor on a schedule. - Rental comparison: set
listingTypetorent, chooserentalPricePeriod, and add rental inclusions. - Contact-ready records: enable
fetchDetailsto include available advertiser phone numbers beside the matching contact. - More complete records: enable
fetchDetailswhen the extra information is worth the additional time.
⚙️ Best practices
- Start with a small
maxItemsvalue while checking that your location and filters return the right inventory. - Use
maxItems: 0for an unlimited collection, subject to any account or usage limits that apply to your run. - Keep price and area ranges realistic for the selected location to avoid unnecessarily broad collections.
- Some filters apply only to particular property categories or sale/rent searches; incompatible choices are skipped.
- Treat advertiser contact information as business data and store it securely.
⚖️ Legal and ethical considerations
- Respect Private Property's terms, policies, and any applicable access restrictions.
- Use listing and advertiser information responsibly and only for lawful purposes.
- Follow privacy requirements such as GDPR or POPIA when handling contact information.
- Avoid unsolicited communications, misleading outreach, or republishing information in a way that harms people or businesses.
- Use reasonable collection volumes and retain exported data only as long as needed.
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Private Property. Private Property and related trademarks belong to their respective owners.
❓ FAQ
Can I collect both sale and rental listings?
Yes. Set listingType to sale or rent. Rental searches can also use a rental price period and rental-specific inclusions.
What happens when I leave location empty?
A location is required for a useful search. The Store input is prefilled with Cape Town; enter a city, suburb, or area before starting a run if you remove that value.
Does maxItems: 0 return everything?
It requests all available matching listings, subject to the inventory returned and any account or usage limits that apply to the run.
Why did a filter not change my results?
Some choices are specific to sale, rent, or a property category. Check that the filter matches the selected listingType and category, and test with a small result limit first.
When should I use fetchDetails?
Use it when you need additional listing information beyond the search result. It adds extra work for each listing, so it is best for targeted collections.
Does detailed output include advertiser phone numbers?
Yes. When available, mobile, work, and home numbers appear beside the matching advertiser contact in _details.listingAdvertiser.contacts. Listings without disclosed numbers simply keep their available contact details.
Can I export the results for another tool?
Yes. Download JSON, CSV, or Excel from the Dataset tab, or connect the dataset through your preferred API or MCP workflow.
🛟 Support
Need a custom field or export workflow? Open an issue or contact igolaizola.com/#contact.