Redfin Property Scraper โ€” Sale + Sold ยท Market KPIs avatar

Redfin Property Scraper โ€” Sale + Sold ยท Market KPIs

Pricing

Pay per event

Go to Apify Store
Redfin Property Scraper โ€” Sale + Sold ยท Market KPIs

Redfin Property Scraper โ€” Sale + Sold ยท Market KPIs

๐Ÿก Scrape Redfin US real estate listings โ€” for-sale, sold, and coming-soon โ€” with built-in market KPIs (median price, price/sqft, days-on-market, breakdowns by city/zip) and HTML report. Optional Redfin Estimate + Walk Score enrichment. Independent tool โ€” not affiliated with Redfin Corporation.

Pricing

Pay per event

Rating

0.0

(0)

Developer

SIรN Oรœ

SIรN Oรœ

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Redfin Property Scraper โ€” Sale + Sold ยท Market KPIs ๐Ÿก

SIรN Agency Store Related Actor Related Actor

๐ŸŽฏ Extract Redfin US Property Listings With Market KPIs in Seconds

Investors, agents, market analysts, and prop-tech builders โ€” get full Redfin listings plus price/sqft analytics, days-on-market, and optional Redfin Estimate + Walk Score


๐Ÿ“‹ Overview

Pull Redfin US property listings โ€” for-sale, sold, and coming-soon โ€” into clean structured data. Search any US market by region (city, neighborhood, zip) or by lat/lng + radius, and get back complete listings with calculated price-per-sqft, beds/baths, square footage, lot size, year built, days-on-market, listing agent, geo coordinates, and full photo URLs.

Why investors and agents choose us over the alternatives:

  • ๐Ÿ“Š Analytics included, not just raw data โ€” auto-generated HTML market report with median price, price/sqft distribution (min/median/avg/p90/max), days-on-market distribution, top cities + zips by inventory, and property-type breakdown โ€” computed for you on every run
  • ๐Ÿงฎ Calculated price/sqft on every listing โ€” comp sheets and CMAs are ready straight from the dataset
  • ๐ŸŒŽ Nationwide US coverage โ€” every Redfin region: cities, neighborhoods, zip codes, school districts
  • โญ Optional Redfin Estimate + Walk Score โ€” Redfin's AVM and Walk/Bike/Transit scores per listing for valuation and livability filtering (PAID)
  • ๐Ÿ”Ž Built-in autocomplete โ€” type a city or zip, get back the region IDs you need to scrape โ€” no manual lookup
  • ๐Ÿ†“ FREE tier with full feature parity โ€” 25 listings per run, no credit card, same KPIs and HTML report โ€” just a smaller cap

โœจ Features

  • ๐Ÿท๏ธ For-sale, sold, or coming-soon โ€” single listingStatus toggle picks the side of the market
  • ๐Ÿงญ Three search modes โ€” autocomplete (region-ID lookup), byRegionId (primary scrape mode), byCoordinates (lat/lng + radius, PAID)
  • ๐Ÿ“Š Auto-calculated price/sqft โ€” for every listing with usable square footage
  • ๐Ÿ“ˆ Market KPIs in HTML report โ€” median price, price/sqft distribution, days-on-market distribution, city + zip + property-type tallies
  • ๐Ÿ  Rich listing fields โ€” beds, baths (full + total), sqft, lot size, year built, HOA dues, MLS ID, listing agent name + ID, virtual-tour flag, 3D scan URL, full photo URLs (medium-res)
  • โญ Redfin Estimate + Walk Score enrichment โ€” bundled into one PAID toggle (includeEnrichment)
  • ๐Ÿ“ฆ Bulk region search โ€” pass an array of region IDs in one run (PAID)
  • ๐Ÿ“ฑ Standard Apify exports โ€” JSON, CSV, XLSX, RSS, HTML

๐ŸŽฌ Quick Start

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~redfin-property-scraper/runs?token=[YOUR_TOKEN]' \
-H 'Content-Type: application/json' \
-d '{"searchMode":"byRegionId","listingStatus":"forSale","regionId":"2_30818","maxResults":50}'

๐Ÿš€ Getting Started (3 Simple Steps)

Step 1: Find Your Region ID

Run with searchMode: "autocomplete" and autocompleteQuery: "Austin" (or any city/zip/neighborhood). The dataset will list matching region IDs in <type>_<id> format (e.g. 2_30818 for Austin, TX).

Step 2: Scrape The Region

Switch to searchMode: "byRegionId", paste the ID into regionId, pick listingStatus (forSale / sold / comingSoon), and set maxResults.

Step 3: Run & Export

Hit Run. Listings stream into the dataset; an HTML market report lands in the key-value store. Export as JSON, CSV, or Excel.

That's it! In under 2 minutes you'll have:

  • Complete listings with address, specs, pricing, photos, geo, agent
  • Auto-calculated price/sqft per listing
  • Market-level KPIs (median price, distribution, days-on-market, city + zip + type breakdowns)
  • A polished HTML market summary

