Redfin Scraper — Properties, Prices & Real Estate Data
Pricing
from $0.97 / 1,000 property listings
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
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Features
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.
| Field | Type | Description |
|---|---|---|
property_id | string | Redfin property ID; null when unavailable. |
address | string | Street line, with the unit number appended when provided; null when unavailable. |
city | string | City name; null when unavailable. |
state | string | State; null when unavailable. |
zip | string | ZIP or postal code; null when unavailable. |
price | integer | Listing price in USD; null when unavailable. |
beds | integer | Bedroom count; null when unavailable. |
baths | number | Bathroom count; null when unavailable. |
sqft | integer | Interior square feet; null when unavailable. |
lot_size | integer | Lot size in square feet; null when unavailable. |
year_built | integer | Year built; null when unavailable. |
property_type | string | house, condo, townhouse, multi-family, land, other, mobile, or co-op; null when unavailable. |
status | string | Lowercased source status such as active, coming_soon, pre_on_market, pending, contingent, sold, off_market, or expired; null when unavailable. |
days_on_market | integer | Days on market; null when unavailable. |
latitude | number | Latitude; null when unavailable. |
longitude | number | Longitude; null when unavailable. |
url | string | Absolute Redfin listing URL; null when unavailable. |
scraped_at | ISO 8601 string | UTC run timestamp. |
parse_confidence | number | Data-quality score after applicable deductions. |
warnings | array of strings | Deduction 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.
| Plan | property-item | sold-listing | apify-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
- 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. - Paste one or more URLs into
locations. - Choose
statusFilterand optional property-type, price, or bedroom filters. - Set
maxResultsandpageSize, then start the run. - Download the dataset when the run finishes.
- 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.
| Parameter | What it does | Default |
|---|---|---|
locations | Redfin search URLs for cities, ZIPs, counties, or neighborhoods. Multiple URLs run together; blank entries are skipped. | Empty |
maxResults | Maximum records across all locations. 0 means no cap; the per-region maximum is set by Redfin and is not documented. | 500 |
propertyTypes | Keeps matching lowercase property types. Accepted values: house, condo, townhouse, multi-family, land, other. Empty includes all types. | Empty |
minPrice | Removes prices below this USD amount. 0 means no minimum. Rows with a missing price are kept. | 0 |
maxPrice | Removes prices above this USD amount. 0 means no maximum. Rows with a missing price are kept. | 0 |
minBeds | Removes listings below this bedroom count. 0 means no minimum. Rows with 0 or missing beds are kept. | 0 |
statusFilter | active for for-sale, sold for sold, or all for both. | active |
pageSize | Listings requested per API page; accepted range is 10–350. | 350 |
proxyConfiguration | Optional Apify proxy configuration. | No proxy |
disableUsageStats | Set to true to turn off the run summary described in Usage statistics. | false |
Limits and edge cases
| Condition | What you see | What to do |
|---|---|---|
locations is missing or empty | An error is logged, no rows are saved, and OUTPUT is {"error": "no_locations"}. | Add a Redfin URL. |
| A URL is unsupported | It is skipped and added to OUTPUT.failedDetails; other URLs continue. | Use a city, ZIP, county, or neighborhood URL. |
| Redfin returns HTTP 429 | The 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 status | The 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 pageSize | Paging for that status stops. | Try another area or status. |
| Filters remove every listing | The dataset can be empty; filtered-out rows are not charged. | Widen the filters. |
maxResults is reached | Further 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 maxResults | The 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 all | Active and sold listings are both requested. | Run active and sold separately if you need separate caps. |
| More than 20 URLs fail | OUTPUT 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.
Is scraping Redfin listings legal or allowed?
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.
Related actors
- Redfin Sold Comps Scraper — ARV & Comp Analysis — a separate Actor focused on Redfin sold comps and ARV analysis.
- Aruodas.lt Property Listings Scraper — property listings from Aruodas.lt.
- At Home Japan Rental Listings — Japan rental listings from a different source.
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.