HasData Redfin

com.hasdata由 hasdata.com 發布官方發布者v1.0.2更新於 Oct 25, 2026

Redfin for-sale, for-rent and sold listings plus full property pages, as structured JSON.

發布方自己的服務:HasData Airbnb

已驗證Streamable HTTP可網頁執行位置與生活網頁搜尋與抓取

概覽

AI 產生的概覽

HasData 託管的 Redfin 伺服器,讓助理以結構化 JSON 搜尋待售、出租與已售物件,並讀取完整物件頁面。

可以做什麼
  • 依郵遞區號、城市、社區、學校或學區搜尋物件,支援價格、房數、衛浴、房型、屋齡、土地面積、特色、寵物與設備等 Redfin 式篩選
  • 依 Redfin 網址讀取單一物件的完整頁面,包含價格與稅費歷史、Redfin 估價、規格資訊、學區學校、仲介資訊與照片
  • 把完整街道地址直接解析成單一物件,而非結果清單
  • 以資源形式讀取篩選參數的固定選項清單,不消耗額度
適用情境
適合房市研究、市場比較,以及需要 Redfin 物件資料但不想申請 MLS 授權或自行建置爬蟲流程的原型代理。已有 MLS 或 IDX 資料來源的持照仲介公司應優先使用自有資料來源。
執行需求
需要 HasData API 金鑰:遠端端點透過 x-api-key 標頭傳入,npm 或 PyPI 的 stdio 啟動器則透過環境變數 HASDATA_API_KEY 傳入。需要 MCP 用戶端;使用啟動器時需 Node.js(npx)或 uv(uvx)。需能連線至託管端點。
安裝前請注意
每次成功呼叫消耗 10 點額度;免費額度為每月 1,000 點,付費方案每月 59 美元起,查無結果的呼叫同樣計費。並行數受方案限制,無人看管的翻頁容易觸發限流。結果包含仲介姓名、電話與電子郵件,屬 GDPR 與 CCPA 範圍內的個人資料。資料再散布須自行負責,HasData 與 Redfin 並無關聯。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 HasData Redfin,將其新增到工作區。
  2. 連接 x-api-key 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.hasdata%2Fredfin/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "hasdata-redfin": {
      "type": "http",
      "url": "https://mcp.hasdata.com/mcp?apis=redfin",
      "headers": {
        "x-api-key": "<YOUR_API_KEY>"
      }
    }
  }
}

README

Redfin MCP Server

A hosted Redfin MCP server that gives Claude, Cursor, Windsurf and any other MCP client two read-only Redfin tools. Search for-sale, for-rent and sold listings with the filter set Redfin shows a visitor, and read one property page in full, both as structured JSON, with no MLS licence and nothing to host.

It reads public Redfin pages that a signed-out visitor can see.

1,000 free credits every month, no card required, which is 100 Redfin calls at the 10-credit rate.

https://mcp.hasdata.com/mcp?apis=redfin

[Glama score] [tool contract] [MCP] [Tools]

Contents

What you need

An MCP client and a HasData API key from the dashboard, free to create with no card, and the free tier covers about 100 calls a month at the 10-credit rate. This is a remote server, so the simplest path is a URL and an x-api-key header, with no container to run. A client that only speaks stdio reaches it through a thin launcher, published as @hasdata/redfin-mcp on npm and hasdata-redfin-mcp on PyPI, shown below.

Quick start

The server URL is the same for every client. We run it hands-on in Claude Code and Claude Desktop. The other blocks follow each client's own documented format for a remote server.

FieldValue
URLhttps://mcp.hasdata.com/mcp?apis=redfin
TransportHTTP, streamable
Auth headerx-api-key: HASDATA_API_KEY

Clients with OAuth support can add the same URL as a connector and sign in without putting a key in a config file.

Claude Code
bash
claude mcp add --transport http redfin "https://mcp.hasdata.com/mcp?apis=redfin" \  --header "x-api-key: HASDATA_API_KEY"
Claude Desktop

