Redfin Scraper: For-Sale and Sold Property Data in Python (No API Key)
Scrape Redfin listings by city, ZIP, or URL in Python: price, beds, baths, sqft, agent, MLS status, and coordinates. No login, no browser, no unblocker.
The actor referenced in this article. Pay only for results delivered.
Redfin doesn’t publish a public listings API. Its Data Center exports give you aggregated market metrics: median price by metro, inventory trends, not individual property records. If you need the actual listing-level data (address, price, beds, agent, MLS status) for a specific city or ZIP code, scraping is the only route in, and most of the scrapers built for that job reach for full browser automation with an unblocker subscription because Redfin is assumed to be hard to reach without one.
Try it live: Redfin Scraper, For-Sale & Sold, 27 Fields, No Login. Pay per result delivered. Failed and empty results are never charged.
That assumption is wrong for the main search flow. The Redfin Scraper talks to Redfin’s own GIS search endpoints over plain HTTP: no headless browser, no unblocker, no login. It resolves any free-text US location (city, ZIP, or a pasted Redfin URL) to a search region using free geocoding, then pages through Redfin’s listings directly. $2 per 1,000 results ($0.002 each), failed results are never charged.
What You Get
For each property the actor returns:
- address, city, state, zip: full parsed street address
- price: list price, or sold price when
soldWithinDaysis set - beds, baths, sqft, lotSize: core specs
- pricePerSqft: computed price efficiency
- yearBuilt, propertyType: building age and category
- mlsId, status: MLS listing ID and current MLS status
- daysOnMarket, soldDate: timing data (
soldDatepopulates in sold mode) - latitude, longitude: coordinates for mapping
- hoaFee: monthly HOA where published
- listingAgentName, listingBrokerName: the agent and brokerage on the listing
- isNewConstruction: new-build flag
- photoUrl, url, propertyId: primary photo, Redfin listing URL, and Redfin’s internal property ID
Null fields are omitted from each record rather than returned as empty strings, so downstream parsing stays clean.
Scrape For-Sale Listings in Python
import os
from apify_client import ApifyClient
apify = ApifyClient(os.environ["APIFY_TOKEN"])
run = apify.actor("themineworks/redfin-scraper").call(run_input={
"location": "Austin, TX",
"maxItems": 100,
"minPrice": 400000,
"maxPrice": 900000,
"minBeds": 3,
})
for home in apify.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{home['address']}, {home['city']} - ${home.get('price'):,}")
print(f" {home.get('beds')}bd/{home.get('baths')}ba, {home.get('sqft')} sqft")
print(f" Agent: {home.get('listingAgentName')} ({home.get('listingBrokerName')})")
Pull Recently-Sold Comps for a CMA
Set soldWithinDays (7, 30, 90, 180, or 365) to switch the actor into sold mode, which returns soldDate and the closed price instead of an active listing:
run = apify.actor("themineworks/redfin-scraper").call(run_input={
"location": "78751",
"soldWithinDays": 90,
"maxItems": 50,
})
sold = list(apify.dataset(run["defaultDatasetId"]).iterate_items())
avg_ppsf = sum(h["pricePerSqft"] for h in sold if h.get("pricePerSqft")) / len(sold)
print(f"Average price/sqft in the last 90 days: ${avg_ppsf:.0f}")
To target an exact search region instead of a free-text location, pass a Redfin city or search URL as redfinUrl.
Use in Claude, ChatGPT & Any MCP Agent
This actor is available as a hosted MCP server:
https://mcp.apify.com/?tools=themineworks/redfin-scraper
{
"mcpServers": {
"redfin-scraper": {
"command": "npx",
"args": ["-y", "@apify/mcp-client"],
"env": {
"APIFY_TOKEN": "your-token-here",
"MCP_ACTOR_URL": "https://mcp.apify.com/?tools=themineworks/redfin-scraper"
}
}
}
}
Connect it to Claude Desktop or any MCP-compatible client and ask it to pull Redfin listings for a city, compare sold comps in a ZIP, or find the newest listings under a price cap; no Python script needed for a one-off lookup.
Use Cases
Comparable sales and CMA. Pull recently-sold homes in a target ZIP with soldWithinDays, average the pricePerSqft field, and apply it to a subject property’s square footage for a fast valuation baseline.
Investor deal sourcing. Filter by minPrice, maxPrice, and minBeds across a metro, then sort the results by daysOnMarket to find listings sitting long enough to negotiate on.
Agent and broker lead lists. Every record carries listingAgentName and listingBrokerName. Run a metro-wide search and de-duplicate by agent to build an outreach list of the brokers most active in that market.
Price and inventory monitoring. Schedule the same location on a daily or weekly cadence and diff the results against the previous run to catch price cuts and new listings as they happen.
Pricing
$2 per 1,000 results ($0.002 per property). A 500-property metro sweep costs $1. A weekly re-run of a 200-property ZIP list costs $0.40/week. You only pay for properties actually returned.
Frequently Asked Questions
Do I need a Redfin account or API key?
No. The scraper requires no login, no cookies, and no API key; only an Apify account to run it.
Does it need a headless browser or unblocker subscription?
No. It calls Redfin’s own GIS search endpoints over plain HTTP through Apify residential proxies, which is notably leaner than most Redfin scrapers that reach for full browser automation to get past anti-bot defenses on the rendered site.
Can I scrape recently-sold homes for comps?
Yes. Set soldWithinDays to 7, 30, 90, 180, or 365 and the actor returns sold price and sold date instead of active for-sale data.
How many properties can I pull in one run?
Up to 5,000 via maxItems. The actor pages through Redfin’s results and de-duplicates automatically; for larger jobs, split across multiple locations or run on a schedule.
How does this compare to Zillow and Realtor.com data?
Each portal publishes a different subset of listings and agent detail. See our full comparison of Zillow vs Redfin vs Realtor.com for coverage differences, or read how this actor fits into a full real-estate data stack alongside the Zillow and Realtor.com scrapers.
Explore the scraper referenced in this article: inputs, outputs, and pricing, then run it on Apify.
Building a Real Estate Investor Deal-Sourcing Pipeline with Claude and Redfin
How to wire the Redfin Scraper into Claude as an MCP tool so an investor can ask for undervalued properties by price, beds, and metro in plain language.
Zillow vs Redfin vs Realtor.com: Which Real Estate Data Source Should You Scrape in 2026?
A field-by-field comparison of Zillow, Redfin, and Realtor.com scraping: architecture, pricing, unique data each source has, and which to use for which job.
Realtor.com Scraper: Property and Agent Data Without the MLS Paywall
Scrape Realtor.com listings in Python: price, beds, baths, county, and the listing agent + brokerage office on every record. No login, no API key.
How to Scrape Zillow Listings in Python (2026 Guide, No Blocking)
Scrape Zillow for-sale listings by city or ZIP in Python: price, beds, baths, Zestimate, and days on market. No API key, no browser, no blocking.