Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Redfin API page →
Real Estate

Redfin API & Scraper

The Redfin API returns US real-estate data — for-sale, recently-sold and rental listings — as clean JSON.

5 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary search endpoint returns properties with property id, URL, address, city, state, postal code and list price (or sold price and date), and you can pull a listing_detail, find similar homes, autocomplete a location and read market_stats. It is built for real-estate investors, brokerage tools and property dashboards that need live Redfin data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

The three Redfin search statuses return three different row shapes

status is not just a filter, it changes the schema. A parser written against for_sale rows finds nothing where it expects a price on sold rows, and hits objects where it expects integers on rental rows. Measured 2026-08-27 on Austin, TX, region_id 30818. Code against the column that matches the status you pass.

Fieldstatus=for_salestatus=soldstatus=for_rent
Pricelist_price_usd, integer, e.g. 2100000price_usd, integer, e.g. 350000, plus sold_date "August-21-2026"rent_price, an object {min: 999, max: 1200}, or null when nothing is available
beds, baths, sqftPlain numbers: 4, 4, 4729Plain numbers: 2, 1, 684Objects: beds {min: 1, max: 3}, sqft {min: 630, max: 860}
Identifiersproperty_id plus listing_idproperty_id onlyproperty_id plus rental_id, a UUID such as f98a8bcf-3b88-4f07-866d-3a34e2fbde61
mls_idA real MLS number on ordinary listings, a 19-digit internal id on broker-exclusive onesReal MLS numbers: 1262656, 9844565, 3051813Not returned
statusStrings such as "Coming Soon" and "Active", not the value you passed"Sold", alongside is_sold trueNot returned
days_on_marketInteger, 1 on a brand-new listingnull on every sold row measuredNot returned; last_updated carries an ISO timestamp instead
Extrasneighborhood object, listing_remarks, sashes[], num_photos, price_per_sqft_usdprice_per_sqft_usd, hoa_fee_monthly_usd, lot_sqftproperty_name such as "Oaks on Lamar", and num_available_units

address_line is normally a string but arrives as {"level": 5} when the address is withheld, and neighborhood is always an object, either {"value": "Northwest Hills", "level": 1} or {"level": 5}. Type-check both before formatting. lot_sqft is square feet, so 43,560 is one acre.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/redfin/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "location": "Austin, TX",
    "max_results": 30
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "redfin",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1062.9,
    "record_count": 30,
    "bytes": 1022700,
    "cache_hit": false
  },
  "data": {
    "items": [
      {
        "property_id": "31896771",
        "listing_id": "[redacted-phone]",
        "url": "https://www.redfin.com/TX/Austin/5138-Mansfield-View-Ct-78732/home/31896771",
        "address_line": "5138 Mansfield View Ct",
        "city": "Austin",
        "state_code": "TX",
        "postal_code": "78732",
        "neighborhood": {
          "value": "Hughes Park Lake 02",
          "level": 1
        },
        "list_price_usd": 1100000,
        "beds": 4,
        "baths": 3,
        "sqft": 3423,
        "lot_sqft": 17519,
        "year_built": 2000,
        "price_per_sqft_usd": 321,
        "hoa_fee_monthly_usd": 133,
        "property_type": "Single Family Residential",
        "property_type_code": 1,
        "status": "Active",
        "days_on_market": 1,
        "mls_id": "7164248",
        "latitude": 30.3904309,
        "longitude": -97.8820456,
        "num_photos": 24,
        "last_sold_date": "[redacted-phone]",
        "listing_remarks": "Welcome home to the perfect blend of privacy, space, and convenience. Nestled on an oversized lot in the gated Mansfield Estates community, this home backs to a peaceful greenbelt, creating a quiet setting with beautiful Hill Country views. The open layout is designed for easy everyday living and effortless entertaining, with inviting indoor and outdoor spaces you'll enjoy year-round. Whether you're hosting friends, relaxing on the patio, or simply taking in the scenery, this home offers the lifestyle you've been looking for. Just minutes from Lake Travis, shopping, dining, parks, and highly r",
        "sashes": [
          {
            "sashType": "[trimmed-depth]",
            "sashTypeId": "[trimmed-depth]",
            "sashTypeName": "[trimmed-depth]",
            "sashTypeColor": "[trimmed-depth]",
            "isRedfin": "[trimmed-depth]",
            "isActiveKeyListing": "[trimmed-depth]",
            "timeOnRedfin": "[trimmed-depth]",
            "openHouseText": "[trimmed-depth]",
            "lastSaleDate": "[trimmed-depth]",
            "lastSalePrice": "[trimmed-depth]"
          }
        ],
        "source": "redfin"
      },
      {
        "property_id": "[redacted-phone]",
        "listing_id": "[redacted-phone]",
        "url": "https://www.redfin.com/TX/Austin/2502-Leon-St-78705/unit-508/home/[redacted-phone]",
        "address_line": "2502 Leon St #508",
        "city": "Austin",
        "state_code": "TX",
        "postal_code": "78705",
        "neighborhood": {
          "value": "Austin",
          "level": 1
        },
        "list_price_usd": 369000,
        "beds": 3,
        "baths": 2,
        "sqft": 1036,
        "lot_sqft": 87,
        "year_built": 2007,
        "price_per_sqft_usd": 356,
        "hoa_fee_monthly_usd": 558,
        "property_type": "Condo/Co-op",
        "property_type_code": 2,
        "status": "Coming Soon",
        "days_on_market": 1,
        "mls_id": "117385",
        "latitude": 30.2901664,
        "longitude": -97.7497008,
        "num_photos": null,
        "last_sold_date": "[redacted-phone]",
        "listing_remarks": null,
        "sashes": [
          {
            "sashType": "[trimmed-depth]",
            "sashTypeId": "[trimmed-depth]",
            "sashTypeName": "[trimmed-depth]",
            "sashTypeColor": "[trimmed-depth]",
            "isRedfin": "[trimmed-depth]",
            "isActiveKeyListing": "[trimmed-depth]",
            "openHouseText": "[trimmed-depth]",
            "lastSaleDate": "[trimmed-depth]",
            "lastSalePrice": "[trimmed-depth]"
          },
          {
            "sashType": "[trimmed-depth]",
            "sashTypeId": "[trimmed-depth]",
            "sashTypeName": "[trimmed-depth]",
            "sashTypeColor": "[trimmed-depth]",
            "isRedfin": "[trimmed-depth]",
            "isActiveKeyListing": "[trimmed-depth]",
            "openHouseText": "[trimmed-depth]",
            "lastSaleDate": "[trimmed-depth]",
            "lastSalePrice": "[trimmed-depth]"
          }
        ],
        "source": "redfin"
      },
      {
        "property_id": "32757422",
        "listing_id": "[redacted-phone]",
        "url": "https://www.redfin.com/TX/Austin/12410-Burlywood-Trl-78750/home/32757422",
        "address_line": "12410 Burlywood Trl",
        "city": "Austin",
        "state_code": "TX",
        "postal_code": "78750",
        "neighborhood": {
          "value": "Austin",
          "level": 1
        },
        "list_price_usd": 460000,
        "beds": 3,
        "baths": 2.5,
        "sqft": 2090,
        "lot_sqft": 10410,
        "year_built": 1978,
        "price_per_sqft_usd": 220,
        "hoa_fee_monthly_usd": null,
        "property_type": "Single Family Residential",
        "property_type_code": 1,
        "status": "Coming Soon",
        "days_on_market": 9,
        "mls_id": "117021",
        "latitude": 30.4628173,
        "longitude": -97.806229,
        "num_photos": null,
        "last_sold_date": "[redacted-phone]",
        "listing_remarks": null,
        "sashes": [
          {
            "sashType": "[trimmed-depth]",
            "sashTypeId": "[trimmed-depth]",
            "sashTypeName": "[trimmed-depth]",
            "sashTypeColor": "[trimmed-depth]",
            "isRedfin": "[trimmed-depth]",
            "isActiveKeyListing": "[trimmed-depth]",
            "openHouseText": "[trimmed-depth]",
            "lastSaleDate": "[trimmed-depth]",
            "lastSalePrice": "[trimmed-depth]"
          },
          {
            "sashType": "[trimmed-depth]",
            "sashTypeId": "[trimmed-depth]",
            "sashTypeName": "[trimmed-depth]",
            "sashTypeColor": "[trimmed-depth]",
            "isRedfin": "[trimmed-depth]",
            "isActiveKeyListing": "[trimmed-depth]",
            "openHouseText": "[trimmed-depth]",
            "lastSaleDate": "[trimmed-depth]",
            "lastSalePrice": "[trimmed-depth]"
          }
        ],
        "source": "redfin"
      }
    ],
    "count": 30,
    "status": "for_sale",
    "pages_fetched": 1,
    "filters_applied": {},
    "region": {
      "region_id": 30818,
      "region_type": 6,
      "name": "[redacted-name]",
      "resolved_via": "seed"
    }
  }
}
Actions

What the Redfin API does

ActionDescriptionConcrete use caseKey params
searchSearch Redfin listings by location (for sale / recently sold / for rent) with structured filters: price, beds, baths, property type, square feet, lot size, year built, HOA and days-on-market, plus result sorting.Real-estate investors call search to search Redfin listings by location (for sale / recently sold / for rent) with structured filters.location, url, status, sort, max_results, ...
listing_detailEverything Redfin holds on one address: the live listing when the home is on the market (status, asking price, days on market, listing agent, description, photos) plus the property record underneath it - up to 17 years of price and tax history, schools, amenities, Redfin Estimate, mortgage and parcel. The current listing is looked up from the property id automatically; pass `listing_id` as well if you already have it and want to skip that step. `meta.is_live_listing` tells you which of the two you got: false means the home is not currently listed and what you see is the property record - the last closed sale.Brokerage tools call listing_detail to get everything Redfin holds on one address.property_id, listing_id, url
similarComparable/similar listings near a property, with the comp price band.Property dashboards call similar to get comparable/similar listings near a property, with the comp price band..property_id, listing_id, url
autocompleteResolve free text to Redfin places / agents / schools / buildings (ids + types).Lead-generation teams call autocomplete to resolve free text to Redfin places / agents / schools / buildings (ids + types)..query
market_statsDerived market snapshot for an area: median list price, $/sqft, days on market, inventory, price band.Real-estate investors call market_stats to get derived market snapshot for an area.location, url
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/redfin/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"location":"Austin, TX","max_results":30}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.redfin.search with {"location":"Austin, TX","max_results":30}.
Use cases

Who uses this API and why

  • Real-estate investors call search then similar to find and compare properties in a target area.
  • Market dashboards use market_stats to track median price, inventory and days-on-market trends.
  • Lead-gen tools use listing_detail to enrich a property with price history and listing specifics.
FAQ

Questions developers ask before integrating

Is mls_id the actual MLS number?

Usually, but not always, and you can tell which at a glance. Recently sold Austin homes returned 1262656, 9844565 and 3051813, which are genuine seven-digit ACTRIS numbers. A broker-exclusive Coming Soon listing returned mls_id "2180742405609614625", a 19-digit Redfin internal id, and you can confirm which one you are holding because that same number prefixes every photo filename on the record. If the value is much longer than ten digits, the MLS number has not been published yet.

Is the Redfin Estimate available, and when is it null?

redfin_estimate_usd comes from listing_detail and it is a float. Two recently sold Austin properties returned 409,923.4 and 456,880.4. A Coming Soon listing that had not yet gone active returned null, as did its mortgage field. Expect an estimate on off-market and sold homes, and expect null on listings Redfin has not finished ingesting. There is no estimate field on search rows at all.

Why does listing_detail say "Off Market" with a null price for a listing I can see is live?

Because property_id alone fetches the property record, not the active listing. Calling listing_detail with property_id 31265523 returned status "Off Market", list_price_usd null, and 17 years of tax history. Adding the listing_id from the same search row returned status "Coming Soon" and list_price_usd 2,100,000, but price_history came back empty and the whole tax block came back null. The two modes are complementary: call once without listing_id for history and taxes, once with it for the live price.

Where is the actual sale price of a sold home?

Not in price_history, which is the intuitive place to look. On property 31419001 the price_history row for the sale itself read date "2026-08-19", event "Sold (MLS)", mls_status "Closed", price_usd null, and only the "Listed" row carried a number. The sale price is on the search row when you pass status=sold, where that property returned price_usd 350000. Note also that listing_detail returned list_price_usd 290000 for the same property, matching neither, so do not read that field as a sale price.

What is in price_history and tax_history?