Settings, then Connectors, then Add custom connector, then paste https://mcp.hasdata.com/mcp?apis=redfin and sign in.

For the config-file route, Claude Desktop loads only local (stdio) servers, so it reaches a remote server through a stdio launcher. The @hasdata/redfin-mcp package is that launcher, and it reads the key from the environment. Add this to claude_desktop_config.json:

json
{  "mcpServers": {    "redfin": {      "command": "npx",      "args": ["-y", "@hasdata/redfin-mcp"],      "env": { "HASDATA_API_KEY": "YOUR_KEY" }    }  }}

For Python instead of Node, swap the launcher for the PyPI package, which uvx runs without a manual install:

json
{  "mcpServers": {    "redfin": {      "command": "uvx",      "args": ["hasdata-redfin-mcp"],      "env": { "HASDATA_API_KEY": "YOUR_KEY" }    }  }}
Cursor

~/.cursor/mcp.json for every project, or .cursor/mcp.json for one:

json
{  "mcpServers": {    "redfin": {      "url": "https://mcp.hasdata.com/mcp?apis=redfin",      "headers": { "x-api-key": "HASDATA_API_KEY" }    }  }}
Windsurf

~/.codeium/windsurf/mcp_config.json. Windsurf calls the field serverUrl, not url:

json
{  "mcpServers": {    "redfin": {      "serverUrl": "https://mcp.hasdata.com/mcp?apis=redfin",      "headers": { "x-api-key": "HASDATA_API_KEY" }    }  }}
VS Code

.vscode/mcp.json in the workspace:

json
{  "servers": {    "redfin": {      "type": "http",      "url": "https://mcp.hasdata.com/mcp?apis=redfin",      "headers": { "x-api-key": "HASDATA_API_KEY" }    }  }}

Example prompts

Each of these lands on one tool, or on two in sequence when the second needs the URL the first returns.

  • Find three-bedroom houses for sale in 78741 under $500,000 and sort them by price per square foot.
  • What sold in Austin in the last three months, and how does that compare with what is listed now?
  • Pull the full property page for this Redfin URL and summarise the condition from the description.
  • Which rentals in Austin allow dogs and include in-unit laundry?
  • Show me for-sale homes in the Austin Independent School District where the assigned elementary school rates 8 or better.
  • Find fixer-uppers built before 1970 in this zipcode that have been on Redfin more than 30 days.

A prompt that names a market goes to the search tool. A prompt that hands you a Redfin URL goes straight to the property tool. Searching for a full street address is a third case, covered below, because it answers with one property rather than a list.

Tools

ToolWhat it returns
hasdata_redfin_listing_getRealEstateListingsEach listing with address, Redfin URL, list price, beds/baths, square footage, lot size, year built, days on market, status, coordinates, photos, MLS number, and HOA; an…. 10 credits a call
hasdata_redfin_property_getPropertyDetailsAddress, list/sold price, price history, Redfin Estimate, beds/baths, square footage, lot size, year built, property type, HOA, days on market, school ratings, tax…. 10 credits a call

Two tools, 10 credits per successful call.

Get Redfin real estate listings

hasdata_redfin_listing_getRealEstateListings

A page of listings for a location, or one property when the location is a single address.

Two parameters are required, and the rest of the schema mirrors Redfin's own filter panel.

ParameterTypeRequiredNotes
keywordstringyesA zipcode, city, neighborhood, school, school district, apartment building name, or a full street address
typestringyesforSale, forRent or sold
sortstringrecommended, newest, oldest, priceLowToHigh, priceHighToLow, bedrooms, bathrooms, lotSize, squareFeetPrice and more
pagenumberResult page, starting at 1

The filters are named after the nested structure Redfin uses internally, flattened with underscores, so they have to be passed exactly as the schema spells them. price_min_ and price_max_ are the price band, beds_min_ and beds_max_ the bedroom count, monthlyPayment_interestRate_ a mortgage assumption. A doubled underscore marks an array.

