Tony Wang6 分で読めますCostcoのスクレイピング方法【2026年版】(API/Python)
2026年版 Costco スクレイピングガイド。商品検索・価格・在庫状況・レビュー・倉庫店舗を構造化 JSON で取得する方法(DIY・ノーコード・API)。
2026年に Costco をスクレイピングする最も手早い方法は、Costco.com のページを自分で解析するのではなく、商品検索、詳細、在庫状況、レビュー、カテゴリ、近隣の倉庫店舗向けに正規化された JSON を返す構造化 API を呼び出すことです。Costco.com は会員登録なしで閲覧できますが、セルフサービス型の公開 API はなく、Akamai のボット管理の裏に置かれており、データ全体に会員向けのシグナルが流れています — 一部の商品と価格は会員限定で、非会員はそれ以外の商品に割増料金を支払います。このガイドでは3つのアプローチすべてを取り上げ、それぞれが何を返し、DIY がどこで破綻し、法律とアクセスに関する基本を解説します。
なぜ Costco をスクレイピングするのか?
Costco の商品・倉庫店舗データは次のような用途を支えます。
- 価格インテリジェンス — 値下げフラグを含め、大容量商品の価格が時間とともにどう動くかを追跡します。
- 品揃え・カテゴリリサーチ — あるカテゴリに何が置かれているか、件数がどう変動するかを把握します。
- レビュー・センチメント分析 — 商品ラインの評価トレンドとレビュー本文を取得します。
- 在庫状況の監視 — 在庫切れになる前に、特定の郵便番号や州における商品の配送予測を確認します。
- 倉庫店舗・商圏カバレッジのマッピング — ある地点から最寄りの実店舗(倉庫店舗)を見つけ、地域ごとの在庫状況や店舗密度をリサーチします。
Costco をスクレイピングするのは合法か?
選択肢1: Python で DIY する(そしてなぜ破綻するか)
Costco の商品ページは安定した公開 JSON エンドポイントではなくサーバーサイドのデータからレンダリングされるため、DIY のスクレイパーはレンダリングされたページを取得して解析する必要があります。
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.costco.com/p/4000103922",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Price, rating, and availability are embedded in page data, not
# consistently exposed as selectable markup
デモは動きますが、その後破綻します。
- Akamai のボット管理がサイトの前面に立っている。 ルーティンで未認証のリクエストはすぐにチャレンジやブロックを受けます — 素朴な
requests呼び出しはほとんど通らず、ブラウザベースのスクレイパーも防御の更新に合わせて継続的なメンテナンスが必要です。 - 在庫状況と配送予測は地点ごとに異なる。 同じ商品でも郵便番号と州によって
availabilityとestimated_delivery_dateが変わるため、1回のページ取得では全体像を把握できません — 地点ごとにリクエストする必要があります。 - 価格には無視できない会員シグナルが含まれる。 一部の商品は
membership_requiredであり、ログインした会員にのみ価格が表示されます。このフラグを考慮せずに非会員ビューをスクレイピングすると、不完全あるいは誤解を招く価格を取得することになります。 - 公式のサードパーティ API がない。 Costco にはセルフサービス型のデベロッパープログラムがなく、公認された代替手段が存在しないからこそ、一部のサードパーティ製スクレイピングサービスが存在しています。
選択肢2: ノーコードツール
Costco 向けのマーケットプレイス製スクレイパーアクターは存在し、カテゴリや短い商品リストの単発取得には向いていますが、DIY と同じ Akamai への脆さを引き継いでおり、パイプラインを構築できる安定したバージョン管理されたスキーマは提供されません。
選択肢3: 構造化された Costco API
繰り返し実行するワークフローには、Crawlora の Costco API が検索、商品詳細、在庫状況、レビュー、カテゴリ、倉庫店舗向けに正規化された JSON を返し、ページ解析もボット対策のメンテナンスも不要です。キーワードで検索するには次のようにします。
curl "https://api.crawlora.net/api/v1/costco/search?query=refrigerator" \
-H "x-api-key: $CRAWLORA_API_KEY"
続いて商品 id を解決し、詳細・在庫状況・レビューを Python で取得します。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/costco"
hits = requests.get(f"{base}/search", headers=h, params={"query": "refrigerator"}).json()["data"]["products"]
product_id = hits[0]["id"]
detail = requests.get(f"{base}/product/{product_id}", headers=h).json()["data"]
availability = requests.get(
f"{base}/product/{product_id}/availability",
headers=h,
params={"postal_code": "98134", "state": "WA"},
).json()["data"]
reviews = requests.get(f"{base}/product/{product_id}/reviews", headers=h).json()["data"]
商品詳細のレスポンスは正規化された JSON です(実際のフィールド — ドキュメントを確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"id": "4000103922",
"title": "LG 26 cu. ft. Smart Mirror InstaView Counter-Depth MAX French Door Refrigerator with Four Types of Ice",
"manufacturer": "LG ELECTRONICS USA INC",
"price": 1399.99,
"list_price": 1399.99,
"buyable": true,
"membership_required": false,
"rating": 4.44,
"rating_count": 477
}
}
在庫状況は郵便番号と州ごとに異なり、配送予測が付きます。
{
"data": {
"product_id": "1942114",
"availability": "INSTOCK",
"available_for_sale": true,
"fulfilled_by": "LG",
"estimated_delivery_date": "2026-08-17T00:00:00"
}
}
近隣の倉庫店舗は緯度・経度のルックアップから取得できます — オンラインの在庫状況と最寄りの実店舗を組み合わせるのに便利です。
curl "https://api.crawlora.net/api/v1/costco/warehouses?latitude=47.6062&longitude=-122.3321" \
-H "x-api-key: $CRAWLORA_API_KEY"
取得のたびに商品 id をキーとして商品ごとに1行を保存し、スケジュールを組んで再実行することで price/list_price の変化や buyable の切り替わりを追跡しましょう。
収集できるもの
公開されている商品・立地データです。検索結果(id、url、title、brand、model、categories、rating)、商品の完全な詳細(title、manufacturer、price、list_price、buyable、membership_required、rating、rating_count)、郵便番号・州ごとの在庫状況(在庫ステータス、fulfilled_by、サプライヤーと配送予測日)、商品レビュー(title、text、rating、author、recommended フラグ、投稿日)、キーワードによるカテゴリファセット、そして座標による近隣倉庫店舗(name、address、distance)です。あくまで公開されている商品ページのデータのみであり、会員のアカウント・注文・支払い情報は含みません。
制約とよくある課題
- フロントエンドの Akamai ボット管理。 costco.com への素朴な、または高頻度の自動リクエストはチャレンジを受けると想定してください。
- 会員資格はチェックアウトだけでなくデータそのものを左右する。
membership_requiredとほとんどの商品にかかる5%の非会員割増料金により、スクレイピングした価格が会員が最終的に支払う価格と異なる場合があります — 表示価格は保証された会員価格ではなく、あくまで参考値として扱ってください。 - 在庫状況は地点に紐づく。
availability/estimated_delivery_dateは郵便番号と州によって変わります — 複数市場をカバーする必要があるなら地点ごとに取得してください。 - 全国一括エクスポートはない。 Costco の全カタログの公式フィードは存在しません。検索とカテゴリのクエリを繰り返してカバレッジを構築してください。
- 公開データのみ。 これは商品ページとそのサブページがすでに公開している内容であり、会員ログインを回避したりアカウントレベルのデータに入り込んだりする手段ではありません。
どこで使われるか
- 価格インテリジェンス — 大容量商品や家電カテゴリの
price/list_priceと値下げフラグを時系列で追跡します。 - 品揃えリサーチ — キーワードごとのカテゴリ件数とカバレッジを測定します。
- 地域別在庫マッピング — 郵便番号ごとの
availabilityを近隣倉庫店舗のルックアップと組み合わせ、地域ごとの在庫状況をモデル化します。
出典
収集を始める
まずは無料でお試しください: 任意の公開 URL を無料ウェブスクレイパーに通すか、アンチボットチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップ不要です。
検索・商品・在庫状況のエンドポイントをプレイグラウンドで試し、API ドキュメントでスキーマを確認し、料金をご覧ください。同じ大型量販店のパターンを別のチェーンで見るならTarget のスクレイピング方法を、一般的なマーケットプレイスで商品検索から詳細までの同じ流れを見るならAmazon 商品データのスクレイピング方法をご覧ください。あわせてウェブスクレイピング API の選び方とウェブスクレイピングは合法かもご覧ください。
よくある質問
Costco には開発者向けの公開 API がありますか?
いいえ。Costco にはセルフサービス型の公開デベロッパー API がありません — サードパーティの開発者が商品や価格データへのプログラムによるアクセスを申請できる公式チャネルは存在しません。
Costco.com をスクレイピングするのに会員登録は必要ですか?
いいえ — Costco.com は会員登録なしで閲覧できますが、一部の商品は membership_required であり、それ以外のほとんどの商品では非会員が会員価格に対して5%の割増料金を支払います。
Costco の商品データをスクレイピングするのは合法ですか?
公開されている商品の事実には著作権が及ばず、hiQ Labs v. LinkedIn の判例では公開ページへのアクセス自体は CFAA 違反には当たらないとされています。ただし Costco の利用規約はサイトの利用方法を制限しており、Costco.com は Akamai のボット管理を運用しています — 公開されている商品ページのデータのみをスクレイピングし、レート制限を尊重し、会員ログインを決して回避しないでください。
なぜ同じ商品なのに在庫状況が異なって表示されるのですか?
Costco の在庫状況と配送予測は郵便番号と州ごとに異なります — 同じ商品 id でも、問い合わせる地点によって availability と estimated_delivery_date の値が変わります。
API でどのような Costco データを収集できますか?
商品検索結果、完全な商品詳細(price、list_price、buyable、membership_required、rating)、地点別の在庫状況、商品レビュー、カテゴリファセット、そして座標による近隣倉庫店舗です。
Costco の会員限定価格をスクレイピングできますか?
いいえ — 会員限定価格は会員ログインの裏側にあります。ページが公開している内容だけをスクレイピングし、自動化によるログインや認証の回避を決して試みないでください。
DIY の Costco スクレイパーは何によって妨げられますか?
Costco.com は素朴な、または高頻度の自動リクエストにチャレンジを行う Akamai のボット管理を運用しており、安定した公開 JSON エンドポイントも存在しません — DIY のスクレイパーは時間とともに変化するレンダリング後のページデータを解析する必要があります。