PR
私が使っているPCガジェット類

作業環境で実際に使っている・気になっている周辺機器などをまとめました

※ 一部のリンクは広告(アフィリエイト)を含みます

eBay APIでライバルセラーの出品を全件取得できるか試した

eBay APIでライバルセラーの出品、取得してますか?

一昔前ならFinding APIのfindItemsAdvancedを使って、セラーIDを渡すだけで出品が一覧で返ってきました
私もeBay関係で受けた仕事でいちばん使っていたAPIなので、2025年2月5日に廃止と知ったときはなかなかの衝撃でした

2024年6月に後継のBrowse APIを調べたときは、「searchではセラーIDだけで全件は取れない」で終わり
最後に「時間ができたらもう少しBrowse APIを調べてみたいです(需要ありそうだし)」と書いて、そこから2年経った今、、、ようやく調べる機会が来ました

結論は「取れる」
セラーIDから探すのはやめて、カテゴリを1つずつ回してsellersで絞る作戦にしたら、EBAY_USの検索に出てくる日本のセラー3人をサンプル的に試して、全出品データを取得することができました

ただ、ここまでにけっこうハマっています、検索に出ないのにまだ売っている商品があったり・・

参考までに、2年前に「取れない」と書いた記事はこちら

目次

セラー指定で出品を集める仕組みは「カテゴリ×sellers」

やり方はシンプルで、searchにcategory_idsでカテゴリを1つ渡して、filterのsellersにセラーIDを「|」区切りで並べるだけ
これをカテゴリの数だけ繰り返せば、そのセラーの出品一覧のできあがりです

2年前に調査を諦めた理由

findItemsAdvancedの後を継いだsearchは、キーワード(q)・カテゴリ(category_ids)・ePID・GTINなどのどれかを入れないと動いてくれません
sellersの絞り込み自体は付けられるのに、それだけだと検索が始まらない
2年前の私は、ここを「残念ポイント」と書いて止まっていました

今回は発想を逆にして、カテゴリのほうを全部回すことにしています
カテゴリの一覧はTaxonomy APIで取れて、2026年10月時点のEBAY_USだと、トップの階層(L1)が34、その下(L2)が472

やることは、これだけです

  1. Taxonomy APIでカテゴリの一覧を取る
  2. カテゴリごとに、sellersで絞ってsearchを呼ぶ
  3. 1万件を超えたカテゴリは、下の階層に分けて取り直す
  4. 最下層でも1万件を超えたら、価格の範囲で分ける
  5. 重複を除いて1つの一覧にする
ジャベ雄

2年前は、キーワードで絞ることしか頭にありませんでした

1回の検索で返るのは1万件まで

いちばん困るのが、1回の検索で最大1万件までしか返ってこないこと

項目上限・既定
sellersで指定できるセラー1回に最大250人
category_ids1回に1カテゴリ
1ページの件数(limit)最大200件
1回の検索で返せる件数最大10,000件(offsetは最大9,999)
何も指定しないときに返る出品即決(Buy It Now)だけ
何も指定しないときの並びBest Match

指定したセラーの出品が1つのカテゴリで1万件を超えると、そこでバッサリ切れます
逆にセラーは1回で250人まで入るので、3人くらいならカテゴリごとに1回で済みます

トークンは、Client IDとClient Secretから取るアプリ用のもの(client credentials grant)でOK
ユーザートークンは要りません
2時間で切れますが、ツール側で勝手に取り直すようにしています

※アメリカのユーザーは、2025年9月26日から、一部の開発者にはセラー名(seller.username)が固定のIDで返ってくる仕様になっています
今回の日本のセラー3人は、名前のままでした

3万件取ってみたら6回ハマった

測ったのは2026年10月
EBAY_USで日本のセラー3人をまとめて検索して、即決とオークション合わせて31,864件(Python版で取った回)
ハマった順に書いていきます

1. L1カテゴリはqなしで通った

公式のcategory_idsの説明には、L1のカテゴリを指定するときはqも必須、と書いてあります
それだと472カテゴリを全部回すことになるので、試しにqなしでL1を投げてみたら、普通に返ってきました
34カテゴリ全部

