ChatGPTショッピングデータ:スケールで製品、価格、オファーを収集
Advanced Data Extraction Specialist
TL;DR:
- ChatGPTショッピングデータは構造化された製品出力であり、スクリーンショットではありません。
shoppingが有効なscraper.chatgptアクターへの1回のPOSTで、価格、評価、レビュー数、各マーチャントのオファーリストを含むランク付けされた製品がJSONフィールドとして返されます。 - すべての製品には複数のマーチャントのオファーがあります。 単一のヘッドフォン結果は、同じモデルの価格がSony、Best Buy、Walmart、Target、他のマーチャントで提示されるオファー配列を返し、それぞれに独自の在庫状況と配達のメモがあります。
- ショッピングフラグは
input内に含まれています。 製品を返す呼び出しは、{"actor":"scraper.chatgpt","input":{"prompt":"...","country":"US","shopping":true}}でPOST /api/v2/scraper/executeに対して行われます — トップレベルのショッピングパラメータは拒否されます。 - 製品カルーセルはセッションごとに描画され、毎回の呼び出しではありません。 購買意図のプロンプトは、ChatGPTがそのセッションでショッピングカードを表示するときに
productsを埋めます;同じ呼び出しは、空の配列と共に回答テキストのみを返すことがあります — したがって、コレクションはスケジュールされたプロンプトセットとして実行され、埋められた実行を集約します。 - ショッピング応答のコストは通常の回答よりも高い。 解決された製品カードを返すことは高い料金で請求されるため、重要な製品にスコープを絞ったプロンプトセットにすることが重要です。
- エンベロープは他のLLMアクターと一致します。 すべての呼び出しは
{ status, task_id, task_result }を返すため、ここで記述されたクライアントは、変更なくGrok、Gemini、Perplexityに拡張できます。 - 無料で始められます。 新しいScrapelessアカウントには無料トライアルクレジットが含まれています — app.scrapeless.comでサインアップしてください。
イントロダクション:購入ボタンが回答に組み込まれました
ChatGPTは現在、ショッピング関連の質問に製品カルーセルで応答します。購入者が最高のノイズキャンセリングヘッドフォンを求めると、モデルは画像、価格、星評価、購入先のマーチャントが並んだランク付けされた製品を返します — チャット内で、店舗がクリックされる前に。ブランドにとって、結果ページのランキングはもはや売上を決めるものではありません;カルーセルにあなたの製品が表示されるかどうか、そしてその価格が重要です。
その表面は目で読み取るのが難しく、時間と共に追跡するのもさらに難しいです。価格は変動し、マーチャントは各製品のオファーリストに出入りし、ランキングはクエリや国によって変化します。チャットインターフェースを利用してこれをキャプチャするには、ログイン制限、遅延読み込みのカード、回答がストリームされた後にクライアントサイドで解決される製品フィールドが必要です。
scraper.chatgptアクターは、このカルーセルを構造化された製品データとして返します:プロンプトを入力し、products配列を出力し、各製品には価格、評価、レビュー数、各マーチャントのオファーリストが含まれます。以下は、products配列を埋めるリクエスト、レスポンスのフィールドごとの読み取り、プロンプトセットをスケジュールで収集するPythonクライアント、そして他の回答エンジンで同じ形を読む補助アクターの説明です。同様のシフトにおける可視性の側面 — モデルが回答内で名前を挙げたブランドやソース — については、ブランドAIの可視性が回答とその引用の追跡をカバーしています。
これを使ってできること
- 推奨シェア追跡。 スケジュールで固定された購入プロンプトのセットを実行し、ChatGPTが各製品のランクを記録します — ショッピングの観点から見たシェア・オブ・ボイスです。
- クロスマーチャント価格監視。 製品に対するすべてのオファーを読み取り、同じモデルの価格がSony、Best Buy、Walmart、Target間で移動する様子を観察します。
- カタログの可視性チェック。 特定のカテゴリープロンプトであなたの製品がカルーセルに入ったり外れたりした時期と、そのランクを検出します。
- 競合アソートメント分析。 マーケット全体でモデルがサーフェスする製品をキャプチャし、評価やレビュー数を比較フィールドとして使用します。
- オファーと可用性の監視。 どのマーチャントが製品の在庫を示しているか、各マーチャントが引用する納期を追跡します。
- ショッピングデータセットの構築。 プロンプト–製品–オファー行をクリーンなJSONとして集め、価格モデルや評価パイプラインに使用します。
なぜScrapeless ChatGPTショッピングスクレイパーが必要か
Scrapeless ChatGPTショッピングスクレイパーは、shopping入力が有効になったscraper.chatgptアクターです — ユニバーサルスクレイピングAPIラインの一部です。ショッピングクエリ専用には、次のような利点があります:
- チャットセッションのサーバーサイドレンダリング、つまり通常はクライアントサイドで解決される製品カードが既にポピュレートされた形で戻ってきます。
- あなたが指定した国での住宅用出口、なぜなら製品とその価格がローカライズされているからです。
- 各商品の完全なオファーリスト、見出し価格だけでなく—そのアイテムに対してモデルが表示するすべての商人。
- 他のLLMアクターと共有される1つのエンベロープ(
{ status, task_id, task_result })、そのため同じクライアントがChatGPT、Grok、Gemini、およびPerplexityを読み取る。 - ドライブするブラウザは不要:1つのエンドポイント、
x-api-tokenヘッダー、JSONの返却。
app.scrapeless.comで無料プランのAPIキーを取得してください。
前提条件
- Python 3.10以降(以下のクライアントは、標準ライブラリと
requestsのみを使用) - ScrapelessアカウントとAPIキー — app.scrapeless.comでサインアップ
SCRAPELESS_API_KEYとしてエクスポートされたキー- ターミナルとJSONの基本的な知識
ChatGPTショッピングスクレーパーの動作
ショッピングレスポンスは、input内でshoppingがtrueに設定された標準のscraper.chatgpt呼び出しです。アクターはクエリをレンダリングし、製品カルーセルが解決するのを待ち、通常の回答テキストと引用されたソースとともに、products配列としてカードを返します。
リクエストパラメータ
パラメータはinputオブジェクト内に収め、ボディのトップレベルには置かない。
inputフィールド |
必須 | 説明 |
|---|---|---|
prompt |
はい | ショッピングの質問;カルーセルがトリガーされるように、購入意図を持って表現する |
country |
はい | 2文字の地域コード(例:US);製品と価格のローカライズを行う |
shopping |
いいえ | trueに設定することでproducts配列が populated;ショッピングレスポンスは通常の回答より高い料金が請求される |
web_search |
いいえ | trueに設定すると、モデルがライブソースを引き出すことができ、製品の解決が改善される |
curlを使用したクイックキャプチャ
bash
# 環境にSCRAPELESS_API_KEYが必要です。
curl -sS -X POST https://api.scrapeless.com/api/v2/scraper/execute \
-H "Content-Type: application/json" \
-H "x-api-token: ${SCRAPELESS_API_KEY}" \
-d '{
"actor": "scraper.chatgpt",
"input": {
"prompt": "買うべき最高のソニーのノイズキャンセリングヘッドフォン",
"country": "US",
"shopping": true,
"web_search": true
}
}'
# パイプするには:| jq '.task_result.products' カルーセル用。
レスポンスエンベロープ
製品はtask_result.productsの下にあります。各製品は、見出しのpriceとmerchantsの概要を持ち、商人ごとの1つのエントリを持つoffers配列があります。以下の形は、上記のヘッドフォンのプロンプトからのリアルキャプチャです;値は時点とモデル識別子はgpt-5-miniでした。
json
// スキーマは、ショッピングが有効な状態でscraper.chatgptが返すものと完全に一致します;フィールド値はライブ実行からの例示サンプルです(offersは調整済み)。
{
"status": "success",
"task_id": "…",
"task_result": {
"prompt": "買うべき最高のソニーのノイズキャンセリングヘッドフォン",
"model": "gpt-5-mini",
"result_text": "こちらが最高のソニーのノイズキャンセリングヘッドフォンです …",
"products": [
{
"title": "Sony WH-1000XM6",
"price": "$398.00",
"merchants": "ソニー + その他",
"rating": 4.7,
"num_reviews": 6021,
"url": "https://electronics.sony.com/audio/headphones/headband/p/wh1000xm6-b",
"image_urls": ["https://…"],
"offers": [
{ "merchant_name": "ソニー", "price": "$398.00", "available": true, "details": "オンラインで在庫あり、木曜 - 金曜の間に無料配送" },
{ "merchant_name": "ベストバイ", "price": "$398.00", "available": true, "details": "オンラインおよび近隣で在庫あり、金曜まで無料配送" },
{ "merchant_name": "ウォルマート", "price": "$398.00", "available": true, "details": "" },
{ "merchant_name": "ターゲット", "price": "$398.00", "available": true, "details": "オンラインで在庫あり、6月19日 - 25日の間に無料配送" }
]
}
],
"search_result": [ { "title": "…", "url": "https://…", "snippet": "…", "attribution": "…" } ]
}
}
実行によるいくつかの誠実な観察:
- 人口はセッションごとであり、コールごとではない。 会話のプロンプトは、回答テキストと空の配列を返し、購入意図のプロンプトであっても、特定の呼び出しで
productsが空で返されることがある — カルーセルは確率的にレンダリングされる。スケジュールされたプロンプトセットが、表示される populated ランをキャプチャする;空の配列はエラーではなく nullable として扱う。 title、price、およびratingが同時に解決される。 カルーセルがレンダリングされると、これらのフィールドは populated に到着する;ショッピングを半分トリガーするだけの呼び出しは、空のフィールドを持つ製品スロットを返す可能性があるため、それを nullable として扱い、スキップする。offersは価格監視の表面。 同じ製品が、1つの価格ポイントで商人の間で繰り返される;配列を読み、トップレベルのpriceだけでなく読み取る。- 価格と可用性は時点のもの。 キャプチャタイムスタンプを独自のパイプラインに保存する;レスポンスは実行の瞬間を反映している。
PythonでAPIを統合する:スケールでプロンプトセットを収集する
スケールのパターンは固定されたプロンプトセットであり、各プロンプトを一度呼び出し、製品が行にフラット化されます。クライアントは環境からSCRAPELESS_API_KEYを読み込み、ショッピングデータをリクエストし、オファーごとに1行を生成することで、価格表を直接出力します。
python
"""プロンプトセット(scraper.chatgpt)用のChatGPTショッピングデータを収集します。
export SCRAPELESS_API_KEY=your_api_token_here
python collect_shopping.py
"""
import os
import requests
ENDPOINT = "https://api.scrapeless.com/api/v2/scraper/execute"
PROMPTS = [
"購入するための最高のソニーのノイズキャンセリングヘッドフォン",
"購入するための最高のバジェットメカニカルキーボード",
"300ドル以下の最高のロボット掃除機",
]
def shop(prompt: str, country: str = "US") -> list[dict]:
resp = requests.post(
ENDPOINT,
headers={
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
},
json={
"actor": "scraper.chatgpt",
"input": {"prompt": prompt, "country": country, "shopping": True, "web_search": True},
},
timeout=220,
)
resp.raise_for_status()
return resp.json().get("task_result", {}).get("products", []) or []
def offer_rows(prompt: str, products: list[dict]) -> list[dict]:
rows = []
for rank, product in enumerate(products, start=1):
title = product.get("title")
if not title: # 半解決のカード - nullableとして扱い、スキップ
continue
for offer in product.get("offers") or []:
rows.append({
"prompt": prompt,
"rank": rank,
"product": title,
"rating": product.get("rating"),
"reviews": product.get("num_reviews"),
"merchant": offer.get("merchant_name"),
"price": offer.get("price"),
"available": offer.get("available"),
})
return rows
if __name__ == "__main__":
for prompt in PROMPTS:
rows = offer_rows(prompt, shop(prompt))
print(f"{prompt}: {len(rows)} オファー行")
for row in rows[:5]:
print(f" #{row['rank']} {row['product']} — {row['merchant']} {row['price']}")
各プロンプトは製品-商人-価格行のセットとなり、キャラセル内のランク、製品、その評価とレビュー数、商人オファーごとの1行が出力されます。これらの行を倉庫にスケジュールで書き込み、価格の動き、ランクの変化、商人の流出が時系列として現れます。
無料プランでAPIキーを取得してください: app.scrapeless.com
他の回答エンジンのためのコンパニオンアクター
ショッピングキャラセルはすべての回答エンジンに出現しており、同じエンベロープがすべてを読み取ります。アクターを変更し、クライアントを保持してください:
scraper.grok— Grokの回答、そのライブ検索の挙動scraper.gemini— Geminiのレスポンスscraper.perplexity— Perplexityの回答とソースscraper.overviewおよびscraper.aimode— GoogleのAIオーバービューおよびAIモード表面
各々は { status, task_id, task_result } を返すため、上記の offer_rows 関数は、プラットフォームが製品を公開するにつれて変更されることなく機能します。ランク付けされた最高のLLMスクレイパーの比較は、これらの表面を並べてカバーします。
一般的な問題を避ける方法
- 空の
products? 二つの原因があります。プロンプトが取引的でない可能性があります — 明示的な購入用語(「購入するための最高の…」、「...300ドル以下」)を使用し、shoppingとweb_searchを両方ともtrueに保ちます。または、キャラセルがそのセッションで単に表示されなかったということです:ポピュレーションはセッションごとであり、スケジュールされたプロンプトセットは、実際にカードを戻す実行を集約し、下流のコードは空の配列をnullableとして扱います。 - 半解決されたカード。 製品スロットが空の
title/priceを持って到着することがあります;そのフィールドをnullableとして扱い、空白を保存するのではなく行をスキップします。 - ローカライズされた出力。
countryは製品とその価格の両方を変化させるため、市場ごとに固定し、同じものと比較します —USの実行とJPの実行は異なるデータセットです。 - コスト。 ショッピングレスポンスは通常の回答よりも高い料金で請求されるため、実際に追跡する製品にスコープを絞ったプロンプトセットを維持します。
結論:データフィードとしてのキャラセル
ChatGPTショッピングは、1つの依存関係に縮小されます:単一のHTTP POSTでshoppingが有効になっていると、ランク付けされた製品とそれぞれの販売店のオファーがJSON形式で返されます。国を固定し、購入意図のプロンプトを作成し、見出し価格ではなくoffers配列を読み取ります。また、半解決のカードをnullableとして扱います。固定プロンプトセットをUniversal Scraping APIクレジットでスケジュール通りに実行すると、カルーセルは価格と品揃えの時系列データになります。リクエストの形状とフィールド名は、ライブのLLM Chat Scraperアクターに対して確認されます。
AIショッピングデータパイプラインを構築する準備はできましたか?
私たちのコミュニティに参加して、無料プランを利用し、AI回答データパイプラインを構築している開発者とつながりましょう:Discord · Telegram。
app.scrapeless.comにサインアップして無料トライアルクレジットを取得し、上記のプロンプトセットを製品カテゴリと市場に向けて、あなたの価格設定プログラムが必要とするものに設定してください。
よくある質問(FAQ)
Q: ChatGPTショッピングデータを収集することは合法ですか?
返されるデータは、ChatGPTがどのユーザーにも表示する公開されているショッピング回答です。他のスクレイピングと同様に、合法性は管轄区域と使用法によって異なります — 関連する利用規約を確認し、構築する前に法律顧問に相談してください。公開されている製品とオファーデータのみを収集し、個人データは決して収集しないでください。
Q: products配列が空なのはなぜですか?
カルーセルはトランザクショナルクエリのみにレンダリングされます。会話のプロンプトは、空のproducts配列とともにresult_textを返します;購入意図を持って言い換え、shopping: trueを維持してください。
Q: プロキシまたはブラウザが必要ですか?
いいえ。レンダリング、セッション処理、住宅用エグレスはサーバーサイドで実行されます。x-api-tokenヘッダー付きの1つのPOSTを送信してJSONを読み取ります;countryフィールドがエグレス市場を選択します。
Q: これはChatGPTスクレイパーAPIガイドとどう違いますか?
そのガイドは、可視性トラッキングのための回答テキストとその引用をカバーしています。このガイドはshoppingパス、すなわち価格と品揃えの監視のためのproducts配列とその販売店ごとのoffersをカバーしています。
Q: 製品ごとに何人の販売店が返されますか?
数人です — ヘッドフォンのキャプチャでは、1つのoffers配列内にSony、Best Buy、Walmart、Targetなど、同じモデルが異なる価格で表示され、それぞれの在庫と配達メモが含まれていました。
Q: これを国をまたいで実行できますか?
はい。コールごとに異なるcountryを渡してください;回答、製品、価格はすべてローカライズされるため、それぞれの市場は独自のデータセットになります。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



