Tony Wang6 分で読めますRedfin のスクレイピング方法 2026年版(API・Python)
2026年に Redfin のリスティング・査定額・市場トレンドをスクレイピングする方法 — DIY Python、ノーコードツール、構造化 API のいずれかで。ボット対策についての率直な評価つき。
Redfin は不動産サイトの中でも直接スクレイピングするのが特に難しい部類に入ります。物件単位で使える公開 API を提供しておらず、利用規約は自動クロールを明示的に禁止しています。構造化データが必要な場合の最速の道は、検索結果・プロパティ詳細・Redfin の住宅価格推定(home-value estimate)を正規化された JSON として返すスクレイピング API です。このガイドでは DIY Python(そしてこのサイトで特に壊れやすい理由)、ノーコードツール、構造化 Redfin API を取り上げ、あわせて信頼性についての率直な評価もお伝えします。これがこのプラットフォームで実際に重要な論点だからです。
なぜ Redfin データをスクレイピングするのか
- 住宅価格・AVM(自動査定モデル)のリサーチ — Redfin Estimate と、プロパティ単位・地域単位の価格時系列データを、複数ある自動査定シグナルの1つとして活用できます。
- 市場トレンド分析 — 地域ごとの中央値売却価格、市場滞留日数、売却価格対リスト価格比率を時系列で追跡します。
- 投資家・コンピング(比較査定)向けツール — あるリスティングに対する比較対象物件を取得し、案件のスクリーニングや査定ワークフローを支援します。
- AI・データパイプライン — リスティングページの数値を手作業でコピーする代わりに、正規化されたリスティングおよび推定値のフィールドをモデルやダッシュボードに投入します。
Redfin をスクレイピングするのは合法ですか?
選択肢 1: Python での DIY(そしてなぜ壊れるのか)
Redfin は大量の JavaScript でレンダリングされ、スクレイピング禁止の規約に加えて実際のボット対策も重ねているため、単純な requests.get() はほぼ即座にブロックページか間引かれたレスポンスに行き当たります。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
page = p.chromium.launch().new_page()
page.goto("https://www.redfin.com/city/30772/CA/San-Francisco")
# then find and parse the embedded state JSON, page through map regions,
# and hope the response isn't a challenge page...
これはデモとしては動きますが、その後壊れます。しかも Redfin ならではの厄介な壊れ方をします。
- 必要なページの手前にボット検出が立ちはだかる。 検索結果ページとプロパティページはチャレンジ/フィンガープリンティングのチェックの背後にあり、素朴なスクレイパーはデータではなくブロックページを受け取ります。
- 代わりに使える安定した公開 API がない。 申請すれば使えるパートナー API を持つサイトと違い、Redfin の公式なデータ提供窓口は集計版の Data Center のみです。呼び出し可能な
GET /listings/{id}のようなものは存在しません。 - 埋め込み JSON の形が変わる。 プロパティページと検索ページはクライアント側の状態を表す JSON の塊を持っていますが、その形は予告なく変わるため、パーサーが静かに壊れます。
- ブロックを突破できても信頼性は保証されない。 このガイドの調査中、Redfin のスクレイピングエンドポイントへの実際のテストコールが単純にタイムアウトしました。「防御を突破できた」ことと「毎回確実に動く」ことは、これほど厳重に保護されたサイトでは別の話だと肝に銘じてください。
選択肢 2: ノーコード・既製ツール
ビジュアルなポイント&クリック型のエクストラクターは、一度きりの取得であれば Redfin のリスティングページを数ページ抽出して CSV/JSON を書き出すことができます。しかし DIY と同じボット対策に阻まれ、これほど保護されたサイトでは壊れやすく、スケジュールに沿って予測可能なフィールドを必要とするパイプラインには向いていません。
選択肢 3: 構造化された Redfin API
繰り返し行うワークフローには、Redfin スクレイピング API がブラウザを一切実行せずに正規化された JSON を返します。ただし前述のとおり、すべての呼び出しが成功する前提ではなくリトライ前提で設計してください。ロケーションでリスティングを検索します。
curl -s "https://api.crawlora.net/api/v1/redfin/search?location=San%20Francisco,%20CA" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"location": "San Francisco, CA",
"page": 1,
"region_id": 17151,
"region_type": 6,
"results": [
{
"property_id": "1715020",
"address": "123 Main St #4",
"city": "San Francisco",
"state": "CA",
"zip": "94110",
"url": "https://www.redfin.com/CA/San-Francisco/123-Main-St-94110/home/1715020",
"property_type": "Condo/Co-op",
"status": "Active",
"price": 1250000,
"beds": 2,
"baths": 2,
"sqft": 1100,
"lot_size": 2500,
"year_built": 1998,
"days_on_market": 7,
"price_per_sqft": 1136,
"hoa_monthly": 450,
"mls_number": "424001234",
"latitude": 37.7596,
"longitude": -122.4269
}
]
}
}
Python で ID を指定して単一のプロパティを取得し、続けて住宅価格推定値と比較対象物件を取得します。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/redfin"
prop = requests.get(f"{base}/property", headers=h, params={"property_id": "1715020"}).json()["data"]
print(prop.get("address"), prop.get("city"), prop.get("state"))
estimate = requests.get(f"{base}/estimate", headers=h, params={"property_id": "1715020"}).json()["data"]
print(estimate.get("estimate_text"), "vs listing price", estimate.get("listing_price"))
similar = requests.get(f"{base}/similar", headers=h, params={"property_id": "1715020"}).json()["data"]
print(len(similar.get("results", [])), "comparable homes")
estimate エンドポイントは、Redfin Estimate に加えてプロパティ・市区町村・郡・ZIP 単位の価格時系列を返します(フィールドは例示的なものです。詳しくはドキュメントを確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"property_id": "1715020",
"estimate": 1850000,
"estimate_text": "$1.85M",
"listing_price": 2500000,
"address": "1242 Sacramento St #1",
"beds": 2,
"baths": 2,
"sqft": 1609,
"year_built": 1900,
"property_time_series": [1800000, 1820000, 1850000],
"city_time_series": [1500000, 1510000, 1520000],
"county_time_series": [1400000, 1410000, 1420000],
"postal_code_time_series": [1523302, 1529750, 1537670]
}
}
市場レベルのコンテキストが必要な場合、region-trends は(直前の検索呼び出しで解決した)リージョン ID に対する中央値価格と在庫数を返します。
curl -s "https://api.crawlora.net/api/v1/redfin/region-trends?region_id=17151®ion_type=6" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"region_id": 17151,
"region_type": 6,
"median_list_price": "$1.29M",
"median_sale_price": "$1.76M",
"median_sale_per_list": "115.5%",
"avg_days_on_market": "31",
"num_homes_sold": "568",
"num_homes_on_market": "978",
"yoy_sale_price": "+14.0%"
}
}
収集できるもの
公開されているリスティングおよび市場ページが公開している範囲で: 検索からは住所、市区町村/州/郵便番号、価格、寝室数、浴室数、床面積、敷地面積、築年、市場滞留日数、平方フィート単価、HOA(管理費)、MLS 番号、座標。プロパティ詳細からは説明文とファクト。estimate からは Redfin Estimate と価格時系列。similar からは比較対象物件。region trends からは中央値価格、在庫数、市場滞留日数、売却価格対リスト価格比率が取得できます。
制限事項
- 物件単位の公式 API がない。 唯一公認されている Redfin のデータ提供窓口は集計版の Data Center(メトロ/ZIP 単位の CSV)であり、物件レベルの情報はすべて定義上「非公式」になります。
- 利用規約が自動クロールを明示的に禁止している。 これは単なる技術的な防御策ではありません。セクション 2.3.5 は事前の書面による許可なしのスクレイピングを明確に禁じています。
- 信頼性はばらつき、大きく変動することもある。 Redfin の防御策により、DIY であれ構造化 API 経由であれ、どの呼び出しもタイムアウトやブロックの対象になり得ます。100% 成功する前提のパイプラインを組まず、リトライやバックオフを組み込んでください。
- リスティングのメディアには著作権がある。 写真やエージェントが書いた説明文には、背景にある事実データとは別に著作権が発生します。再掲載は避けてください。
- Redfin Estimate は真実ではなくモデルの出力である。 どの自動査定モデルとも同様に、複数あるシグナルの1つとして扱ってください。
- ステータスと価格は急速に変わる。 Active/Pending/Sold は素早く切り替わるため、スナップショットはすぐに古くなります。最新の状態が必要ならスケジュールに沿って再収集してください。
どこで使われるか
- 住宅価格・コンピング(比較査定)リサーチ — estimate エンドポイントと similar-homes エンドポイントを組み合わせて査定額の妥当性を確認します。
- 市場トレンドの追跡 — region trends をスケジュールに沿って取得し、あるメトロの中央値価格・在庫・市場滞留日数の推移を観察します。
- 投資家・査定向けツール — 正規化されたリスティングおよび推定値のフィールドを、案件スクリーニングや査定ワークフローに投入します。
Sources
収集を始める
まず無料で試す: 無料ウェブスクレイパーで任意の公開 URL を実行するか、アンチボットチェッカーでサイトがボットをブロックしているかを確認できます。サインアップは不要です。
Playground で検索エンドポイントをテストし、API ドキュメントでスキーマを確認し、料金を確認してください。Redfin の最大の競合を単独で深掘りするならZillow のスクレイピング方法を、Zillow・Redfin・Realtor.com・Trulia をまとめてカバーするなら不動産リスティングのスクレイピング方法を、すべてのサイトに共通する法的基礎についてはウェブスクレイピングは合法かを参照してください。
よくある質問
Redfin にはリスティング向けの公開 API がありますか?
ありません。Redfin が公式に提供している開発者向けデータ窓口は Data Center のみで、メトロまたは ZIP 単位の集計された市場トレンド CSV(中央値売却価格、在庫、市場滞留日数)をダウンロードできます。特定のリスティングの価格・寝室数・Redfin Estimate といった物件単位のデータを取得できるセルフサーブ API は存在しません。
Redfin をスクレイピングするのは合法ですか?
価格・住所・寝室数/浴室数・ステータスといった公開リスティングの事実を収集することは一般的に比較的低リスクで、hiQ v. LinkedIn は公開データへのアクセスが CFAA 違反にはあたらないと判断しています。しかし Redfin の利用規約は多くのサイトより踏み込んでおり、セクション 2.3.5 は事前の書面による許可なしの自動クロールまたはクエリを明示的に禁止しています。Redfin の規約は自身でも確認してください。これは法的助言ではありません。
構造化 API を使ってもRedfin のスクレイピングはどれくらい信頼できますか?
ばらつきがあり、そうであることを前提に計画すべきです。Redfin は不動産サイトの中でも特に積極的にボット対策を行っている部類に入り、このガイドの調査中に Redfin のスクレイピングエンドポイントへ実際にテストコールを送ったところ単純にタイムアウトしました。DIY であれ API 経由であれ、Redfin に対するパイプラインは100%成功する前提ではなく、リトライとバックオフを組み込んで構築してください。
Redfin Estimate とは何で、API で取得できますか?
Redfin Estimate は Redfin の自動住宅価格査定モデルで、目的としては Zillow の Zestimate に近いものです。Redfin の公式 API では公開されていませんが、サードパーティの構造化 API であれば、プロパティ・市区町村・郡・ZIP 単位の価格時系列とあわせて取得できます。真実の値ではなくモデルの出力として扱ってください。
Redfin のどのデータを合法的に収集・再利用できますか?
価格・住所・寝室数/浴室数・床面積・市場滞留日数といった公開されている事実データは、著作権が発生し得るリスティング写真やエージェントによる説明文よりも著作権上のリスクが低いです。事実そのものに著作権はありませんが、Redfin の利用規約はデータの内容にかかわらず自動収集を別途制限しています。
スクレイピングの難易度において Redfin は Zillow とどう比較されますか?
どちらも難しいです。Zillow は PerimeterX のような挙動ベースの防御策により、不動産系ターゲットの中でも最も難しい部類と評価されることが多いサイトです。Redfin はそれ自体のボット対策に加えて、利用規約で自動クロールを明示的に契約上禁止しており、このガイドの調査時のテストでは Redfin のエンドポイントへの実際の呼び出しが単純にタイムアウトすることが示されました。Redfin の方が明確に簡単だとは考えないでください。
構造化 Redfin API は通常どのようなフィールドを返しますか?
検索は、リスティングごとの住所・価格・寝室数・浴室数・床面積・敷地面積・築年・市場滞留日数・HOA(管理費)・MLS 番号を返します。プロパティ詳細は説明文とファクトを追加します。estimate は Redfin Estimate と価格時系列を返します。similar は比較対象物件を返します。region trends はある市場の中央値売却価格/リスト価格、在庫数、売却価格対リスト価格比率を返します。