Redfin Scraper — Properties, Prices & Real Estate Data avatar

Redfin Scraper — Properties, Prices & Real Estate Data

Pricing

from $0.97 / 1,000 property listings

Go to Apify Store
Redfin Scraper — Properties, Prices & Real Estate Data

Redfin Scraper — Properties, Prices & Real Estate Data

Scrape public Redfin property listings from supported search URLs. Get structured price, size, status, and location fields. Run with Redfin URLs; no account or buyer API key. Pricing: $0.001 per property-item on Free.

Pricing

from $0.97 / 1,000 property listings

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

0

Monthly active users

4 days ago

Last modified

Features

Limited permissions

Share

Redfin Scraper for City, ZIP, and County

Scrape public Redfin property listings from redfin.com by city, ZIP, county, or neighborhood, with structured price, size, status, and location fields. On the Free plan, property-item costs $0.001 per delivered property; each row with status sold also costs $0.0019 (sold-listing).

  • Compare listing price, beds, baths, and square footage for a city or ZIP.
  • Collect sold rows for comparable-sales analysis with statusFilter: "sold".
  • Review lot size, year built, coordinates, and days on market (returned when Redfin provides it) by county or neighborhood.
  • Scrape multiple Redfin search URLs in one run without a Redfin account.
  • Proxy configuration is optional.

What you get

Each saved row is a property flattened from Redfin listing JSON. Prices are USD integers; square footage and lot size are square-foot integers. A field is null when the source does not provide the value.

FieldTypeDescription
property_idstringRedfin property ID; null when unavailable.
addressstringStreet line, with the unit number appended when provided; null when unavailable.
citystringCity name; null when unavailable.
statestringState; null when unavailable.
zipstringZIP or postal code; null when unavailable.
priceintegerListing price in USD; null when unavailable.
bedsintegerBedroom count; null when unavailable.
bathsnumberBathroom count; null when unavailable.
sqftintegerInterior square feet; null when unavailable.
lot_sizeintegerLot size in square feet; null when unavailable.
year_builtintegerYear built; null when unavailable.
property_typestringhouse, condo, townhouse, multi-family, land, other, mobile, or co-op; null when unavailable.
statusstringLowercased source status such as active, coming_soon, pre_on_market, pending, contingent, sold, off_market, or expired; null when unavailable.
days_on_marketintegerDays on market; null when unavailable.
latitudenumberLatitude; null when unavailable.
longitudenumberLongitude; null when unavailable.
urlstringAbsolute Redfin listing URL; null when unavailable.
scraped_atISO 8601 stringUTC run timestamp.
parse_confidencenumberData-quality score after applicable deductions.
warningsarray of stringsDeduction codes; empty when no deductions apply.

Missing property ID, address, city, price, coordinates, or URL lowers parse_confidence and adds a corresponding warning. A null days_on_market does not add a warning.

Sample output

This sample is shortened by dropping scraped_at and warnings. Every remaining value is copied from the dataset record.

{
"property_id": "31443083",
"address": "6508 Auburndale St",
"city": "Austin",
"state": "TX",
"zip": "78723",
"price": 556000,
"beds": 4,
"baths": 3,
"sqft": 2110,
"lot_size": 12205,
"year_built": 1967,
"property_type": "house",
"status": "coming_soon",
"days_on_market": null,
"latitude": 30.3132008,
"longitude": -97.6761242,
"url": "https://www.redfin.com/TX/Austin/6508-Auburndale-St-78723/home/31443083",
"parse_confidence": 1
}

Pricing

Billing is pay per event: property-item for each saved row, sold-listing in addition for each saved row with status sold, and apify-actor-start for the run start.

Planproperty-itemsold-listingapify-actor-start
Free$0.001$0.0019$0.00005 (Free plan)
Bronze$0.00099$0.001881$0.0000495
Silver$0.00098$0.001862$0.000049
Gold$0.00097$0.001843$0.0000485
Platinum$0.00096$0.001824$0.000048
Diamond$0.00095$0.001805$0.0000475

property-item is charged once per saved property. On the Free plan, 1,000 properties cost $1.00 and 10,000 properties cost $10.00.

sold-listing is charged when the saved status is exactly sold, in addition to property-item for the same row. The Free-plan price is $0.0019 per event. Example on the Free plan: 1,000 sold rows cost 1,000 × $0.001 = $1.00 for property-item plus 1,000 × $0.0019 = $1.90 for sold-listing, or $2.90 before the start event.

apify-actor-start is charged once per GB of run memory, with a minimum of one event. The Free-plan price is $0.00005 per event.

The Apify Free plan includes $5 of monthly platform usage credit. After one Free Actor Start and no sold-listing charges, the $5 credit covers 4999 property-item results.

You pay only for the events listed above. This Actor does not use the Pay per event + usage option, so the platform usage of your runs (compute, proxy traffic and storage) is not billed to you separately.

How to use

  1. Copy a full Redfin URL, such as https://www.redfin.com/city/30818/TX/Austin, https://www.redfin.com/zipcode/78701, https://www.redfin.com/county/1361/TX/Travis-County, or a neighborhood URL containing /neighborhood/ and a numeric ID.
  2. Paste one or more URLs into locations.
  3. Choose statusFilter and optional property-type, price, or bedroom filters.
  4. Set maxResults and pageSize, then start the run.
  5. Download the dataset when the run finishes.
  6. Repeat the run through Apify Schedules.
{
"locations": ["https://www.redfin.com/city/30818/TX/Austin"],
"maxResults": 500,
"propertyTypes": ["house", "condo"],
"minPrice": 0,
"maxPrice": 0,
"minBeds": 0,
"statusFilter": "active",
"pageSize": 350
}

Export the dataset as JSON or CSV, or read items through the Apify dataset API.

Input parameters

Filters are optional. If locations is omitted or empty, no rows are saved.

ParameterWhat it doesDefault
locationsRedfin search URLs for cities, ZIPs, counties, or neighborhoods. Multiple URLs run together; blank entries are skipped.Empty
maxResultsMaximum records across all locations. 0 means no cap; the per-region maximum is set by Redfin and is not documented.500
propertyTypesKeeps matching lowercase property types. Accepted values: house, condo, townhouse, multi-family, land, other. Empty includes all types.Empty
minPriceRemoves prices below this USD amount. 0 means no minimum. Rows with a missing price are kept.0
maxPriceRemoves prices above this USD amount. 0 means no maximum. Rows with a missing price are kept.0
minBedsRemoves listings below this bedroom count. 0 means no minimum. Rows with 0 or missing beds are kept.0
statusFilteractive for for-sale, sold for sold, or all for both.active
pageSizeListings requested per API page; accepted range is 10–350.350
proxyConfigurationOptional Apify proxy configuration.No proxy
disableUsageStatsSet to true to turn off the run summary described in Usage statistics.false

Limits and edge cases

ConditionWhat you seeWhat to do
locations is missing or emptyAn error is logged, no rows are saved, and OUTPUT is {"error": "no_locations"}.Add a Redfin URL.
A URL is unsupportedIt is skipped and added to OUTPUT.failedDetails; other URLs continue.Use a city, ZIP, county, or neighborhood URL.
Redfin returns HTTP 429The URL is skipped with a rate_limited reason; pages already fetched for that URL are dropped, while rows of earlier URLs remain saved. The run finishes with the available dataset.Retry later or configure an Apify proxy.
A request fails or returns a non-success statusThe URL is skipped and its reason is trimmed to 300 characters. All pages of a URL are fetched before its rows are saved, so an error partway through drops that URL's already-fetched pages; rows of earlier URLs remain saved. The run finishes with the available dataset.Check the URL and rerun.
A page is empty or shorter than pageSizePaging for that status stops.Try another area or status.
Filters remove every listingThe dataset can be empty; filtered-out rows are not charged.Widen the filters.
maxResults is reachedFurther pages and URLs are not requested.Increase the cap or use 0 (the per-region maximum is set by Redfin and is not documented).
Filters are set with maxResultsThe cap on rows fetched per location is applied before the property-type, price, and bedroom filters, so a filtered run can return fewer rows than maxResults.Raise maxResults or use 0.
statusFilter is allActive and sold listings are both requested.Run active and sold separately if you need separate caps.
More than 20 URLs failOUTPUT retains only the first 20 failedDetails.Use the run log for later failures.

Paging waits 0.5 seconds between pages of the same status.

FAQ

How much does it cost to scrape Redfin listings?

On the Free plan, property-item costs $0.001 per saved property, sold-listing costs $0.0019 per event, and apify-actor-start costs $0.00005 per event. For example, 1,000 non-sold properties cost $1.00 on the Free plan, and 1,000 sold rows cost 1,000 × $0.001 + 1,000 × $0.0019 = $2.90, plus the applicable apify-actor-start event.

What happens when a location returns no results?

Paging stops for that status and no property rows are saved for the empty location. Later URLs still run, and no property-item charge applies to rows that were not saved.

What should I do if a location fails?

Unsupported URLs, HTTP 429 responses, and failed requests are skipped and recorded in OUTPUT.failedDetails; at most 20 failures are stored there. Correct the URL and retry, using proxyConfiguration when needed.

Do I need a Redfin account?

No. The Actor reads public listing data from redfin.com and does not require a Redfin account. Proxy configuration is optional.

The Actor reads publicly available listing data from redfin.com. Whether your use is allowed depends on Redfin’s terms and the law applicable to your use case.

Usage statistics

This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.

A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.

To opt out, set disableUsageStats to true in the input. Nothing is sent then.

Full list of collected fields

⌂ 换网址