Skip to content

September 24, 2026 · 14 min read

Realtor Scraper: 259 of 270 Runs Succeeded (2026)

By Crawlerbros Engineering Team

The README documents 32 output fields per listing, covering list prices, school ratings, tax histories, and flood scores across sale, rental, and sold markets. Operating on Realtor.com, records come back structured with geolocation coordinates and property characteristics at $2.00 per 1,000 results on Apify's free plan. A first run caps maxItems at 50, returning at most 50 results and costing at most $0.10 in result charges. This tool is built for residential real estate analysts, property managers, and investors tracking property pricing and environmental risk. It is not for teams requiring commercial property records or off-market listings, which the platform does not index.

Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 2,500 results at $0.002 each before platform usage. Open Realtor Scraper on Apify and run the prefilled example.

How reliable is Realtor Scraper in production?

Across the last 30 days of public runs on the Apify platform, Realtor Scraper recorded 270 runs with the following outcomes.

Outcome Runs Share
Succeeded 259 95.9%
Failed 2 0.7%
Aborted by the user 5 1.9%
Timed out 4 1.5%
Total 270 100.0%

Expect about 2 in a hundred runs to fail or time out during unattended runs. Set up an automated retry policy with exponential backoff on your orchestration layer to catch occasional execution drops, and establish alerting thresholds if failed runs spike unexpectedly. Splitting large statewide sweeps into smaller municipal batches will also protect your execution queue from hitting platform timeout ceilings.

What does it cost to run Realtor Scraper?

Each result costs $0.002 on Apify's free plan, which is $2.00 per 1,000 results. Starting a run is charged separately at $0.05 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

Apify plan Per result Per 1,000 results
FREE $0.002 $2.00
BRONZE $0.00167 $1.67
SILVER $0.00133 $1.33
GOLD $0.001 $1.00
PLATINUM $0.001 $1.00
DIAMOND $0.001 $1.00

Worked example: collecting 10,000 results costs $20.00 in result charges before run-start fees and platform usage. With 2.2% of runs failing or timing out in the last 30 days, budget for re-running a portion of those batches rather than assuming every run completes.

The main cost driver is maxItems, which directly dictates how many dataset items get written and billed. Run-start charges apply every time a task starts, so testing queries with small item caps avoids unnecessary per-result expenses. The cheapest way to confirm schema suitability is running maxItems at 50 to cap result charges at $0.10 while evaluating data structure.

How do you run Realtor Scraper from the API?

None of its 6 controls is strictly required, so the defaults below produce a valid run on their own. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.

Call the synchronous endpoint to start a run and receive dataset items in one request:

curl -X POST "https://api.apify.com/v2/acts/crawlerbros~realtor-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"search":"Houston, TX","mode":"BUY","maxItems":50,"endPage":5,"scrapeDetails":true}'

The same run from Python, using the official client:

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run_input = {
  "search": "Houston, TX",
  "mode": "BUY",
  "maxItems": 50,
  "endPage": 5,
  "scrapeDetails": True
}

run = client.actor("crawlerbros~realtor-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

And from Node.js:

import { ApifyClient } from 'apify-client'

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })

const input = {
  "search": "Houston, TX",
  "mode": "BUY",
  "maxItems": 50,
  "endPage": 5,
  "scrapeDetails": true
}

