Realtor.com
Pricing
from $1.10 / 1,000 items from searches
Realtor.com
Scrape real-estate listings from Realtor.com without the official API. Search by location or paste listing URLs and get price, address, beds, baths, size, lot, property type, year built, agent and broker info, photos, and listing URL as structured JSON, CSV or Excel.
Pricing
from $1.10 / 1,000 items from searches
Rating
0.0
(0)
Developer
Lukáš Širhal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
🏠 Realtor.com Scraper — For Sale, For Rent & Sold
Scrape property listings from Realtor.com by location (city, ZIP, county, state), by search URL, or by property ID — price, address, beds, baths, lot & building size, year built, HOA, agent, broker, MLS, schools, tax history, flood risk, price estimate and photos.
No Realtor.com API key. No browser. The actor talks to the same private GraphQL API the Realtor.com iOS/Android app uses (api.frontdoor.realtor.com) — a guest token is minted automatically, so there are no credentials to supply.
✨ Why this Realtor.com scraper
- Four ways in — a location string, many locations, Realtor.com URLs, or bare property IDs.
- Real filters — price, beds, baths, living area, lot size, property type, listing type, and sort — applied server-side, the same fields the app sends.
- Deep detail — optional per-property fetch adds year built, HOA, assigned schools with ratings, full tax history, price estimate, and flood/noise scores.
- Incremental runs —
maxUpdatedHoursAgokeeps only listings touched in the last N hours, for a scraper scheduled several times a day. - Fan-out friendly — point a run at a slice of a ZIP-code dataset (
zipCodesDatasetId+ offset/limit) and have every slice write into onetargetDatasetId. - Resumable — counters and the seen-ID set survive a migration, so a restarted run neither duplicates results nor overshoots
maxItems.
🚪 What it can do
| Input | What happens |
|---|---|
location / locations | Each is searched through Realtor.com's own API and paged through in full. |
postalCodes | ZIP codes searched the same way (alias of locations). |
startUrls — search page | The URL is turned back into a location search, filters applied. |
startUrls — property page | The M… ID in the URL is fetched directly. |
propertyIds | Fetched directly, no search at all. |
zipCodesDatasetId | ZIP codes read from a dataset, sliced by offset/limit. |
⬇️ Input
| Field | Type | Default | Meaning |
|---|---|---|---|
location | string | — | One location: city, ZIP, county, or state |
locations | array | — | Several locations |
postalCodes | array | — | ZIP codes (alias of locations) |
startUrls | array | — | Realtor.com search or property URLs |
propertyIds | array | — | Property IDs, e.g. M1234-56789 |
zipCodesDatasetId + zipCodesOffset / zipCodesLimit | — | — | ZIP-dataset fan-out slice |
searchType | string | for_sale | for_sale, for_rent, sold |
priceMin / priceMax | integer | — | Price range (monthly rent for rentals) |
bedsMin / bedsMax | integer | — | Bedroom range |
bathsMin | integer | — | Minimum bathrooms |
sqftMin / sqftMax | integer | — | Living-area range (sq ft) |
lotSqftMin / lotSqftMax | integer | — | Lot-size range (sq ft) |
propertyTypes | array | — | single_family, condo, townhomes, multi_family, land, farm, … |
sort | string | relevance | relevance, newest, price_low, price_high, sqft, lot_size, sold_date |
maxUpdatedHoursAgo | integer | — | Keep only listings updated within this window |
fetchDetails | boolean | true | Fetch each property's full record |
maxItems | integer | — | Cap on properties scraped — and on run cost |
maxConcurrency | integer | 10 | Parallel requests |
targetDatasetId | string | — | Push into an existing dataset instead of the run's own |
schedulerTaskId | string | — | Task to start when the crawl finishes |
proxy | object | Apify Proxy | US residential recommended for large runs |
debugLog | boolean | false | Log every request and page |
🧪 Example inputs
A city, full detail:
{"location": "Austin, TX","searchType": "for_sale","priceMin": 500000,"propertyTypes": ["single_family"],"maxItems": 200}
Incremental sweep, scheduled every 8 hours:
{"zipCodesDatasetId": "YOUR_ZIP_DATASET_ID","zipCodesOffset": 0,"zipCodesLimit": 1000,"maxUpdatedHoursAgo": 8,"targetDatasetId": "YOUR_TARGET_DATASET_ID"}
A search URL and two known properties:
{"startUrls": [{ "url": "https://www.realtor.com/realestateandhomes-search/Brooklyn_NY" }],"propertyIds": ["M1234-56789"],"maxItems": 50}
Fast, cheap sweep — no per-property requests:
{"location": "10001","fetchDetails": false}
⬆️ Output
One item per property. With fetchDetails: false the search fields are produced and the detail-only fields (year built, HOA, schools, tax history, estimate, flood/noise, features) come back null.
{"propertyId": "8479764426","listingId": "3000370836","url": "https://www.realtor.com/realestateandhomes-detail/1600-Barton-Springs-Rd-Unit-5406_Austin_TX_78704_M84797-64426","status": "for_sale","propertyType": "condos","listPrice": 950000,"listDate": "2026-09-03T12:56:42.000Z","beds": 2,"baths": 3,"sqft": 1590,"lotSqft": 1028,"yearBuilt": 2008,"stories": 1,"garage": 2,"line": "1600 Barton Springs Rd Unit 5406","city": "Austin","stateCode": "TX","state": "Texas","postalCode": "78704","county": "Travis","latitude": 30.262351,"longitude": -97.761535,"hoaFee": 1230,"mlsId": "4548505","mlsName": "UnlockMLS","daysOnMarket": 1,"agents": [{ "name": "Roxanne Kahn Peasley", "email": "roxanne@austinrealestate.com", "phone": "5129948254" }],"broker": "Roxanne Kahn Peasley","schools": [{ "name": "Austin High School", "rating": 7, "grades": ["9", "10", "11", "12"], "distance": 1.2 }],"taxHistory": [{ "year": 2024, "tax": 9000, "assessedTotal": 600000 }],"estimate": 970000,"floodFactor": 2,"noiseScore": 68,"mainPhoto": "https://ap.rdcpix.com/...jpg","photos": ["https://ap.rdcpix.com/...jpg"],"detailScraped": true}
💰 What does it cost?
Pay per result. No monthly rental, no start fee — you are billed only for properties written to the dataset.
| You get | Price | When |
|---|---|---|
| Items from search | $1.50 / 1,000 | fetchDetails: false — the search record: price, address, beds, baths, size, status, agent, broker, MLS, photos |
| With details | $3.00 / 1,000 | fetchDetails: true (default) — adds year built, HOA, assigned schools with ratings, tax history, price estimate, flood & noise scores |
Platform usage (compute, proxy, storage) is included — no separate usage bill on top.
Discounts on higher Apify plans — the price per property drops with your subscription:
| Your plan | Items from search | With details |
|---|---|---|
| Free | $1.50 / 1K | $3.00 / 1K |
| Starter | $1.45 / 1K | $2.80 / 1K |
| Scale | $1.30 / 1K | $2.50 / 1K |
| Business | $1.10 / 1K | $2.00 / 1K |
Set maxItems to cap what a run can cost, or set a maximum run cost in the Apify Console. Blocked or empty pages are never charged — the charge happens when the item is pushed.
🧰 Troubleshooting
Fewer results than expected. Check maxUpdatedHoursAgo — with it set, everything older than the window is skipped on purpose. Turn on debugLog to see per-page counts. A very large metro is paged 200 at a time; let it finish.
A run returns nothing. Realtor.com may be rate-limiting the run's IP. Use US residential proxies for large or repeated runs.
🔐 Authentication and proxies
The API needs no account. A guest bearer token is minted per run with the app's device grant — no captured credentials of any kind. Sustained traffic from one datacenter IP still gets throttled, so US residential proxies are recommended for large runs.
📝 Changelog
2.0.0
- Rewired to Realtor.com's current GraphQL API (
api.frontdoor.realtor.com) after the old mobile endpoint was retired. Adds location/ZIP/county/state and URL/ID inputs, server-side price/beds/baths/sqft/type filters, sorting, and deep per-property detail (schools, tax history, estimate, flood/noise).
1.0.0
- First release. Merged three earlier Realtor.com actors into one.