The Ultimate Property Scraper avatar

The Ultimate Property Scraper

Pricing

from $0.10 / 1,000 results

Go to Apify Store
The Ultimate Property Scraper

The Ultimate Property Scraper

Export cleaned property listing records from The Scrape Lab's maintained real estate inventory. Filter by country, website, market, area, price, size, and history.

Pricing

from $0.10 / 1,000 results

Rating

0.0

(0)

Developer

Inus Grobler

Inus Grobler

Maintained by Community

Actor stats

1

Bookmarked

6

Total users

3

Monthly active users

5 days ago

Last modified

Share

At a glance: what it does is export structured property listing data from maintained inventory; input examples include countries, websites, markets, area queries, property type, limits, and estimate-only mode; output examples are sale, rental, and historical listing rows; use cases include real estate leads and market research; limitations, troubleshooting, and pricing/cost notes are covered below.

The Ultimate Property Scraper exports clean real estate listing data from The Scrape Lab's maintained property inventory, so teams can get structured sale, rental, and historical property data without waiting for a live crawl during every run.

Use it for real estate lead generation, market research, rental analysis, property price tracking, CRM enrichment, BI dashboards, and country or website-level property datasets.

What You Can Export

  • Current property listings for sale or rent
  • Historical listing observations and change data
  • Property URLs, titles, listing IDs, and source websites
  • Country, city, suburb, province, address, and location fields
  • Price, currency, price text, and price context
  • Property type, bedrooms, bathrooms, parking, floor size, and erf size
  • Listing status and freshness timestamps
  • Raw historical snapshots when history mode is enabled

Quick Start

For most exports, set only:

  • countries or websites
  • markets
  • areaQuery or Property Type, if you want a narrower search
  • limit
  • estimateOnly, when previewing a larger export

The simplest input is:

{
"countries": ["ZA"],
"markets": ["for-sale"],
"limit": 100
}

For a focused Cape Town apartment export:

{
"countries": ["ZA"],
"websites": ["property24"],
"markets": ["for-sale"],
"areaQuery": "Cape Town",
"propertyTypeQuery": "apartment",
"minBedrooms": 2,
"limit": 100
}

For rentals:

{
"countries": ["ZA"],
"markets": ["to-rent"],
"areaQuery": "Cape Town",
"limit": 100
}

Preview Before Exporting

Set estimateOnly to true to count matching records without exporting dataset items. This is recommended before large exports because it shows the expected row count and avoids result-item charges.

{
"countries": ["ZA"],
"markets": ["for-sale"],
"areaQuery": "Cape Town",
"estimateOnly": true,
"limit": 1000
}

Inputs

Basic Inputs

  • countries: Country codes to search, such as ZA, US, GB, AE, or BR.
  • websites: Optional exact source websites. Leave empty to use the selected countries.
  • markets: for-sale, to-rent, or both.
  • areaQuery: City, suburb, address, or location text.
  • propertyTypeQuery: Property Type dropdown, such as apartment, house, villa, or land.
  • limit: Maximum dataset rows to export.
  • estimateOnly: Preview matching result counts without exporting rows.

Common Filters

  • minPrice, maxPrice
  • minBedrooms, maxBedrooms
  • minBathrooms, maxBathrooms
  • minParkingSpaces, maxParkingSpaces
  • minSizeM2, maxSizeM2

Advanced Options

  • includeHistory: Export historical observations instead of only the latest listing row.
  • seenSince: Return rows seen after an ISO timestamp, for example 2026-05-01T00:00:00Z.
  • orderBy: Sort by newest seen, price low to high, or price high to low.
  • offset: Skip rows for pagination.
  • includeTotalCount: Add an exact total count to a normal export. Leave off for large runs unless you need the count.
  • currencyCodes: Exact currency filters such as ZAR, USD, GBP, or EUR.
  • listingStatus: Exact status filters such as active, sold, or removed.

Older integrations that send sources, maxListings, historic, locationQuery, or updatedSince continue to work.

Output Example

{
"source": "property24",
"source_site": "property24.com",
"country_code": "ZA",
"country_name": "South Africa",
"currency_code": "ZAR",
"listing_id": "117160720",
"url": "https://www.property24.com/for-sale/harfield-village/cape-town/western-cape/8666/117160720",
"title": "2 Bedroom Apartment",
"property_type": "Apartment",
"market": "for-sale",
"province_name": "Western Cape",
"location": "Harfield Village",
"suburb": "Harfield Village",
"city": "Cape Town",
"price": 2795000,
"price_text": "R 2 795 000",
"bedrooms": 2,
"bathrooms": 1,
"parking_spaces": 1,
"floor_size_m2": 79,
"listing_status": "active",
"last_seen_at": "2026-06-16T06:55:21+00:00"
}

Run On Apify

  1. Open the Actor in Apify Console.
  2. Choose countries or source websites.
  3. Add optional filters.
  4. Use Preview Only for large exports.
  5. Run the Actor and open the Dataset tab.

You can download results as JSON, CSV, Excel, XML, RSS, or HTML from the Dataset tab.

Python API Example

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run_input = {
"countries": ["ZA"],
"markets": ["for-sale"],
"areaQuery": "Cape Town",
"propertyTypeQuery": "apartment",
"limit": 100,
}
run = client.actor("thescrapelab/the-ultimate-property-scraper").call(run_input=run_input)
dataset_id = run["defaultDatasetId"]
for item in client.dataset(dataset_id).iterate_items():
print(item["title"], item["price"], item["url"])

Pricing

This Actor is best priced per exported result. Preview-only runs export no result items, so they are the safest way to estimate export size before paying for a larger dataset.

Recommended pricing is a simple result event:

  • Event: apify-default-dataset-item
  • Public price: about $0.00099 per exported property result
  • Volume discounts: lower per-result prices for higher Apify tiers where configured

Platform usage is low because the Actor streams database results directly to the dataset and does not run a browser during normal exports.

Limits And Caveats

  • The Actor exports maintained inventory already collected by The Scrape Lab. It does not guarantee a live website refresh during your run.
  • Availability varies by country, website, market, and refresh schedule.
  • Some listings can be removed, sold, duplicated by the source website, or changed after collection.
  • includeHistory can return multiple rows for the same listing because each row is a historical observation.
  • Very broad exports should be previewed first and paged with limit and offset when needed.

Troubleshooting

If you get too many rows, use Preview Only, lower limit, add a country or website, and narrow with area, property type, price, bedrooms, bathrooms, parking, size, or seenSince.

If you get no rows, remove the strictest filters first. Try one country with markets: ["for-sale"], then add filters back one at a time.

If a country and website combination returns zero rows, the selected website may not belong to that country. Remove one selector or choose a matching pair.

If you need the full match count, enable includeTotalCount. Leave it disabled for large exports when you only need the rows.

FAQ

Can I scrape property listings by country?

Yes. Use countries with one or more country codes, then choose for-sale, to-rent, or both.

Can I export rental listings?

Yes. Set markets to ["to-rent"].

Can I export historical property price data?

Yes. Set includeHistory to true. History mode can return multiple observations for the same listing.

Does this Actor scrape websites live during my run?

No. It exports cleaned records from maintained inventory. This makes runs faster and more predictable than live crawling every source website during each customer run.

Can I download property data as CSV?

Yes. Open the Dataset tab after the run and export the data as CSV, JSON, Excel, XML, RSS, or HTML.

How do I keep costs low?

Run with estimateOnly: true first, use a practical limit, and narrow broad exports with country, website, market, area, property type, or freshness filters.