Redfin logoRealtor.com logo

Property & travel · Coming soon

Redfin and Realtor.com Listings Scraper

Get US home listings from Redfin or Realtor.com for cities, ZIP codes or counties. Choose for sale, recently sold or for rent. Both sites give the same columns.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

propertyId8335975485
listingId3001860367
mlsId84517392

How it will work: 3 steps

  1. Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: Austin, TX in Locations. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Redfin & Realtor Listings Scraper reads public US home listings from Realtor.com or Redfin for the cities, ZIP codes or counties you add. It returns one row per listing with price, beds, baths, square feet, address, ZIP, coordinates, listing date, photos and (on Realtor.com) the listing office name. You do not need a login or an API key.

  • Locations (locations): up to 20 places, for example Austin, TX, ZIP 78704 or Travis County, TX. For Redfin you can also paste a redfin.com city, county or neighborhood link.
  • Website (source): Realtor.com (default) or Redfin.
  • Listing status (status): for sale now, recently sold, or for rent.
  • Price range (minPrice, maxPrice) in US dollars. For rentals this is the monthly rent.
  • Max listings (maxItems): how many rows to save in total.

Good for

  • Track asking prices, new listings and days on market in a city or ZIP code.
  • Collect recent sales (sold price, sold date) for a price comparison.
  • Build a rental list with monthly rent, beds and square feet.
  • Get the same columns from Realtor.com and Redfin to check one against the other.

Not a good fit

  • No agent names, phone numbers, e-mails or listing descriptions. Only the public name of the listing office, and only on Realtor.com.
  • Only the United States. Only the two portals above; Zillow is not supported.
  • One Realtor.com search returns at most 10,000 results. For a bigger area, split it into ZIP codes or cities.
  • The data is what the portal shows at the time of the run. Some fields can be empty when the portal does not show them (see Output).

Who uses it

Real estate investors

Track new listings and days on market.

Agents and appraisers

Pull recent sales for price comps.

Renters and analysts

Check monthly rents in a ZIP code.

Price

Prices will be shown after release.

Questions

Do I need a login?

No. It reads public results without login or API key.

Why is a sold price empty?

Some states do not make sale prices public. Then you see the last asking price.

Can I get agent phone numbers?

No. You get only the listing office name on Realtor.com.

Why do the two sites show different numbers?

Each site has its own listings and area borders.

Do I need a Realtor.com or Redfin account?

No. The Actor reads public search results. You do not need a login, cookies or an API key.

How fresh is the data?

Each row is read live from the portal during your run. fetchedAt shows when the row was saved.

Details

Step by step on Apify
  1. Open the Input tab.
  2. In Locations (locations), keep the prefilled Austin, TX or add your own place, for example 78704 or Miami, FL.
  3. Keep Website = Realtor.com and Listing status = For sale (the defaults), and Max listings = 10 (the prefill).
  4. Click Start.
  5. Open the Output tab. The Listings view shows address, price, beds, baths and the link for each home.
Use cases
TaskInputYou getKey fieldsNext step
New listings in a citylocations + status: for_saleListingprice, listedAt, daysOnMarket, urlSchedule + Google Sheets
Sales compsstatus: sold + soldWithinDaysSold listingprice, listPrice, soldAt, sqftCSV export
Rental market checkstatus: for_rent + maxPriceRentalprice (monthly rent), beds, sqft, buildingNameAPI / JSON
Portal checksame locations, run once with each sourceListingmlsId, address, priceJoin by mlsId or address
Tips for better results
  • Add up to 20 places per run, like a city, ZIP or county.
  • Run the same search on both sites and match homes by MLS ID.
  • For rentals, the price range is the monthly rent.
