Redfin Scraper & API - Homes For Sale and Sold
Pricing
from $2.00 / 1,000 per-run start fees
Redfin Scraper & API - Homes For Sale and Sold
Redfin scraper for any city, ZIP code, county or neighborhood page. Get one row per home for sale or recently sold: price, beds, baths, square feet, lot size, year built, coordinates, MLS number, days on market, broker and remarks. For investors, agents and housing analysts.
Pricing
from $2.00 / 1,000 per-run start fees
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
20 days ago
Last modified
Categories
Share
Redfin Scraper & API: Homes For Sale and Sold
Redfin Scraper turns Redfin region searches into a table of homes, with one dataset row per property. Use it as a Redfin API for homes for sale or recently sold homes, keeping prices, addresses, coordinates, MLS identifiers and listing remarks together.
Use a city, ZIP code, county, neighborhood or state page URL. You can submit several regions in one run and export the combined dataset as JSON, CSV, Excel or another format supported by Apify. The actor keeps the supplied URL on every row, so overlapping searches remain identifiable when you analyze the results.
Redfin Scraper input
The original input names remain available:
| Input | Default | Meaning |
|---|---|---|
startUrls | Required | Redfin region page URLs, in the order you want to collect them |
listingStatus | for_sale | Current listings, or sold for sales recorded within the last 90 days |
maxItems | 350 | Maximum number of homes across all supplied regions |
maxPages | 5 | Retained legacy page setting, from 1 to 20 |
This input was run successfully against the actor's existing version:
{"startUrls": ["https://www.redfin.com/city/30749/NY/New-York"],"listingStatus": "for_sale","maxItems": 350,"maxPages": 5}
Paste links from Redfin's address bar. A ZIP code link such as https://www.redfin.com/zipcode/11411 refers to that postal area; its number is resolved to Redfin's actual region identifier before searching. A bare number without a region URL is ambiguous and cannot be searched.
Region identity and listingStatus determine the search. Additional filters embedded in the pasted URL, such as a price range, are ignored, matching the original actor. Set your desired result limit through maxItems. URL order determines dataset order, and each row receives a consecutive position starting at one.
How to scrape Redfin in three steps
- Open Redfin, search for a city, ZIP code, county or neighborhood, and copy the URL from the address bar.
- Paste one or more of those URLs into
startUrlsand choosefor_saleorsold. - Start the run and download the dataset, or read it through the Apify API from your own code.
The same input works from the Apify console, the API, the Apify CLI, scheduled runs and integrations such as Make, Zapier or webhooks. Every run returns the same columns, so a script written against one city keeps working for the next.
Output: one row per home
The existing dataset columns keep their names and JSON types. Missing source values appear as null, rather than invented prices, coordinates or descriptive text. Boolean fields remain booleans.
| Group | Fields |
|---|---|
| Identity | property_id, listing_id, mls_id, mls_status, url |
| Price and rooms | price, beds, baths, full_baths, partial_baths, hoa_month |
| Size and age | sqft, lot_size, price_per_sqft, year_built |
| Location | street, city, state, zip, country_code, latitude, longitude |
| Listing information | days_on_market, property_type, listing_type, listing_broker, remarks |
| Media and flags | is_new_construction, is_hot, has_3d_tour, has_video_tour, photo_count |
| Search provenance | region_id, region_kind, search_url, search_page, position |
| Sale history | sold_date |
Newer runs also carry normalized names next to the original columns: postal_code, lat, lng, bedrooms, bathrooms, living_area with living_area_unit, lot_area with lot_area_unit, broker, query, listing_status, property_type_name, currency, source, platform and fetched_at. They repeat the values of the original fields under the names other real estate datasets use, so you can combine Redfin data with listings from other sources without renaming columns. The original columns are not removed.
Prices are numeric amounts in US dollars. Interior and lot areas use square feet. price_per_sqft is calculated from price and interior area; it is null when either value is missing or zero. Redfin may shorten listing remarks, and this actor preserves the text the source supplies.
The historical sold_date is an epoch timestamp in milliseconds. It can describe an earlier sale even when a home is currently for sale. Use the new listing_status field to identify the search's offer type. fetched_at records when the response was collected, and currency is USD. The numeric property_type and listing_type retain their original Redfin meanings. property_type_name remains null when the source does not supply a verified label.
The default key-value store also contains summary, with regions requested, listing status, listing count, counts with prices and coordinates, elapsed seconds and error count. When a URL fails, the errors record explains the affected region. The actor's output links point directly to the dataset and those records.
Example row
This is the first row of a real run for recently sold homes in ZIP code 11411 (Cambria Heights, New York) with "listingStatus": "sold" and "maxItems": 20, collected on 4 October 2026. The listing remarks are cut off by Redfin itself.
{"property_id": "20696381","listing_id": "213502849","mls_id": "978061","mls_status": "Closed","url": "https://www.redfin.com/NY/Cambria-Heights/12011-218th-St-11411/home/20696381","price": 830000,"beds": 4,"baths": 3,"full_baths": 3,"partial_baths": null,"sqft": 1389,"price_per_sqft": 597.55,"lot_size": 5000,"year_built": 1945,"street": "120-11 218th St","city": "Cambria Heights","state": "NY","zip": "11411","country_code": "US","latitude": 40.690313,"longitude": -73.7444342,"days_on_market": null,"hoa_month": null,"property_type": 6,"listing_type": 1,"is_new_construction": false,"is_hot": false,"has_3d_tour": false,"has_video_tour": false,"photo_count": 39,"remarks": "Welcome to 120-11 218 St, Cambria Heights—a beautifully renovated single-family home offering comfort and space. The first floor features a bright living room, a formal dining room, and a beautiful kitchen. The home includes 4 bedrooms and 3 full bathrooms. The full finished basement with a separate outside entrance offers great additional space, including a living area, 2 bonus rooms, and a full bathroom—ideal for extended living. Situated on a 50x100 lot, this property also features a private driveway and attached garage. The home is equipped with split air conditioning and heating systems, along with an updated gas boiler and hot water tank. Conveniently located just steps fr","listing_broker": "Exit Realty Prime","sold_date": 1783494000000,"fetched_at": "2026-10-04T22:43:41.341Z","listing_status": "sold","property_type_name": null,"source": "redfin-scraper","platform": "redfin","currency": "USD","postal_code": "11411","lat": 40.690313,"lng": -73.7444342,"bedrooms": 4,"bathrooms": 3,"living_area": 1389,"living_area_unit": "sqft","lot_area": 5000,"lot_area_unit": "sqft","broker": "Exit Realty Prime","region_id": "3725","region_kind": "zipcode","search_url": "https://www.redfin.com/zipcode/11411","query": "https://www.redfin.com/zipcode/11411","search_page": 1,"position": 1}
Use cases for Redfin data
- Investors and flippers pull every sold home in a ZIP code to build comparables: sale price, price per square foot, lot size and year built side by side.
- Agents and brokerages track new inventory in their farm area each morning and see which brokers list there.
- Housing analysts and researchers collect Redfin listings across several cities to compare asking prices, days on market and new construction.
- Proptech and data teams feed a real estate data API or internal dashboard with a scheduled run instead of maintaining their own scraper.
- Mortgage, insurance and home-services companies map properties by latitude and longitude to plan coverage and outreach.
Redfin Scraper compared with other options
| Option | What you get | Limitations |
|---|---|---|
| This Redfin Scraper | One row per home with 38 original columns plus normalized names, for sale or sold, several regions per run | Up to 350 homes per region; Redfin decides which details exist |
| Redfin Data Center | Aggregate housing market statistics per metro, county or ZIP code | No individual homes, addresses or MLS numbers |
| Copying from the website | Exactly what you see on screen | Manual, slow and not repeatable |
| Writing your own real estate scraper | Full control | You maintain parsing, retries and changes to Redfin's pages yourself |
| Other Redfin actors in the Apify Store | Varying fields, detail pages, agent contacts | Different column names and pricing; compare against your own needs |
This actor is focused on region search results. It does not open every individual home page, which keeps runs short and the price per home low.
Limits and collection behavior
Each region returns up to 350 distinct homes. Redfin currently repeats the same homes for subsequent page numbers, so increasing maxPages does not manufacture additional results. The setting remains accepted for existing integrations. To collect more homes, submit multiple regions and increase maxItems, up to 20,000 across the run. The source can return fewer homes than requested.
Duplicate homes are removed within a region. Homes appearing in two supplied regions remain in both groups, with their respective search URLs. Invalid links alongside valid links are recorded as errors while the valid searches continue. An unrecognized region produces an empty search, rather than unrelated homes from a fallback location.
Pricing
The existing price is unchanged: $0.002 per run start and $0.0003 per delivered home. A valid search with no homes has no home charge; its run start fee remains. Input containing no usable Redfin region URL incurs neither event. Apify platform usage is separate from these actor events.
Users without a paid Apify plan receive at most ten homes per run. Home events count delivered dataset rows, including on capped runs. The output summary identifies the free plan cap and the actual delivered count.
Errors and partial results
The errors record uses bad_input for unusable URLs, no_results for a missing region or an empty search, search_failed when Redfin rejects a search, and fetch_failed when it cannot be read. These entries are diagnostics, not property dataset rows. Temporary source failures preserve already collected homes and identify the affected region.
FAQ
Is there an official Redfin API?
Redfin publishes aggregate market statistics in its Data Center, but it does not offer a public API for individual listings. This actor fills that gap: it works like a Redfin API that you call with a region URL and that returns structured JSON, CSV or Excel.
How do I scrape Redfin sold homes for comparables?
Paste the ZIP code or neighborhood URL into startUrls, set listingStatus to sold and run. Each row includes the sale price, sold_date, square feet, lot size and year built, so you can sort by price_per_sqft straight away.
Can I collect sold homes?
Yes. Set listingStatus to sold for homes sold within the last 90 days. Redfin controls availability and may omit the sale price or other details. The dataset retains those missing values as null.
Can I use ZIP code and city URLs together?
Yes. Supply both through startUrls. The actor resolves the ZIP code to its postal area, collects groups in your URL order, and applies the shared maximum listing count.
Why did increasing maxPages return no additional homes?
Redfin currently repeats its first result page for this search interface. The actor avoids delivering or charging those duplicates. Multiple region URLs can provide additional coverage.
Does every property include every price and coordinate?
Every dataset row includes the columns, but source values can be null. Redfin decides which details are available for each listing. This actor does not substitute estimated values for missing asking or sale prices.
Can I run the Redfin scraper on a schedule?
Yes. Create an Apify schedule with the same input to collect new listings daily or weekly. Each row has fetched_at, so you can tell runs apart after merging datasets.
Where can I find failed URLs?
Open the errors record in the run's default key-value store. The summary record reports the number of errors and delivered listings, so you can check completeness before exporting your dataset.