Realtor.com $0.9๐Ÿ’ฐ Listings, Prices & Agent Details avatar

Realtor.com $0.9๐Ÿ’ฐ Listings, Prices & Agent Details

Pricing

from $0.90 / 1,000 results

Go to Apify Store
Realtor.com $0.9๐Ÿ’ฐ Listings, Prices & Agent Details

Realtor.com $0.9๐Ÿ’ฐ Listings, Prices & Agent Details

From $0.9/1K. Extract property listings from realtor.com. Get comprehensive data, including prices, property details, agent contacts, coordinates, photos, and more. Supports for sale, rental, and recently sold listings across all US markets.

Pricing

from $0.90 / 1,000 results

Rating

5.0

(2)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

2

Bookmarked

12

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Realtor.com Property Scraper

Extract property listings from realtor.com, the largest US real estate listing site with over 100 million monthly visitors. Get comprehensive data including prices, property details, agent contacts, coordinates, photos, and more. Supports for sale, rental, and recently sold listings across all US markets.

What does Realtor.com Scraper do?

This Actor collects property listings from realtor.com for any US city or neighborhood. It extracts up to 200 listings per request and supports all listing types, property types, and search filters. Results are delivered in structured JSON format, ready for analysis or integration into your applications.

Key Features

FeatureDescription
Search Any US LocationEnter a city and state to scrape properties in any market
All Listing TypesFor Sale, For Rent, and Recently Sold properties
Property Type FiltersSingle Family, Condo, Townhome, Multi Family, Mobile, Farm, Land
Price and Room FiltersNarrow results by price range, bedrooms, and bathrooms
200 Listings Per PageHigh speed extraction with up to 200 properties per request
Rental DataBuilding names, pet policies, individual unit details with prices
Sold DataSold price and sold date for recently sold listings
Agent and Brokerage DataContact details for listing agents and offices
Photos and Virtual ToursProperty images, 3D Matterport tours, and Google Street View links
GPS CoordinatesLatitude and longitude for mapping and geospatial analysis
MLS DataMLS ID, MLS name, and source information
Resume SupportCheckpoint based resume for large scale scrapes

What data can you extract?

The scraper extracts 40+ fields per listing:

Property Details

  • Property ID and listing URL
  • Full address (street, city, state, zip, county)
  • Latitude and longitude
  • Property type (single family, condo, apartment, etc.)
  • Bedrooms, bathrooms, sqft, lot sqft
  • Year built and garage spaces
  • Listing status and date

Pricing

  • List price (for sale and sold)
  • Price range min/max (rentals)
  • Formatted display price
  • Price reduced amount
  • Sold price and sold date

Listing Flags

  • New listing
  • Price reduced
  • Foreclosure
  • New construction
  • Pending / Contingent
  • Coming soon
  • Auction

Agent and Brokerage

  • Agent name, email, phone
  • Agent type (seller, management)
  • Office and brokerage name
  • MLS ID, MLS name, source type

Media and Location

  • Up to 10 property photos (large format)
  • Total photo count
  • Virtual tour and 3D Matterport tour links
  • Google Street View URL
  • County FIPS code

Rental Specific

  • Building and community name
  • Pet policy (cats, dogs, small/large)
  • Individual units with beds, baths, sqft, price, availability

How to use Realtor.com Scraper

Step 1: Choose your search mode

Search by Location (best for market research)

{
"mode": "location",
"locations": [
{ "city": "Portland", "state": "OR" },
{ "city": "Seattle", "state": "WA" }
],
"listingType": "for_sale"
}

Direct URLs (best for specific searches with custom filters)

{
"mode": "url",
"urls": [
"https://www.realtor.com/realestateandhomes-search/Portland_OR/type-single-family-home/beds-3",
"https://www.realtor.com/apartments/Seattle_WA/beds-2"
]
}

Step 2: Add filters (optional)