Limits and good to know
  • Up to 20 places and 10,000 listings per run
  • Realtor.com returns at most 10,000 results for one search, and some of them repeat. A very large place gives about 9,500 unique rows. The run log tells you when you hit this limit; split the place into ZIP codes
  • Redfin city search uses the official city boundary from the US Census and saves only homes inside it. ZIP, county and redfin.com links work as Redfin defines them
  • Redfin does not show the office name, so brokerName is empty for Redfin
  • In some regions Redfin does not show how long a home has been listed; then listedAt and daysOnMarket are empty
  • baths counts a half bath as 0.5 (for example 2 full + 1 half = 2.5)
  • If the portal blocks or fails for two places in a row, the run stops and skips the rest, so you do not pay for a long run with no data. Try again later

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "id": "realtor:8335975485",
  "source": "realtor",
  "propertyId": "8335975485",
  "listingId": "3001860367",
  "mlsId": "84517392",
  "url": "https://www.realtor.com/realestateandhomes-detail/1704-Cherry-Orchard-Dr_Austin_TX_78745_M83359-75485",
  "status": "for_sale",
  "sourceStatus": "for_sale",
  "address": "1704 Cherry Orchard Dr",
  "city": "Austin",
  "state": "TX",
  "zip": "78745",
  "lat": 30.201456,
  "lng": -97.803077,
  "price": 315000,
  "priceMin": null,
  "priceMax": null,
  "listPrice": 315000,
  "beds": 3,
  "baths": 1,
  "sqft": 934,
  "lotSqft": 7675,
  "yearBuilt": 1971,
  "propertyType": "single_family",
  "listedAt": "2026-10-15T05:36:33.000Z",
  "soldAt": null,
  "daysOnMarket": 0,
  "photos": [
    "https://ap.rdcpix.com/c98353ff63623b72d8afed1653f828ffl-m296950462s-w1280_h960.jpg"
  ],
  "photoCount": 13,
  "brokerName": "Houston Elite Properties LLC",
  "buildingName": null,
  "searchLocation": "Austin, TX",
  "fetchedAt": "2026-10-15T05:57:50.503Z"
}
Data fields (33)
FieldTypeMeaning
idstringUnique row ID: source plus the site's property ID, e.g. realtor:9876543210.
sourcestringSite the listing comes from: realtor or redfin.
propertyIdstringThe site's own property ID.
listingIdstringThe site's listing ID for this listing, when it has one.
mlsIdstringMLS number of the listing.
urlstringLink to the listing page.
statusstringfor_sale, sold or for_rent, as asked in the input.
sourceStatusstringStatus as the site shows it, e.g. Active, Pending, Coming Soon, Closed.
addressstringStreet address with unit number.
citystringCity.
statestringTwo-letter state code.
zipstringZIP code.
latnumberLatitude.
lngnumberLongitude.
pricenumberUSD. For sale: asking price. Sold: sale price (null where the site hides it). Rent: monthly rent, the lowest one for buildings with several units.
priceMinnumberLowest price when the site shows a range (buildings, new construction).
priceMaxnumberHighest price when the site shows a range.
listPricenumberAsking price. For sold homes: the last asking price, when the site shows it.
bedsintegerBedrooms (the smallest unit for buildings).
bathsnumberBathrooms, halves as .5.
sqftnumberLiving area in square feet.
lotSqftnumberLot size in square feet.
yearBuiltintegerYear built.
propertyTypestringsingle_family, condo, townhouse, multi_family, apartment, manufactured, land, ...
listedAtstringWhen the listing went on the site (ISO date-time; Redfin: estimated to the minute from its time on site, empty where Redfin does not show it).
soldAtstringSale date, YYYY-MM-DD (sold listings).
daysOnMarketintegerWhole days on the market: Redfin's own count for homes for sale, otherwise counted from listedAt. Null for sold listings.
photosarrayLinks to the full-size listing photos.
photoCountintegerNumber of photos the listing has.
brokerNamestringPublic name of the listing office (Realtor.com only; Redfin search results do not include it). No agent names, phones or e-mails.
buildingNamestringBuilding or community name (rentals).
searchLocationstringWhich input location found this listing.
fetchedAtstringWhen the row was saved (ISO date-time).
Input settings (7)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Locations requiredlocationsarray["Austin, TX"]
Websitesourcestring"realtor"
Listing statusstatusstring"for_sale"
Max listingsmaxItemsinteger10
Min price (USD)minPriceinteger
Max price (USD)maxPriceinteger
Sold within (days)soldWithinDaysinteger90

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure