HasData
Scraper API

Redfin Scraper API

for listings and full property detail

Pull Redfin listings and full property detail as clean JSON. Search a market by ZIP or filters, or fetch a single home by URL, and get price, beds, baths, area, status, and days on market, with proxies handled for you.

SUCCESS
98.2%

of requests succeed

P50
1.8s

median response

P95
3.6s

95% finish faster

PRICE
$0.42

per 1k requests at volume

Stop maintaining scrapers

Redfin changes its markup often. Your parser shouldn't care.

  • Listing data buried in inline JSON
  • Prices, beds, and baths in mixed shapes
  • Photos behind lazy-loaded CDNs
  • Proxy rotation and retries at scale
  • Re-parse listings after each redesign
One integration commit replaces a backlog you’ll never finish.
scraper | git log
✗ hotfix: markup changed, nulls in price
✗ fix: beds/baths swapped on condo layout
✗ fix: inline JSON path moved again
✗ chore: rotate proxies for redfin runs again
✗ fix: status enum changed to PENDING variants
✗ hotfix: rate-limit loop on search pages
✗ fix: photo URLs stopped resolving
✗ chore: refresh residential IPs by state
✗ fix: pagination stopped past page one
✗ fix: retry storm on rate limits
✗ hotfix: markup changed, nulls in price
✗ fix: beds/baths swapped on condo layout
✗ fix: inline JSON path moved again
✗ chore: rotate proxies for redfin runs again
✗ fix: status enum changed to PENDING variants
✗ hotfix: rate-limit loop on search pages
✗ fix: photo URLs stopped resolving
✗ chore: refresh residential IPs by state
✗ fix: pagination stopped past page one
✗ fix: retry storm on rate limits
✗ hotfix: markup changed, nulls in price
✗ fix: beds/baths swapped on condo layout
✗ fix: inline JSON path moved again
✗ chore: rotate proxies for redfin runs again
✗ fix: status enum changed to PENDING variants
✗ hotfix: rate-limit loop on search pages
✗ fix: photo URLs stopped resolving
✗ chore: refresh residential IPs by state
✗ fix: pagination stopped past page one
✗ fix: retry storm on rate limits
✗ hotfix: markup changed, nulls in price
✗ fix: beds/baths swapped on condo layout
✗ fix: inline JSON path moved again
✗ chore: rotate proxies for redfin runs again
✗ fix: status enum changed to PENDING variants
✗ hotfix: rate-limit loop on search pages
✗ fix: photo URLs stopped resolving
✗ chore: refresh residential IPs by state
✗ fix: pagination stopped past page one
✗ fix: retry storm on rate limits
✓ feat: integrate HasData API
Code Examples

One GET Request. That's the whole integration.

Start with just a query. Add more parameters when your use case needs them.

request example
curl -G 'https://api.hasdata.com/scrape/redfin/listing' \
	--data-urlencode 'keyword=33321' \
	--data-urlencode 'type=forSale' \
	--header 'x-api-key: <YOUR_API_KEY>' \
	--header 'Content-Type: application/json'
keyword * Location
The location to search for listings. Accepts a zipcode (`33321`), a city (`Austin` or `Austin, TX`), a neighborhood (`East Austin`), a school (`BASIS Austin`), a school district (`Austin Independent School District`), an apartment building by its name (`Maizon Brickell`), or a full street address (`5805 Woodview Ave, Austin, TX 78756`), including a single unit (`221 SW 12th St Unit 1716, Miami, FL`). An address or a building returns a single property card instead of a list of listings, and the `type` parameter does not apply to it.
type * Listing Type
The type of listing.
sort Sort By
The sorting option for the search results.
price[min] Price Min
The minimum price of the listing.
price[max] Price Max
The maximum price of the listing.
monthlyPayment[min] Monthly Payment Min
The minimum monthly payment.
monthlyPayment[max] Monthly Payment Max
The maximum monthly payment.
monthlyPayment[interestRate] Interest Rate
The mortgage interest rate (percent) used to calculate the monthly payment.
monthlyPayment[insuranceRate] Insurance Rate
The home insurance rate (percent) used to calculate the monthly payment.
monthlyPayment[downPaymentPercent] Down Payment Percent
The down payment as a percentage of the home price.
monthlyPayment[downPaymentAmount] Down Payment Amount
The down payment as an absolute amount.
monthlyPayment[mortgageTerm] Mortgage Term
The mortgage term used to calculate the monthly payment.
cost[hoa] HOA
The maximum monthly Homeowners Association (HOA) fee.
cost[pricePerSqft][min] Price per Sqft Min
The minimum price per square foot.
cost[pricePerSqft][max] Price per Sqft Max
The maximum price per square foot.
cost[excludeLandLeases] Exclude Land Leases
If set to true, listings with land leases will be excluded.
cost[maxPropertyTaxPerYear] Max Property Tax per Year
The maximum property tax per year.
cost[acceptedFinancing] Accepted Financing
The accepted financing type.
cost[priceReduced] Price Reduced
Filter listings by when the price was reduced.
homeTypes[] Home Types
An array of home types to filter the listings. Allowed values depend on the listing `type`.
beds[min] Beds Min
The minimum number of bedrooms.
beds[max] Beds Max
The maximum number of bedrooms.
baths Baths
The minimum number of bathrooms.
forSaleSquareFeet[min] For Sale Square Feet Min
The minimum square footage for for-sale listings.
forSaleSquareFeet[max] For Sale Square Feet Max
The maximum square footage for for-sale listings.
forRentSquareFootage[min] For Rent Square Footage Min
The minimum square footage for for-rent listings.
forRentSquareFootage[max] For Rent Square Footage Max
The maximum square footage for for-rent listings.
lotSize[min] Lot Size Min
The minimum lot size.
lotSize[max] Lot Size Max
The maximum lot size.
yearBuilt[min] Year Built Min
The minimum year the property was built.
yearBuilt[max] Year Built Max
The maximum year the property was built.
stories[min] Stories Min
The minimum number of stories.
stories[max] Stories Max
The maximum number of stories.
listingType[category][] Listing Category
An array of listing categories.
listingType[excludeShortSales] Exclude Short Sales
If set to true, short sales will be excluded.
listingType[redfinListingsOnly] Redfin Listings Only
If set to true, only Redfin-listed properties will be included.
statusOptions[] Status Options
An array of listing statuses.
onlyWithDealOrPromotion Only With Deal or Promotion
If set to true, only listings with a deal or promotion will be included.
exclude55PlusCommunities Exclude 55+ Communities
If set to true, 55+ communities will be excluded.
timeOnRedfin Time on Redfin
How long the listing has been on Redfin.
soldWithinOption Sold Within
Filter sold listings by how recently they were sold.
moveInDate Move In Date
The desired move-in date in MM/DD/YYYY format.
openHouseAndTour[openHouse] Open House
Filter listings with an open house.
openHouseAndTour[videoTour] Video Tour
If set to true, only listings with a video tour will be included.
homeFeatures[options][] Home Features
An array of home feature flags to filter the listings.
homeFeatures[garageSpotsMin] Garage Spots Min
The minimum number of garage spots.
homeFeatures[poolType] Pool Type
The type of pool.
homeFeatures[basement] Basement
The basement type.
homeFeatures[keywordSearch] Keyword Search
A free-text keyword search applied to listing descriptions.
rentalAmenities[] Rental Amenities
An array of rental amenities to filter the listings.
rentalOtherTerms[] Rental Other Terms
An array of additional rental terms.
pets[] Pets
An array of pet types allowed.
schools[greatSchoolRating] GreatSchools Rating
The minimum GreatSchools rating (1-10).
schools[schoolType][] School Type
An array of school types.
schools[includeUnratedSchools] Include Unrated Schools
If set to true, unrated schools will be included.
transportScores[walkScore] Walk Score
The minimum walk score (1-100).
transportScores[transitScore] Transit Score
The minimum transit score (1-100).
transportScores[bikeScore] Bike Score
The minimum bike score (1-100).
page Page
The page number of the results to retrieve.
TRY ALL 59 PARAMETERS FREE
AI Integration

Add Redfin API with your AI agent

Paste an integration prompt into your coding agent to add listing search or property lookup using your project's stack.

redfin-integration.md
# Integrate HasData Redfin Scraper API

## Task

Add the Redfin data function this project needs using HasData Redfin Scraper API.
Inspect project instructions, the server-side runtime, existing HTTP client, and tests first.
Follow the project's conventions and preserve unrelated code. No new SDK is required.
Choose listing search, property lookup, or both to match the user's requested workflow.
Implement only the endpoints the project needs.
Do not replace the REST integration with an MCP connection or a custom Redfin scraper.

## References

Read the documentation for each selected endpoint before implementing:

- Listing search: https://docs.hasdata.com/apis/redfin/listing.md
- Property lookup: https://docs.hasdata.com/apis/redfin/property.md
- Error handling: https://docs.hasdata.com/api-codes.md
- Documentation index: https://docs.hasdata.com/llms.txt
- Full documentation (fallback): https://docs.hasdata.com/llms-full.txt

Start with the endpoint references. Use `llms.txt` to find additional pages.
Use `llms-full.txt` only when needed; extract relevant sections instead of loading everything into context.
If a `.md` reference is unavailable, try its HTML URL without `.md`.
If it is still unavailable, ask for the missing documentation rather than guessing.

## Optional agent skill

If the official `hasdata` skill is already available, use its relevant guidance.
Otherwise, if this agent supports skills, ask before installing it in this project:

```sh
npx skills add hasdata/agent-skills --skill hasdata
```

Run from the project directory and select the coding agent in use.
The `hasdata-cli` skill is not required. If installation is declined or unsupported, continue with the docs.
Flag conflicts between skill guidance and current API docs rather than guessing.

## Implementation

- Listing search: `GET https://api.hasdata.com/scrape/redfin/listing`. Accept required `keyword` and `type` (`forSale`, `forRent`, or `sold`), plus optional documented filters and `page`.
- A ZIP or city searches a market. An address or building can return a single property card instead of a list; `type` does not apply to that result.
- Property lookup: `GET https://api.hasdata.com/scrape/redfin/property`. Accept the required `url`, a valid Redfin property URL.
- Encode query parameters, including bracketed filters, with the project's HTTP client.
- Preserve the returned JSON. Listing searches include `properties` and pagination; property details are under `property`, including optional `priceHistory`, `taxHistory`, and `redfinEstimate`.
- Handle timeouts, documented errors, empty results, varying search result shapes, and missing optional fields. Bound pagination to the user's requested scope.
- Keep requests server-side. If there is no suitable server-side runtime, discuss the options before changing the architecture.

## Credentials

- Implement the integration and mocked tests without requiring a live API key.
- Read `HASDATA_API_KEY` from the project's existing environment or secret store and send it as `x-api-key`.
- If the key is missing before live verification, ask the user to configure it from https://app.hasdata.com/api-keys.
- Never ask the user to paste the key into chat. Check only that it is configured, without printing its value.
- Never put the key in browser code, logs, or version control. Add only a placeholder to the project's example configuration.
- If using a local `.env` file, make sure it is gitignored.
- Send the key only to `https://api.hasdata.com`. Never forward it to documentation, result URLs, or redirects to another origin.

## Verification

- Add mocked tests for success, empty results, missing optional fields, and errors, plus a usage example. Cover list and single-card shapes if using listing search. Run local checks.
- Only after explicit user approval and with a configured key, make one live verification request to the selected endpoint with agreed inputs. Successful requests consume credits.
- Validate the HTTP status, documented API status, and response structure. An empty result set can be valid.
- Do not automatically repeat paid requests to obtain a nonempty response.
- Report changed files, setup commands, and test results. State separately whether live verification passed, failed, or was skipped.
- Ask before deploying.

Use Cases

Build with Redfin API

Build property research tools with listing filters, home details, sale history, annual taxes, and Redfin valuation estimates.

Screen homes against a buyer brief

Filter listings by budget, bedrooms, and floor area to create a shortlist for buyers or property researchers.

  • Tamarac, FL
  • Under $500,000
  • 3+ bedrooms
Example buyer shortlist Illustrative app output
Example buyer shortlist — Illustrative app output
PropertyPriceBeds / bathsArea
9411 NW 74th Pl$490,0003 / 21,546 sq ft
API data
properties[].idproperties[].address.streetproperties[].priceproperties[].bedsproperties[].bathsproperties[].area
Your app
Apply buyer criteria and save matching listings for review.

Enrich a property research database

Combine home type, construction year, floor area, and coordinates in a searchable property record.

  • 1322 S Prairie Ave, unit 1106
  • Chicago, IL
Property facts Saved response excerpt
Property facts — Saved response excerpt
FieldValue
Home typeCondo/Co-op
Year built2002
Living area1,170 sq ft
Coordinates41.8653684, -87.6216507
API data
property.idproperty.homeTypeproperty.yearBuiltproperty.areaproperty.geo.latitudeproperty.geo.longitude
Your app
Join property details to existing records by Redfin ID and add map coordinates.

Build a property sale timeline

Show dated listing, price-change, and sale events so researchers can inspect a property's transaction history.

  • 1322 S Prairie Ave, unit 1106
  • 2024 events
Selected price and sale events Saved response excerpt
Selected price and sale events — Saved response excerpt
DateEventPrice
2024-04-02Listed$500,000
2024-05-22Price Changed$469,000
2024-07-22Sold (MLS)$465,000
2024-08-26Sold (Public Records)$465,000
API data
property.priceHistory[].dateproperty.priceHistory[].priceproperty.priceHistory[].event
Your app
Arrange reported events into a timeline while retaining source labels.

Compare annual property taxes

Bring reported tax payments into property research and calculate differences between years for a cost comparison.

  • 1322 S Prairie Ave, unit 1106
  • Tax years 2022–2023
Reported tax payments Illustrative app output
Reported tax payments — Illustrative app output
Tax yearTax paidChange
2022$6,910.00Baseline
2023$7,111.69+$201.69
API data
property.taxHistory[].periodproperty.taxHistory[].taxPaid
Your app
Compare reported payments by tax year and calculate the annual difference.