念のためL2の472カテゴリも全部回して比べてみると、件数はほぼ同じ
L1ごとの差は最大5件で、これは2つのカテゴリに出している商品の重なりだと見ています
回すカテゴリは、472から34に激減

ただ、公式の注記とは違う動きなので、いつ注記どおりに直されてもおかしくないです
なのでツールでは、L1でエラーが出たらL2に降りて回り直すようにしてあります

2. 1人で1万件の商品を超えるセラーがいた

最初に全部回したら、ツールのログに「取れるのは先頭 10000 件まで」の警告が出ました
見てみると、骨董(Antiques)の最下層カテゴリ1つに、1人で1万1千件ほど
最下層なので、これ以上カテゴリでは分けられません

そこで、priceの絞り込みで価格帯に分けることに
priceを使うときは、通貨のpriceCurrencyもセットで付けます
そのときの11,633件は、こんな分かれ方でした

  • 30ドルまで:1件
  • 30〜60ドル:15件
  • 60ドル以上:11,617件

足すと11,633件で、ぴったり一致
ほぼ全部が60ドル以上という、偏ったセラーです

60ドル以上はまだ1万件を超えるので、価格の範囲を半分ずつ刻んでいって、1回の検索が1万件以下になったところで取っています
境目ちょうどの価格がどっちに入るかまでは確かめていないので、件数は最後に重複を除いてから数えています

3. 7分で490件が「終了」 Best Matchの取りこぼし

同じ日に2回目を回したら、そのセラーの出品が490件「終了」判定(≒取得できない)になっていました
7分前の1回目には、ちゃんとあった商品です

7分で490件も売れるわけがない・・
抜き出した15件をgetItem(商品1件の詳細を取る呼び出し)で開いてみたら、15件とも在庫あり(IN_STOCK)で、普通に売っていました

犯人は並び順でした
何も指定しないと、並びはBest Match(eBayのおすすめ順)
このままoffsetでページを送っていくと、同じ商品が2回出てきて、その分どこかの商品が1回も出てこない
途中で順番が入れ替わっているっぽいです

1人のセラーの最下層カテゴリ1つ、5,448件で数えてみたら、重複を除いて残ったのは5,147件
301件、約5.5%が取れないまま終わっていました

別のセラーのL1カテゴリ1つ、2,180件だと抜けは2件だったので、どれだけ抜けるかは検索しだい
しかも取った行の数は5,448件でそろっているので、重複を数えないと気づけません
Best Matchのままページを送っているツールがあったら、一度、重複を数えてみてください

公式の説明にも、total(総件数)は目安だから、ページ送りにはnextのリンクを使って、と注意書きがあります

ジャベ雄

件数がそろっていても、中身がそろっているとは限りません

4. 並び順は価格順がいちばんマシ

じゃあ並びを変えればいいじゃん、と出品日順(newlyListed)にしてみたら、今度は別のセラーで70件が「終了」に
こっちは同じ秒に出品された商品が最大94件もあって、同時刻どうしの順番が揺れていたみたいです

結局、2つの検索で並びごとに数え直すハメに
検索Aは3つ目と同じ、1人のセラーの最下層カテゴリ1つ
検索Bは、別のセラーのL1カテゴリ1つです

表のマスは「重複を除いて取れた件数 / その時の総件数」
2回測ったものは幅で書いていて、検索Aは測った時刻で総件数が少し動いています

並び検索A検索B
Best Match(既定)5,147 / 5,448件2,178 / 2,180件
価格の安い順(price)5,444〜5,445 / 5,446件2,180 / 2,180件
価格の高い順(-price)5,445 / 5,446件2,180 / 2,180件
出品日の新しい順(newlyListed)5,448 / 5,448件2,095〜2,107 / 2,180件

両方の検索で崩れなかったのは、価格順(安い順・高い順)
抜けても1〜2件

出品日順は、検索Aでは全件そろったのに検索Bでは73〜85件抜けていて、ちょっと当てにできません
ツールでは価格の安い順で取って、件数が総件数に届かなければ、逆順(sort=-price)や出品日順で取り直して足すようにしました
これでやっと件数が埋まりました

5. 検索に出ないのに、まだ売っている商品がある

並び順を直しても、検索から消える商品はゼロになりませんでした
別の回に消えた109件をgetItemで開いてみたら、109件ぜんぶ出品中

同じセラーを1時間あけて検索すると、出てくる件数が100件ほど上下します
価格をこまめに直しているセラーのようなので、直した直後の商品が一時的に検索から外れているのかもしれません

検索から消えた=売れた、とは限りません
前回の一覧と比べて「終了」を判定するなら、getItemで状態を確かめてからにしたほうが安全です

6. オークションはpriceが空っぽ

searchは、何も指定しないと即決(Buy It Now)の出品しか返してくれません
オークションも入れたいなら、buyingOptionsの絞り込みが必要です

ところが入れてみると、今度は価格の欄が空っぽの行が出てきました
入札だけのオークションはpriceが空で、入っているのは現在の入札額(currentBidPrice)だけ
一覧にするなら、priceが空の行はcurrentBidPriceを見るようにしておかないと、オークションの行だけ価格が抜けます

📚 私のおすすめ本PR

ジャンルごとに私のおすすめからランダムで5冊を表示しています

作ったもの ライバルセラーの新規出品を6時間おきに記録する

こうして作ったのが、指定したセラーの出品一覧を6時間おきに取って、前回と比べて新規・終了・価格変更を記録するツールです

GAS版はスプレッドシートに、Python版はSQLite(1つのファイルで動くデータベース)に記録します
GASはGoogle Apps Scriptの略で、スプレッドシートから動かせるプログラムのこと

6時間おきなのは、あとで書く規約に合わせたから
最初は1日1回で作っていて、規約を読み直してから変えました

見るのは「出品中」と「変化ログ」の2枚

  • 「出品中」は、取得した時点で出品されている商品の一覧で、右上にいつ時点の一覧かを出しています
  • 「変化ログ」は、前回と比べて新規・終了・価格変更があった商品の記録

ほかに、実行の記録を残す「実行ログ」のシートもあります

eBayセラー追跡のスプレッドシートの「出品中」シート、セラー名・商品番号・商品名はぼかしている
「変化ログ」シート、日付・種別(新規・終了・価格変更)・変更前と変更後の価格が並んでいる

主役は、変化ログの「新規」の行
ライバルが前回から何を出したかは、ここだけ見れば分かります

似たような使い方は、2025年9月30日のeBay日本の公式の開発者ブログでもAPI自動化のアイデアの1つとして紹介されていました
1日1回検索して、ライバル商品の価格や送料をスプレッドシートに記録する、という内容です
とはいえ、公式ブログに載っていることと規約でOKなことは別の話なので、規約は下で自分で読んで確かめています

「終了」は、5つ目の件があるので、検索から消えただけでは付けません
消えた商品をgetItemで1件ずつ開いて、まだ出品中なら一覧に残しています

呼び出し回数は1日の上限の2〜3割

Browse APIの呼び出し上限は、既定で1日5,000回
getItems以外の合計で、getItemもここに入ります
カテゴリの一覧を取るTaxonomy APIは、別枠で5,000回あります

日本のセラー3人(約3万件)を取ったときの実測は、こんな感じ

スクロールできます
版送り方取れた出品呼び出しかかった時間1日の上限に対して
Python版1回ずつ順に送る31,864件255回2分53秒約5%
GAS版20回分を並列で送る31,769件301回73秒約6%
Python版(消えた出品の確認あり)1回ずつ順に送る31,779件380回(うちgetItem 109回)4分10秒約8%

回ごとに件数が違うのは、5つ目に書いたとおり、検索に出る件数そのものが揺れているから
GAS版の301回には、並びを変えて取り直した分も入っています

6時間おきに1日4回回しても、1日1,000〜1,500回くらいで上限の2〜3割
ただしこれは、L1の34カテゴリで回せている前提の話
L2の472カテゴリに戻ると、1回で最低472回かかります
足りなくなったら、上限を上げてもらう審査(Application Growth Check)もあります