{
"mode": "location",
"locations": [{ "city": "Denver", "state": "CO" }],
"listingType": "for_sale",
"propertyType": "single_family",
"bedsMin": 3,
"bathsMin": 2,
"priceMin": 400000,
"priceMax": 800000
}

Step 3: Scrape rentals

{
"mode": "location",
"locations": [{ "city": "Austin", "state": "TX" }],
"listingType": "for_rent",
"bedsMin": 2,
"priceMin": 1000,
"priceMax": 2500
}

Step 4: Scrape sold properties

{
"mode": "location",
"locations": [{ "city": "San Francisco", "state": "CA" }],
"listingType": "sold",
"propertyType": "condo"
}

Input Parameters

ParameterTypeDefaultDescription
modestringlocationSearch mode: location or url
locationsobject[]Cities to search. Each has city (string) and state (2 letter code)
urlsstring[]Full realtor.com search URLs (for url mode)
listingTypestringfor_salefor_sale, for_rent, or sold
propertyTypestringanyany, single_family, condo, townhome, multi_family, mobile, farm, land
bedsMinintegerMinimum bedrooms (1 to 5)
bathsMinintegerMinimum bathrooms (1 to 5)
priceMinintegerMinimum price (USD)
priceMaxintegerMaximum price (USD)
openHouseOnlybooleanfalseOnly listings with open houses (for sale only)
newConstructionOnlybooleanfalseOnly new construction (for sale and sold only)
maxListingsinteger20Maximum total listings (0 = unlimited)
maxPagesinteger0Maximum pages per location (0 = unlimited)
resumeFromCheckpointbooleantrueResume from last checkpoint on restart
resumeFromRunIdstringContinue one interrupted run by pasting its run/dataset ID
incrementalModebooleanfalseTrack this search across scheduled runs and classify changes
stateKeystringOptional manual key identifying the tracked baseline
emitUnchangedbooleanfalseReturn (and bill) rows unchanged since the last run
emitExpiredbooleanfalseReturn (and bill) tombstone rows for listings no longer found

Filter Compatibility

FilterFor SaleFor RentSold
propertyTypeAll typesAll typesAll types
bedsMin / bathsMinYesYesYes
priceMin / priceMaxYesYesYes
openHouseOnlyYesIgnoredIgnored
newConstructionOnlyYesIgnoredYes

Location Examples

CityStateWhat it searches
PortlandORAll of Portland, Oregon
New YorkNYAll of New York City
San FranciscoCASan Francisco, California
Capitol HillWACapitol Hill neighborhood in Seattle
OrencoOROrenco neighborhood in Hillsboro

Resume and recurring updates

Two related but distinct features:

  • resumeFromRunId โ€” continue ONE specific interrupted run. Paste a previous run ID or dataset ID from your account; listings it already collected are skipped so this run returns only the delta. This is different from resumeFromCheckpoint above, which auto-continues via this actor's own internal checkpoint (no ID needed), and from Incremental mode below (which tracks a recurring search on its own, without needing an ID at all).

  • incrementalMode โ€” turn this ON when you run this actor on a schedule against the same search. Each listing is classified against the previous run of the same search:

    • NEW โ€” never seen before
    • UPDATED โ€” seen before, one or more fields changed (changedFields lists which)
    • UNCHANGED โ€” identical to the last run
    • REAPPEARED โ€” was previously marked gone, is back
    • EXPIRED โ€” a tombstone row for a listing no longer found, only emitted after a run that scanned every configured search to its natural end. A resume, a block, or a Max Pages/Max Listings cap skips EXPIRED detection for that run and keeps the previous state as-is, rather than risk marking still-live listings gone.

    Every dataset row also gets firstSeenAt / lastSeenAt timestamps. incrementalMode is OFF by default โ€” existing scheduled runs are unaffected until you opt in.

    Which baseline a search is compared against is controlled by stateKey: leave it empty to auto-derive one from your location/URL and filter settings (two differently-configured searches never share a baseline either way), or set your own text to fully control it.

    Billing: a suppressed UNCHANGED row is never pushed, so it is never billed. emitUnchanged and emitExpired are both OFF by default for this reason โ€” turning either on returns (and bills) extra dataset rows every run.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape โ€” the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record โ€” not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify โ†’ Settings โ†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Output Example

