Tony Wang6 分で読めますEtsy を2026年にスクレイピングする方法(API & Python)
2026年にEtsyのリスティング・ショップ・レビューをスクレイピング。DIY、ノーコード、構造化APIの3手法と、公式API v3の実際のゲートを解説。
2026年に Etsy をスクレイピングする最も手早い方法は、Etsy の商品ページを自分でパースしたりアプリ審査の順番待ちをしたりする代わりに、リスティング・ショップ・レビューについて正規化された JSON を返す構造化 API を呼び出すことです。Etsy はこのシリーズの中でも珍しい存在です。公式の Open API v3 を公開してはいるものの、実際に動くキーを得るには承認プロセスが必要で、利用規約も別途スクレイピングそのものを禁止しています。このガイドでは3つのアプローチすべてを取り上げ、それぞれが何を返すか、そして公式 API のゲートが実際どこにあるかを解説します。
なぜ Etsy をスクレイピングするのか?
Etsy のリスティング・ショップ・レビューのデータは、次のような用途を支えます。
- 価格・トレンドリサーチ — ハンドメイド/ヴィンテージのカテゴリが、キーワードやニッチごとに需要に対してどう価格付けされているかを追跡できます。
- セラー・ショップのモニタリング — あるショップのカタログ、販売数、評価が時間とともにどう動くかを観察できます。
- 競合商品リサーチ — ショップや商品ラインを立ち上げる前に、あるニッチで何が売れているかを把握できます。
- レビュー・評判の分析 — リスティングやショップ全体にわたって、評価と件数を集計できます。
- マーケットプレイスの統合 — Etsy の在庫データを他のマーケットプレイスと組み合わせ、ハンドメイド/ヴィンテージ市場をプラットフォーム横断で俯瞰できます。
Etsy をスクレイピングするのは合法か?
選択肢1: Python で DIY する(そしてなぜ破綻するか)
Etsy のリスティングページやショップページは、安定した通常のマークアップではなく埋め込まれた JSON からレンダリングされるため、DIY のスクレイパーはページからその JSON の塊を取り出す必要があります。
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.etsy.com/listing/1044347578/",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Price, quantity, and shop data live inside a server-rendered
# state blob, not selectable markup — you parse JSON out of a <script> tag
デモは動きますが、その後破綻します。
- 利用規約が明確。 Etsy の利用規約はクロール・スクレイピング・スパイダーを名指しで禁止しており、
robots.txtは登録されていないユーザーエージェントに対して検索結果 URL パターン(/search?*q=)のクロールをブロックしています — これは曖昧なケースではありません。 - 正式な手段にもゲートがある。 Etsy の Open API v3 は存在しますが、Personal App の承認(通常24〜48時間)を得るまでは何も動きませんし、自分のショップ以外を対象にするもの — リサーチツールやアグリゲーターなど — は、それに加えて別途レビューされる Commercial Access のリクエストが必要です。
- 承認後も1日あたりの厳格な上限がある。 公式 API はデフォルトで標準アプリを1日10,000リクエスト、秒間10クエリに制限しており、それ以上を必要とするなら、ユースケースの説明と QPD/QPS の見積もりを添えて Etsy の開発者チームにメールする必要があります。
- バイヤーデータのプライバシー強化が進んでいる。 Etsy は、サードパーティアプリが公式 API 経由で取得できるバイヤー紐付きフィールド(例: バイヤーのフルメールアドレス)を、既存のアプリ単位のレビューに加えて制限してきています — この傾向は、その種のデータへの場当たり的な DIY アクセスをむしろ危うくしています。
- どちらにせよ安定したマークアップがない。 リスティングページは script タグ内にサーバーレンダリングされた JSON として配信され、リデザインのたびに形が変わり、パーサーは警告なく壊れます。
選択肢2: ノーコードツール
マーケットプレイスのスクレイパーアクターは Etsy の単発取得向けに存在し、アプリ承認の待ち時間は避けられますが、DIY と同じ利用規約上のリスクを引き継ぎ、継続的なモニタリングの問題も解決しません — 安定したエンドポイントを呼ぶ代わりに、単発のツールを繰り返し実行することになります。
選択肢3: 構造化された Etsy API
繰り返し実行するワークフローには、Etsy スクレイピング APIがリスティング・ショップ・レビューについて正規化された JSON を返し、アプリ審査の待ち時間もページのパースも不要です。キーワードで検索するには次のようにします。
curl "https://api.crawlora.net/api/v1/etsy/search?q=handmade+mug" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "handmade mug",
"offset": 0,
"count": 112886,
"results": [
{
"listing_id": "4474501681",
"title": "Custom Mermaid Mug, Crystal Handle, Mothers Day Gift",
"shop_id": "7894049",
"shop_name": "MerakiDesigned",
"price": "5371901",
"price_int": 5371901,
"currency": "VND",
"url": "https://www.etsy.com/listing/4474501681/handmade-ceramic-mermaid-mug-gold",
"quantity": 7,
"is_sold_out": false
}
]
}
}
currency はリクエストのレンダーロケールを反映している点に注意してください(上の例では USD ではなく VND です)。固定の通貨を前提にせず、結果ごとに読み取ってください。リスティング詳細、ショッププロフィール、レビューを Python で取得します。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/etsy"
hits = requests.get(f"{base}/search", headers=h, params={"q": "handmade mug"}).json()["data"]["results"]
listing_id = hits[0]["listing_id"]
shop_id = hits[0]["shop_id"]
listing = requests.get(f"{base}/listing/{listing_id}", headers=h).json()["data"]
reviews = requests.get(f"{base}/listing/{listing_id}/reviews", headers=h, params={"offset": 0}).json()["data"]
shop = requests.get(f"{base}/shop/{shop_id}", headers=h).json()["data"]
shop_listings = requests.get(f"{base}/shop/{shop_id}/listings", headers=h, params={"limit": 25}).json()["data"]
リスティング詳細は正規化された JSON です(実際のフィールド — ドキュメントを確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"listing_id": "1044347578",
"title": "Handmade Ceramic Mug",
"price": "$29.99",
"price_int": 2999,
"currency": "USD",
"shop_id": "87654321",
"shop_name": "gaguatelier",
"is_sold_out": false,
"category_name": "Mugs",
"materials": ["Ceramic", "Glaze"],
"quantity": 4,
"favorites": 812,
"views": 15230,
"when_made": "made_to_order",
"state": "active"
}
}
ショッププロフィールは、セラーのモニタリング向けに評価と販売数のフィールドを返します。
{
"data": {
"shop_id": "87654321",
"shop_name": "gaguatelier",
"seller_name": "Victoria",
"average_rating": 4.9,
"reviews_count": 363,
"sold_count": 1900,
"is_star_seller": true
}
}
レビュー(/etsy/listing/{id}/reviews と /etsy/shop/{id}/reviews の両方)は、avg_rating、total_rating_count、そしてページネーション付きの reviews 配列を返し、各エントリには buyer_name、rating、text が含まれます — Etsy が各レビューの横に公開表示しているものと同じ名前とテキストです。リスティング(またはショップ)ごとに1行を保存し、スケジュールを組んで再実行し、価格・数量・評価の変動を追跡してください。
収集できるもの
公開されているリスティングとショップのデータです。検索結果(listing_id、タイトル、ショップ、価格、通貨、数量、売り切れステータス)、フルのリスティング詳細(カテゴリ、説明、素材、タグ、お気に入り数、閲覧数、when_made、画像)、ショッププロフィール(セラー名、平均評価、レビュー数、販売数、スターセラーステータス、ヘッドライン)、/shop/{id}/listings によるショップカタログ、/shop/search によるショップ探索(名前、所在地、有効なリスティング数)、そしてリスティングとショップの両方についてのページネーション付きレビュー(評価、テキスト、バイヤーのファーストネーム)です。あくまで公開されているマーケットプレイスデータのみです。
制約とよくある課題
- 通貨は固定ではない。
price/price_int/currencyはリクエストのレンダーロケールを反映するため、USD だと決め打ちせず、結果ごとにcurrencyを読み取ってください。 - レビュアー名は個人データ。
buyer_nameは実在する(一部の)身元情報です。表示と整合させた集計に使い、連絡可能なバイヤーリストの構築には使わないでください。保存する場合は GDPR/CCPA 型の削除要求を尊重してください。 - 公式のサードパーティ向け一括エクスポートはない。 Etsy 自身の Open API v3 は、大規模な本番統合を構築する人にとっての正式な手段です。この API はそれに代わるものというより、リサーチ規模の読み取り専用の取得に最適です。
- 人気ショップの評価と数量は変動が速い。 売れ筋商品は数日で再入荷したり売り切れたりするため、スナップショットを信頼するのではなく、スケジュールを組んで再取得してください。
- 公開データのみ。 これはリスティングページとショップページのデータであり、セラーの非公開の連絡先情報に到達したり、Etsy 自身のバイヤーメッセージング機能を回避したりする手段ではありません。
どこで使われるか
- 価格リサーチ — あるニッチやキーワードが、有効なリスティング全体でどう価格付けされているかを追跡できます。
- ショップモニタリング — 競合やサプライヤーのショップの評価、販売数、カタログサイズが時間とともにどう動くかを観察できます。
- レビュー分析 — リスティングやショップごとに評価トレンドを集計し、評判を追跡できます。
出典
収集を始める
まずは無料でお試しください: 任意の公開 URL を無料ウェブスクレイパーに通すか、アンチボットチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップ不要です。
検索・リスティング・ショップの各エンドポイントをプレイグラウンドで試し、API ドキュメントでスキーマを確認し、料金をご覧ください。Etsy は、Shopify ストアのスクレイピング方法で扱った Shopify 構築のストアフロントや、Shop アプリのスクレイピング方法で扱ったマーチャント横断の発見レイヤーに対する、ハンドメイド&ヴィンテージ版のカウンターパートです — 独立系コマースをより広く捉えるには、この3つを組み合わせてください。同じハンドメイド/中古市場のリセール側については、eBay のスクレイピング方法をご覧ください。あわせてウェブスクレイピング API の選び方とウェブスクレイピングは合法かもご覧ください。
よくある質問
Etsy に公式APIはありますか?
はい — Etsy の Open API v3 は実在する文書化されたAPIですが、承認されたアプリ(Personal App の承認、そのうえ自分のショップ以外を対象にする場合は手動レビューされる Commercial Access ティア)が必要で、標準アプリは1日10,000リクエストに制限されます。
Etsy をスクレイピングするのは合法ですか?
Etsy の利用規約は許可なくページをクロール・スクレイピング・スパイダーで巡回することを明示的に禁止しており、robots.txt は一般的なクローラーに対して検索結果URLパターンのクロールをブロックしています。公開されている事実自体には著作権が及びませんが、公式API以外での自動収集には実際の利用規約上のリスクがあります — 一般的な枠組みについては「ウェブスクレイピングは合法か」を参照してください。
APIでEtsyのリスティングを検索するには?
キーワードを /etsy/search エンドポイントに送ると、正規化されたリスティングカード(listing_id、タイトル、ショップ、価格、通貨、数量)がJSONとして返ってきます — HTMLのパースは不要です。
Etsy のリスティング詳細には何が含まれますか?
タイトル、価格、通貨、数量、カテゴリ、説明、素材、タグ、お気に入り数、閲覧数、when_made、売り切れステータスが listing_id をキーとして含まれます。
Etsy ショップのカタログ全体を取得できますか?
はい — /etsy/shop/{id}/listings は検索結果と同じ正規化されたリスティングカード形式でショップのカタログを返し、/etsy/shop/search は名前でショップを検索できます。
Etsy のレビューは取得できますか、また個人データですか?
/etsy/listing/{id}/reviews と /etsy/shop/{id}/reviews のどちらも、評価、レビュー本文、そして buyer_name フィールド(Etsy が公開表示しているのと同じファーストネーム)を返します。buyer_name は GDPR/CCPA上の個人データとして扱い、連絡可能なバイヤーリストの構築ではなく集計上の評価分析に使ってください。
通貨はリクエストによって変わりますか?
はい — price、price_int、currency はリクエストのレンダーロケールを反映します(例えばUSDの代わりにVNDになることがあります)。固定の通貨を前提にせず、結果ごとに currency フィールドを読み取ってください。