const run = await client.actor('crawlerbros~realtor-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)

That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.

Which Realtor Scraper inputs matter, and which can you skip?

The two parameters that fundamentally shape your output are search and mode, which establish geographic target and listing status like for-sale, rent, or sold inventory. For a first run, leave startUrls empty and keep scrapeDetails enabled to evaluate the full payload before narrowing fields. Adjust maxItems and endPage downward when conducting quick validation passes.

  • search (string): City and state to search for properties (e.g., 'Houston, TX', 'San Francisco, CA', 'Miami, FL').
  • mode (string): Type of property search - for sale, for rent, or recently sold. Default: "BUY".
  • maxItems (integer): Maximum number of property listings to scrape (1-500). Default: 50.
  • endPage (integer): Maximum search result pages to scrape per search (1-20). Each page has up to 42 properties. Default: 5.
  • scrapeDetails (boolean): Fetch each property's detail page for full description, schools, tax history, listing history, environmental risk data, and more. Disable for faster runs with only search-level data. Default: true.
  • startUrls (array): Direct Realtor.com property detail URLs or search page URLs. Paste URLs from your browser.

Fixed-choice controls: mode accepts BUY (For Sale (Buy)), RENT (For Rent), SOLD (Recently Sold).

What does Realtor Scraper return?

Output items deliver complete address breakdowns, structural specifications like square footage and year built, agent details, and nested environmental ratings. They do not contain off-market owner records, mortgage balances, or direct buyer contact numbers. Use these records to feed investment underwriting models and local competitive market dashboards.

  • url (e.g. https://www.realtor.com/realestateandhomes-de...)
  • id (e.g. 7167124763)
  • listingId (e.g. 2989700820)
  • status (e.g. for_sale)
  • listPrice (e.g. 318000)
  • lastSoldPrice
  • soldOn (e.g. 2002-01-03)
  • priceReduced
  • beds (e.g. 5)
  • baths (e.g. 4.5)
  • bathsFull
  • bathsHalf
  • sqft (e.g. 5526)
  • lotSqft (e.g. 22346)
  • yearBuilt (e.g. 2000)
  • type (e.g. single_family)
  • subType
  • stories
  • garage (e.g. 3)
  • name
  • text
  • listDate (e.g. 2025-12-23T15:21:17.000000Z)
  • address
  • coordinates
  • photos
  • agents
  • features
  • nearbySchools
  • local
  • history
  • taxHistory
  • scrapedAt (e.g. 2026-03-25T12:00:00.000000+00:00)

These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

How do you build the workflow end to end?

Open Realtor Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

  1. Run a single target listing by populating startUrls with one Realtor.com property URL, leaving scrapeDetails set to true, to inspect full payload structure.
  2. Examine the resulting dataset record to verify that nested arrays like taxHistory, history, and nearbySchools contain the specific metrics needed for your pipeline.
  3. Switch to search mode by setting search to your target city and state (such as Houston, TX) and set mode to BUY, RENT, or SOLD depending on the inventory you need.
  4. Set maxItems to 5 and scrapeDetails to false to quickly verify that search discovery returns listings for that municipal area without spending extra run time.
  5. Set endPage to limit how deep pagination reaches, ensuring maxItems aligns with roughly 42 properties per page.
  6. Re-enable scrapeDetails to true if your pipeline requires agent contacts, school ratings, and local flood risks, or leave it false if you only need listPrice, address, and basic specs.
  7. Trigger the production run and monitor the dataset stream to ensure status and listPrice fields populate consistently across items.

How do you apply it? Three worked playbooks

These are Realtor Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

Use case 1: Real estate investment analysis

Outcome: Compare prices, tax history, and environmental risks

Configure: Set search to "Houston, TX", mode to "BUY", scrapeDetails to true, and maxItems to 50.

Working method: Start with a single ZIP code search, parse the returned taxHistory objects for historical assessment spikes, and cross-reference listPrice against local.flood and local.wildfire risk scores.

Deliverable: A tabular CSV of active properties containing listing prices, latest tax assessment amounts, and environmental risk scores.

Stop condition: Stop the run if consecutive items return empty taxHistory arrays across an area known to report municipal assessments.

Use case 2: Market research

Outcome: Track listing prices, sold prices, and days on market across neighborhoods

Configure: Run scheduled instances setting mode to "SOLD", search to the target city, maxItems to 100, and scrapeDetails to true.

Working method: Execute historical SOLD runs against the municipality to establish baseline lastSoldPrice records, then execute BUY runs in the same market to track listDate and current listPrice differentials.

Deliverable: A structured dataset comparing active list prices to verified sold prices across specified geographic boundaries.

Stop condition: Abort processing if the output yields null values for both listPrice and lastSoldPrice on more than three consecutive records.

Use case 3: School district analysis

Outcome: Find properties near top-rated schools

Configure: Set search to the target market, mode to "BUY", scrapeDetails to true, and endPage to 5.

Working method: Query listings across a municipal region, expand the nearbySchools array on each returned item, and filter out properties where no school achieves a rating equal to or above your target threshold.

Deliverable: A filtered listing catalog mapping property IDs and addresses to nearby schools with their corresponding rating, distance, and studentCount.

Stop condition: Stop and reconfigure search parameters if nearbySchools returns completely empty across five sequential property records.

What breaks, and how do you design around it?

  • Over the last 30 days, 0.7% of public runs failed and 1.5% timed out. Build retries and alerting around those rates rather than assuming every run completes.

Realtor.com enforces pagination boundaries of up to 42 properties per search page across a maximum of 20 pages, capping a single search query at roughly 840 properties. When target markets exceed this capacity, split the workload by dividing queries into narrower neighborhood names or postal codes. When detail pages are not strictly needed, disable detail enrichment to drastically accelerate extraction speed.

When should you not use Realtor Scraper?

Do not use this Actor if your target area is concentrated entirely in New York City's rental and sales ecosystem. The local inventory there is recorded faster and with deeper building-level nuance on specialized local portals; deploy StreetEasy Scraper instead, which extracts borough-specific amenities and unit histories directly. Do not use this Actor if you require non-US properties; for European real estate in the Netherlands, use Funda.nl Real Estate. Similarly, if you only need rental apartments and community amenities rather than single-family deed histories, Apartments.com Scraper is better suited to pure rental discovery. Finally, if you need an official real estate API with strict legal licensing for public redistribution, bypass web scrapers entirely and license direct MLS data feeds via RESO Web API.

What should you check before trusting the output?

  • Verify that listPrice contains a valid numeric value rather than null when running in BUY mode.
  • Check that address.postalCode matches standard 5-digit US formatting and address.state carries a valid state code.
  • Confirm that local.flood contains floodFactorScore when scrapeDetails is true, discarding or logging listings that lack environmental metrics.
  • Halt downstream ingestion if more than 10% of items arrive with null in beds or baths across residential single_family records.

None of this proves a record is correct. It gives a scheduled Realtor Scraper run defined points where it should stop instead of quietly passing bad data downstream.

Frequently asked questions

What happens if a run times out or aborts?

A timed-out run is recorded as an incomplete run, whereas an aborted run occurs when a user manually cancels execution. The run-start fee is charged every time a run starts, but per-result charges apply only to results written to the dataset before the interruption occurred.

How much does it cost to test a single search query?

The example input caps maxItems at 50, so it returns at most 50 results and costs at most $0.10 in result charges on Apify's free plan. Additional platform usage consumed by the run will be billed alongside the run-start fee and result totals.

Can I scrape both sale and rental listings in a single run?

No. The mode control takes a single search type: BUY, RENT, or SOLD. If you need both active sales and active rental units for the same municipality, configure and trigger two separate runs using each mode respective to the target area.

Why are taxHistory and nearbySchools empty for some listings?

Detail fields depend strictly on what Realtor.com displays on that property page. If the listing source or county records do not supply historical property taxes or local school zone data, the scraper outputs empty arrays or null fields for those properties.

What is the fastest way to scrape thousands of properties across a state?

Disable scrapeDetails by setting it to false. Setting scrapeDetails to false extracts core listings directly from search result pages without visiting individual listing pages, significantly increasing processing speed while delivering listPrice, address, photos, and basic beds and baths.

Where to go next

When you are ready to run it, open Realtor Scraper on Apify; the free plan covers up to 2,500 results a month.

Start with the Realtor Scraper Actor page for the current input schema, pricing tier, and run history.

It is part of the Real Estate Scrapers, which puts every related Actor on one page with its price and run history.

If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:

Readers running Realtor Scraper commonly pair it with:

  • Century 21 Real Estate Scraper: Scrape homes for sale and rent from Century21.com.
  • Redfin Real Estate Scraper: Extract property listings from Redfin including price, beds, baths, sqft, address, coordinates, photos, listing remarks, and more.
  • Apartments.com Scraper: Scrape rental listings from Apartments.com with search by location, bedroom count, price, property type, and amenities.
  • United Real Estate Homes for Sale Scraper: Search United Real Estate for homes for sale by city, state, ZIP code, or keyword.
  • Airbnb Scraper: Scrape Airbnb listings, prices, ratings, host info, coordinates and photos for any location.
  • StreetEasy Scraper: Scrape NYC real estate listings from StreetEasy including sales and rentals with prices, addresses, amenities, agent info, and more.
  • Funda.nl Real Estate: Scrape Dutch real-estate listings from Funda.nl with price, living area, plot size, rooms, bedrooms, energy label, address, city, neighborhood, images, and agent.
  • Trulia Property Scraper: Scrape property listings from Trulia, for sale, for rent, and sold.

Related guides:

Resources

  • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-24.

  • Actor last updated by its maintainers on 2026-03-25.

  • Run outcome figures cover the 30 day public window ending 2026-09-24.

  • Realtor Scraper on Apify

● Featured actors

Realtor Scraper

Scrape property listings from Realtor.com. Get prices, beds, baths, sqft, photos, agents, schools, tax history, flood/wildfire risk data, and 40+ fields per property.

Run on Apify ↗