For Sale

{
"propertyId": "P100234567",
"listingId": "L299887766",
"url": "https://www.realtor.com/realestateandhomes-detail/123-Main-St_Portland_OR_97201_M12345-67890",
"listingType": "for_sale",
"status": "for_sale",
"address": {
"street": "123 Main St",
"city": "Portland",
"state": "Oregon",
"stateCode": "OR",
"postalCode": "97201",
"county": "Multnomah",
"full": "123 Main St, Portland, OR, 97201"
},
"coordinates": {
"latitude": 45.5231,
"longitude": -122.6765
},
"price": {
"value": 525000,
"display": "$525,000"
},
"features": {
"propertyType": "single_family",
"bedrooms": 3,
"bathrooms": 2.5,
"sqft": 1850,
"lotSqft": 5200,
"yearBuilt": 2005,
"garage": 2
},
"flags": {
"isNewListing": true
},
"agents": [
{
"name": "Jane Smith",
"email": "jane@example.com",
"type": "seller",
"office": "Example Realty Group",
"phone": "5035551234"
}
],
"brokerage": "Example Realty Group",
"mlsId": "MLS12345",
"mlsName": "RMLS",
"streetViewUrl": "https://maps.googleapis.com/maps/api/streetview?...",
"hasMatterport": true,
"photos": [
"https://ap.rdcpix.com/example-photo-od-w480_h360_x2.jpg"
],
"photoCount": 32,
"listDate": "2026-03-15T10:00:00.000000Z",
"scrapedAt": "2026-03-23T10:30:00.000Z"
}

Rental

{
"propertyId": "P960012345",
"listingId": "L297700001",
"url": "https://www.realtor.com/rentals/details/456-Oak-Ave_Portland_OR_97209_M96001-23456",
"listingType": "for_rent",
"status": "for_rent",
"address": {
"street": "456 Oak Ave",
"city": "Portland",
"stateCode": "OR",
"postalCode": "97209",
"county": "Multnomah",
"full": "456 Oak Ave, Portland, OR, 97209"
},
"price": {
"min": 1200,
"max": 1800,
"display": "$1,200 - $1,800"
},
"features": {
"propertyType": "apartment",
"bedrooms": 1,
"bathrooms": 1,
"sqft": 650
},
"buildingName": "Pearl District Apartments",
"petPolicy": {
"cats": true,
"dogs": true
},
"units": [
{ "beds": 1, "baths": 1, "sqft": 650, "price": 1200 },
{ "beds": 2, "baths": 1, "sqft": 900, "price": 1800, "availableDate": "2026-04-01" }
],
"scrapedAt": "2026-03-23T10:30:00.000Z"
}

Recently Sold

{
"propertyId": "P121000001",
"url": "https://www.realtor.com/realestateandhomes-detail/789-Elm-Dr_Portland_OR_97224_M12100-00001",
"listingType": "sold",
"status": "sold",
"address": {
"street": "789 Elm Dr",
"city": "Portland",
"state": "Oregon",
"stateCode": "OR",
"postalCode": "97224",
"county": "Washington",
"full": "789 Elm Dr, Portland, OR, 97224"
},
"price": {
"value": 475000,
"display": "$475,000"
},
"soldPrice": 465000,
"soldDate": "2026-03-10",
"features": {
"propertyType": "single_family",
"bedrooms": 3,
"bathrooms": 2,
"sqft": 1600,
"yearBuilt": 1995
},
"brokerage": "Example Real Estate LLC",
"mlsId": "MLS67890",
"mlsName": "Willamette",
"scrapedAt": "2026-03-23T10:30:00.000Z"
}