Realtor.com Listings Scraper
Pricing
from $0.67 / 1,000 listings
Realtor.com Listings Scraper
Scrape Realtor.com property listings by location: price, beds, baths, photos, description and the listing agent's contact. Export to JSON, CSV or Excel.
Pricing
from $0.67 / 1,000 listings
Rating
0.0
(0)
Developer
Nice Dev
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
🏠 What is Realtor.com Listings Scraper?
Realtor.com Listings Scraper extracts property listings from Realtor.com: price, beds, baths, square footage, the full description, every photo, and the listing agent's name, email and phone, for any US city, ZIP code, county or state.
Type a location (Austin, TX), click Start, and download the listings in JSON, CSV or Excel. No login, nothing to set up, and it is fast: about 1,000 listings in 10 seconds. Homes for sale, for rent, sold, pending and coming soon, with 31 filters and an optional detail pass that adds price history, tax history, schools, flood and fire risk, value estimates, building permits and how many people viewed the listing.
📋 What data can you extract from Realtor.com?
One item per listing, 77 fields:
| Category | What you get |
|---|---|
| 🏷️ Listing | Realtor.com id, MLS number, link, status (for sale, for rent, sold, pending, coming soon), who published it (an agent, a builder, a rental company), badges such as "new listing" or "price reduced" |
| 💰 Price | asking price, price per square foot, last price cut and its date, last sale price and date — 460000 USD, 285 per sq ft |
| 🏠 The home | property type, beds, baths, living area, lot size, year built, stories, garage spaces, HOA fee — 3 beds, 2.5 baths, 1,612 sq ft |
| 📍 Location | street address, city, state, ZIP code, county, neighborhood, latitude and longitude, Street View link |
| 📝 Text and photos | the agent's full description, feature lists (appliances, interior…), every photo, virtual tour, open houses, pet policy |
| 📇 Agent and office | listing agent's name, email, phone numbers and photo, office, broker, MLS board — (512) 637-8277 |
| 🕒 Dates | date listed, last update, days on market — what the date filters read |
| 📈 History and estimates | detail — price history, tax history, value estimates with their past and a 12-month forecast, mortgage estimate |
| 🏫 Schools and risk | detail — assigned schools with their rating, FEMA flood zone, flood, fire and noise scores |
| 👀 Demand and permits | detail — how many people viewed, clicked and enquired, per period; building permits |
Every field, with an example, is listed in the Output section below.
Fields marked detail are filled when Extract details is on (read 25 listings per extra request, charged as its own event). Everything else — description, photos and the agent's contact details included — comes with the search results.
✅ Why use Realtor.com Listings Scraper?
- 🚀 Fast: about 1,000 listings in 10 seconds, 5 requests.
- 🏠 Type the city, not a URL:
Austin, TX,78704,Travis CountyorTexas— or paste a Realtor.com search URL and its filters are read. - 🎛️ 31 filters: price, beds, baths, living area, lot, year built, garage, HOA fee, radius, property type, foreclosures, new construction, open houses, virtual tours, no pending sales, MLS listings only, pets — 27 of them applied by the site itself, so a filtered search costs less, not more.
- 📈 More than the listing card: price and tax history, school ratings, flood / fire / noise scores, value estimates with a 12-month forecast, building permits, and how many people viewed the listing. The last two are sold nowhere else without a surcharge: the one Actor that has them bills them as separate events, $0.001 per listing for the view counts and $0.002 per permit row — about $9.10 per 1,000 listings against $0.60 here, everything included.
- 📇 The listing agent comes with the listing: name, email, phone, photo, office and broker, with no separate agent scraper to buy.
- 🔍 Past the site's 10,000-result cap: a search bigger than that is split into price bands (sold homes: sale-date ranges) on its own.
- 🔔 Monitoring built in: tick Only new listings, schedule the Actor, and each run returns (and charges) only what it has never delivered before.
- 🔌 API, scheduling, integrations (Make, Zapier, n8n, Google Sheets…), and JSON/CSV/Excel export via the Apify platform.
🚀 How to scrape Realtor.com
- Create a free Apify account.
- Open Realtor.com Listings Scraper and type a Location (e.g.
Austin, TX). - Or paste your own Realtor.com URLs into Start URLs: search results pages, sold pages, rental pages, or single listing pages.
- Pick a Listing status (for sale, for rent, sold, pending, coming soon), set the filters you need and Max listings (100 by default, 0 = no limit), then click Start.
- Download the dataset in JSON, CSV, Excel or via API.
💰 How much does it cost to scrape Realtor.com?
This Actor uses pay per event pricing: $0.70 per 1,000 listings — plus $0.001 per run start (10 cents per 100 runs). Listings read with Extract details on cost $0.79 per 1,000, the extra requests included — building permits and view counts are part of it, never charged on top. A single listing page pasted into startUrls is always read in full and costs the same. Higher Apify plans pay less per listing: $0.69 (Bronze), $0.68 (Silver) and $0.67 (Gold) per 1,000 — with details $0.78, $0.77 and $0.76. The Actor's own filters (listing date, excluded keywords, agent phone) are applied to every listing it reads, kept or not: $0.05 per 1,000 listings checked (filter-check); a run without them pays nothing for it. Example: 20,000 listings ≈ $14; a daily monitor of 300 new listings ≈ $0.21 a day. Platform usage (compute, proxy) is included in the price.
⚙️ Input
{"location": "Austin, TX","listingStatus": "for_sale","maxItems": 200}
Several locations, a cap per search, houses in a price range, only the ones not delivered before:
{"locations": ["Austin, TX", "78704", "Dallas, TX"],"propertyType": ["single_family"],"minPrice": 300000,"maxPrice": 600000,"minBedrooms": 3,"maxItemsPerQuery": 500,"onlyNew": true,"stateKey": "austin-houses"}
Or with your own URLs:
{"startUrls": [{ "url": "https://www.realtor.com/realestateandhomes-search/Austin_TX/beds-3/price-300000-600000" },{ "url": "https://www.realtor.com/realestateandhomes-detail/7704-Fenton-Cv_Austin_TX_78736_M73634-37439" }],"maxItems": 500}
| Field | Notes |
|---|---|
location, locations | City (Austin, TX), ZIP code (78704), county or state (Texas); locations adds more places. |
query, searchQueries | Keyword matched against the listing text (pool, waterfront). Every keyword is searched in every location (max 500 searches per run). |
startUrls | Realtor.com search, sold or rental pages (location, price, beds, type, radius and page are read from the URL) or single listing pages. |
listingStatus | for_sale, for_rent, sold, pending or coming_soon. |
propertyType | single_family, condos, townhomes, multi_family, land, mobile, farm — several at once. |
minPrice, maxPrice, minBedrooms, maxBedrooms, minBathrooms, maxBathrooms | Price in US dollars (the monthly rent for rentals); half bathrooms count as 0.5. |
minSqft, maxSqft, minLotSqft, maxLotSqft, minYearBuilt, maxYearBuilt, minGarage, maxHoaFee | Living area and lot in square feet, year built, garage spaces, monthly HOA fee. |
radiusMiles, sortBy, soldWithinDays | Widen the search around the location (5); order the results (list_date:desc); for sold listings, how far back to go. |
foreclosureOnly, newConstructionOnly, openHousesOnly, virtualTourOnly, noHoaFeeOnly, excludePending, mlsOnly, petsAllowed | Switches applied by the site; excludePending leaves out the homes for sale already under contract (from 1 in 7 to 1 in 3, depending on the city); mlsOnly keeps the listings an MLS publishes (no builder plans, no apartments posted by rental companies); petsAllowed (cats, dogs) only applies to rentals. |
extractDetails | Add price and tax history, schools, risk scores, value estimates, permits and view counts (read 25 listings per extra request, charged as its own event). Off by default. |
maxItems, maxItemsPerQuery | Stop after this many listings for the whole run (0 = unlimited); cap for EACH search (location × keyword, or search URL). |
postedAfter, postedBefore | Listing date range: 2026-09-01, or a period before now (7 days, 2 weeks, 1 month, 24 hours). |
excludeKeywords, requirePhone | Drop listings whose address, city or description contains one of these words (case and accents ignored); or whose agent has no phone number. |
onlyNew, stateKey, resetState | Monitoring: only the listings never delivered under this memory key; resetState forgets the memory. |
| Advanced | proxyConfiguration (Apify proxy by default, included in the price; the residential proxy is not available), maxConcurrency, maxRequestsPerMinute, maxRequestRetries, debugLog. |
📦 Output
One item, shortened to the fields a search result carries (the detail fields are cut here):
{"id": "7363437439","listingId": "2816017","url": "https://www.realtor.com/realestateandhomes-detail/7704-Fenton-Cv_Austin_TX_78736_M73634-37439","status": "for_sale","mlsStatus": "Active","listPrice": 460000,"currency": "USD","pricePerSqft": 285,"listDate": "2026-09-20T02:35:29.000Z","propertyType": "single_family","beds": 3,"baths": 2.5,"sqft": 1612,"lotSqft": 8015,"yearBuilt": 1982,"description": "Welcome to this stylishly updated home nestled on a private cul-de-sac lot...","address": "7704 Fenton Cv","city": "Austin","stateCode": "TX","postalCode": "78736","countyName": "Travis","latitude": 30.35,"longitude": -97.77,"agentName": "PATRICIA SMITH","agentEmail": "patriciasmith@realtor.com","agentPhone": "(512) 637-8277","officeName": "Keller Williams Realty","mlsName": "AUTX","mlsNumber": "2816017","photos": ["https://ap.rdcpix.com/.../1-m.jpg"],"photoCount": 27,"daysOnMarket": 14,"searchUrl": "https://www.realtor.com/realestateandhomes-search/Austin_TX?page=1","scrapedAt": "2026-09-20T12:00:00.000Z"}
You can download the dataset in various formats such as JSON, HTML, CSV or Excel.
All 77 fields
| Fields | Example |
|---|---|
id, listingId, url | 7363437439, 2816017, https://www.realtor.com/realestateandhomes-detail/... |
status, mlsStatus, flags, tags | for_sale, Active, isNewListing, central_air |
listPrice, currency, pricePerSqft, listPriceMin, listPriceMax | 460000, USD, 285 — min / max for a new-construction price range |
priceReducedAmount, priceReducedDate, lastSoldPrice, lastSoldDate | 15000, 2026-09-12T15:04:11.207Z, 389900, 2020-08-24 |
listDate, lastUpdateDate, daysOnMarket | 2026-09-20T02:35:29.000Z (what the date filters read), 14 |
propertyType, propertySubType, yearBuilt, stories, garage | single_family, condo, 1982, 2, 2 |
beds, baths, bathsFull, bathsHalf, sqft, lotSqft, hoaFee | 3, 2.5, 2, 1, 1612, 8015, 250 |
description, features | the agent's own text; feature lines grouped by category (Appliances, Interior…) |
address, city, state, stateCode, postalCode | 7704 Fenton Cv, Austin, Texas, TX, 78736 |
countyName, countyFips, neighborhoods, latitude, longitude, streetViewUrl | Travis, 48453, Oak Hill, 30.35, -97.77 |
agentName, agentEmail, agentPhone, agentPhones, agentPhotoUrl | PATRICIA SMITH, patriciasmith@realtor.com, (512) 637-8277, every number with its type, the agent's photo |
officeName, officeEmail, officePhone, brokerName, mlsName, mlsNumber, listingSource | Keller Williams Realty, AUTX, 2816017, mls (or a builder, new_home, or a rental company, community / unit_rental) |
photos, photoCount, virtualTourUrl, openHouses, petPolicy | 27 photo URLs, a Matterport link, the scheduled open houses, which pets a rental takes |
priceHistory, taxHistory, estimates, estimatesHistory, estimatesForecast | detail — 39 listing events, 17 years of tax, 3 value estimates with past and forecast |
schools, floodScore, femaZone, fireScore, noiseScore, noiseCategories | detail — assigned schools with their rating, FEMA zone, flood / fire / noise scores |
stats, buildingPermits, monthlyPayment | detail — views, clicks and enquiries per period; building permits; mortgage estimate |
searchUrl, scrapedAt | the search it was found through, ISO timestamp |
💡 Tips
How to get more results
One search returns at most 10,000 listings — that is the site's own limit, not the Actor's. Above it, the Actor splits the search into price bands, and each band again until every piece fits — sold homes into sale-date ranges instead, since many of them have no price — so a whole state comes out in one run. The few listings with no price at all (about 1 in 1,000 rentals, fewer for sale) cannot be reached by a price band; sold homes lose none. The count the site shows also counts twice a home listed by two sources (two MLS, or an MLS and a rental manager): it comes out once, under one id and one URL. Measured on whole searches: Harris County for sale, 29,279 listings for a count of 29,403; Arizona rentals, 35,456 for 35,842. You can also split a search yourself by putting several ZIP codes in locations. Set maxItems to 0 to take everything a search has.
How to reduce costs
The price is per listing, so the levers are maxItems, maxItemsPerQuery, the filters (a filtered-out listing costs only its filter check, $0.05 per 1,000) and onlyNew for recurring runs (you never pay twice for the same listing). Leaving extractDetails off keeps listings at the lower price: the search results already carry description, photos and the agent's contact details.
Several searches in one run
Fill locations and / or searchQueries: the Actor runs one search per location × keyword (3 keywords × 4 cities = 12 searches, up to 500 per run). The single location and query fields still work and are added to the lists. A listing found by several searches is saved — and charged — once. Set maxItemsPerQuery to give every search its own cap: without it the first searches can use up the whole maxItems budget. You can also paste several search URLs into startUrls: each one is a search of its own, with the same cap.
Monitoring: only the new listings
Tick Only new listings (onlyNew) and schedule the Actor. The first run returns everything; each later run skips the listings already delivered: they are not saved, not charged, and no detail request is made for them. The memory lives in a named key-value store of your account (realtor-listings-scraper-seen, up to 150,000 listings per key) and is only updated with listings that really reached the dataset, so a failed run never hides anything. Give each schedule its own stateKey (two schedules sharing a key would hide each other's listings), and tick resetState once to start over. Searches are then sorted by listing date, newest first (rentals: in the order they were published, which also reaches the rentals that carry no date), and a search stops once it meets 200 listings in a row that you already have — or as many as maxItems / maxItemsPerQuery, when lower. Realtor.com dates a listing by the day it first went on the market and never moves that date afterwards, so a listing you already have cannot climb back above a new one. Rental buildings (apartment communities) are the exception: the site puts them back on top each time they are updated, so they never count in those 200, and one you already have is still skipped.
Filter by listing date
postedAfter and postedBefore take a date (2026-09-01, the whole day is included, site time zone) or a period before now (7 days, 2 weeks, 1 month; via the API also 24 hours or a full ISO date-time). The filter reads listDate, the moment the listing went on the market; a listing without one is dropped as soon as a date bound is set. Filtered-out listings are not saved and do not count in maxItems (each listing checked costs the filter fee, see pricing); the run summary tells how many were filtered. With postedAfter, searches are sorted by newest and stop at the first page that is entirely too old.
🔌 Integrations and API
Call the Actor via the Apify API, the JavaScript or Python clients, or connect it with integrations and webhooks (Make, Zapier, n8n, Google Sheets, Slack, Airtable…). The dataset can be fetched as JSON or CSV from any tool.
🤖 Use with AI agents (MCP)
AI agents (Claude, ChatGPT, Cursor…) can find and run this Actor through the Apify MCP server, billed to their Apify account like any run. It returns one item per Realtor.com property listing. Actor id: nice_dev/realtor-listings-scraper; MCP server with this Actor only: https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/realtor-listings-scraper.
Smallest input, for a cheap first call:
{"location": "Austin, TX","maxItems": 10}
Key output fields: url, status, listPrice, beds, baths, sqft, address, agentPhone.
Cost: $0.70 per 1,000 listings plus $0.001 per run start ($0.67 per 1,000 on the Gold plan); Extract details and the Actor's own filters cost extra, see the pricing section above. Cap each call with maxItems and, through the API, with the run option maxTotalChargeUsd.
❓ FAQ
Is it legal to scrape Realtor.com?
The Actor only reads what Realtor.com shows publicly to any anonymous visitor. It logs in to nothing. Results contain the contact details of licensed real-estate professionals acting in their trade, and personal data is protected by GDPR and by US state privacy laws: do not store it without a legitimate reason, and do not use it for unsolicited marketing where that is restricted. Listing content comes from local MLS boards and its redistribution can be limited by their rules. You are responsible for using the data in compliance with Realtor.com's Terms of Use and applicable law. This Actor is not affiliated with Realtor.com, Move, Inc. or the National Association of REALTORS®.
Does it need a login or a proxy?
No login. The proxy is included in the price: leave the default setting (the residential proxy is not available). A request the site turns away is retried at once on a new proxy session (without a proxy, after a pause of 5 seconds, doubled at each retry up to 150 seconds).
Which fields can be empty?
Realtor.com does not publish everything for every listing, and the Actor never invents a value: a field it has no data for is null or an empty list. Measured on 800 real listings of every kind: agentEmail and agentPhone are there on about 6 listings in 10 (almost always on sold listings, less often on new ones), beds / baths / sqft are missing on land and mobile homes, and lastSoldPrice is null in non-disclosure states such as Texas and Utah, where sale prices are not public records. With extractDetails on and measured on 30 listings: price history and schools on all of them, tax history on 20, value estimates on 22, building permits on 16, and view counts on established listings only — the site starts counting a few days after a listing goes up.
Is the data safe to open in Excel or to show on a web page?
Descriptions are the agents' own words, copied as they are, and a text can begin with -, +, = or @ (a phone number, a line such as -20% price cut): Excel and Google Sheets may read such a cell of a CSV file as a formula or as a number. The Actor leaves the text as it is, so that the JSON and the API give the real value: when you open a CSV, import these columns as text. Every URL field (url, photos, virtualTourUrl, streetViewUrl, agentPhotoUrl) holds an http(s) URL or null — nothing else gets through. On a web page, escape every field like any text written by a stranger.
Known limitations
- Site filters that are not in the input can still be used by pasting a filtered search URL into
startUrls. A URL whose filters the Actor cannot apply is refused by name instead of being run without them. - One search returns at most 10,000 listings on the site itself; bigger searches are split automatically, and
maxItemsPerQuerystill counts for the whole search, not for each piece. Past 10,000, the listings come band by band: the sort order holds within each band, not across the whole search. daysOnMarketis counted fromlistDate: Realtor.com leaves its own field empty. For a sold home it stops at the sale day (lastSoldDate).onlyNewremembers listing ids, not their content: a listing whose price changed is not returned again.- Rentals: part of the rental listings carry no listing date on Realtor.com (12 % in Austin, 61 % across Arizona), so their
listDateanddaysOnMarketare empty.onlyNewstill returns the new ones (rentals are read in the order they were published);postedAfter/postedBeforeleave them out. - Sold homes: many sales were never listed and come from public records (30 % of Texas sales, a third to a half in some cities). They have no
listPrice,listDate, MLS number, agent or description (listingSourceis empty); sorted by listing date, sale date or price they come last, sorted by size or last update they are mixed in. - "Sold in the last N days" counts from the day the run started (New York time), for its whole length — a resurrected run keeps that day.
- Two runs sharing the same
stateKeyat the same time may both return the same new listing.
A run the platform stops without warning (out of memory, run timeout)
- Resurrect it: it goes on from where it stood at most a minute before the stop. What it had read since is read again, and the listings already saved are skipped: none is delivered or charged twice, and
maxItemsstill counts them. - With
onlyNew, the memory is saved once a minute: resurrect the stopped run and the listings it had saved meanwhile join the memory; leave it stopped for good, and the next run may return up to a minute of them once more.
Something doesn't work?
The last line of the log counts the listings saved, filtered out and no longer on Realtor.com (removed while the run was reading them), and the requests that failed after every retry. Those requests and the removed listings are listed, with the reason, in the FAILED_REQUESTS record of the run's key-value store. A run that saved nothing and had failed requests fails, and its last message gives the cause (a location the site does not know says so, instead of "run it again"). A run that saved some listings fails too when at least as many requests failed for good as were read: a green run with a short dataset would hide an outage. One failed request among many is only a warning.
If Realtor.com changes its pages, you are told instead of paying for blank rows. A results page that counts listings but gives none the Actor can read is an error (listed in FAILED_REQUESTS), never a quiet "No listings found". If the first 20 listings read all lack their URL, status, price or listing date (rentals aside), last update date, property type, address, city, state, ZIP code, county, MLS number or — with details — price history, the run saves nothing more, stops and fails, and its last message names the missing field: at most those first listings are charged. A listing that postedAfter / postedBefore drops because it has no date at all counts among those 20. With details, if the first 20 listings of the run all come back as no longer on Realtor.com, the run stops and fails the same way, with nothing charged.
🛟 Support
Open an issue in the Issues tab with a link to your run: the run log and the FAILED_REQUESTS record of the key-value store show exactly which URLs failed and why.