Redfin Scraper — Property Data, Redfin Estimate & Agent
Pricing
from $45.00 / 1,000 enriched listings
Redfin Scraper — Property Data, Redfin Estimate & Agent
Redfin scraper for US real estate data — listings with the Redfin Estimate, price & tax history, photos, schools, HOA, geo, plus listing agent and brokerage. Search by ZIP, city, URL, or listing URL. No API key, no run-start fee.
Pricing
from $45.00 / 1,000 enriched listings
Rating
0.0
(0)
Developer
Jura Moshkov
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Redfin Scraper — Property Data, Redfin Estimate, Agent & Brokerage
This Redfin scraper turns any Redfin search into a clean, structured dataset of property listings with the listing agent and brokerage attached. Give it a ZIP code, a city, a property URL, or a Redfin search URL and get one flat row per property — price, beds, baths, the Redfin Estimate, price and tax history, photos, schools, HOA and coordinates, plus the listing agent's name and their brokerage. It runs on a stable real-estate data API rather than a browser, there is no run-start fee, and you pay only for successfully enriched properties.
Two things set it apart from the near-identical Redfin scrapers in this niche:
- Agent and brokerage on every row. Most Redfin scrapers return property data only. This one attaches the real listing agent's name and their brokerage to each property, so the output is built for lead generation and brokerage attribution, not just market data.
- It is agent-native and pay-per-result. It runs as a callable tool through the Apify MCP server, so an AI agent can fill the input from the schema and run it directly. Billing is per enriched property, with no charge for a run that starts and returns nothing.
Looking for a Redfin property scraper, Redfin Estimate data by ZIP code, or Redfin listings with agent and brokerage? This actor does it in one run and exports to CSV, JSON, or Excel.
Note on agent contact: Redfin does not publish listing agents' phone numbers or email addresses on its listing pages — contact is routed through Redfin. This actor reliably returns the agent's name and brokerage on each listing. The
agentPhoneandagentEmailfields exist for consistency but are usuallynull, because Redfin does not expose them. If you need agent email and phone, use the Realtor.com or Realtor.ca scrapers instead.
What is a Redfin scraper?
A Redfin scraper is a tool that reads Redfin the way you would — a place (a ZIP or city) or a specific listing — and returns each matching home as a structured record instead of a web page. Plain Redfin shows you a listing with a price, some photos, and a "contact agent" button. This actor pulls the underlying data behind that page: the full property detail, the Redfin Estimate, the price and tax history, the nearby schools, the geo coordinates, and the listing agent and brokerage — and flattens it into one row per property that drops straight into a spreadsheet, a model, or a CRM.
It has four input modes so you can start from whatever you already have:
| Mode | Use it to | Requires |
|---|---|---|
zipSearch | Discover every listing (and its agent) in a ZIP code — the main mode | zipCodes |
citySearch | Discover listings and agents across a city | cities |
propertyUrls | Enrich a known list of Redfin property URLs | startUrls |
url | Scrape any Redfin search or listing URL you paste | startUrls |
What you get
One flat row per property. The full field set:
| Field | Type | Description |
|---|---|---|
propertyId | string | Redfin property / listing ID. |
url | string | Listing URL on Redfin. |
status | string | Listing status (e.g. for_sale). |
price | number | Listing price. |
currency | string | Currency, usually USD. |
redfinEstimate | number | The Redfin Estimate valuation when available. |
beds | number | Bedrooms. |
baths | number | Bathrooms. |
sqft | number | Interior square footage. |
lotSqft | number | Lot size in square feet. |
yearBuilt | number | Year built. |
propertyType | string | Property type. |
streetAddress / city / state / zip | string | Address parts. |
latitude / longitude | number | Coordinates. |
hoaFee | number | Monthly HOA fee when available. |
propertyTax | number | Most recent annual property tax when available. |
daysOnMarket | number | Days on market. |
priceHistory | array | Price history entries {date, price, event}. |
photoUrls | array | Listing photo URLs. |
schools | array | Nearby schools when available. |
listedDate | string | Listing date (ISO). |
agentName | string | Listing agent name (real, per listing). |
brokerName | string | Brokerage name. |
agentProfileUrl | string | Agent profile URL when available. |
agentPhone | string | Not published by Redfin — usually null. |
agentEmail | string | Not published by Redfin — usually null. |
agentEmailMasked | boolean | Whether the email was masked for a free-plan preview. |
mode / searchZip / searchCity / sourceUrl | string | Which input produced the row. |
scrapedAt | string | When the row was scraped (ISO). |
error | string | null on success; a message on a failed row. |
Example output row
One property comes back as one flat JSON object:
{"mode": "zipSearch","propertyId": "12345678","url": "https://www.redfin.com/WA/Seattle/123-Main-St-98103/home/12345678","status": "for_sale","price": 875000,"currency": "USD","redfinEstimate": 862500,"beds": 3,"baths": 2,"sqft": 1680,"lotSqft": 4000,"yearBuilt": 1926,"propertyType": "Single Family Residential","streetAddress": "123 Main St","city": "Seattle","state": "WA","zip": "98103","latitude": 47.6743,"longitude": -122.3421,"hoaFee": null,"propertyTax": 7412,"daysOnMarket": 11,"priceHistory": [{ "date": "2026-09-09T00:00:00.000Z", "price": 875000, "event": "Listed" }],"photoUrls": ["https://ssl.cdn-redfin.com/photo/....jpg"],"schools": [{ "name": "B.F. Day Elementary", "rating": 8 }],"listedDate": "2026-09-09T00:00:00.000Z","agentName": "Jane Broker","brokerName": "Redfin Corporation","agentProfileUrl": "https://www.redfin.com/real-estate-agents/jane-broker","agentPhone": null,"agentEmail": null,"agentEmailMasked": false,"searchZip": "98103","searchCity": null,"sourceUrl": null,"scrapedAt": "2026-09-20T14:02:11.318Z","error": null}
How do I get Redfin property data by ZIP code?
Use zipSearch mode with one or more zipCodes, and narrow with the optional filters:
{"mode": "zipSearch","zipCodes": ["98103"],"listingStatus": "forSale","minPrice": 400000,"maxPrice": 1200000,"beds": 3,"maxResults": 100}
Each search returns listings with full property detail, the Redfin Estimate, price and tax history, photos, schools, and the listing agent plus brokerage. Filters — minPrice, maxPrice, beds (minimum bedrooms), baths (minimum bathrooms), and listingStatus (forSale, forRent, or sold) — are all optional.
Enrich a known list of Redfin property URLs:
{"mode": "propertyUrls","startUrls": ["https://www.redfin.com/WA/Seattle/123-Main-St-98103/home/12345678"],"maxResults": 1}
Scrape any Redfin search URL you paste:
{"mode": "url","startUrls": ["https://www.redfin.com/zipcode/98103"],"listingStatus": "forSale","maxResults": 100}
How much does it cost?
Pricing is pay-per-result, so you pay for enriched properties, not for run time. There is no run-start fee, and you are charged only for successfully enriched properties.
| Apify plan | Price per enriched property |
|---|---|
| Free | $0.07 |
| Bronze | $0.06 |
| Silver | $0.05 |
| Gold | $0.045 |
| Platinum | $0.04 |
| Diamond | $0.04 |
Set maxResults to cap a run — each enriched property is roughly one upstream API request, so the row count is your ceiling. Free-plan runs are capped at 15 enriched properties and mask the agent email in the preview so you can inspect the output before upgrading. Agent name, brokerage, the Redfin Estimate, and all property data are returned on every plan.
How do I use it with an AI agent?
This actor is available as a callable tool through the Apify MCP server. Because every input field carries a description, an AI agent can fill the input straight from the schema and run it with no hand-holding:
{ "mode": "zipSearch", "zipCodes": ["78701"], "listingStatus": "forSale", "maxResults": 20 }
The output is one flat JSON object per property with no nested structure to unwrap (aside from the priceHistory, photoUrls, and schools arrays), which keeps it easy for an agent or a downstream step to consume. It is also a natural fit for a scheduled run: point it at a set of ZIPs or cities and let it refresh your dataset on a cadence.
Is scraping Redfin legal?
This actor collects publicly available listing data — the same property information any visitor sees on Redfin's public listing pages. It does not log in, access private data, or bypass paywalls. As with any data tool, you are responsible for how you use the results: respect Redfin's terms of service, follow the marketing, outreach, and privacy laws in your market (for example getting consent before cold outreach), and honour opt-outs. Agent name and brokerage are professional business information, not consumer personal data.
Why is it reliable?
It is built on a stable real-estate data API rather than a browser scraper, so it is not broken by Redfin layout changes or anti-bot defences the way page-scraping actors are. That matters most when you automate it: point an agent or a scheduler at a set of ZIPs and it keeps returning structured data instead of silently failing on a redesign. Rows that fail individually come back with an error message rather than crashing the run, and the requestDelayMs setting lets you slow the request pace on shared upstream plans.
Use cases
- Real estate market research — price, the Redfin Estimate, price and tax history, and days-on-market analysis across a ZIP or city, at scale.
- Valuation and comps — pull the Redfin Estimate alongside the list price and recent price history to build comparables.
- Investor and analytics pipelines — feed structured Redfin listing data into dashboards, models, or spreadsheets.
- Brokerage attribution — see which brokerage and agent list each property, market by market.
- Lead generation — build a list of listing agents by area, enriched with the properties they represent.
Example inputs
- All for-sale homes in a ZIP:
{ "mode": "zipSearch", "zipCodes": ["78701"] } - Three-bed homes under $1.2M in a city:
{ "mode": "citySearch", "cities": ["Seattle, WA"], "beds": 3, "maxPrice": 1200000 } - Recently sold comps in a ZIP:
{ "mode": "zipSearch", "zipCodes": ["98103"], "listingStatus": "sold" } - Rentals in a city:
{ "mode": "citySearch", "cities": ["Austin, TX"], "listingStatus": "forRent" } - Enrich a specific listing:
{ "mode": "propertyUrls", "startUrls": ["https://www.redfin.com/..."] }
FAQ
Does it include the agent's phone or email?
Not reliably. Redfin does not publish listing agents' phone numbers or email addresses on its listing pages — contact is routed through Redfin. This actor returns the listing agent's name and brokerage on every listing, but agentPhone and agentEmail are usually null. For agent email and phone, use the Realtor.com or Realtor.ca scrapers.
What is the Redfin Estimate?
It is Redfin's own automated valuation for a home. This actor returns it in the redfinEstimate field alongside the list price when available.
How is this different from a Zillow or Realtor.com scraper?
It targets Redfin specifically and pairs listing data — including the Redfin Estimate — with the listing agent and brokerage in the same row. It is built for lead generation and brokerage attribution, not just raw property data.
Do I need an API key?
No. Set your input and run — the actor handles the upstream data source for you.
Does it work outside the US?
No. Redfin covers United States listings only, so this actor returns US properties.
What happens to a listing that fails?
It comes back as a row with an error message and null data fields rather than stopping the run, so a single bad listing never sinks a batch.
Coverage
United States listings only. Agent phone and email are not published by Redfin, so treat agentName and brokerName as the reliable agent fields. The Redfin Estimate, HOA fee, property tax, schools, and photos are returned where Redfin exposes them and come back null or empty where it does not.