price_history is one row per event with date, event, mls_status, source and a price that is often null. Observed event values are "Listed", "Pending", "Contingent", "Sold (MLS)" and "Sold (Public Records)"; mls_status values are "Active", "Active Under Contract", "Pending" and "Closed"; source is the originating MLS name, such as "Unlock MLS", or "Public Records". tax_history sits nested under tax rather than at the top level, and one Austin property returned 17 annual rows with taxes_due_usd, land_value_usd and improvement_value_usd, running from 31,964.09 in 2026 back through 33,413.55 in 2025.

How is this different from the zillow engine?

Different data lineage, and market_stats says so in its own response. The market block carries a basis field reading "derived from current active for-sale inventory (Redfin gis); not a historical ZHVI series", meaning median_list_price_usd is the median of what is listed right now rather than an index. Austin on 2026-08-27 returned active_inventory 350, median_list_price_usd 499,997.5, median_price_per_sqft_usd 307 and median_days_on_market 5.0. Redfin also carries things a Zillow record does not, notably MLS-sourced price history with mls_status, GreatSchools ratings with distance_miles, and a per-property First Street climate block.

What does the similar action return?

Comparable properties near a subject, but with a thinner schema than search. Property 31419001 returned 18 comps carrying property_id, listing_id, address_line, list_price_usd, beds, baths, sqft, price_per_sqft_usd, mls_id, listing_remarks and last_sold_date. latitude, longitude, status, property_type, year_built and num_photos were null on every row. Use it to establish a price band, then call listing_detail on the comps you care about.

Which property_types codes can I filter on?

Eight integer codes, passed as an array: 1 Single Family Residential, 2 Condo/Co-op, 3 Townhouse, 4 Multi-Family 2-4 Unit, 5 Vacant Land, 6 Other, 7 Manufactured, 8 Multi-Family 5+ Unit. They apply to for-sale and rental searches, and the response echoes them back in property_type_code alongside the human property_type string. An invalid code is rejected outright, unlike the size and year filters, which are silently dropped.

What is the Redfin API?

Redfin API is a ReefAPI endpoint group for us homes for sale, sold and rentals with history. It returns live JSON through POST requests under /redfin/v1.

Is the Redfin API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Redfin calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Redfin login or account?

No login to Redfin is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Redfin data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Redfin API use?

Redfin actions currently cost 1-3 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Redfin from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call redfin actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / redfin

Redfin

US homes for sale, sold and rentals with history.

base /redfin/v15 endpoints
post/redfin/v1/listing_detail3 credits

Everything Redfin holds on one address: the live listing when the home is on the market (status, asking price, days on market, listing agent, description, photos) plus the property record underneath it - up to 17 years of price and tax history, schools, amenities, Redfin Estimate, mortgage and parcel. The current listing is looked up from the property id automatically; pass `listing_id` as well if you already have it and want to skip that step. `meta.is_live_listing` tells you which of the two you got: false means the home is not currently listed and what you see is the property record - the last closed sale.

ParameterAllowed / rangeDescription
property_idrequiredRedfin property ID — `property_id` from a search result, or the last number in a /home/ URL.
listing_idoptionalAdvanced: Redfin listing ID (pairs with property_id for the exact active listing).
urloptionalRedfin /home/ property URL (alternative to property_id).
Try in playground →
post/redfin/v1/similar2 credits

Comparable/similar listings near a property, with the comp price band.

ParameterAllowed / rangeDescription
property_idrequiredRedfin property ID — `property_id` from a search result, or the last number in a /home/ URL.
listing_idoptionalAdvanced: Redfin listing ID (pairs with property_id for the exact active listing).
urloptionalRedfin /home/ property URL (alternative to property_id).
Try in playground →
post/redfin/v1/autocomplete1 credit

Resolve free text to Redfin places / agents / schools / buildings (ids + types).

ParameterAllowed / rangeDescription
queryrequiredFree text: a city, neighborhood, address, school or agent name.
Try in playground →
post/redfin/v1/market_stats2 credits

Derived market snapshot for an area: median list price, $/sqft, days on market, inventory, price band.

ParameterAllowed / rangeDescription
locationrequiredThe market area — city, ZIP or neighborhood.
urloptionalAdvanced: a Redfin search URL instead of location.
Try in playground →
Comparing scraping APIs?ReefAPI vs Bright Data