Redfin Scraper & API - Homes For Sale and Sold avatar

Redfin Scraper & API - Homes For Sale and Sold

Pricing

from $2.00 / 1,000 per-run start fees

Go to Apify Store
Redfin Scraper & API - Homes For Sale and Sold

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

SR

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

20 days ago

Last modified

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:

InputDefaultMeaning
startUrlsRequiredRedfin region page URLs, in the order you want to collect them
listingStatusfor_saleCurrent listings, or sold for sales recorded within the last 90 days
maxItems350Maximum number of homes across all supplied regions
maxPages5Retained 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

  1. Open Redfin, search for a city, ZIP code, county or neighborhood, and copy the URL from the address bar.
  2. Paste one or more of those URLs into startUrls and choose for_sale or sold.
  3. 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.

GroupFields
Identityproperty_id, listing_id, mls_id, mls_status, url
Price and roomsprice, beds, baths, full_baths, partial_baths, hoa_month
Size and agesqft, lot_size, price_per_sqft, year_built
Locationstreet, city, state, zip, country_code, latitude, longitude
Listing informationdays_on_market, property_type, listing_type, listing_broker, remarks
Media and flagsis_new_construction, is_hot, has_3d_tour, has_video_tour, photo_count
Search provenanceregion_id, region_kind, search_url, search_page, position
Sale historysold_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

OptionWhat you getLimitations
This Redfin ScraperOne row per home with 38 original columns plus normalized names, for sale or sold, several regions per runUp to 350 homes per region; Redfin decides which details exist
Redfin Data CenterAggregate housing market statistics per metro, county or ZIP codeNo individual homes, addresses or MLS numbers
Copying from the websiteExactly what you see on screenManual, slow and not repeatable
Writing your own real estate scraperFull controlYou maintain parsing, retries and changes to Redfin's pages yourself
Other Redfin actors in the Apify StoreVarying fields, detail pages, agent contactsDifferent 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.