Buscando todas las publicaciones de una cuenta de Mercadolibre

21 de noviembre de 2025 por
Gustavo Orrillo
| Sin comentarios aún
 

Cuando trabajamos con Mercadolibre, tarde o temprano necesitamos (desde Odoo) buscar todas las publicaciones que pertenecen a una cuenta. Y si la cuenta tiene pocas publicaciones; tenemos suerte. Pero si tiene más de 1000 publicaciones, la búsqueda se torna más complicada y es necesario recurrir a algunos parámetros (desconocidos hasta hace poco para mí) que bueno, voy a compartir en este post.

Primero y antes que nada, la búsqueda la realizamos invocando el siguiente endpoint del API de Mercadolibre

https://api.mercadolibre.com/users/{USER_ID}/items/search

Siendo USER_ID el seller_id de la cuenta de Mercadolibre con la que estamos trabajando, pasando como parámetros de búsqueda la siguiente información:

params = {
'access_token': ACCESS_TOKEN,
'search_type': 'scan',
'limit': 200
}

Se debe usar el parámetro access_token (como siempre), pero ademas indicar el search_type que sea scan (sino las búsquedas no van a pasar de 10,000 publicaciones) y el límite de publicaciones que debe devolver la búsqueda (sino por defecto es 200, Mercadolibre pese a la queja de muchos, debe proteger su infraestructura de la ansiedad de sus usuarios). Otro parámetro que se debe agregar es scroll_id, pero eso es a medida que vamos buscando todas las publicaciones. 

Ahora vamos a ver un ejemplo de como obtener todas las publicaciones de la cuenta de uno:

all_items = []
scan_token = None
has_more = True

_logger.debug(f"Empezando a leer las publicaciones para el vendedor ID: {USER_ID}...")

while has_more:
# 1. Se arman los parámetros del request
params = {
'access_token': ACCESS_TOKEN,
'search_type': 'scan', # Usamos 'scan' para recuperar más de 1000 items
'limit': 200 # Solo se pueden leer 200 items por búsqueda
}

if scan_token:
params['scroll_id'] = scan_token # Se usa scroll_id para las búsquedas siguientes

# 2. Se hace el API request
try:
url = f"{API_BASE_URL}{SEARCH_ENDPOINT}"
response = requests.get(url, params=params)
response.raise_for_status() # Raises an HTTPError for bad responses (4xx or 5xx)
data = response.json()

except requests.exceptions.RequestException as e:
_logger.error(f"Ocurrió un error durante el API request: {e}")
break

# 3. Se procesan los resultados
if 'results' in data:
# item_ids = [item['id'] for item in data['results']]
item_ids = data.get('results')
all_items.extend(item_ids)
_logger.info(f"Leidos {len(item_ids)} item IDs. Total de items: {len(all_items)}")

# 4. Chequea por el siguiente token de scaneo devuelto por ML
if 'scroll_id' in data and data['scroll_id']:
scan_token = data['scroll_id']
else:
has_more = False # Si no hay scroll_id, no hay más datos para leer
_logger.info("Se leyeron todas las publicaciones.")


Este método devuelve todas las publicaciones pertenecientes a una cuenta. Que es lo que necesitamos para el paso siguiente, que es leer la información de una publicación. Pero eso en otro post.

Gustavo Orrillo 21 de noviembre de 2025
Compartir
Archivar
Identificarse dejar un comentario