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.
The actor referenced in this article. Pay only for results delivered.
Sourcing deals the traditional way means logging into Redfin, setting filters, scrolling pages, and copying addresses into a spreadsheet — repeated every time a new metro or a new set of criteria comes up. It works, but it doesn’t scale past a handful of searches a week, and it produces a spreadsheet, not a workflow.
The alternative is to give an AI agent direct access to the same data Redfin’s own filters query, and let the investor describe what they’re looking for in plain language instead of clicking through a filter panel. The Redfin Scraper is available as a hosted MCP server, which means Claude (or any MCP-compatible client) can call it directly as a tool — no script to write, no dashboard to check, just a conversation that ends with a list of matching properties.
Why Redfin for this pipeline
Redfin doesn’t offer a public listings API — its Data Center exports are aggregated market metrics, not individual listings — so scraping its own listing endpoints is the only way to get property-level data at scale. What makes it a good fit for a deal-sourcing pipeline specifically is the field set: alongside price, beds, baths, and square footage, every record includes pricePerSqft, daysOnMarket, listingAgentName, and listingBrokerName. An investor evaluating a property doesn’t just want the price — they want to know how it compares to similar listings on a per-square-foot basis, how long it’s been sitting, and who to call.
Setting up the MCP connection
The actor is exposed as an MCP endpoint:
https://mcp.apify.com/?tools=themineworks/redfin-scraper
Add that URL to Claude Desktop’s MCP server configuration, or any MCP client:
{
"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"
}
}
}
}
Once connected, Claude can call the actor mid-conversation, pass it a location and filter set, and read the results back into the conversation — the investor never sees a JSON payload or a spreadsheet unless they ask for one.
A realistic example
Investor prompt:
I’m looking for single-family flip candidates in Austin, TX. Budget $300k-$550k, at least 3 beds. I care about days on market — anything sitting for a while might mean the seller is more open to negotiating. Pull the current listings and flag anything that looks underpriced relative to the rest of the set.
What Claude does:
Claude calls the Redfin Scraper with a filtered input derived from the request:
{
"location": "Austin, TX",
"maxItems": 150,
"minPrice": 300000,
"maxPrice": 550000,
"minBeds": 3,
"proxyConfig": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}
The actor returns up to 150 active listings, each with price, beds, baths, sqft, pricePerSqft, daysOnMarket, yearBuilt, listingAgentName, listingBrokerName, and the listing URL. Claude computes the median pricePerSqft across the returned set, then filters for listings priced meaningfully below that median combined with an above-average daysOnMarket — the combination that suggests a seller might be motivated.
Claude’s response (summarized):
I pulled 142 active listings matching your criteria. Median price per square foot across the set is $312. Six listings stand out as priced at least 15% below that median while sitting on market longer than the 34-day average for this set:
- 2214 Fairfield Dr — $389,000, 3 bed/2 bath, 1,540 sqft ($253/sqft), 61 days on market, listed by Jane Miller, Compass RE Texas
- 5108 Oak Springs Cir — $412,000, 4 bed/2 bath, 1,780 sqft ($232/sqft), 74 days on market, listed by Marcus Webb, Keller Williams
- [additional listings…]
All six are single-family, no new construction. Want me to pull the last 90 days of sold comps in the same ZIPs to check whether $232-$253/sqft is genuinely below what’s actually closing, or whether the whole submarket is priced there right now?
That follow-up matters — a listing’s pricePerSqft relative to other active listings tells you it’s cheap relative to what else is for sale, but only sold comps confirm whether that price is genuinely below market or the market has simply moved. Pairing the Redfin Scraper’s soldWithinDays mode with the same location and filter set answers that in a second call.
Turning the conversation into a repeatable pipeline
The MCP flow above is exploratory — one conversation, one metro, ad hoc criteria. For an investor running this weekly across several metros, the same Redfin Scraper input becomes a scheduled Apify run instead of a live Claude conversation:
import os
from apify_client import ApifyClient
apify = ApifyClient(os.environ["APIFY_TOKEN"])
metros = ["Austin, TX", "San Antonio, TX", "Charlotte, NC"]
candidates = []
for metro in metros:
run = apify.actor("themineworks/redfin-scraper").call(run_input={
"location": metro,
"maxItems": 150,
"minPrice": 300000,
"maxPrice": 550000,
"minBeds": 3,
})
listings = list(apify.dataset(run["defaultDatasetId"]).iterate_items())
priced = [l for l in listings if l.get("pricePerSqft") and l.get("daysOnMarket")]
median_ppsf = sorted(l["pricePerSqft"] for l in priced)[len(priced) // 2]
avg_dom = sum(l["daysOnMarket"] for l in priced) / len(priced)
for l in priced:
if l["pricePerSqft"] < median_ppsf * 0.85 and l["daysOnMarket"] > avg_dom:
candidates.append(l)
print(f"{len(candidates)} candidates across {len(metros)} metros")
Scheduled weekly, this feeds a running candidate list an investor reviews on their own schedule, with Claude available for the deeper follow-up questions — comps, agent contact, or a summary of what changed since the last run — that a static script can’t answer.
Getting agent contact for follow-up
Every candidate returned already carries listingAgentName and listingBrokerName, enough to make first contact directly. For a workflow built specifically around extracting agent and broker contact at scale — rather than as a byproduct of deal sourcing — see Building Real Estate Agent Lead Lists from Redfin and Realtor.com.
Pricing
Results cost $2 per 1,000 ($0.002 each), with nothing charged on failed or empty runs. A 150-listing pull across three metros costs $0.90; run weekly, that’s under $4/month for a standing deal-sourcing pipeline across multiple markets — far below what a paid investor-lead platform charges per seat.
Frequently Asked Questions
Does Claude need to see the raw JSON, or does it summarize?
Claude reads the structured results returned by the MCP tool call and summarizes, filters, and ranks them in natural language — the investor sees a readable answer, not a raw dataset, unless they specifically ask for the full export.
Can I ask for sold comps in the same conversation?
Yes. The same actor accepts soldWithinDays (7, 30, 90, 180, or 365) to switch into recently-sold mode, so a follow-up question like “now show me what actually closed in those ZIPs” is a second tool call within the same conversation.
Is this only useful for flips?
No — the same pipeline works for buy-and-hold rental sourcing (filter on price and beds, then cross-reference with rent data) or land-banking (filter on lot size and property type). The deal logic — flag listings priced below the local median with above-average days on market — is a starting heuristic, not the only one.
Do I need to write Python to use this with Claude?
No. The MCP connection lets Claude call the actor directly from a conversation with no code. Python is only needed for the scheduled, unattended version of the pipeline shown above.
How is this different from just reading the Python guide to the Redfin Scraper?
The Redfin Scraper Python guide covers calling the actor directly from a script. This post covers the same actor wired into Claude as an MCP tool, so the interface is a conversation rather than a script you maintain.
Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.
I Automated My AI Job Hunt: 8 Tools, One Claude Agent, Under $1
Most job hunting is spent on the wrong problem. Here is the exact end-to-end flow — find who is actually hiring, rank by real fit, research the company, find the human, and write an application grounded in facts — run entirely from Claude via MCP.
Ask an AI for a Company's SEC CIK and It Will Lie to You. Here Is the Fix.
An AI that remembers is not an AI that verifies. This is the exact diligence flow — legal identity from GLEIF, filings from EDGAR, funding, engineering activity and hiring — run from Claude via MCP, grounded in real registries, for about fifteen cents a company.
Stop Cold Pitching: Find Local Businesses With a Problem You Can Actually Fix — Under $4
Cold outreach fails because it is generic. Here is the exact flow — build a prospect universe, diagnose the real problem from their own reviews, qualify who can pay, find the human, and pitch with evidence — run entirely from Claude via MCP. No code.