๐Ÿ“ฅ Input Configuration

FieldTypeRequiredDescription
searchModestringNoautocomplete, byRegionId, or byCoordinates (default: byRegionId).
listingStatusstringNoforSale, sold, or comingSoon (default: forSale).
autocompleteQuerystringIf searchMode=autocompleteFree-text city / zip / neighborhood lookup.
regionIdstringIf searchMode=byRegionIdRegion ID in <type>_<id> format (e.g. 2_30818).
regionIdsarrayNoMultiple region IDs in one run (PAID only).
lat, lng, radiusnumber, number, integerIf searchMode=byCoordinatesCenter lat/lng + radius in miles (1โ€“50). PAID only.
maxResultsintegerNoListings per query, 1โ€“350 (default: 100). Applies to byRegionId and byCoordinates; ignored in autocomplete mode (autocomplete always returns the upstream candidate list). FREE tier capped at 25 per run.
includeEnrichmentbooleanNoFetch Redfin Estimate + Walk Score per listing โ€” PAID only (default: false).

Example โ€” Austin TX for-sale listings:

{
"searchMode": "byRegionId",
"listingStatus": "forSale",
"regionId": "2_30818",
"maxResults": 100
}

Example โ€” Look up a region ID:

{
"searchMode": "autocomplete",
"autocompleteQuery": "Park Slope"
}

Example โ€” Bulk regions, sold homes, with enrichment:

{
"searchMode": "byRegionId",
"listingStatus": "sold",
"regionIds": ["2_30818", "2_29470", "2_17151"],
"maxResults": 200,
"includeEnrichment": true
}

Example โ€” Coordinates + radius (PAID):

{
"searchMode": "byCoordinates",
"listingStatus": "forSale",
"lat": 30.27,
"lng": -97.74,
"radius": 5,
"maxResults": 100
}

๐Ÿ“ค Output

Results land in the Apify dataset. Common fields per listing:

FieldTypeDescription
propertyIdstringUnique Redfin property ID
listingIdstringUnique Redfin MLS listing ID
listingStatusstringforSale, sold, or comingSoon
urlstringFull listing URL on redfin.com
listingTitlestringFormatted address
addressobjectstreet, unit (condos/apartments only), city, state, zip, neighborhood, full
pricingobjectprice, pricePerSqft, hoaDues
specsobjectbeds, baths, bathsFull, bathsTotal, sqft, lotSize, yearBuilt, propertyType, propertyTypeCode (Redfin numeric code)
marketobjectdaysOnMarket, timeOnRedfinSecs, listingAddedDate, lastSoldDate, mlsId
locationobjectlatitude, longitude, timezone
listingAgentobjectname, redfinAgentId (when available โ€” only emitted when Redfin exposes the agent)
mediaobjectphotoCount, hasVirtualTour, scanUrl, photos[]
redfinEstimateobject(Optional, PAID) AVM data
walkScoresobject(Optional, PAID) walkScore, bikeScore, transitScore
scrapedAtstringISO timestamp

Example listing:

{
"propertyId": "31887455",
"listingId": "214636605",
"listingStatus": "forSale",
"url": "https://www.redfin.com/TX/Austin/4159-Steck-Ave-78759/unit-267/home/31887455",
"listingTitle": "4159 Steck Ave #267, Austin, TX 78759",
"address": { "street": "4159 Steck Ave", "unit": "#267", "city": "Austin", "state": "TX", "zip": "78759", "neighborhood": "Mesa Village Condo Amd" },
"pricing": { "price": 250000, "pricePerSqft": 302, "hoaDues": 271 },
"specs": { "beds": 2, "baths": 1, "bathsFull": 1, "bathsTotal": 1, "sqft": 829, "lotSize": 2583, "yearBuilt": 1977, "propertyType": "Condo" },
"market": { "daysOnMarket": 4, "listingAddedDate": "2026-05-01T18:51:42.660Z", "mlsId": "5826517" },
"location": { "latitude": 30.375407, "longitude": -97.75824, "timezone": "US/Central" },
"listingAgent": { "name": "Andrew Vallejo", "redfinAgentId": "4289" },
"media": { "photoCount": 22, "hasVirtualTour": true, "scanUrl": "https://my.matterport.com/show/?m=eHpABi2Y4PB" }
}

๐Ÿ’ผ Use Cases & Examples

1. Investment Comps & Underwriting

Investors comparing homes by price/sqft across markets

  • Input: Bulk region IDs for Austin, Nashville, Tampa
  • Output: Listings with calculated price/sqft + median per market
  • Use: Rank markets by entry-price-per-sqft; build comp sheets in minutes.

2. Recently-Sold Comparable Sales

Agents pulling sold comps for a CMA

  • Input: listingStatus: "sold" + neighborhood region ID
  • Output: Sold homes with last-sale-date, beds/baths/sqft
  • Use: Plug straight into CMAs and pricing strategy decks.

