A 403 comes from Mercado Libre's official API, and its developer documentation is the place to diagnose a specific refusal. What applies to every call, as of October 2026: the API needs an OAuth application registered in Mercado Libre's DevCenter and an access token from a Mercado Libre user who authorized that app. If you need public product and price data rather than your own seller account, Scavio's Mercado Libre API returns it with one API key and no OAuth: price, list price, discount, installments, buy-box seller, units sold and ratings for Mexico, Brazil, Argentina and Colombia, at 2 credits per call. Below are the real calls we made on October 11, 2026 (re-run that afternoon), what came back, and where this approach has limits. We build Scavio, so weigh that as you read.
What the official API requires
The question comes up in the same form in Spanish and Portuguese developer forums. From r/devsarg (translated): "software that can grab different info from the product pages on Mercado Libre and dump it into an Excel sheet ... Regular price/sale price, installments, name, rating, number of ratings ... Is it possible to do this with the Mercado Libre API?" The top technical reply: "the search endpoint doesn't work." From r/devBR in March 2026, a developer who wanted product data to post deals: "I'm not a seller, I'm trying to access items from other sellers ... search also returns 403."
Here is what we can state about the official API, and how:
- Every call carries a user's access token. Mercado Libre's authentication and authorization guide has you create an application in DevCenter (an app ID and a secret key), send a Mercado Libre user through the OAuth 2.0 authorization flow, send the resulting access token in a header on every call, and refresh it, because it is valid for 6 hours.
- Without a token, the calls in question refuse. On October 11, 2026 we called three endpoints with no token: search (
/sites/MLM/search) and an item (/items/{id}) both returned 403 Forbidden, and a catalog product (/products/{id}) returned 401, "authorization value not present". - With a token, developers still report 403 on these calls. The r/devBR developer reported 403 on
/items/{id}for other sellers' listings and on search, then got the name and image from/products/{id}and wrote: "this endpoint doesn't return the product price." We have not tested an authorized token ourselves, so we will not tell you which calls a token unlocks for your app.
If you manage your own listings, your app's settings and the official documentation are where to work the 403 out. If what you need is the public marketplace (other sellers' prices, installments, shipping and ratings), the rest of this page shows the route that does not depend on any of that.
Step 1: one product, one key
The product endpoint takes a URL, a catalog product_id or a listing item_id. This is the script we ran, with its real output:
import os
import requests
API = "https://api.scavio.dev/api/v1/mercadolibre"
HEADERS = {"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}"}
def call(endpoint, body):
r = requests.post(f"{API}/{endpoint}", headers=HEADERS, json=body, timeout=90)
r.raise_for_status()
return r.json()["data"]
# 1. One product: price, list price, buy-box seller, units sold, ratings
p = call("product", {"product_id": "MLM1027172667"})
print(p["title"])
print(p["price"], p["currency"], "list", p["original_price"], f'-{p["discount_percent"]}%')
print("seller:", p["seller"]["name"], p["seller"]["reputation_level"], p["seller"]["power_seller_status"])
print("sold:", p["sold_label"], "| rating", p["rating"]["average"], "from", p["rating"]["count"])
# 2. Cheapest new iPhone 15 128 GB with free shipping, Mexico
s = call("search", {"country": "mx", "query": "iphone 15 128gb", "condition": "new",
"free_shipping": True, "sort": "price_asc"})
# price_asc puts accessories first ("USB drive for iPhone 15"), so match the title strictly
match = [x for x in s["results"]
if x["title"].lower().startswith(("apple iphone 15 ", "iphone 15 "))
and "128" in x["title"]
and not any(w in x["title"].lower() for w in (" pro", " plus"))]
best = match[0]
print(s["total"], "listings;", len(match), "exact matches on page 1")
print("cheapest:", best["price"], best["currency"], "|", best["title"], "|", best["sold_quantity_min"], "+ sold")Apple iPhone 15 (128 GB) - Azul - Distribuidor Autorizado
15690.53 MXN list 16999 -7%
seller: Apple 5_green platinum
sold: +1000 vendidos | rating 4.9 from 26767
67 listings; 6 exact matches on page 1
cheapest: 11709 MXN | Apple iPhone 15 128 GB Negro | 10000 + sold
The same product response also carried the installment plan (12 interest-free payments of 1,307.54 MXN), stock ("+50 disponibles"), Full fulfillment, the star breakdown (25,637 five-star reviews, 228 one-star), 74 spec rows and 10 pictures.
The price check is the useful part: the cheapest new iPhone 15 128 GB with free shipping was 11,709 MXN, 25% below the 15,690.53 MXN on Apple's own store listing. And it moves. Earlier the same day the same script printed 11,904 MXN, and before that the black model's catalog card showed yet another listing at 11,909 MXN. That is why price monitoring runs on a schedule, not once.
Step 2: the same search in four countries
Search takes country as mx, br, ar or co, with the same filters and field names in each. We ran "iphone 15 128gb", condition new, page 1, once per country (figures from the afternoon re-check):
| Mexico | Brazil | Argentina | Colombia | |
|---|---|---|---|---|
| Listings found | 68 | 61 | 83 | 45 |
| iPhone 15 catalog card price | 15,690 MXN (blue, Apple store, -7%) | 4,009 BRL (blue, Apple, Pix price) | 1,549,999 ARS (black, Apple, -25%; 1,649,999 that morning) | 2,459,900 COP (black, -31%) |
| Free shipping | 43 of 48 | 57 of 60 | 45 of 48 | 34 of 45 |
| Full fulfillment | 21 of 48 | 12 of 60 | 3 of 48 | 2 of 45 |
| Sponsored listings | 0 | 12 | 0 | 0 |
| Cross-border listings | 0 | 2 | 13 | 9 |
Free shipping is close to universal. Full fulfillment is the real differentiator, and it varies from nearly half the page in Mexico to a handful of listings in Argentina and Colombia. Brazil's page carried 12 sponsored rows out of 60; each comes back flagged sponsored: true, so a rank tracker can separate paid placement from organic position.
One catch for Brazil: the search card showed R$4,009 while the product endpoint returned R$4,220.84 with a "no Pix" promotion. 4,220.84 x 0.95 = 4,009.80: Brazilian search cards usually show the Pix price, about 5% below the regular price the product endpoint returns. Store which one you compare.
What it costs
Search, product, questions and best sellers cost 2 credits per call; reviews cost 1. On the Growth plan billed yearly ($2 per 1,000 credits):
- one search page of about 48 listings: $0.004, so about $0.08 per 1,000 listings
- one product with price, seller and ratings: $0.004
- a daily price check on 100 products: about 6,000 credits a month, inside the $30 monthly plan's 7,000
- pay-as-you-go: $0.02 per call
Where it stops
Stated plainly, from the same day's calls:
- Four countries: Mexico, Brazil, Argentina, Colombia. Chile and the other Mercado Libre sites are not supported.
- About 2,000 results per query (42 pages of about 48). Slice by price band, condition or seller to go further.
- Relevance is loose. Only about 10 of 48 Mexican rows for "iphone 15 128gb" were that phone; the rest were look-alikes. With
price_asc, the first page is cases and USB drives. Filter titles, or start from aproduct_id. - Units sold come as ranges ("+1000 vendidos" returns
sold_quantity_min: 1000), never exact counts. - Only the buy-box seller on a product; the list of every seller on a catalog product is not available.
- Brazil product responses often carry no star breakdown (average and count only), and Brazil has no best-sellers list.
- Mercado Libre's "new" filter can include listings titled "caja abierta" (open box).
- Calls took 0.7 to 8.3 seconds, with one Brazil product call at 31 seconds. Run price checks as batch jobs.
A 403 on your own seller account is a question for Mercado Libre's documentation. Reading the marketplace (competitors' prices, installments, Full shipping, ratings, across four countries) is the job that keeps breaking, and keeping that pipeline running is what Scavio's Mercado Libre API absorbs: one key, the same JSON in every country, 2 credits a call. The same key also covers Amazon and Walmart, Mexico included, if you compare across marketplaces.
Get 50 free credits, no card, enough for 25 searches, or run a search in the playground first.
Reference: Mercado Libre API overview · search docs · product docs · reviews docs · questions docs · best sellers docs · 7 Mercado Libre scraper APIs compared
Frequently asked questions
Why does the Mercado Libre API return 403?
A 403 comes from Mercado Libre's official API, and its developer documentation is the place to diagnose a specific refusal. What applies to every call: as of October 2026, that API requires an OAuth application registered in Mercado Libre's DevCenter and an access token from a Mercado Libre user who has authorized that app, sent with every request. When we called search and an item with no token on October 11, 2026, both returned 403 Forbidden.
Can I get Mercado Libre prices without OAuth?
Yes, through a third-party API. Scavio's Mercado Libre API takes one API key, with no Mercado Libre app or token refresh, and returns public listing data for Mexico, Brazil, Argentina and Colombia: search with price, list price, discount and installments (about 48 rows per call), product detail with the buy-box seller, reviews, questions and best sellers. Calls cost 2 credits, reviews 1.
Do I need a Mercado Libre API key or client secret?
For the official API, yes: you create an application in Mercado Libre's DevCenter, which gives you an app ID and a secret key, have a Mercado Libre user authorize it, and refresh the access token, which is valid for 6 hours. For Scavio you need only a Scavio API key; new accounts get 50 free credits with no card.
Does the official /products endpoint return prices?
A developer in r/devBR (March 2026) reported that /products/{id} returned the product name and image but not the price, after /items/{id} returned 403. Scavio's product endpoint returns price, list price, discount, installments, promotions, the buy-box seller with reputation, units sold as a range and the rating breakdown.
What does it cost to monitor Mercado Libre prices this way?
Each search or product call costs 2 credits: $0.004 on Scavio's Growth plan billed yearly ($2 per 1,000 credits), $0.02 pay-as-you-go. A daily price check on 100 products is about 6,000 credits a month; one search returns about 48 listings, so 1,000 listings cost about $0.08.