Tony Wang4 分で読めますShop App(shop.app)をスクレイピングする方法(2026年版・API & Python)
2026年に Shop.app をスクレイピング — Shopify 加盟店をまたいだ横断的なプロダクト検索・詳細・レビューを、DIY、ノーコード、または構造化 API で。法的な基本事項も解説します。
2026 年に Shop.app をスクレイピングする最速の方法は、Shop.app の内部 GraphQL アプリをリバースエンジニアリングする代わりに、正規化された JSON を返す構造化 API を呼び出すことです。この API は、ストア横断的なプロダクト検索、プロダクト詳細、レビュー、ショップのプロフィールを返します。Shop.app は Shopify のコンシューマー向けマーケットプレイスであり、何千もの Shopify 加盟店のプロダクトを 1 か所に集約しています。本ガイドでは、3 つのアプローチすべてについて、それぞれが何を返し、どこで破綻し、そして法的な基本事項がどうなっているのかを解説します。
なぜ Shop.app をスクレイピングするのか?
多数の加盟店を集約しているため、Shop.app は次のような用途に役立ちます。
- ストア横断的なプロダクト・競合の発見 — 単一ストアだけでなく、Shopify エコシステム全体からプロダクトやショップを見つけられます。
- マーチャンダイジング・価格リサーチ — 複数の加盟店にまたがって価格や品揃えを比較できます。
- レビュー・センチメント分析 — プロダクトやショップのレビューを大規模に読み取れます。
- トレンドの把握 — 勢いを増しているカテゴリーやお得な商品を浮かび上がらせます。
Shop.app のスクレイピングは合法か?
選択肢 1: Python での DIY(そしてなぜ破綻するのか)
Shop.app は内部 GraphQL API に支えられた JavaScript アプリなので、DIY スクレイパーはそれをリバースエンジニアリングします。
import requests
# shop.app renders client-side from an internal GraphQL API behind request tokens
resp = requests.post("https://shop.app/api/graphql", json={"query": "...", "variables": {...}})
デモでは動きますが、その後すぐに破綻します。
- 公式の公開 API がない。 Shop.app は開発者向け API を公開していないため、ドキュメント化されたエンドポイントもキーもありません。コンシューマーアプリのプライベートな呼び出しを再現することになります。
- 単一ストア vs ストア横断。 単一の Shopify ストアは公開の
/products.jsonを提供しています(これはShopify ストアをスクレイピングする方法で扱っているルートです)が、Shop.app の価値はストア横断的な集約にあり、それに相当するオープンなエンドポイントはありません。 - トークンとアンチボット。 内部 GraphQL 呼び出しにはリクエストトークンが必要で、アンチボット防御に引っかかります。そのため、現実的なヘッダー、プロキシ、そして絶え間ないメンテナンスが必要になります。
- 移り変わる内部スキーマ。 プライベートな GraphQL スキーマは予告なく変更され、再現したクエリを破綻させます。
選択肢 2: ノーコードツール
マーケットプレイスの「Shop.app スクレイパー」アクターは CSV/JSON をエクスポートし、単発の取得には適していますが、プロダクト内のパイプラインでは扱いづらく、同じ内部 API 由来の脆さを引き継ぎます。
選択肢 3: 構造化された Shop.app API
繰り返し行うワークフローには、Shop.app スクレイピング API が、メンテナンスすべき GraphQL なしで正規化された JSON を返します。ストアをまたいで検索するには次のようにします。
curl "https://api.crawlora.net/api/v1/shop-app/search?query=sneakers" \
-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/shop-app"
products = requests.get(f"{base}/search", headers=h, params={"query": "sneakers", "limit": 20}).json()["data"]["products"]
pid = products[0]["id"]
detail = requests.get(f"{base}/products/{pid}", headers=h).json()["data"]["product"]
reviews = requests.get(f"{base}/products/{pid}/reviews", headers=h).json()["data"]["reviews"]
検索レスポンスは、そのまま保存できる正規化された JSON です(実際のフィールド)。
{
"code": 200,
"msg": "OK",
"data": {
"query": "sneakers",
"limit": 20,
"products": [
{ "id": "8075903107261", "variant_id": "46242960965821", "title": "BILLY Sport Inclusion", "url": "https://billyfootwear.com/products/...?utm_source=shop_app", "shop_id": "62696", "shop_name": "BILLY Footwear", "price": 100, "currency": "USD", "position": 1, "group_title": "kids' athletic sneakers" }
]
}
}
検索は query に加えて、in_stock、on_sale、deep_search のフィルターを受け付けます。プロダクト以外にも、同じキーでプロダクトのバリエーションや関連アイテム、そしてハンドルによるショップのプロフィール(/shop-app/shops/{handle}、その /products、/reviews、/locations)に加えて、/shop-app/categories と /shop-app/suggestions にアクセスできます。プロダクトごとに 1 行を保存し、スケジュールに沿って再取得してください。
収集できるもの
公開されたカタログデータ: ストア横断的なプロダクト検索(id、variant_id、title、url、shop_id、shop_name、price、currency、group)、プロダクト詳細、バリエーション、関連アイテム、プロダクトレビュー(rating、body、author、date)、プロダクト・レビュー・ロケーションを含むショップのプロフィール、カテゴリー、そして検索候補。公開された事実に基づくフィールドのみです。
制約とよくある課題
- 公式 API がない。 Shop.app には公開の開発者向け API がないため、そのデータを収集するにはスクレイピングが必要です。構造化 API なら 1 つのキーの裏でこれを処理します。
- ストア横断であって、単一ストアの完全なカタログではない。 Shop.app は複数の加盟店をまたいで集約します。1 つのストアの完全なカタログを取得するには、Shopify ストアガイドに沿ってそのストアの
/products.jsonを使ってください。 - レビューは個人データ。 レビュアー名とレビュー本文は GDPR/CCPA のもとで個人データです。適法な根拠のもと、公開された事実に基づくフィールドを収集してください。
- 価格や在庫は変動する。 一度きりのスナップショットを当てにするのではなく、
in_stock/on_saleフィルターを使い、スケジュールに沿って再取得してください。
どのような場面で使われるか
- E コマースのプロダクトインテリジェンス — Shopify エコシステム全体のカタログ、価格、ショップをリサーチします。E コマースのプロダクトインテリジェンスのユースケースを参照してください。
- 競合・マーチャンダイジングリサーチ — 複数の加盟店にまたがって品揃えや価格を比較します。
- レビュー・評判モニタリング — プロダクトやショップのセンチメントを大規模に追跡します。
出典
収集を始める
まずは無料で試す: 任意の公開 URL を無料ウェブスクレイパーで実行するか、アンチボットチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップは不要です。
Playground で検索エンドポイントをテストし、API ドキュメントでスキーマを確認し、料金を確認してください。単一ストアのカタログについてはShopify ストアをスクレイピングする方法、マーケットプレイス側についてはeBay をスクレイピングする方法、ウェブスクレイピング API の選び方、そしてウェブスクレイピングは合法かもあわせて参照してください。
よくある質問
Shop.app のスクレイピングは、Shopify ストアのスクレイピングと同じですか?
いいえ。単一の Shopify ストアは公開の /products.json を提供しており、直接読み取れます(Shopify ストアガイドを参照)。Shop.app は Shopify のコンシューマー向けマーケットプレイスで、多数の加盟店にまたがってプロダクトを集約するため、ストア横断的な発見が可能です。そして、これに相当するストアごとのオープンなエンドポイントはありません。
Shop.app には公式 API がありますか?
公開の開発者向け API はありません。Shop.app はリクエストトークンの裏にある内部 GraphQL API からクライアントサイドでレンダリングされるため、そのデータを収集するにはスクレイピングが必要です。構造化 API なら 1 つのキーの裏でこれを処理し、検索、プロダクト、レビュー、ショップのデータを正規化された JSON で返します。
プロダクトのレビューはどうやって取得しますか?
検索してプロダクトの id を取得し、次に詳細は /shop-app/products/{id}、レビュー(rating、body、author、date)は /shop-app/products/{id}/reviews を呼び出します。ショップは /shop-app/shops/{handle} とその /products および /reviews でハンドルによって指定します。
Shop.app のどのようなデータを収集できますか?
公開されたカタログデータです: ストア横断的なプロダクト検索(id、variant_id、title、url、shop_id、shop_name、price、currency、group)、プロダクト詳細、バリエーション、関連アイテム、プロダクトレビュー、プロダクト・レビュー・ロケーションを含むショップのプロフィール、カテゴリー、そして検索候補。
在庫やセールで絞り込めますか?
はい。/shop-app/search は query に加えて in_stock、on_sale、deep_search のフィルターを受け付けるため、在庫のある商品や割引商品に絞り込み、価格や在庫の変動に合わせてスケジュールに沿って再取得できます。
Shop.app のレビューは個人データですか?
はい。レビュアー名とレビュー本文は GDPR/CCPA のもとで個人データにあたります。適法な根拠のもと、公開された事実に基づくフィールドのみを収集し、レビュアーの身元を再公開しないでください。