Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent avatar

Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent

Pricing

from $0.38 / 1,000 saved listings

Go to Apify Store
Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent

Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent

Get US homes for sale, recently sold or for rent from Redfin or Realtor.com in one flat table: price, beds, baths, sq ft, address, ZIP, coordinates, listing date, photos and (on Realtor.com) the listing office. Search by city, ZIP or county. No login.

Pricing

from $0.38 / 1,000 saved listings

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

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.

It is for real estate investors, agents, analysts and proptech teams who need a clean table of homes for sale, recently sold or for rent. The smallest run is one city: Austin, TX with 10 listings finishes in about 5 seconds and costs about $0.007.

Redfin and Realtor listings scraper: search a US city by status, price and portal, get homes with price, beds, baths, sq ft and address in one table, export JSON or CSV

Table of contents

What it does

The Actor searches one portal for each location you add, reads the result pages and saves each listing to a Dataset. Both portals return the same columns, so you can join or compare the tables later. You choose:

  • 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.

At the end the Actor writes a short summary to the Key-value store record RUN_SUMMARY: what it found for each location and why a location gave no rows.

Good fit

  • 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 fit / limits

  • 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).

Quick start

  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.

Expected result: 10 homes for sale in Austin, TX, with price, beds, baths, sq ft, address and photo links.

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
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

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
locationsLocationsarray of stringsyesprefill ["Austin, TX"]1–20 items: City, ST, 5-digit ZIP, X County, ST; Redfin also takes a redfin.com linkPlaces to search["Austin, TX", "78704"]Use the 2-letter state code. Repeated places are searched once.
sourceWebsitestringnodefault realtorrealtor, redfinWhich portal to read"redfin"Realtor.com gives the office name and up to 10,000 results per search.
statusListing statusstringnodefault for_salefor_sale, sold, for_rentWhich listings to get"sold"For rentals, the price is per month.
maxItemsMax listingsintegernodefault 100, prefill 101–10,000Total rows for the whole run, shared by all locations500You pay per saved listing, so set what you need.
minPriceMin price (USD)integernonone0–1,000,000,000Lowest price or monthly rent300000Listings without a price are left out when a price filter is set.
maxPriceMax price (USD)integernonone1–1,000,000,000Highest price or monthly rent900000Must not be lower than minPrice.
soldWithinDaysSold within (days)integernodefault 901–1,095Only for sold: how far back to look30Ignored for other statuses.

locations cannot be empty. With source: redfin, free text that is not a city, ZIP, county or Redfin URL (for example downtown) stops the run before any search with a message that shows the right format. With source: realtor, such text goes to the Realtor.com place search; if it finds nothing, the location gets not_found and still counts as one location search.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Several placeslocationsmaxItemsEach place first gets an equal share of maxItems. If a place has fewer homes, the rest goes to the other places.2 places, maxItems: 20 → 10 + 10Total rows never go above maxItems.
Price filter setminPrice / maxPricestatusFor for_rent the range is monthly rent; for sold it is the sale price.for_rent, maxPrice: 2500Homes without a price are left out.
Sold homesstatus: soldsoldWithinDaysOnly homes sold in the last N days.soldWithinDays: 30Fewer days, fewer rows.

Input examples

Homes for sale in a price range (Redfin)

{
"source": "redfin",
"locations": ["Boise, ID", "Nashville, TN"],
"status": "for_sale",
"minPrice": 300000,
"maxPrice": 900000,
"maxItems": 20
}

Expected behavior: the Actor searches Boise and Nashville on Redfin and saves up to 10 homes from each place. Expected output: listings with price, beds, baths, sqft, mlsId and url. Limit or cost note: Redfin does not show the office name, so brokerName is empty.

Recent sales in a ZIP code (Realtor.com)

{
"locations": ["78704"],
"status": "sold",
"soldWithinDays": 30,
"maxItems": 100
}

Expected behavior: homes sold in ZIP 78704 in the last 30 days. Expected output: price (sale price), soldAt, listPrice, sqft. Limit or cost note: some states do not show the sale price; then price is empty and listPrice keeps the last asking price.