The ones worth knowing:

ParameterTypeNotes
price_min_ / price_max_numberPrice band
beds_min_ / beds_max_numberBedroom count
bathsstringMinimum baths, one through four, plus oneAndHalf and twoAndHalf
homeTypes__arrayhouse, townhouse, townhome, condo, land, multiFamily, mobile, coOp, apartment, other. Which values apply depends on type
statusOptions__arrayactive, comingSoon, contingentPending
listingType_category___arraybyAgent, byOwnerFsbo, newConstruction, foreclosures
timeOnRedfinstringnewListing through moreThan45Days
soldWithinOptionstringSold window, from lastOneWeek to lastFiveYear. See the warning below
yearBuilt_min_ / yearBuilt_max_stringA year from a fixed ladder, 1940 through 2026
forSaleSquareFeet_min_ / _max_stringFloor area from a fixed ladder, 750 through 10000
lotSize_min_ / lotSize_max_string2000 sqft through 100 acres, as written
cost_hoa_numberMaximum monthly HOA fee
cost_priceReduced_stringinTheLastDay through moreThan120Days
homeFeatures_options___arraywaterfront, hasAView, fireplace, fixerUpper, guestHouse, elevator, greenHome, accessibleHome and more
homeFeatures_poolType_stringprivatePool, communityPool, privateOrCommunityPool, noPrivatePool
homeFeatures_keywordSearch_stringFree text against the listing description
schools_greatSchoolRating_numberMinimum GreatSchools rating, 1 to 10
transportScores_walkScore_numberMinimum walk score, 1 to 100
rentalAmenities__arrayinUnitWasherDryer, parkingAllowed, utilitiesIncluded, furnished, pool and more
pets__arraydogsAllowed, catsAllowed
moveInDatestringMM/DD/YYYY

A market search returns searchInformation with totalResults, a properties array of 40, and pagination with currentPage, nextPage and an otherPages map. A for-sale or sold property carries id, mlsId, url, homeType, status, price, beds, baths, area, yearBuilt, daysOnSite, addressRaw, a parsed address, latitude, longitude, description, atAGlanceFacts and photos.

atAGlanceFacts has two shapes. On a search row it is a list of selling-point strings, and on the property response it is a list of factLabel and factValue pairs, so code that reads one shape breaks on the other.

json
{  "id": 31625298,  "mlsId": "2190201772333567097",  "url": "https://www.redfin.com/TX/Austin/1721-Deerfield-Dr-78741/home/31625298",  "homeType": "House",  "status": "FOR_SALE",  "price": 675000,  "beds": 3,  "baths": 2,  "area": 1667,  "yearBuilt": 1963,  "daysOnSite": 0,  "addressRaw": "1721 Deerfield Dr, Austin, TX 78741",  "address": { "street": "1721 Deerfield Dr", "city": "Austin", "state": "TX", "zipcode": "78741" },  "latitude": 30.231372,  "longitude": -97.734893,  "atAGlanceFacts": ["Hill country views", "2020 roof", "Stainless appliances"]}

A rental is a building rather than a home, so type: forRent returns a different shape. price, beds, baths and area each become a { min, max } object across the available units, and the entry adds propertyName, availableUnits, agentEmail and agentPhone while dropping mlsId, homeType, yearBuilt and daysOnSite.

json
{  "id": "31510362",  "propertyName": "The Sonata",  "status": "FOR_RENT",  "availableUnits": 12,  "price": { "min": 745, "max": 1300 },  "beds": { "min": 1, "max": 2 },  "baths": { "min": 1, "max": 2 },  "area": { "min": 474, "max": 976 },  "addressRaw": "1070 Mearns Meadow Blvd, Austin, TX 78758"}

Get Redfin property details

hasdata_redfin_property_getPropertyDetails