「実行ログ」シート、実行日時・状態・API呼び出し回数・所要秒数・メモが並んでいる

規約に合わせて変えたところ

eBayのAPIの規約(API License Agreement)には、この手のツールに関係する決まりがいくつかあります
作っている途中で、実際に仕様を変えたのは次の3つ

まずはキー
キー(Application Key)は自分のeBay Developerアカウントで取るもので、eBayの書面の同意がない限り、人に共有も譲渡もできません
キーは自分で取って、人に借りない・貸さないが前提です

キーの取り方は2022年に書いたeBay APIの申請手順、本番のキーを有効にするための通知先はeBay APIのエンドポイントの作り方にまとめています
どっちも古い記事なので、今の画面とは違っているかもしれません

次に、データの鮮度
表示する出品情報は、eBay上の表示より6時間を超えて古くしてはいけない決まりで、最新でないときは、どれくらい古いかも見せる必要があります
1日1回だと最大24時間くらい古くなってしまうので、6時間おきに回して、一覧に取得した時刻を出すようにしました

最後は、データから何を導き出すか
eBayの書面の許可なしに、セラーの成績を導き出すような使い方はできません
1人ずつでも、まとめた形でもダメで、特定のユーザーに関する情報も同じ扱いです
なので、ライバルの新規出品を自分の仕入れや出品の参考に見て回る範囲で使うのが前提で、売上を推計するような使い方はしません

ほかにも、データの保存期間や個人情報の扱いの決まりがあるので、使う前に規約の本文(英語)には一度目を通しておくと安心です

このツールを使いたい人へ

このツール、ココナラで販売する準備をしています
GAS版を基本に、Python版も選べる形にする予定です

スプレッドシートで変化を眺めたいならGAS版、手元のPCに記録をためていきたいならPython版
どちらも、ご自身のeBayのキーで、ご自身の環境で動かしてもらう形です

いちばんの関門は、キーの準備
eBay Developersへの登録と本番のキーに加えて、アカウント削除の通知を受け取る、HTTPSのURLの窓口が要ります
このツールは出品の一覧を保存するので、データを保存しないアプリ向けの「通知の免除」は使えません
窓口の作り方は、上のエンドポイントの記事にまとめています

自分で組むのは面倒、という方は、ココナラ経由で発注してもらえると嬉しいです
出品したら、ここにリンクを貼ります

まとめ 2年越しの答えは「取れる」

2024年に「取れない」と書いたセラー指定の出品一覧は、カテゴリを1つずつ回してsellersで絞れば、検索に出る分はちゃんとそろいました

いちばん効いたのは、並び順を価格順にしたこと
既定のBest Matchのままだと、5,448件の検索で301件が取れずに終わっていました
件数だけ見ていたら、まず気づけません

ほかにも、L1はqなしで通る・1人で1万件を超えたら価格で分ける・検索から消えても売れたとは限らない・オークションはpriceが空、とハマりどころは一通り踏んでおきました
Finding APIの頃のツールが止まったままなら、まずは1つのカテゴリでsellersを付けて、件数と重複を数えてみるところからどうぞ

2年前の「需要ありそうだし」は、ツールにしてココナラに出す一歩手前まで来ました

📚 私のおすすめ本PR

ジャンルごとに私のおすすめからランダムで5冊を表示しています


WORK

ツール作成のご依頼を受けています

クラウドワークス・ココナラで受注200件以上
会社員の副業なので、対応は平日夜と土日です

頼めることと料金の目安を見る →

ココナラが初めての方は、紹介コード 78E62K で1,000円分のポイントがもらえます

はじめての方の会員登録(PR):クラウドワークス / ココナラ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAとPythonを中心にユーザー側でできるITを自己学習しているので備忘録半分、学習履歴を残して同じ道を辿る人の参考になればとブログを始めました

副業でスクレイピングツール作成を中心にできることを色々やっていますのでご相談いただけるとありがたいです!


クラウドワークスのページへ


ココナラのページへ

コメント

コメントする

目次