Output

Output fields

FieldMeaningTypeCan be empty?Example / enumNotes
idUnique row ID: portal + property IDstringnorealtor:8335975485Stable between runs
sourcePortalstringnorealtor, redfin
propertyIdThe portal's property IDstringno8335975485
listingIdThe portal's listing IDstringyes3001860367
mlsIdMLS number of the listingstringyes84517392Use it to match the same home on both portals
urlLink to the listing pagestringnohttps://www.realtor.com/...
statusStatus you asked forstringnofor_sale, sold, for_rent
sourceStatusStatus as the portal shows itstringyesActive, Closed (Redfin), for_sale, pending (Realtor.com)
addressStreet address with unitstringyes1704 Cherry Orchard Dr
cityCitystringyesAustin
state2-letter state codestringyesTX
zipZIP codestringyes78745
lat, lngCoordinatesnumberyes30.201456, -97.803077
pricePrice in USDnumberyes315000For sale: asking price. Sold: sale price (empty where hidden). Rent: monthly rent, the lowest unit for buildings
priceMin, priceMaxPrice rangenumberyes1055, 1600Only when the portal shows a range (buildings, new homes)
listPriceAsking pricenumberyes315000For sold homes: the last asking price
bedsBedroomsintegeryes3Smallest unit for buildings
bathsBathroomsnumberyes2.5A half bath counts as 0.5
sqftLiving area, sq ftnumberyes934
lotSqftLot size, sq ftnumberyes7675
yearBuiltYear builtintegeryes1971
propertyTypeHome typestringyessingle_family, condo, townhouse, multi_family, apartment, manufactured, co_op, farm, land, otherSame names for both portals
listedAtWhen the listing went on the portalstring (ISO)yes2026-10-15T05:36:33.000ZRedfin: estimated to the minute; empty when Redfin does not show the listing age
soldAtSale datestringyes2026-09-18Only sold homes
daysOnMarketWhole days on the marketintegeryes0Empty for sold homes
photosFull-size photo linksarraycan be []["https://ap.rdcpix.com/...jpg"]
photoCountNumber of photosintegeryes13
brokerNameListing office namestringyesHouston Elite Properties LLCRealtor.com only. No agent names, phones or e-mails
buildingNameBuilding or community namestringyesCascade ApartmentsMostly rentals
searchLocationInput place that found this rowstringnoAustin, TX
fetchedAtWhen the row was savedstring (ISO)no2026-10-15T05:57:50.503Z

The Dataset has two views: Listings (main columns) and All fields.

Output entities and surfaces

SituationWhereResult shapeUser action
Normal runDataset + RUN_SUMMARYOne row per listing; status completeOpen the Listings view or export
Place exists, but no homes matchRUN_SUMMARY0 rows; run SUCCEEDED, status no_resultsChange the price range or status
Place not known to the portalRUN_SUMMARY0 rows for that place; status not_found with the place nameUse City, ST, a ZIP or X County, ST
Stopped earlyDataset + RUN_SUMMARYRows saved so far; status partial, reason TIME_LIMIT or CHARGE_LIMITGive a longer timeout or a higher cost limit
Portal errorRUN_SUMMARY + run statusNo rows: run FAILED with the reason. Some rows: status partial, reason SOURCE_ERRORTry again later
Wrong inputRun statusFAILED with a message that shows the right formatFix the input

RUN_SUMMARY has one entry per place with status, items, totalOnSite (how many listings the portal reports), filteredOut and duplicates, plus warnings.

Output example

Input: the prefill (locations: ["Austin, TX"], maxItems: 10). One row, photo list shortened:

{
"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"
}

null means the portal does not show this value for this listing. Every row has all fields; the Actor does not drop columns.

Pricing and limits

Pricing unit

This Actor uses pay-per-event pricing. You pay for:

EventWhenPrice
Actor startOnce per run (one event per GB of memory, at least one)$0.002
Location searchedOnce for each place searched, also when the portal does not know the place$0.0005
Saved listingOnce for each row in the Dataset$0.00045 (Free plan) down to $0.00038 (Gold plan and above)