Add Redfin valuation context

Display Redfin's estimated value and range alongside property research to give users additional pricing context.

  • 1322 S Prairie Ave, unit 1106
  • Saved estimate
Reported Redfin Estimate Saved response excerpt
Reported Redfin Estimate — Saved response excerpt
MeasureValue
Estimated value$502,001
Range minimum$477,000
Range maximum$578,000
API data
property.redfinEstimate.estimatedPriceproperty.redfinEstimate.estimatedPriceRange.fromproperty.redfinEstimate.estimatedPriceRange.to
Your app
Display the reported estimate and range alongside the property's recorded facts.
Response

Every listing, one predictable schema

Explore property details, valuation estimates, sale events, and annual tax records in these response excerpts.

properties.json
[
  {
    "id": 41552774,
    "mlsId": "B26056826",
    "url": "https://www.redfin.com/FL/Tamarac/8211-NW-91st-Ave-33321/home/41552774",
    "homeType": "House",
    "status": "FOR_SALE",
    "price": 475000,
    "currency": "USD",
    "beds": 4,
    "baths": 2,
    "area": 1909,
    "yearBuilt": 1974,
    "daysOnSite": 1,
    "address": {
      "street": "8211 NW 91st Ave",
      "city": "Tamarac",
      "state": "FL",
      "zipcode": "33321"
    },
    "image": "https://ssl.cdn-redfin.com/photo/106/islphoto/826/genIslnoResize.826.jpg"
  }
]
Fields in properties
id / mlsId number / string

Redfin ID and the MLS listing number

url string

Listing page on Redfin

homeType string

House, Condo, Townhouse, and so on

status string

FOR_SALE | PENDING | SOLD and variants

price / currency number / string

List price and its currency

beds / baths / area number

Bedrooms, bathrooms, and square footage

yearBuilt / daysOnSite number

Build year and days live on Redfin

address object

street, city, state, zipcode

What We Offer

An all-in-one scraping service

Every feature you need to collect data from thousands to millions of requests.

Loved by developers

Teams that deleted their scraper

Now it's the part of the pipeline they don't think about

4.8 ★★★★★
across 100+ reviews on 5 platforms
Trustpilot Trustpilot ★★★★★

HasData delivers exactly what we need: speed and comprehensive search features. It's the fastest API we've used in this space. Plus, their customer support is fantastic.

Denver Sinclair
Denver Sinclair
Capterra Capterra ★★★★★

We rely on HasData for search performance data and broader scraping needs. Their APIs deliver highly structured data that integrates directly into our platforms.

JN
Jacob N.
Trustpilot Trustpilot ★★★★★

Great web scraping API which is incredibly easy to use. It requires minimal effort to get up and running, and the documentation is very clear and helpful.

Arnold Foster
Arnold Foster
Trustpilot Trustpilot ★★★★★

I needed to scrape some information they didn't already support, and they wrote the code for me right away, which was super nice of them.

Hussein Ali
Hussein Ali
Clutch Clutch ★★★★★

We were particularly impressed with how easily we could integrate HasData into our existing workflow.

TB
Taras Bazyshyn
CEO at BAZTDL Sp. z o.o
Pricing

Plans that get cheaper at scale

Fixed price, fixed volume, no surprises at the end of the month. Upgrade when you need more.

Free
$0 /mo
Free forever
200 requests / month
1,000 credits / month
1 concurrent request
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Community support
Start free
Startup
$49 /mo
$1.23 / 1k requests
40K requests / month
200K credits / month
5 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Email support
Get started
Basic
Recommended
$99 /mo
$0.50 / 1k requests
200K requests / month
1M credits / month
15 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Priority email support
Get started
Growth
$208 /mo
$0.35 / 1k requests
3M credits / month
50 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Dedicated account manager
Get started
Monthly request volume
Free 200K 1M 4M
Best fit
Basic
requests / mo
200K
Concurrency
15
$ / 1k requests
$0.50
$99 /mo
Get Started
Enterprise
Custom price based on required volume

Past 20M credits a month, or terms the self-serve plans do not cover. We shape the contract around your workload.

Credits rollover
Unused credits carry into the next billing period.
Concurrency 2000+
Parallel request limits set to your peak load.
#1 request priority
Highest speed, always first in the queue.
Personal manager
A direct line to the founding team.
SSO
SAML single sign-on for the whole team.
Security review
Security questionnaire, DPA, and controls overview.
Talk to sales Quote within one business day
FAQ

Questions, answered

1 Grab your API key 2 Send a GET request 3 Get structured JSON

Your first request
is minutes away

200 requests free · no credit card