The Mine Works
← All posts
tutorial July 11, 2026 · 4 min read

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.

Try the scraper

The actor referenced in this article. Pay only for results delivered.

View the scraper →

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.

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), nothing charged on failure.

What You Get

For each property the actor returns:

  • address, city, state, zip — full parsed street address
  • price — list price, or sold price when soldWithinDays is 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 (soldDate populates 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.

Related Actor

Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.