Repeated listings and listings removed by your price filter are not charged. Places that are skipped because maxItems was already reached are not charged. A run with no rows still pays the start and the location searches. Platform usage is included in these prices.

Saved listing price by Apify plan: Free $0.00045, Bronze $0.00043, Silver $0.0004, Gold / Platinum / Diamond $0.00038.

Cost examples

Measured on real runs with the default 512 MB memory (Free plan prices):

ScenarioInput scopeRowsTimeCharge
PrefillRealtor.com, Austin, TX, 10 listings10~5 s$0.0070
Two citiesRedfin, Boise + Nashville, 20 listings20~9 s$0.0120
Unknown placesRealtor.com, 20 places that do not exist0~28 s$0.0120
Large countyRealtor.com, Los Angeles County, 10,000 listings9,550~89 s$4.30 (Gold: $3.63)

To control cost, set Max listings. You can also set a maximum cost for the run in the run options; the Actor stops cleanly at that limit and keeps the rows it saved.

Limits

  • 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.

API and integrations

  • API: start the Actor with the Apify API and the same JSON input. Read rows from the run's default Dataset.
  • Export: download the Dataset as JSON, CSV, Excel or XML from the Output tab or the API.
  • Scheduling: run the same input every day with an Apify schedule to collect new listings. Use id to find rows you already have.
  • Integrations: send results to Google Sheets, Make, Zapier or a webhook with the standard Apify integrations.

Use with AI agents (MCP)

AI agents can run this Actor through the Apify MCP server. Server URL with only this Actor:

https://mcp.apify.com?tools=cliqtomedia/us-property-listings

Smallest useful input:

{
"locations": ["Austin, TX"],
"maxItems": 10
}

Key output fields:

  • price: asking price, sale price or monthly rent in USD.
  • beds, baths, sqft: home size.
  • address, city, state, zip: where the home is.
  • url: link to the listing page.
  • listedAt: when the home was listed.

A run with 10–100 listings usually finishes in 5–15 seconds and costs about $0.007–$0.05. Limits: up to 20 places and 10,000 listings per run; places must be City, ST, a 5-digit ZIP or X County, ST.

Troubleshooting

The run says "No such location"

Symptom: 0 rows and a not_found message with the place name. Likely reason: the portal does not know the place, or the place is written as free text. Check: the place format in RUN_SUMMARY → locations. Action: use City, ST with the 2-letter state code, a 5-digit ZIP or X County, ST.

The run SUCCEEDED but has 0 rows

Symptom: status no_results. Likely reason: the portal knows the place, but no home fits the status and price range. Check: totalOnSite and filteredOut in RUN_SUMMARY. Action: widen the price range or try another status.

I got fewer rows than Max listings

Symptom: fewer rows than maxItems, status complete. Likely reason: the place has fewer listings that match, or (Realtor.com) the 10,000 results limit for one search. Check: totalOnSite and warnings in RUN_SUMMARY. Action: add more places or split a big place into ZIP codes.

The run stopped early

Symptom: status partial with reason TIME_LIMIT or CHARGE_LIMIT. Likely reason: the run timeout or your maximum cost was reached. Action: give the run a longer timeout or a higher cost limit. The rows already saved stay in the Dataset.

The run failed with a portal error

Symptom: FAILED, or partial with reason SOURCE_ERROR. Likely reason: the portal blocked or did not answer. Action: try again later. After two places in a row fail, the run stops on purpose.

FAQ

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.

Can I get agent phone numbers or e-mails?

No. The Actor does not collect agent names, phones, e-mails or listing descriptions. It gives only the public name of the listing office on Realtor.com.

Why is the sale price empty for some sold homes?

Some states do not make sale prices public, and the portal hides them. Then price is empty and listPrice shows the last asking price.

Why do Realtor.com and Redfin give different numbers for the same city?

Each portal has its own listings, area borders and order. Use mlsId or the address to match the same home on both portals.

How fresh is the data?

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

Support

For bugs, questions or feature requests, open an issue on the Issues tab of this Actor. Add the run ID, your input (without private data) and the error message. Never send tokens, cookies or billing data.