Realtor.com Scraper API - Listings, Prices & Agents avatar

Realtor.com Scraper API - Listings, Prices & Agents

Pricing

from $0.68 / 1,000 property listings

Go to Apify Store
Realtor.com Scraper API - Listings, Prices & Agents

Realtor.com Scraper API - Listings, Prices & Agents

Scrape Realtor.com listings by city, ZIP, county, neighborhood or URL. Each listing has the address, price, beds, baths, sqft, lot size and type. You also get year built, status, days on market, agent, broker and photos. US only. $0.68 per 1,000, flat on every plan.

Pricing

from $0.68 / 1,000 property listings

Rating

5.0

(1)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

a day ago

Last modified

Share

Realtor.com Scraper: US home listings by city, ZIP, county or a URL you paste

Type a location and every matching listing comes back as a row: address, price, beds, baths, square feet, lot size, property type, year built, status, days on market, the listing agent and broker, and the photos. For sale, for rent, recently sold, off market or ready to build.

The awkward part first. daysOnMarket counts from the list date on every row, whatever the status. On a sold or off-market listing that number keeps growing after the sale, so it is days since listing rather than days it was actually on the market. Use listDate and lastSoldDate when the difference matters.

InputCities, ZIPs, counties, neighbourhoods or state codes, or Realtor.com URLs
OutputOne row per listing
Ceiling10,000 listings per run, and Realtor.com will not page deeper than 10,000 per search
Account neededNone, and nothing to install
Price$0.68 per 1,000 listings, flat on every plan

🏷️ What Realtor.com Scraper does

Location takes Austin, TX, a five-digit ZIP, Travis County, TX, a neighbourhood like Zilker, Austin, TX, or a bare state code. One per line, and the whole run shares one budget and one duplicate check, so the same home found under two of your searches is delivered once.

Do not put a street address in there. It gets resolved to the area around it and searched as an area, so you would be billed for a neighbourhood's listings instead of the one house. Paste the property URL into Realtor.com URLs instead, which looks that one property up.

Pasted URLs keep their own filters. Price, beds, type and show-recently-sold written into a Realtor.com search URL are honoured, and search pages and single property pages both work.

Then there are the filters, and there are a lot of them: status, property type, price, beds, baths, living area, lot size, year built, how recently it was listed or sold, open houses, new builds, foreclosures, and keywords that have to appear in the listing.

One gotcha worth knowing: Realtor.com's own value is condos, plural. condo matches nothing.

📥 What you give it

{
"location": ["Austin, TX"],
"listingStatus": "for_sale",
"propertyTypes": ["single_family"],
"priceMax": 600000,
"bedsMin": 3,
"sortBy": "newest",
"maxItems": 200
}
FieldDefaultWhat it is
locationbox starts at Austin, TXWhere to search. City, ZIP, county, neighbourhood or state code. US only.
startUrlsnoneRealtor.com search pages or single property pages, pasted from the site.
listingStatusfor_saleAlso for_rent, sold, off_market, ready_to_build.
propertyTypesevery typesingle_family, condos, townhomes, multi_family, mobile, land, farm and the combined condo_townhome_rowhome_coop.
sortBynewestAlso oldest, price_low, price_high, sold_date, most_photos.
priceMin, priceMaxnoneList price bounds in dollars.
bedsMin, bedsMax, bathsMinnoneRoom counts.
sqftMin, sqftMax, lotSqftMinnoneLiving area and lot size in square feet. One acre is 43,560.
yearBuiltMin, yearBuiltMaxnoneBuild year bounds.
listedWithinDaysnoneOnly listings first posted in this window. Pair it with For sale.
soldWithinDaysnoneOnly homes sold in this window. Pair it with Recently sold.
hasOpenHouse, newConstruction, foreclosureoffEach keeps only that kind when switched on.
keywordsnoneWords that must appear in the listing, like pool or waterfront.
includePropertyDetailsoffAdds description, tax history, price history, schools and value estimates. One extra request per listing, no extra charge.
maxPhotos30Photo URLs to keep per listing, 0 to 50.
maxItems50Total listings across every location and URL, up to 10,000.
proxyConfigurationleave it aloneOptional, under Network. Only the proxyUrls you type in are read.

📤 What you get back

A real row from a run on 14 September 2026, with the feature list cut short:

{
"propertyId": "9843409442",
"listingId": "3000701603",
"url": "https://www.realtor.com/realestateandhomes-detail/5009-Monarda-Mint-Dr_Austin_TX_78754_M98434-09442",
"address": "5009 Monarda Mint Dr",
"addressWithheld": false,
"city": "Austin",
"stateCode": "TX",
"state": "Texas",
"postalCode": "78754",
"county": "Travis",
"countyFips": "48453",
"latitude": 30.367015769780284,
"longitude": -97.62425231789224,
"price": 490222,
"pricePerSqft": 199,
"priceReducedAmount": null,
"lastSoldPrice": null,
"lastSoldDate": null,
"estimatedValue": null,
"hoaFee": null,
"beds": 4,
"baths": 3,
"bathsFull": 2,
"bathsHalf": 1,
"sqft": 2466,
"lotSqft": null,
"yearBuilt": null,
"propertyType": "single_family",
"stories": 2,
"garage": 2,
"listingStatus": "for_sale",
"listDate": "2026-09-14T00:01:29.000000Z",
"daysOnMarket": 0,
"lastUpdateDate": "2026-09-14T00:01:29Z",
"isNewListing": true,
"isPending": false,
"isForeclosure": false,
"isNewConstruction": true,
"agentName": "Cameron Place",
"agentEmail": null,
"brokerName": null,
"brokerPhone": null,
"mlsSourceId": "PULB",
"mlsSourceType": "new_home",
"photoCount": 1,
"primaryPhoto": "http://nh.rdcpix.com/9c50d77ff4f6b0ce0b3c083f6a478599l-f1836003418s.jpg",
"photos": ["http://nh.rdcpix.com/9c50d77ff4f6b0ce0b3c083f6a478599l-f1836003418s.jpg"],
"virtualTourUrl": null,
"hasMatterport": false,
"openHouses": [],
"features": ["new_construction", "two_or_more_stories", "garage_2_or_more", "kitchen_island", "..."],
"searchLocation": "Austin, TX",
"resolvedLocation": "Austin, TX",
"position": 1,
"scrapedAt": "2026-09-14T05:46:06.308Z"
}
FieldWhat it is
address / addressWithheldnull when the listing hides the address. The flag tells you which it is.
lastSoldPrice, lastSoldDateEmpty in non-disclosure states, where sale prices are not public at all.
daysOnMarketDays since listDate, on every status. See the note at the top.
agentEmail, brokerEmail, brokerPhonePresent only when the listing carries them, which is not often. agentName and brokerName are far more reliable.
featuresRealtor.com's own tag list, like kitchen_island and covered_patio.
searchLocation / resolvedLocationWhat you asked for, and what Realtor.com decided that meant. Worth checking when a result set looks wrong.
propertyDetails, taxHistory, priceHistory, schools, valueEstimates, descriptionTextOnly with includePropertyDetails on.

🧾 Reading the output

RowHow to spot itBilled
A listingIt has a propertyId and no ok keyyes
The sample row_sample: true and charged: falseno
A diagnosticok: false, _diagnostic: true and an errorCodeno

Listing rows carry no charged field. The flag is only on the sample and diagnostic rows, to mark them as not real results.

CodeWhat it means
LOCATION_NOT_FOUNDRealtor.com did not resolve that location.
NO_RESULTSThe search ran and matched nothing.
RESULT_CAPThe search matched more than Realtor.com will page through. Narrow it.
PROPERTY_NOT_FOUNDA pasted property is no longer on the site.
BAD_URLA link that is not a Realtor.com search or property page.
UNKNOWN_PROPERTY_TYPEA property type that is not one of Realtor.com's own values.
BLOCKED, NETWORK_ERROR, API_ERROR, GRAPHQL_ERROR, BAD_SEARCH_ERRORRealtor.com did not answer with usable data.

A failure part way through paging keeps the rows already delivered and adds a diagnostic, so you can tell a short result from a complete one.

▶️ How to run it

  1. Open Realtor.com Scraper and click Try for free.
  2. Type a city, ZIP or county into Location, one per line.
  3. Pick a Listing status and any filters you want under Filters.
  4. Set Maximum listings. Start around 25 to see what the rows look like.
  5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.68 per 1,000 listings. Flat on every Apify plan, with no volume tiers.

One billed row per listing delivered. The sample row is not billed, diagnostic rows are not billed, the same home found under two of your searches is billed once, and includePropertyDetails adds fields rather than rows so it does not change the price.

💡 What people use it for

  • Comps and valuation work, pulling sold listings in one ZIP with soldWithinDays set.
  • Agent and broker lead lists, grouped on brokerName across a metro.
  • Watching new supply daily with listedWithinDays at 1, diffing on propertyId.
  • Investment screens: foreclosure on, a price ceiling, and pricePerSqft to rank what comes back.
  • Rental market snapshots by switching status to For rent and holding the rest of the filters.

🚧 What it does not do

  • United States only. Realtor.com does not cover anywhere else.
  • No more than 10,000 results per search. That is Realtor.com's paging depth, not ours. Split by ZIP to go deeper, and watch for the RESULT_CAP row.
  • daysOnMarket is days since listing on every status, so it keeps counting after a sale.
  • No sale prices in non-disclosure states. lastSoldPrice is empty there because the number is not public.
  • Agent and broker emails are rarely published. Do not plan an email campaign around them.
  • A street address in Location is treated as an area. Paste the property URL instead.
  • A location lookup that fails comes back as not found. If you know the place exists, re-run rather than concluding Realtor.com has never heard of it.

🧭 Which property scraper do you need?

If you wantUse
US listings, sold prices and agents from Realtor.comThis one
US listings from Zillow, search and full detailsZillow Scraper
Homes in Spain, Italy and PortugalIdealista Scraper
Homes in Spain from FotocasaFotocasa Scraper
Brazilian listings from VivaReal and ZAPVivaReal & ZAP Imóveis Scraper

❓ Questions people ask

How do I get recently sold homes? Set Listing status to Recently sold and use Sold within the last N days. Read lastSoldPrice and lastSoldDate, not daysOnMarket.

How do I get more than 10,000 listings for a city? Split the city into its ZIP codes and put them all in Location in one run. The duplicate check is shared, so overlapping areas cost once.

Can I look up one specific home? Yes. Paste its Realtor.com property URL into Realtor.com URLs.

Why did my condo filter return nothing? Realtor.com's value is condos, plural. Pick it from the list rather than typing it.

Can I schedule it? Yes. propertyId is stable, so diffing one run against the next shows what came on and what went under contract.

Is this legal? These are public listing pages. Agent names are personal data, so have a reason for collecting them. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the location or URL you used and the run ID. The errorCode on the diagnostic row usually names the problem on its own.