Tony Wang6 分で読めますAgoda を2026年にスクレイピングする方法(API と Python)
2026年に Agoda をスクレイピングする方法 — ホテル検索、詳細、バケーションホーム、アクティビティ、フライト。DIY、ノーコード、または構造化 API と、法律上の基本を解説します。
2026年に Agoda をスクレイピングする最も手早い方法は、Agoda の内部エンドポイントをリバースエンジニアリングしてブラウザ群を運用する代わりに、正規化された JSON を返す構造化 API を呼び出すことです。返ってくるのは、ホテル検索と詳細、バケーションホーム、アクティビティ、フライトです。Agoda はアジア発の最大級の OTA の一つで、東南アジアをはじめとする地域で Booking.com と真っ向から競合していますが、シンプルな公開読み取り API は用意しておらず、それに応じてページを防御しています。このガイドでは3つのアプローチすべてを取り上げ、それぞれの面が何を返すか、そして法律上の基本を解説します。
なぜ Agoda をスクレイピングするのか?
Agoda のホテル、ホーム、アクティビティ、フライトのデータは、次のような繰り返し発生するユースケースを支えます。
- ホテルの価格と空室状況のモニタリング — 都市、日付、シーズンによって物件のレートがどう動くかを追跡できます。
- OTA のレートパリティチェック — あるホテルの Agoda での価格を Booking.com、Expedia、または物件自身のサイトと比較できます。
- 市場リサーチ — 特に Agoda が強い APAC 市場において、都市ごとのホテルおよびバケーションホームの供給密度を測定できます。
- 旅行メタサーチ・イティネラリー製品 — 1つの目的地についてホテル、アクティビティ、フライトのデータを組み合わせられます。
- AI 旅行パイプライン — その場で HTML をスクレイピングする代わりに、正規化されたホテル・フライトデータをエージェントや旅程プランニングアシスタントに投入できます。
Agoda をスクレイピングするのは合法か?
選択肢1: Python で DIY する(そしてなぜ破綻するか)
Agoda の検索ページとホテルページは、クライアントサイド JavaScript の背後にある内部 XHR/GraphQL 風の呼び出しからレンダリングされるため、DIY のスクレイパーはそれらのリクエストを再現する必要があります。
import requests
# Agoda's search UI calls internal endpoints that aren't documented for public use
resp = requests.get(
"https://www.agoda.com/api/en-us/serp/search/hotels",
params={"cid": -1, "city": 9395},
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
デモは動きますが、その後破綻します。
- オープンなセルフサービス API がない。 実際の Agoda Partner API(Search、Content、CDS)を使うには、アカウントマネージャーを通じて承認済みのアフィリエイトまたは MSE パートナーになる必要があります。リサーチやモニタリング用途向けのサインアップフォームではありません。
- 内部エンドポイントで、安定性の保証がない。 検索ページとプロパティページの背後にあるリクエスト形状は公開された契約ではなく、Agoda はパラメータ、ヘッダー、レスポンスフィールドを予告なく変更できます。
- ストアフロントのアンチボット対策。 Agoda は予約フロー向けに調整されたボット検出とレート制限をページの前面に置いており、リサーチ目的の取得であっても、実際のボリュームでは単純な HTTP クライアントはブロックやチャレンジページに遭遇するでしょう。
- 4つの別々の面、4つの異なる形。 ホテル、バケーションホーム、アクティビティ、フライトは、それぞれ異なる識別子(property id、activity id、IATA ルート)を持つ別々の製品です。4つすべてをカバーするには、1つではなく4つのインテグレーションが必要になります。
選択肢2: ノーコード/既製ツール
Agoda のホテル検索を対象とするマーケットプレイスのスクレイパーアクターはいくつか存在し、単発の取得には向いていますが、DIY と同じアンチボットと内部エンドポイントの脆さを引き継ぎ、Agoda がマークアップを変更すると静かに壊れ、同じツールでホーム、アクティビティ、フライトまではカバーしません。
選択肢3: 構造化された Agoda API
4つの面すべてにわたる繰り返し実行可能なワークフローには、Agoda スクレイピング API が正規化された JSON を返し、ブラウザ群もエンドポイントのリバースエンジニアリングも不要です。都市でホテルを検索するには次のようにします。
curl "https://api.crawlora.net/api/v1/agoda/hotels/search?city_id=9395&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"
ホテル詳細、バケーションホーム検索、アクティビティ検索、フライト検索を Python で取得します。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1"
hotels = requests.get(f"{base}/agoda/hotels/search", headers=h, params={
"city_id": 9395, "limit": 10,
}).json()["data"]["properties"]
property_id = hotels[0]["property_id"]
detail = requests.get(f"{base}/agoda/hotels/{property_id}", headers=h).json()["data"]
homes = requests.get(f"{base}/agoda/homes/search", headers=h, params={
"city_id": 9395, "limit": 10,
}).json()["data"]["homes"]
activities = requests.get(f"{base}/agoda/activities/search", headers=h, params={
"keyword": "chim chum", "city_id": 9395,
}).json()["data"]["activities"]
flights = requests.get(f"{base}/agoda/flights/search", headers=h, params={
"origin": "SYD", "destination": "BKK", "departure_date": "2026-10-20", "adults": 1,
}).json()["data"]["itineraries"]
ホテル詳細の結果は正規化された JSON です(実際のフィールド。ドキュメントを確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"property_id": 10637,
"display_name": "Baiyoke Sky Hotel",
"accommodation_type": 34,
"rating": 4,
"address": {
"city": { "id": 9395, "name": "Bangkok" },
"country": { "id": 106, "name": "Thailand" },
"address1": "222 Ratchaprarop Road, Ratchathewi",
"postal_code": "10400"
},
"main_image_url": "https://pix8.agoda.net/hotelImages/10637/-1/878a9b58ccd19eee41b98d20e388c080.jpg?ca=9&ce=1",
"number_of_rooms": "659",
"chain_id": 3603,
"description_short": "Experience Luxury and Convenience at Baiyoke Sky Hotel.",
"policy": {
"adult": ["Guests 12 years and older are considered adults."],
"additional": ["When booking more than 5 rooms, different policies and additional supplements may apply."]
},
"source_url": "https://www.agoda.com/search?cid=-1&selectedproperty=10637&city=9395"
}
}
フライト検索はセグメントごとの詳細(航空会社、機材、キャビンクラス、乗り継ぎ)を含むイティネラリーを返し、flights/itinerary-amenities は特定のフライト番号に対するキャビンアメニティの情報(Wi-Fi、機内食、座席配置)を追加します。物件(またはルート)ごと、取得日ごとに1行を保存し、スケジュールを組んで再実行し、価格の動きを追跡しましょう。
収集できるもの
公開されているホテルデータです。検索結果(property id、名前、評価、都市、ソース URL)とホテル詳細(住所、部屋数、チェーン、ポリシー、説明、メイン画像)。homes-search エンドポイント経由のバケーションホームリスティング。キーワードまたは都市によるアクティビティと観光スポット、アクティビティごとの詳細(カテゴリー、所要時間、説明)を含みます。出発地/目的地/日付によるフライトイティネラリー(価格、航空会社、経由地、セグメント)と、ルート構築のためのロケーションオートコンプリート。あくまで公開されているリスティングデータのみです。
制約
- オープンなセルフサービス型の公式 API がない。 Agoda の Partner API はアカウントマネージャーを通じたアフィリエイト/MSE 限定であり、リサーチ用のサインアップフォームではありません。
- 内部エンドポイントは変化する。 Agoda のストアフォントの呼び出しは文書化された公開契約ではなく、予告なく変更される可能性があります。
- レートと空室状況は常に変動する。 1回の取得は検索した都市、日付、人数のみをカバーします。関心のある日付範囲ごとに再取得しましょう。
- 4つの別々の面。 ホテル、ホーム、アクティビティ、フライトは異なる識別子とレスポンス形状を使用します。1つではなく4つのインテグレーションとして計画しましょう。
- 公開データのみ。 これは公開されているリスティング情報を収集するものであり、実際の予約を完了させたり操作したりする手段では決してありません。
どこで使われるか
- ホテルとバケーションホームの価格モニタリング — 物件のレートと空室状況を時間の経過とともに追跡できます。
- OTA のレートパリティと競合リサーチ — 同じ物件について、Agoda の価格を他のチャネルと比較できます。
- 旅程プランニングとメタサーチ製品 — 1つの目的地についてホテル、アクティビティ、フライトのデータを組み合わせられます。
出典
収集を始める
まずは無料でお試しください: 任意の公開 URL を無料ウェブスクレイパーに通すか、アンチボットチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップ不要です。
検索とホテル詳細のエンドポイントをプレイグラウンドで試し、API ドキュメントでスキーマを確認し、料金をご覧ください。Agoda は APAC 寄りの OTA データをカバーしますが、Booking.com のスクレイピング方法はトラフィック規模で最大のグローバル OTA をカバーし、Airbnb のスクレイピング方法は同じ旅行の民泊側をカバーします。あわせてウェブスクレイピングは合法かもご覧ください。
よくある質問
Agoda には公開 API がありますか?
Agoda は Developer Portal を通じて Partner/Affiliate API(Search、Content、CDS、Post-Booking)を提供していますが、利用にはアカウントマネージャーを通じて承認済みのアフィリエイトまたはメタサーチパートナーになる必要があり、オープンな読み取りアクセス向けのシンプルなセルフサービスサインアップはありません。
Agoda をスクレイピングするのは合法ですか?
ホテルの名前や星評価といった公開されている事実には著作権が及ばず、hiQ v. LinkedIn の判例では公開データへのアクセスは一般的に CFAA 違反にはあたらないとされています。しかし Agoda の利用規約は、AI 搭載アシスタントによるものを含めスクレイピング、データマイニング、自動アクセスを明示的に禁止しているため、あらゆるスクレイピングを法的なお墨付きではなく利用規約上のリスクとして扱ってください。ウェブスクレイピングが合法かどうかについての当社のガイドも参照してください。
Agoda の property id はどうやって取得しますか?
hotels/search エンドポイントで city_id(または都市名)を指定してホテルを検索します。各検索結果には property_id が含まれており、これを hotels/{property_id} エンドポイントに渡すことで詳細情報を取得できます。
Agoda のバケーションホームをホテルとは別にスクレイピングできますか?
はい。homes/search は hotels/search とは別のエンドポイントで、同じ city_id パターンでバケーションレンタル形式のリスティング(display_name、accommodation_type、rating、address)を返します。
この API は Agoda のフライトもカバーしていますか?
はい。flights/search は出発地、目的地、出発日によるイティネラリー(価格、航空会社、経由地、セグメントごとの詳細)を返し、flights/search-locations はキーワードから都市/空港コードを解決し、flights/itinerary-amenities は特定のフライト番号に対するキャビンアメニティの情報を返します。
Agoda から合法的に収集できるデータは何ですか?
公開されているリスティングの事実です。ホテルおよびバケーションホームの名前、評価、住所、部屋数、説明、ソース URL、アクティビティの名前とカテゴリー、フライトのイティネラリーと運賃などです。ログインの背後にあるものは避け、データを実際の予約の完了や操作に使用しないでください。
なぜ DIY の Agoda スクレイパーは破綻するのですか?
Agoda の検索ページとプロパティページは、クライアントサイド JavaScript の背後にある内部の非公開エンドポイントを呼び出しており、予約フロー向けに調整されたボット検出が働いています。リクエストの形状は予告なく変更される可能性があり、単純な HTTP クライアントは実際のスクレイピングボリュームでブロックまたはチャレンジされるのが一般的です。