One property page in full, by its Redfin URL.

ParameterTypeRequiredNotes
urlstringyesThe Redfin property URL, as the search tool returns it

Returns a property object. On top of everything the search result carries, it adds propertyDetails, schools, nearby, agentInfo, viewsActivity, openHouseSchedule, updatedAt, a geo object and the full photos collection, which ran to 61 images on the property below.

propertyDetails is the specification block, grouped into parking, interior, exterior, utilities and publicFacts. Each group is an array of labelled sections, and each section is an array of label and value pairs, so it reads as the page presents it rather than as a typed object. Look up a fact by its label instead of by position.

schools.assignedSchools carries the catchment schools with greatSchoolsRating, parentRating, distanceInMiles and a servesHome flag, which is the field that says whether the school actually serves this address.

json
{  "id": 31625298,  "homeType": "Single Family Residential",  "status": "COMING SOON",  "price": 675000,  "beds": 3,  "baths": 2,  "area": 1667,  "yearBuilt": 1963,  "geo": { "latitude": 30.231372, "longitude": -97.734893 },  "updatedAt": "Sep 9, 2026 4:04 AM",  "viewsActivity": { "views": 98, "favorites": 5 },  "agentInfo": {    "agentName": "Lilly Rockwell",    "agentPhoneNumber": "512-413-1975",    "brokerName": "Compass",    "brokerPhoneNumber": ""  },  "propertyDetails": {    "parking": [{ "parkingInformation": [{ "label": "Has Garage", "value": "yes" }] }],    "utilities": [{ "utilitiesInformation": [{ "label": "Has Air Conditioning", "value": "yes" }] }]  },  "schools": { "assignedSchools": [{ "greatSchoolsRating": 6, "parentRating": 5, "servesHome": true }] }}

Prompts and resources

The server exposes 30 resources, one per parameter whose accepted values are a fixed list. Reading one is cheaper than learning the vocabulary from a rejected call, and it costs no credits. Each URI is hasdata://redfin/<parameter>.

ParameterValuesWhat it selects
type3The type of listing.
sort12The sorting option for the search results.
monthlyPayment_mortgageTerm_6The mortgage term used to calculate the monthly payment.
cost_pricePerSqft__min_16The minimum price per square foot.
cost_pricePerSqft__max_16The maximum price per square foot.
cost_acceptedFinancing_2The accepted financing type.
cost_priceReduced_8Filter listings by when the price was reduced.
homeTypes__10An array of home types to filter the listings. Allowed values depend on the listing type.
baths6The minimum number of bathrooms.
forSaleSquareFeet_min_20The minimum square footage for for-sale listings.
forSaleSquareFeet_max_20The maximum square footage for for-sale listings.
lotSize_min_16The minimum lot size.
lotSize_max_16The maximum lot size.
yearBuilt_min_23The minimum year the property was built.
yearBuilt_max_23The maximum year the property was built.
stories_min_8The minimum number of stories.
stories_max_8The maximum number of stories.
listingType_category___4An array of listing categories.
statusOptions__3An array of listing statuses.
timeOnRedfin12How long the listing has been on Redfin.
soldWithinOption8Filter sold listings by how recently they were sold.
openHouseAndTour_openHouse_2Filter listings with an open house.
homeFeatures_options___14An array of home feature flags to filter the listings.
homeFeatures_garageSpotsMin_5The minimum number of garage spots.
homeFeatures_poolType_4The type of pool.
homeFeatures_basement_2The basement type.
rentalAmenities__10An array of rental amenities to filter the listings.
rentalOtherTerms__5An array of additional rental terms.
pets__2An array of pet types allowed.
schools_schoolType___3An array of school types.

The list is served without an API key, so a client can read it before a user has signed up.

Errors and failure paths

Plan for these rather than assuming a happy path.

soldWithinOption narrows a sold search to a window, and it needs type: sold to mean anything. The windows nest as you would expect, so a one-week window returns a small fraction of what a one-year window returns for the same market. type: sold without it covers Redfin's own default of the last three months. Sold and for-sale searches return disjoint sets, so a listing never appears in both.

The search tool returns three different shapes, and which one you get depends on the keyword. A market keyword answers with searchInformation, properties and pagination. A full street address or a named building answers with a single property object and no properties array, no searchInformation and no pagination. A rental search answers with the range-shaped entries shown above. Branch on the presence of properties before you iterate it.

totalResults reports the whole set, and a large market runs into the thousands. A page holds forty listings and pagination.otherPages enumerates the rest, which reaches into the hundreds of pages for a city. Deep pages do come back, so paging works, but walking a market end to end is a call per page. Slice by zipcode, price band or home type when the budget matters more than completeness.

Sold search does not give you sold prices as a separate field. price holds whatever the page shows for that status, so a for-sale price and a sold price arrive in the same field. Read status alongside it every time.

The property response carries the history the search does not. priceHistory and taxHistory arrive as event lists, redfinEstimate holds the estimate with the comparables behind it, and propertyDetails groups the assessor-style facts under publicFacts alongside parking, interior, exterior, financial and utilities. None of that is on a search row, so a question about history is a property call.

nearby.pointsOfInterest is nearby places, not comparable sales. Its categories come from a third-party places dataset and are frequently wrong, so a title loan office can arrive tagged as a bar. Use the names and coordinates, and do not trust the category.

openHouseSchedule can be an array holding an empty object when the page has the section but no dates in it. Test the contents, not the length.

brokerPhoneNumber and other agent fields come back as empty strings rather than null. Treat empty string as absent.

Results that carry data also carry a requestMetadata.id worth quoting in support.

Pricing, free tier and limits

Each Redfin tool costs 10 credits per successful call. Response size does not change the price, so a 40-listing page and a single property cost the same.

The free tier is 1,000 credits every month with no card, which is 100 Redfin calls at the base rate. It renews with the billing cycle, so a low-volume agent runs on the free tier indefinitely.

Paid plans start at $59 a month for 200,000 credits, which is 20,000 calls. The unit price falls with volume, from $1.48 per 1,000 calls on the entry plan to $0.60 on Basic and $0.41 across the Growth tiers. Current figures live on the pricing page.

Your plan also sets concurrency. The free tier allows 5 requests at a time, Startup 5, Basic 15, and the Growth tiers run from 50 to 500. Retry on the 429 with a backoff in anything unattended, because an agent that walks a list of properties will reach the ceiling before you do.

A request that comes back non-200 is not billed. A successful call that finds nothing is still a call.

Tool selection

Start from what the prompt gives you. A market, a zipcode or a school district goes to the search tool. A Redfin URL goes straight to the property tool. Spending a search call to reach a URL you already have is the most common waste.

Then pick by depth. The search result is enough for ranking, price sweeps and market summaries, and it already carries price, beds, baths, area, year built and days on site. The property tool is the only one that returns the specification block, the assigned schools and the listing agent, and it is worth one call per property you care about rather than one per row.

Filter server-side. The schema mirrors Redfin's filter panel precisely, so a query like "three beds, under $500k, built before 1970, in this zipcode" is one call with four parameters, not a page sweep followed by local filtering.

How it compares

There is no public Redfin API, so the real alternative is an MLS or IDX feed.

MLS or IDX feedThis server
EligibilityA licensed brokerage or an agent relationshipAn API key
SetupPer-MLS application, contract and compliance reviewOne header
CoverageOne MLS per feed, hundreds nationallyWhatever Redfin publishes, in one place
Sold dataFull history where the MLS permits itThe recent window Redfin shows
RentalsOften a separate feed or absentThe same tool, with a range shape
RedistributionContractually restrictedYour responsibility to check
CostSetup fees plus monthly, per MLSPaid past the free tier, 10 credits a call

