Realtor.com Scraper
Scrape Realtor.com listings as JSON: address, price, beds, baths, sqft, lot size, year built, days on market, agent, broker, photos, coordinates.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
location,startUrls,listingStatus(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00068 per property listing = $0.68 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Property listing | Charged once per property listing returned. $0.68 per 1,000 listings. Diagnostics and empty results are never charged. | $0.00068 |
| Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.001 |
Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2020-01-01, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
location | Where to search on Realtor.com. One per line. Accepts "City, ST" (Austin, TX), a 5-digit ZIP (78704), a county ("Travis County, TX"), a neighborhood ("Zilker, Austin, TX") or a state code (TX). United States only. | array |
startUrls | Optional. Paste Realtor.com search pages (https://www.realtor.com/realestateandhomes-search/Austin_TX) or single property pages (https://www.realtor.com/realestateandhomes-detail/..._M84963-61588). Filters written into the URL (price-, beds-, type-, show-recently-sold) are honoured. Works alongside "location". | array |
listingStatus | Which listings to return. "sold" covers recently sold homes; "off_market" covers homes no longer listed. | string |
propertyTypes | Optional. Leave empty for every type. Note that Realtor.com's own value is "condos" (plural) — "condo" matches nothing. | array |
maxItems | Hard cap on rows returned across every location and URL. You are charged once per listing returned. Realtor.com's API cannot page deeper than 10,000 results per search — split by ZIP code to go beyond that. | integer |
sortBy | Order the listings come back in. | string |
includePropertyDetails | Adds the listing description text, tax history, price history, nearby schools and value estimates to every row. Costs one extra request per listing, so the run is slower. It adds fields, never extra rows, so it does not change what you are charged. | boolean |
maxPhotos | How many photo URLs to keep per listing (0-50). Realtor.com returns up to 50. | integer |
priceMin | Optional lowest list price. | integer |
priceMax | Optional highest list price. | integer |
bedsMin | Optional. | integer |
bedsMax | Optional. | integer |
bathsMin | Optional. | integer |
sqftMin | Optional. | integer |
sqftMax | Optional. | integer |
lotSqftMin | Optional. 1 acre = 43,560 sqft. | integer |
yearBuiltMin | Optional. | integer |
yearBuiltMax | Optional. | integer |
listedWithinDays | Optional. Only listings first posted in this window. Use with status "For sale". | integer |
soldWithinDays | Optional. Only homes sold in this window. Use with status "Recently sold". | integer |
hasOpenHouse | Optional. | boolean |
newConstruction | Optional. | boolean |
foreclosure | Optional. | boolean |
keywords | Optional. Words that must appear in the listing, for example "pool", "waterfront", "garage". | array |
What you get
A structured dataset — each result includes fields like:
addresscitystateCodepostalCodepricebedsbathssqftlotSqftpropertyTypeyearBuiltlistingStatusdaysOnMarketagentNamebrokerNamelatitudelongitudephotoCounturlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Real Estate & Classifieds
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
Craigslist Scraper
Scrape Craigslist listings by city, category and keyword at $0.85 per 1,000: id, title, price, neighborhood, date, images and URL. No account or API key.
Airbnb Listings Scraper
Scrape Airbnb search results by location, dates and guest count: listing ID, name, room type, price, rating, reviews and host. No account or API key.
Avito Listings Scraper
Scrape Avito.ru listings: id, title, price, category, city, seller name and type, publish date, photos. Filter by region, price and seller.
Facebook Marketplace Scraper
Scrape Facebook Marketplace listings by keyword and city: title, price, currency, location, link, photo, posted date, sold status. No login or cookies.
Zillow Scraper
Zillow scraper at $0.0008 per property plus a $0.001 run start. Search results and full listing details: price, beds, baths, sqft, photos, price history.
Where this tool sits
- Categories
- Real Estate & Classifieds
- Platforms
- Realtor.com
Realtor.com Scraper API
Pulls property listings from Realtor.com as structured JSON: address, price, beds, baths, square footage, lot size, property type, year built, listing status, days on market, agent and broker, photo URLs and coordinates.
Give it a place — Austin, TX, 78704, Travis County, TX, Zilker, Austin, TX — or paste Realtor.com URLs. It reads the same JSON gateway the Realtor.com website uses, so there is no browser and no HTML parsing, and a page of 200 listings comes back in about a second.
What you get
One row per listing, 65 fields. A real row from a live run:
{
"propertyId": "8496361588",
"url": "https://www.realtor.com/realestateandhomes-detail/1606-Yoakum-St-254_Austin_TX_78748_M84963-61588",
"address": "1606 Yoakum St Unit 254",
"city": "Austin", "stateCode": "TX", "postalCode": "78748", "county": "Travis",
"latitude": 30.165248, "longitude": -97.825649,
"price": 365000, "pricePerSqft": 213,
"beds": 3, "baths": 3, "sqft": 1714, "lotSqft": 2178,
"propertyType": "single_family", "yearBuilt": 2007,
"listingStatus": "for_sale", "mlsStatus": "Active",
"listDate": "2026-08-08T19:44:34Z", "daysOnMarket": 0,
"agentName": "MIKE MINNS", "brokerName": "Atlas Realty",
"photoCount": 30, "primaryPhoto": "http://ap.rdcpix.com/...jpg"
}
Full field list: propertyId, listingId, url, address, addressWithheld, city, stateCode, state, postalCode, county, countyFips, latitude, longitude, price, priceMin, priceMax, pricePerSqft, priceReducedAmount, lastPriceChangeAmount, lastPriceChangeDate, lastSoldPrice, lastSoldDate, estimatedValue, hoaFee, beds, baths, bathsFull, bathsHalf, sqft, lotSqft, yearBuilt, propertyType, propertySubType, stories, garage, buildingName, listingStatus, mlsStatus, listDate, daysOnMarket, lastUpdateDate, isNewListing, isPending, isContingent, isForeclosure, isPriceReduced, isNewConstruction, agentName, agentEmail, agentMlsId, brokerName, brokerEmail, brokerPhone, mlsSourceId, mlsSourceType, photoCount, primaryPhoto, photos, virtualTourUrl, hasMatterport, openHouses, features, searchLocation, resolvedLocation, position, scrapedAt.
Turn on Include full property details to also get descriptionText, taxHistory, priceHistory, schools, neighborhoods, propertyDetails and valueEstimates. That costs one extra request per listing, so the run is slower. It adds fields, not rows, so it does not change what you are charged.
Input
| Field | What it does |
|---|---|
location | One or more places. City, ST, a 5-digit ZIP, a county, a neighborhood, or a state code. |
startUrls | Realtor.com search or property URLs. Filters in the URL (price-, beds-, type-, show-recently-sold) are honoured. |
listingStatus | for_sale, for_rent, sold, off_market, ready_to_build. |
propertyTypes | single_family, condos, townhomes, condo_townhome_rowhome_coop, multi_family, mobile, land, farm. |
maxItems | Hard cap on rows. You pay per row returned. |
sortBy | newest, oldest, price_low, price_high, sold_date, most_photos. |
| Filters | price, beds, baths, sqft, lot size, year built, listed/sold within N days, open house, new construction, foreclosure, keywords. |
Numbers from real runs
- Austin, TX has 7,297 active for-sale listings and 126,304 recently sold. Both are reachable.
- 200 listings per request is the API's hard ceiling; 201 is rejected outright.
- 248 listings in 13.6 seconds (Austin, TX, for sale). A 5-row run finished in 2.3 seconds.
- Duplicates are removed across pages, so asking for 250 can return 248. You are only charged for
the rows you actually get.
- No proxy is used. Realtor.com's JSON gateway answers plain datacenter addresses, so proxy cost is
zero. You can still point the actor at your own proxy if you want a specific exit.
What this does not do
- It cannot page deeper than 10,000 results in a single search. That is the API's limit, not a
choice. A search matching more than that emits an uncharged RESULT_CAP diagnostic telling you so. Split the area by ZIP code, or add filters, to get the rest.
lastSoldPriceis empty in non-disclosure states. Sale prices are not public record in Texas,
and a few other states. Measured on 20 sold listings per city: Miami 20/20 populated, Los Angeles 20/20, Phoenix 20/20, Chicago 20/20 — Austin 0/20. lastSoldDate is present everywhere. This is how the data is; no scraper can return a price the MLS does not publish.
agentEmailandbrokerEmailare usually empty. Realtor.com rarely exposes them on listings.
This is a listings scraper, not an agent-contact scraper.
- Some listings withhold the street address. Realtor.com sends the literal text
"Address Not Available" for those. The actor returns address: null and addressWithheld: true rather than passing that string off as an address. Everything else on the row is still real.
- United States only. Realtor.com has no international inventory.
- No Zillow, no Redfin, no Realtor.ca (that is Canada, a different company).
- It does not log in, and it does not touch anything behind an account.
Pricing
$0.68 per 1,000 listings ($0.00068 each), plus $0.001 each time a run starts — the lowest per-listing price of any Realtor.com scraper on the Apify Store with an active user base; the next cheapest, solidcode/realtorcom-scraper (20 monthly users), is $0.80 per 1,000 even on its cheapest volume tier.
You are charged only for listings actually returned. Failed runs, blocked runs, empty searches and every diagnostic row carry no per-listing fee, so a run that returns no listings costs the $0.001 start fee and nothing more.
FAQ
How do I scrape Realtor.com listings for a city? Set location to Austin, TX and run it. Use maxItems to decide how many rows you want.
Can I scrape by ZIP code? Yes. Put the 5-digit ZIP in location, for example 78704. County (Travis County, TX) and neighborhood (Zilker, Austin, TX) also work.
Can I get recently sold homes? Yes. Set listingStatus to sold, and optionally soldWithinDays. Sort with sold_date to get the most recent sales first. Note the non-disclosure-state caveat above for the sale price itself.
Can I get rentals? Yes, set listingStatus to for_rent.
Does it return the listing agent and brokerage? Yes — agentName, agentMlsId, brokerName, and brokerPhone when Realtor.com publishes them. Email addresses are rarely published.
How many listings can I get from one search? Up to 10,000 per search. Beyond that, split by ZIP code or add filters — the actor tells you when you have hit the ceiling instead of quietly stopping.
Why did my property-type filter return nothing? Realtor.com's value is condos, plural. condo matches zero listings without raising an error. The actor validates the value and warns you instead of returning an empty result.
Do I need a proxy? No. None is used by default and none is needed.
What happens if the search returns nothing? You get one diagnostic row explaining why, and it carries no per-listing fee. The run still pays the $0.001 start fee, so an empty search costs $0.001.
Is this the official Realtor.com API? No. This is an independent scraper. It is not affiliated with or endorsed by Move, Inc. or the National Association of REALTORS®.
Legal
Realtor.com's robots.txt opens with a notice that scraping is unauthorized without written permission from Move Sales, Inc., and its Terms of Service say the same. robots.txt does not list the JSON gateway this actor uses, and it explicitly disallows deep pagination of the HTML search pages (/realestateandhomes-search/*/*/pg-). Listing data on Realtor.com originates from MLS feeds and is usually subject to IDX attribution and redistribution rules set by the individual MLS.
You are responsible for how you use the output. Check your own obligations — including MLS attribution, and privacy law where agent details are involved — before republishing or redistributing anything this returns.