3. Days-On-Market Velocity Tracking

Brokers tracking how fast markets move

  • Input: Same region, weekly schedule
  • Output: Median + p90 days-on-market per run
  • Use: Spot when inventory starts to stale or accelerate.

4. Redfin Estimate vs. List-Price Spread

Investors hunting for under-priced inventory

  • Input: includeEnrichment: true
  • Output: Each listing carries the Redfin Estimate (AVM)
  • Use: Rank by AVM-vs-list-price spread to find mispriced homes.

5. Walkability-Based Filtering

Buyer-agents matching urban-buyer preferences

  • Input: includeEnrichment: true
  • Output: Walk/Bike/Transit scores per listing
  • Use: Surface walkable inventory in suburban markets.

6. AVM / ML Training Data

Data scientists building US-wide valuation models

  • Input: Bulk regions across multiple states
  • Output: Comprehensive listings dataset with full specs + geo
  • Use: Train and validate AVM and pricing models.

๐Ÿ”— Integration Examples

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/redfin-property-scraper').call({
searchMode: 'byRegionId',
listingStatus: 'forSale',
regionId: '2_30818',
maxResults: 100,
includeEnrichment: true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/redfin-property-scraper').call(
run_input={
'searchMode': 'byRegionId',
'listingStatus': 'sold',
'regionId': '2_30818',
'maxResults': 100
}
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item)

cURL

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~redfin-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"searchMode":"byRegionId","listingStatus":"forSale","regionId":"2_30818","maxResults":150}'

Automation Workflows (N8N / Zapier / Make)

  1. Trigger: Schedule (daily / weekly market refresh) or webhook
  2. HTTP Request: Call Redfin scraper API with target region IDs
  3. Process: Filter by price band, compute KPIs, dedupe against last run
  4. Action: Push to DB, send Slack/email digest, update dashboard

๐Ÿ“Š Performance & Pricing

FREE Tier (Try It Now)

  • 25 listings per run โ€” full feature parity, same data quality
  • 1 query per run (use Autocomplete + a single Region ID)
  • No credit card required
  • Perfect for testing and one-off analyses
  • Unlimited listings and queries per run
  • Bulk region arrays
  • Coordinates + radius mode
  • Redfin Estimate + Walk Score enrichment
  • Pay-per-result: only charged for listings actually returned

๐Ÿ’ฐ Transparent per-result pricing โ€” $0.005 per listing extracted, $0.003 per listing enriched (only on success), $0.005 per actor start. What you get for the price: every listing comes with calculated price/sqft and the run produces a full HTML market report with median, distribution, and city/zip breakdowns โ€” no post-processing required.

๐Ÿ”— View current pricing


โ“ Frequently Asked Questions

Q: How do I find a Redfin region ID? A: Run the actor with searchMode: "autocomplete" and the city or zip you want โ€” the dataset returns matching IDs in <type>_<id> format. Plug the ID into byRegionId mode for the actual scrape.

Q: Why does pricePerSqft come back null on some listings? A: Redfin records sometimes omit square footage, especially on land or new-construction listings. We only compute price/sqft when sqft is reported.

Q: Does this cover sold homes? A: Yes โ€” set listingStatus: "sold" to pull recently-sold comps with last-sold date.

Q: What does the Redfin Estimate enrichment return? A: Redfin's AVM payload โ€” when available. Some listings (off-market or in low-data areas) return a "not serviced" flag instead of a number; we surface that explicitly so you can filter.

Q: How many listings can I extract per run? A: FREE tier: 25. PAID tier: unlimited. A single region search returns up to ~350 listings in one call.

Q: What output formats are available? A: JSON, CSV, Excel โ€” exported directly from the Apify dataset.

Q: Is this legal? A: We only extract publicly available listings. See the legal section below.


๐Ÿ› Troubleshooting

"Invalid regionId" error

  • The format is <type>_<id>, e.g. 2_30818 for a city, 6_<id> for a neighborhood, 13_<zip> for a zip code. Use searchMode: "autocomplete" to look it up.

"Region ID not found" inside results

  • The ID format was right but Redfin doesn't have data for that exact slot. Try a parent region (city instead of neighborhood) or run autocomplete to see active alternatives.

FREE tier hit at 25 listings

  • That's the FREE cap. Upgrade for unlimited.

byCoordinates rejected on FREE

  • Coordinates mode is PAID-only. Use byRegionId or upgrade.

No enrichment on a listing

  • Enrichment requires includeEnrichment: true on PAID. Some properties have no Redfin Estimate available; we still return the metadata so you can filter.

โš ๏ธ Trademark Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Redfin Corporation, or any of its subsidiaries. The name "Redfin" is used solely in a descriptive sense to identify the public data source the Actor reads from. All trademarks, service marks, and trade names referenced in this Actor or its documentation are the property of their respective owners.


Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.


๐Ÿค Support

Telegram Support

Join our active support community


Built by SIรN Agency | More Tools