The row that decides it is eligibility. An MLS feed is the authoritative source and it needs a licence you cannot buy as a developer, which rules it out for research, prototypes and anything an agent does on your behalf. When you are a brokerage with a feed already, the feed is more complete and more current, and you should use it.

FAQ

Is there an official Redfin MCP server?

Redfin does not publish one, and it does not publish a public API either. This one is maintained by HasData and reads public Redfin pages.

What is a Redfin MCP server?

An MCP server exposes tools an AI client can call. This one turns Redfin search results and property pages into JSON an agent can reason over, without a browser or a scraping library in your stack.

Do I need an MLS licence or a Redfin account?

No. The only credential is your HasData key.

Why does searching an address return one property instead of a list?

Because Redfin resolves a full street address to that property's page rather than to a result set. The tool passes that through, so the response holds a single property object in the same shape the property tool returns. It is a useful shortcut when you have an address but not a URL.

How do I pull every listing in a city?

By paging, at a call per page. A city reports its full count in totalResults and hands you forty listings at a time, so a large market is hundreds of calls rather than a single sweep. Cutting the market by zipcode, price band or home type gives the same coverage in fewer, narrower queries, which is usually the better trade.

Can I filter sold listings by date?

Not reliably right now. type: sold works and returns Redfin's default three-month window, but soldWithinOption is not being translated into a filter Redfin accepts, and passing it returns active listings labelled SOLD. Leave it off until that is fixed.

Does it cover rentals?

Yes, through type: forRent. Expect the range shape rather than the single-home shape, because a rental result is a building with several available units.

Can I use this together with other HasData APIs?

Yes. One key covers everything, and one endpoint serves them all through the apis parameter. Point a client at ?apis=redfin,zillow to get both tool sets in one connection, or at mcp.hasdata.com/mcp for the full catalogue.

Is HasData affiliated with Redfin?

No. HasData is an independent service and is not affiliated with, endorsed by, or sponsored by Redfin. Redfin is a trademark of its respective owner. The tools work with publicly available data only, and you are responsible for using the results in line with Redfin's terms and the law that applies to you.

Compliance and personal data

Listings carry agent contact details. A for-sale property returns agentInfo with a name and a direct phone number, and a rental returns agentEmail and agentPhone. Those belong to identifiable people, published in a professional capacity, which does not take them out of scope of the GDPR or the CCPA. Marketing to them is regulated separately again, and real estate agents are a common target of exactly that, so check your obligations before you build a contact list. Market analysis does not need those fields at all.

HasData links

Other HasData MCP servers: Google Search, Google Maps, Google Trends, Google Flights, DuckDuckGo, YouTube, TikTok, Instagram, Amazon, Shopify, Yelp, Zillow, Airbnb, Booking.com, Indeed.

Development

The launcher is a thin stdio bridge to the remote server, so there is nothing to build.

bash
npm installHASDATA_API_KEY=your_key_here npm test

The tests in test/ assert the tool contract, the part that can break without a commit here. They check that ?apis=redfin returns the expected tool count, that no name changed, that every tool still declares its required parameters and carries a description, that the filter enums this README documents are still the ones the schema offers, and that the key in use is actually accepted. That last check calls a tool for real and costs 10 credits, which is the price of a canary that can fail for the right reason.

The contract suite also runs weekly on a schedule, because the upstream tool list can change without anyone touching this repository.

Contributing

A tool table, a response sample or a documented behaviour that does not match reality is worth an issue. There is a template for exactly that. Pull requests are welcome for the same, and for anything in the launcher.

License

MIT, see LICENSE.

來源:README.md,提交 96ff74b

工具

0
SourceWeft 尚未讀取此伺服器的工具。

版本歷史

3
  1. v1.0.2最新Sep 24, 2026
  2. v1.0.1Sep 22, 2026
  3. v1.0.0Sep 16, 2026

評分

已滿足適用檢查項的 85%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Hasdata 整合