Realtor.com Scraper API - Listings, Prices & Agents
Pricing
from $0.68 / 1,000 property listings
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
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
1
Monthly active users
a day ago
Last modified
Categories
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.
| Input | Cities, ZIPs, counties, neighbourhoods or state codes, or Realtor.com URLs |
| Output | One row per listing |
| Ceiling | 10,000 listings per run, and Realtor.com will not page deeper than 10,000 per search |
| Account needed | None, 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}
| Field | Default | What it is |
|---|---|---|
location | box starts at Austin, TX | Where to search. City, ZIP, county, neighbourhood or state code. US only. |
startUrls | none | Realtor.com search pages or single property pages, pasted from the site. |
listingStatus | for_sale | Also for_rent, sold, off_market, ready_to_build. |
propertyTypes | every type | single_family, condos, townhomes, multi_family, mobile, land, farm and the combined condo_townhome_rowhome_coop. |
sortBy | newest | Also oldest, price_low, price_high, sold_date, most_photos. |
priceMin, priceMax | none | List price bounds in dollars. |
bedsMin, bedsMax, bathsMin | none | Room counts. |
sqftMin, sqftMax, lotSqftMin | none | Living area and lot size in square feet. One acre is 43,560. |
yearBuiltMin, yearBuiltMax | none | Build year bounds. |
listedWithinDays | none | Only listings first posted in this window. Pair it with For sale. |
soldWithinDays | none | Only homes sold in this window. Pair it with Recently sold. |
hasOpenHouse, newConstruction, foreclosure | off | Each keeps only that kind when switched on. |
keywords | none | Words that must appear in the listing, like pool or waterfront. |
includePropertyDetails | off | Adds description, tax history, price history, schools and value estimates. One extra request per listing, no extra charge. |
maxPhotos | 30 | Photo URLs to keep per listing, 0 to 50. |
maxItems | 50 | Total listings across every location and URL, up to 10,000. |
proxyConfiguration | leave it alone | Optional, 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"}
| Field | What it is |
|---|---|
address / addressWithheld | null when the listing hides the address. The flag tells you which it is. |
lastSoldPrice, lastSoldDate | Empty in non-disclosure states, where sale prices are not public at all. |
daysOnMarket | Days since listDate, on every status. See the note at the top. |
agentEmail, brokerEmail, brokerPhone | Present only when the listing carries them, which is not often. agentName and brokerName are far more reliable. |
features | Realtor.com's own tag list, like kitchen_island and covered_patio. |
searchLocation / resolvedLocation | What you asked for, and what Realtor.com decided that meant. Worth checking when a result set looks wrong. |
propertyDetails, taxHistory, priceHistory, schools, valueEstimates, descriptionText | Only with includePropertyDetails on. |
🧾 Reading the output
| Row | How to spot it | Billed |
|---|---|---|
| A listing | It has a propertyId and no ok key | yes |
| The sample row | _sample: true and charged: false | no |
| A diagnostic | ok: false, _diagnostic: true and an errorCode | no |
Listing rows carry no charged field. The flag is only on the sample and diagnostic rows, to mark
them as not real results.
| Code | What it means |
|---|---|
LOCATION_NOT_FOUND | Realtor.com did not resolve that location. |
NO_RESULTS | The search ran and matched nothing. |
RESULT_CAP | The search matched more than Realtor.com will page through. Narrow it. |
PROPERTY_NOT_FOUND | A pasted property is no longer on the site. |
BAD_URL | A link that is not a Realtor.com search or property page. |
UNKNOWN_PROPERTY_TYPE | A property type that is not one of Realtor.com's own values. |
BLOCKED, NETWORK_ERROR, API_ERROR, GRAPHQL_ERROR, BAD_SEARCH_ERROR | Realtor.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
- Open Realtor.com Scraper and click Try for free.
- Type a city, ZIP or county into Location, one per line.
- Pick a Listing status and any filters you want under Filters.
- Set Maximum listings. Start around 25 to see what the rows look like.
- 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
soldWithinDaysset. - Agent and broker lead lists, grouped on
brokerNameacross a metro. - Watching new supply daily with
listedWithinDaysat 1, diffing onpropertyId. - Investment screens:
foreclosureon, a price ceiling, andpricePerSqftto 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_CAProw. daysOnMarketis days since listing on every status, so it keeps counting after a sale.- No sale prices in non-disclosure states.
lastSoldPriceis 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 want | Use |
|---|---|
| US listings, sold prices and agents from Realtor.com | This one |
| US listings from Zillow, search and full details | Zillow Scraper |
| Homes in Spain, Italy and Portugal | Idealista Scraper |
| Homes in Spain from Fotocasa | Fotocasa Scraper |
| Brazilian listings from VivaReal and ZAP | VivaReal & 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.