The Ultimate Property Scraper avatar

The Ultimate Property Scraper

Pricing

from $0.69 / 1,000 results

Go to Apify Store
The Ultimate Property Scraper

The Ultimate Property Scraper

Scrape clean, structured property listings from multiple real estate websites in one run. Built for scale with smart filtering (price, beds, baths, size, market, country), duplicate control, and output-ready records for database pipelines.

Pricing

from $0.69 / 1,000 results

Rating

0.0

(0)

Developer

Inus Grobler

Inus Grobler

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Ultimate Scraper Properties Actor

Export property listing data, real estate listings, rental listings, and house or apartment data from stored inventory already collected by The Scrape Lab.

This actor is built for people who need structured property data fast. It lets you filter by country, website, market, location, property type, price, bedrooms, bathrooms, parking, size, freshness, and history, then sends the matching rows to your Apify dataset.

This actor does not scrape websites during the run. It queries existing cleaned property data, which makes runs faster, cheaper, and easier to predict.

What This Actor Is Good For

  • real estate lead generation
  • property market research
  • rental listing exports
  • house and apartment listing exports
  • historic property price tracking
  • country-level or website-level property data pulls
  • building property datasets for CRMs, BI tools, and internal analysis

Best Way To Use It

For most runs, start with only:

  • countries or websites
  • markets
  • areaQuery or propertyTypeQuery
  • estimateOnly
  • limit

If the estimate looks right, run the same input again with estimateOnly turned off.

The simplest working input looks like this:

{
"countries": ["ZA"],
"websites": ["property24"],
"markets": ["for-sale"],
"limit": 10
}

For a more targeted property search:

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

For rental data:

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

For historical property listings:

{
"countries": ["ZA"],
"websites": ["property24"],
"markets": ["for-sale"],
"includeHistory": true,
"seenSince": "2026-05-01T00:00:00Z",
"limit": 100
}

Estimate Before Exporting

Use estimateOnly: true when you want to preview size before exporting data.

The actor will:

  • return no dataset rows
  • count how many rows match the filters
  • show how many rows this exact run would return with the current limit and offset

Useful summary fields:

  • estimated_total_matches
  • estimated_rows_returned

This is the safest way to estimate export size and cost before running a larger property data job.

How Source Selection Works

  • If you set websites, the actor uses only those property websites.
  • If you set countries, the actor searches websites stored for those countries.
  • If you set both, the actor keeps only websites that belong to the selected countries.
  • If you set neither, the actor uses a lightweight default source.

Main Inputs

  • countries The easiest way to search property listings across multiple sources in one country.
  • websites Best when you want exact control over the property websites queried.
  • markets Defaults to for-sale. Add to-rent when you want rental property listings too.
  • areaQuery Text match across suburb, city, location, address, and title.
  • propertyTypeQuery Example values: apartment, house, villa, land, development.
  • minPrice, maxPrice Price filters in the listing currency.
  • minBedrooms, maxBedrooms
  • minBathrooms, maxBathrooms
  • minParkingSpaces, maxParkingSpaces
  • minSizeM2, maxSizeM2
  • currencyCodes Useful when searching across multiple countries.
  • listingStatus Example values: active, sold, removed.
  • seenSince Only return rows seen after a specific ISO timestamp.
  • limit Maximum rows this run can export.
  • offset Skip matching rows for pagination.
  • orderBy Sort by freshness or price.
  • includeHistory Switch from current listings to historical observations.

Current Vs History

includeHistory: false

  • Returns the latest known row for each property listing.
  • Best for live inventory exports, prospecting, market snapshots, and clean real estate datasets.

includeHistory: true

  • Returns historical property listing observations.
  • The same property can appear more than once across time.
  • Best for price tracking, change analysis, monitoring, and backfills.

History rows also keep snapshot_json, while still promoting the main readable fields to the top level.

Output Fields

Typical current-mode fields:

  • source, source_site
  • country_code, country_name, currency_code
  • listing_id, url, title
  • property_type, market
  • location, suburb, city, address
  • price, price_text, price_context
  • bedrooms, bathrooms, parking_spaces
  • floor_size_m2, erf_size_m2
  • listing_status, last_seen_at

History mode also includes:

  • observed_at
  • seen_count
  • is_change
  • changed_fields_json
  • snapshot_json

Tips

If you get too many results:

  • start with estimateOnly: true
  • narrow with countries, websites, markets, areaQuery, or propertyTypeQuery
  • lower limit
  • add price, size, bedroom, bathroom, or parking filters
  • add seenSince

If you get no results:

  • try one website at a time
  • remove the strictest filters first
  • test with only countries, markets, and limit
  • remove propertyTypeQuery and keep only areaQuery
  • check that your market matches what you want