あなたは40,000のMercado Libreのカードをエクスポートし、アルゼンチンの平均価格を計算してレポートを提出しました。しかし、問題は、これがアルゼンチンの価格ではないということです。これは郵便番号1430の価格であり、これはデフォルトのゾーンで、運営側がどこに配送するかを指定しなかったすべての人に適用されます。
Mercado Libreはラテンアメリカの18か国で運営されており、2025年のグループの収益は289億ドルで、従業員は123,670人です。eコマース分析において、これは地域の主要なデータソースであり、同時に最も過小評価された罠でもあります。プラットフォームは、リクエストがどこから来たか、セッションがどの配送ゾーンを見ているかによって、異なる価格、異なる配送、異なるバイボックスの勝者を提供します。何が壊れているのか、そしてどのように正しく収集するかを見ていきましょう。
2026年に何が変わったか:APIは事実上閉鎖された
数年前、「Mercado Libreのパース」は公開APIで解決されていました:GET api.mercadolibre.com/sites/MLA/search?q=iphoneは認証なしで結果を返していました。今日では、もうそうではありません。
2026年9月12日の通常のサーバーIPからのチェック、トークンなし:
/sites— HTTP 403、ボディ{"code":"PA_UNAUTHORIZED_RESULT_FROM_POLICIES","blocked_by":"PolicyAgent","message":"At least one policy returned UNAUTHORIZED."}/sites/MLA/search?q=iphone&limit=1— HTTP 403、{"message":"forbidden","error":"forbidden"}/items/{id}— HTTP 403、同じPolicyAgent
トークンがないだけではありません。販売者や統合者は公開された苦情の中で、有効なアクセストークンを持っていても同じ状況を説明しています:/users/meや注文は正常に応答しますが、カタログや評価のエンドポイントはblocked_by: PolicyAgentを返します。APIへのアクセスポリシーは、エンドポイントごとに厳格化されており、ドキュメントはそれに追いついていません。
同時に、プラットフォームには公式APIで生活している人々のための2つの技術的な締切があります:
- 2026年8月30日からアプリケーションは分割される必要があります:Mercado Libre用の別のアプリケーション、Mercado Pago用の別のアプリケーション。
GET applications/$APP_IDを介して確認されます — スコープにurn:mp:...のような権限が残っている場合、アプリケーションは再登録する必要があります。さもなければ、Mercado LibreのAPIへのアクセスを失います。 - クエリパラメータにアクセストークンを渡すことは安全ではないと見なされています:そのようなリクエストはプラットフォームによって301の応答で拒否されます。トークンは
Authorization: Bearerのヘッダーにのみ送信される必要があります。
実際の結論は簡単です:2026年の公式APIは、自分のアカウントで作業している販売者のためのチャネルであり、市場分析のツールではありません。競合他社や地域の価格を監視することが目的であれば、公開されたショーウィンドウを使用します。具体的なタスクに対して何を選ぶべきかについては、公式API、準備されたデータセット、または独自のパーサーで検討しました。
1つのサイトではなく7つのショーウィンドウ
Mercado Libreは、国ごとのフィルターを持つ1つのカタログではなく、独立したプラットフォームのセットであり、それぞれのドメイン、通貨、商品提案を持っています。APIでは、これらはsite_idと呼ばれます:
- MLA — アルゼンチン (mercadolibre.com.ar, ARS)
- MLB — ブラジル (mercadolivre.com.br, BRL)
- MLM — メキシコ (mercadolibre.com.mx, MXN)
- MLC — チリ、MCO — コロンビア、MLU — ウルグアイ、MPE — ペルー、MLV — ベネズエラ
MLAとMLBの同じアイテムは、2つの異なるカード、2つの異なる販売者、2つの異なる物流スキームです。「正面から」比較するのは無意味です:通貨と配送条件に基づく正規化が必要です。ちなみに、通貨についてですが、プラットフォームはHTMLでフォーマットルールを提供します:アルゼンチンの場合、"currency_id":"ARS"、"decimal_separator":","、"thousands_separator":"."、"time_zone":"GMT-03:00"です。価格をピリオドで正規表現で切り取るパーサーは、ラテンアメリカのショーウィンドウでは千倍の誤りを犯します。
重要なこと:価格と配送は受取人のゾーンから計算される
これは、住所なしのリクエスト時にlistado.mercadolibre.com.arのHTMLページに直接埋め込まれたフラグメントです:
"location_info":{"zipcode":"1430","inferred_zipcode":false,"default_zipcode":true,"user_zone":"X19"}
これはこう読まれます:郵便番号1430、これはあなたのIPから導出されていない(inferred_zipcode: false)、これはデフォルト(default_zipcode: true)です。その上部には「Capital Federalに送信」と表示されており、つまりプラットフォームは静かにあなたがブエノスアイレスの首都圏にいると判断し、そのためにすべてを計算します。
そして、彼女は多くのことを計算します。同じHTMLには、ゾーンに関連付けられた配送バッジが含まれています:same_day_free_shippingで「Llega gratis hoy」というテキスト、アイコンvpp_full_icon — 「Enviado por FULL」(プラットフォームの倉庫からの製品)。「iphone」というリクエストの結果の1ページに、無料配送の言及が96件ありました。ゾーンによって、buy_boxの「Otra opción de compra」も異なります:どの販売者がカードを獲得するかは、どれが安くて早く特定の郵便番号まで運ぶかによって決まります。
結論:配送ゾーンを一度も設定しなかったパーサーは、「アルゼンチン市場」ではなく、1つの都市のスライスを収集します。首都から千キロ離れた大都市の国に関するレポートでは、これは欠陥であり、何も示されません — 数字は信じられるように見えますが、実際には異なる質問に答えています。
入口でのブロック:/gz/account-verification
2つ目のサプライズは、輸送レベルで待っています。listado.mercadolibre.com.ar/iphoneへのリクエストはすぐには結果を返しません:HTTP 302が/gz/account-verification?go=...&tid=...にリダイレクトされます — デバイス確認のための独自のページです。これはCloudflareでもDataDomeでもありません:ブロックのコードにはreCAPTCHA、Turnstile、外部のボット対策マーカーはなく、デバイスメカニズムへの10件の呼び出しがあります。このページは約41KBのサイズで、JavaScriptで構築されており、スクリプトなしでは何も表示されません。
確認中の動作は示唆に富んでいました。クリーンなサーバーIPからの最初のリクエストはブロックを通過しました:2,425,906バイトの実際の結果が返されました — 50ブロックのui-search-layoutと120ノードの価格andes-money-amount__fraction、すべてサーバーでレンダリングされています。同じアドレスからの再リクエストはすでに/gz/account-verificationにぶつかり、それ以上進みませんでした。同じIPからのブラジルとメキシコのショーウィンドウは全く通過しませんでした。
これは典型的な「評判」メカニズムです:アドレスは小さな信用を受け取り、数回のリクエストでそれを使い果たし、閉じられます。ここでの単一のテストは何も証明しません — 重要なのは、データセンターのプールからの持続的なアクセスがないことであり、動作は国によって異なります。
応答ヘッダーからのもう1つの詳細:プラットフォームは_d2id(1年間のデバイス識別子、x-request-device-idにも重複します)と_mldataSessionIdをMax-Age=1800で設定します。30分 — これがセッションの自然な長さであり、IPの保持を調整する必要があります。
robots.txtは何を言っているか
収集を構築する前に、プラットフォームのルールを読む価値があります。robots.txtの両方のショーウィンドウ(アルゼンチンとブラジル)の上部ブロックは同じで、非常に明確です:
- AIクローラーに対する完全禁止(
Disallow: /):Amazonbot、GPTBot、ChatGPT-User、ClaudeBot、Claude-User、PerplexityBot、Perplexity-User; - ソーシャルメディアのプレビュー用ボットには許可されています:FacebookExternalHit、FacebookBot、Twitterbot、LinkedInBot;
- Bingbotには
Crawl-delay: 5と長いリストの閉鎖されたセクションがあります:/gz/cart/、/gz/checkout/、/perfil/vendedor/、/perfil/comprador/、/navigation/、/noindex/など。
これから2つの実用的なことが導かれます。1つ目:カート、チェックアウト、ユーザープロフィールは明示的に閉じられているため、技術的にも法的にもそこに入る必要はありません。2つ目:検索ボットに対するCrawl-delay: 5は、プラットフォームが自動化から期待するペースの正直な指標です。1つのアドレスからのリクエストに5秒は合理的な出発点であり、空気からの数字ではありません。
正しく収集する方法:手順
- 収集マトリックスを固定します。 「Mercado Libre」ではなく、「国×配送ゾーン」のペアのリストです。アルゼンチンの場合、例えば、キャピタル連邦、コルドバ、ロサリオ、メンドーサ;ブラジルの場合は、サンパウロ、リオ、ベロオリゾンテ、レシフェです。ゾーンを指定しない価格は意味がなく、この決定はコードの最初の行の前に行われます。
- 必要な国の居住者IPを取得します。 ブラジルとメキシコのショーウィンドウのサーバーアドレスは全くブロックを通過しませんでしたが、アルゼンチンのものは最初のリクエストの後に消耗しました。ローカルの居住アドレスはアクセスの問題と信頼性の問題を解決します:プラットフォームは最初から、地元の購入者に見せるのと同じものを表示します。
- セッション全体でIPを保持します。 セッションクッキーは30分間生存します — 各リクエストでローテーションすると、それも選択したゾーンもリセットされ、再びデフォルトの郵便番号を取得します。1つのゾーンに対して10〜30分の粘着セッションを維持し、その後変更します。ウィンドウの長さを選ぶ方法については、stickyセッションのガイドで説明しました。
- 生のHTTPクライアントではなく、ブラウザエンジンを使用します。 ページ
/gz/account-verificationは完全にJavaScriptで構築されています:スクリプトを実行しないと、永遠にブロックのままです。Playwrightやステップ間で状態を保持する類似のツールを使用します。 - 配送ゾーンを明示的に設定します。 リンクは
/addresses/v3/navigation/hubに向かい、住所を設定した後、状態はセッションのクッキーに保存されます。この手順をセッションごとに1回実行し、各カードごとに実行しないでください。 location_infoをチェックサムとして使用します。 保存された各ページで、zipcodeがターゲットと一致し、default_zipcodeがfalseになっていることを確認します。フラグがtrueのままの場合、その行はデータウィンドウに書き込まれません。これは、そのゾーンのために収集されていないからです。このチェックだけで、静かな欠陥の大部分を排除できます。- サーバーのHTMLから価格を取得します。 価格と配送バッジはすでにサーバーでレンダリングされているため、内部のJSONエンドポイントを追いかける必要はありません。価格の横に
zipcode、user_zone、currency_id、およびタイムスタンプを保存します:それらなしでは数字は検証できません。 - ペースを維持します。 プラットフォームからの指標は、1つのアドレスからのリクエスト間に5秒です。速度が必要な場合は、1つのIPからの頻度を増やすのではなく、アドレスプールを拡張してください:まさに1つのアドレスからの急増がブロックを閉じます。
遅れてわかる落とし穴
デフォルトゾーンの静かな欠陥。 最も高価なエラーは例外なしに発生します。データが収集され、レポートが構築され、価格設定の決定が行われ — そして四半期後に、ブラジルに関するすべての分析がサンパウロの1つの地区を説明していることが判明します。
ページの重さ。 1ページの結果は2.4MBです。1日あたり4か国と4つのゾーンで1,000ページ — これは月に数十GBのトラフィックです。居住者料金でギガバイトごとに支払う場合、これは主要な支出項目であるため、ブラウザエンジンで画像やフォントの読み込みをすぐにオフにする意味があります:価格はHTMLにあり、パーサー用の画像は無駄な消費です。
正規化なしの国の比較。 ARS、BRL、MXNおよび異なる桁区切り。収集日付の為替レートで1つの通貨に換算し、元の価格と通貨を別々に保存します。さもなければ、後で再計算することはできません。
公式APIへの依存。 統合がAPIにある場合、2026年8月30日以降のアプリケーションの分離と、クエリからヘッダーへのトークンの移動に関する要件を念頭に置いておいてください。APIへのアクセスの静かな喪失は、あなたのコードのバグとまったく同じように見えます。
このタスクに必要なプロキシ
居住者 — 価格と配送を収集するための実用的なオプションです。あなたが収集しているショーウィンドウの国のアドレスが必要で、できれば配送ゾーンを確認する地域が望ましいです:こうしてデータが収集され、信頼性が保たれます。居住者プロキシは、セッションを保持することで両方の要件を満たします。
モバイル — 特にブロックが頑固な場所で。ラテンアメリカはモバイルトラフィックの割合が高い地域であり、携帯電話会社のアドレスはプラットフォームにとって非常に一般的に見えます。狭いが重要なスライスには正当化されますが、大量のエクスポートには適していません。
データセンター — 調査や業務用のタスクに:robots.txtを読み、ページの構造を取得し、ドメインの可用性を確認します。定期的な価格収集には、検証から示されたように、リソースが不足しています。
まとめ
2026年のMercado Libreは、データを匿名で提供しません。公式APIはPolicyAgentのポリシーによって閉鎖され、ショーウィンドウは独自のデバイス確認で迎え、主要な数字 — 価格と配送 — は受取人のゾーンから計算されます。これは、指定しない場合にプラットフォームがデフォルトで設定するものです。ここでの正しいパーサーは、間違ったパーサーとは回避策の巧妙さではなく、国、ゾーン、通貨、location_infoを各行の横に持つという規律によって異なります。その他は、あなたのリクエストがどこから来るかの問題です。
