Redfin API

Get Redfin data with one API

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

R
/redfin/v1

5 active endpoints, on 1, 2 and 3 credit tiers.

  • POST/redfin/v1/search
  • POST/redfin/v1/listing_detail
  • POST/redfin/v1/similar
  • POST/redfin/v1/autocomplete
  • POST/redfin/v1/market_stats

What Redfin endpoints does ReefAPI ship?

5 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

5 endpoints

search

2 cr

Search Redfin listings by location (for sale / recently sold / for rent) with structured filters.

required
location
optional
url, status, sort, max_results, sold_within_days, min_price, max_price, min_beds, max_beds, min_baths, max_baths, min_sqft, max_sqft, min_lot_sqft, max_lot_sqft, min_year_built, max_year_built, max_hoa, max_days_on_market, property_types

listing_detail

3 cr

Full property record.

required
property_id
optional
listing_id, url

similar

2 cr

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

required
property_id
optional
listing_id, url

autocomplete

1 cr

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

required
query
optional

market_stats

2 cr

Derived market snapshot for an area.

required
location
optional
url

Every parameter, every allowed value →

Redfin API

3 of 5 endpoints, ready to run

View docs ↗

Search Redfin listings by location (for sale / recently sold / for rent) with structured filters.

2 credits1 required · 1 optional
POST/redfin/v1/search
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

How the Redfin API works

Redfin is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /redfin/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 or 3 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

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.

What people build with Redfin

The jobs this data is most often used for.

5

endpoints

1/2/3

credits per call

01

Real-estate investors call search then similar to find and compare properties in a target area.

02

Market dashboards use market_stats to track median price, inventory and days-on-market trends.

03

Lead-gen tools use listing_detail to enrich a property with price history and listing specifics.

What Redfin data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 185 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
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}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/redfin/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "location": "Austin, TX",
  "max_results": 30
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Redfin.

Get a free key →
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.

11 Real Estate APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Redfin, you are one call away from the rest of the category — no second contract, no second integration.

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts.