Realtor.com avatar

Realtor.com

Pricing

from $1.10 / 1,000 items from searches

Go to Apify Store
Realtor.com

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

Lukáš Širhal

Maintained by Community

Actor 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 runsmaxUpdatedHoursAgo keeps 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 one targetDatasetId.
  • Resumable — counters and the seen-ID set survive a migration, so a restarted run neither duplicates results nor overshoots maxItems.

🚪 What it can do

InputWhat happens
location / locationsEach is searched through Realtor.com's own API and paged through in full.
postalCodesZIP codes searched the same way (alias of locations).
startUrls — search pageThe URL is turned back into a location search, filters applied.
startUrls — property pageThe M… ID in the URL is fetched directly.
propertyIdsFetched directly, no search at all.
zipCodesDatasetIdZIP codes read from a dataset, sliced by offset/limit.

⬇️ Input

FieldTypeDefaultMeaning
locationstringOne location: city, ZIP, county, or state
locationsarraySeveral locations
postalCodesarrayZIP codes (alias of locations)
startUrlsarrayRealtor.com search or property URLs
propertyIdsarrayProperty IDs, e.g. M1234-56789
zipCodesDatasetId + zipCodesOffset / zipCodesLimitZIP-dataset fan-out slice
searchTypestringfor_salefor_sale, for_rent, sold
priceMin / priceMaxintegerPrice range (monthly rent for rentals)
bedsMin / bedsMaxintegerBedroom range
bathsMinintegerMinimum bathrooms
sqftMin / sqftMaxintegerLiving-area range (sq ft)
lotSqftMin / lotSqftMaxintegerLot-size range (sq ft)
propertyTypesarraysingle_family, condo, townhomes, multi_family, land, farm, …
sortstringrelevancerelevance, newest, price_low, price_high, sqft, lot_size, sold_date
maxUpdatedHoursAgointegerKeep only listings updated within this window
fetchDetailsbooleantrueFetch each property's full record
maxItemsintegerCap on properties scraped — and on run cost
maxConcurrencyinteger10Parallel requests
targetDatasetIdstringPush into an existing dataset instead of the run's own
schedulerTaskIdstringTask to start when the crawl finishes
proxyobjectApify ProxyUS residential recommended for large runs
debugLogbooleanfalseLog 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 getPriceWhen
Items from search$1.50 / 1,000fetchDetails: false — the search record: price, address, beds, baths, size, status, agent, broker, MLS, photos
With details$3.00 / 1,000fetchDetails: 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 planItems from searchWith 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.