Saltar al contenido
MarketScrap Datos

Documentación

Guía rápida

Todo lo necesario para hacer tu primera consulta en cinco minutos. La API es de solo lectura y responde en JSON. URL base:

https://marketscrap.myp.com.es/api/v1

Autenticación

Crea una clave en tu panel. Empieza por msd_ y solo se muestra una vez: guárdala en un gestor de secretos o en una variable de entorno. Envíala en cada petición con la cabecera:

Cabecera
Authorization: Bearer msd_…

No uses la clave en código que se ejecute en el navegador de tus usuarios: cualquiera podría leerla y gastar tus créditos. Si se filtra, revócala en el panel y crea otra.

Primera consulta

La consulta más habitual: el último precio de una ficha de producto.

curl -G "https://marketscrap.myp.com.es/api/v1/ofertas" \
  -H "Authorization: Bearer $MSD_CLAVE" \
  --data-urlencode "url=https://www.mediamarkt.es/es/product/_lavadora-ejemplo-8-kg-0000000.html"

Respuesta (datos ficticios):

200 OK
{
  "url": "https://mediamarkt.es/es/product/_lavadora-ejemplo-8-kg-0000000.html",
  "canal": "mediamarkt",
  "pais": "ES",
  "capturado_en": "2026-10-08T07:12:03Z",
  "edad_s": 5400,
  "lector": "mediamarkt@1.4",
  "sospechosa": false,
  "fuente": "compartido",
  "oferta": {
    "titulo": "Lavadora de ejemplo 8 kg 1400 rpm",
    "precio": 449.0,
    "precio_tachado": 599.0,
    "moneda": "EUR",
    "disponible": true,
    "ean": "0000000000000",
    "marca": "Marca Ejemplo",
    "modelo": "EJ-8140",
    "vendedor": "MediaMarkt",
    "precio_unidad": null,
    "unidad": null,
    "categoria": "Lavadoras",
    "imagen": "https://…/ejemplo.jpg",
    "atributos": { "capacidad_kg": 8, "clase_energetica": "A" }
  }
}

edad_s son los segundos desde que se leyó el precio. sospechosa se marca cuando el precio ha cambiado más de un 60 % respecto a la lectura anterior en menos de 24 horas: no se descarta, pero conviene revisarlo. Los campos que la tienda no publica llegan a null.

Endpoints

RutaQué devuelveCréditos
GET /ofertas?url=Última oferta leída de una URL de producto.
  • url: URL de la ficha; la respuesta trae la URL normalizada
  • max_edad_h: edad máxima aceptada en horas; por defecto 6, máx. 8760
  • pais: país ISO 3166-1 alfa-2 (ES, PT, FR…); por defecto ES
1
GET /ofertas?ean=Lista con la última oferta del EAN en cada canal donde lo leemos.
  • ean: código EAN/GTIN del producto
  • max_edad_h: opcional; sin él no hay límite de edad
  • pais: país ISO 3166-1 alfa-2 (ES, PT, FR…); por defecto ES
2
GET /historicoSerie de precios, del más antiguo al más reciente (por defecto, 90 días; máx. 5.000 puntos).
  • url: o bien ean + canal
  • desde, hasta: fechas ISO 8601 opcionales
  • pais: país ISO 3166-1 alfa-2 (ES, PT, FR…); por defecto ES
5
GET /enlaces?ean=URLs conocidas de un EAN, con su canal y cuándo se vieron.
  • canal: opcional, para filtrar por tienda
  • pais: país ISO 3166-1 alfa-2 (ES, PT, FR…); por defecto ES
2
GET /canalesCobertura: canales, URLs, frescura media y países de cada uno.
  • pais: opcional: solo ese país; sin él, todos
Gratis
GET /cuentaTu saldo, el consumo del mes, tu límite por minuto y las tarifas.Gratis

Los costes vigentes están en Precios y en GET /cuenta.

curl -G "https://marketscrap.myp.com.es/api/v1/ofertas" \
  -H "Authorization: Bearer $MSD_CLAVE" \
  --data-urlencode "ean=0000000000000" \
  --data-urlencode "max_edad_h=24"

Errores

Los errores devuelven un código HTTP estándar y un cuerpo {"detail": "…"} con la causa.

CódigoSignificadoQué hacer
400 / 422Parámetros incorrectosRevisa la consulta: falta url o ean, o un valor no es válido.
401Sin autenticarFalta la clave, está mal escrita o se ha revocado.
402Saldo insuficienteRecarga créditos desde el panel. No se cobra (tampoco cuenta como consulta sin dato).
403No permitidoLa clave no puede usar esa ruta (por ejemplo, una de escritura).
404No encontradoNo tenemos ese dato o es más viejo que max_edad_h. No se cobra, salvo 1 de cada 10 consultas sin dato (mira X-Consultas-Sin-Dato-Hasta-Cobro).
429Demasiadas peticionesHas superado el límite por minuto. Espera lo que diga Retry-After.
5xxError del servicioReintenta con espera exponencial; si persiste, avísanos.

Límites y cabeceras

Cada cuenta tiene un número máximo de peticiones por minuto (lo ves en tu panel y en GET /cuenta). Todas las respuestas incluyen:

  • X-RateLimit-Limit: peticiones permitidas por minuto.
  • X-RateLimit-Remaining: las que te quedan en el minuto actual.
  • X-RateLimit-Reset: segundos hasta que se reinicia el contador.
  • X-Creditos-Restantes: tu saldo después de esta petición.
  • X-Consultas-Sin-Dato-Hasta-Cobro: solo en consultas sin dato (404 o lista vacía): cuántas consultas sin dato faltan para la siguiente que se cobra (1 = la próxima).
  • Retry-After: solo en 429: segundos que debes esperar.

Buenas prácticas

  • Usa max_edad_h para no pagar por datos más viejos de lo que tu caso necesita.
  • Si buscas el mismo producto en varias tiendas, una consulta por EAN (2 créditos) suele salir más a cuenta que varias por URL.
  • Guarda en tu lado lo que ya has consultado: el dato no cambia hasta la siguiente lectura (mira capturado_en).
  • Ante 429 o 5xx, reintenta con espera; nunca en un bucle sin pausa.
  • Consulta GET /canales (gratis) antes de preguntar por tiendas que quizá no leemos: las consultas sin dato no se cobran, salvo 1 de cada 10, para evitar consultas masivas a ciegas. Lo que nos pedís y no tenemos nos ayuda a decidir qué webs añadir.
  • Si vigilas varios países, pasa pais (ISO 3166-1 alfa-2: ES, PT, FR…). Una misma tienda puede servir varios países con la misma URL y precios distintos: cada oferta es de una URL y un país, con su moneda. Sin pais, España.
  • Usa una clave por aplicación: si una se filtra, revocas solo esa.

Referencia OpenAPI

El esquema completo, con todos los campos y tipos, está publicado en formato OpenAPI. Puedes explorarlo aquí o importarlo en Postman, Insomnia o tu generador de clientes.