API

API de AliExpress para España: fichas, variantes y precios en euros (JSON)

Con `"country": "ES"`, `"currency": "EUR"` y `"language": "es"`, esta API consulta AliExpress como un comprador con dirección en España y devuelve en JSON lo que enseña la ficha: título en español, precio y existencias de cada variante, desde qué país sale el paquete, coste y fecha estimada de entrega, valoraciones y número de reseñas. La API de afiliados y la de dropshipping son los programas oficiales de AliExpress para quien genera enlaces, importa productos a su tienda o tramita pedidos; esto es otra cosa: aquí no se gestiona nada, solo se lee el catálogo público. Los tres parámetros de mercado son independientes entre sí, y si no los mandas la respuesta llega pensada para Estados Unidos y en dólares.

Endpoints

endpointQué devuelveObligatorios
searchBúsqueda por palabras clave: precio, precio anterior, descuento, ventas y valoración de cada tarjeta. Filtros de precio mínimo y máximo, país de envío (`ship_from`, por ejemplo `ES` para lo que sale de almacenes en España) y envío gratis; se puede ordenar por relevancia, número de pedidos, precio o fecha de publicación. Entre 46 y 60 resultados por página de AliExpress; `max_results` recorre las páginas que haga falta.query
product_detailToda la ficha de un producto, por `product_id` o URL: precio y stock de cada variante (SKU), dimensiones de la variante con sus valores (color, modelo, «Envíos desde»), especificaciones, imágenes, vídeo, bloque de envío al país y provincia indicados, valoración, cupones y el peso cuando el vendedor lo publica.todos opcionales
reviewsReseñas de compradores con nota, texto, fecha, país y variante comprada, varias páginas en una sola llamada, más el reparto de estrellas. Se pueden pedir solo las que llevan fotos.todos opcionales
shippingLas opciones de envío al país indicado: transportista, coste y plazo.todos opcionales
descriptionLa descripción larga que redacta el vendedor, con su texto y sus imágenes.todos opcionales
similarProductos parecidos a uno dado (sin incluir el propio artículo), o a partir de unas palabras clave.todos opcionales
store_infoEl perfil de una tienda por su id o su URL; si además pasas una palabra que la tienda venda, añade su puntuación, el porcentaje de valoraciones positivas y el número de valoraciones.todos opcionales
dealsLos artículos rebajados para una búsqueda, ordenados por descuento, con un porcentaje mínimo de rebaja opcional.query

Cada llamada se cobra en créditos. Las llamadas fallidas y bloqueadas son gratuitas.

Ejemplo que funciona

Esta funda salió en `search` con `"ship_from": "ES"`. En la ficha, el país de salida es una dimensión más de la variante («Envíos desde»): la misma versión para iPhone 15 Pro cuesta 7,49 € si sale de España, 12,89 € desde Polonia y 19,39 € desde Francia, con 15 unidades en cada caso. `price_min` solo dice cuánto cuesta la opción más barata, no desde dónde llega; si comparas precios de AliExpress en España, guarda cada variante con su valor de «Envíos desde» (el código de país está en `sku_properties[].value_details[].ships_from_code`). Ojo también al bloque `shipping`: en una consulta del 26 de octubre, para Madrid indicaba «1 days» y, a la vez, entrega el 2 de noviembre.

Petición
curl -X POST https://api.reefapi.com/aliexpress/v1/product_detail \
  -H "x-api-key: TU_CLAVE" \
  -H "content-type: application/json" \
  -d '{"product_id": "1005013082068926", "country": "ES", "currency": "EUR", "language": "es", "province": "Madrid"}'
Respuesta (recortada)
{
  "ok": true,
  "data": {
    "product": {
      "product_id": "1005013082068926",
      "title": "Funda transparente de lujo para iPhone 16 15 11 12 13 14 Pro Max silicona TPU suave para iPhone XR XS Max 8 Plus funda trasera transparente",
      "price_min": 7.49,
      "price_max": 25.39,
      "currency": "EUR",
      "rating": 4.9,
      "review_count": 5104,
      "sold_count": null,
      "sold_text": "Este vendedor: 50.000+ ventas | Ventas totales: 50.000+",
      "total_stock": 45,
      "sku_properties": [
        {
          "name": "Envíos desde",
          "values": ["Polonia", "España", "Francia"],
          "value_details": [
            { "value_id": "203372089", "name": "Polonia", "ships_from_code": "PL", ... },
            { "value_id": "201336104", "name": "España", "ships_from_code": "ES", ... },
            { "value_id": "201336342", "name": "Francia", "ships_from_code": "FR", ... }
          ]
        },
        { "name": "Material", "values": ["For iPhone 15 Pro"], ... }
      ],
      "sku_variants": [
        {
          "sku_id": "12000060226024615",
          "props": { "Envíos desde": "España", "Material": "For iPhone 15 Pro" },
          "price": { "sale": 7.49, "sale_str": "7,49€", "currency": "EUR" },
          "stock": 15,
          "available": true
        },
        {
          "sku_id": "12000060226024617",
          "props": { "Envíos desde": "Polonia", "Material": "For iPhone 15 Pro" },
          "price": { "sale": 12.89, "sale_str": "12,89€", "currency": "EUR" },
          "stock": 15,
          "available": true
        },
        {
          "sku_id": "12000060226024616",
          "props": { "Envíos desde": "Francia", "Material": "For iPhone 15 Pro" },
          "price": { "sale": 19.39, "sale_str": "19,39€", "currency": "EUR" },
          "stock": 15,
          "available": true
        },
        {
          "sku_id": "12000060226024665",
          "props": { "Envíos desde": "Polonia", "Material": "501" },
          "price": { "sale": 25.19, "sale_str": "25,19€", "currency": "EUR" },
          "stock": 0,
          "available": false
        },
        ...
      ],
      "shipping": {
        "ship_to": "ES",
        "shipping_cost": 0.0,
        "free": true,
        "delivery_estimate": "1 days",
        "delivery_eta": "02 de NOV.",
        "ship_from": "España",
        "option_count": 3,
        "lines": ["Seguimiento no disponible", "Seguimiento del pedido disponible"]
      },
      ...
    }
  },
  "meta": { "record_count": 1, "variant_count": 81, "country": "ES", "currency": "EUR", "language_sent": "es", "province_sent": "Madrid", "cache_hit": false, "mode": "live" }
}

Scraper de AliExpress con Python: paginación, variantes y tiendas

La paginación de AliExpress engaña más de lo que parece. A principios de septiembre de 2026, un cliente nos avisó de que, pidiendo 120 resultados, la página 2 repetía buena parte de la 1. El fallo era nuestro: cada llamada recorría varias páginas de AliExpress y la siguiente arrancaba solo una página más allá, así que se pisaban. Tras corregirlo, la repetición entre la página 1 y la 2 bajó del 21,7 % al 7,0 %. Ese 7 % restante lo pone AliExpress, que repite tarjetas entre sus propias páginas: deduplica por `product_id` aunque tu paginador esté bien hecho.

En las variantes, AliExpress no siempre declara el valor que usa. Si una combinación apunta a un valor que la ficha no describe, lo único que queda es su número interno, y la variante llega como `{"Material": "501"}`, como si 501 fuera un material. En agosto de 2026 lo medimos en 2 de 1.711 valores, siempre en variantes agotadas; en la funda del ejemplo afectaba a 78 de sus 81 variantes, todas sin stock. No lo convertimos en otra cosa para no romper integraciones que ya leen `props`, así que filtra por `available` antes de agrupar.

Una tienda que no existe tampoco da error. En agosto de 2026 comprobamos que la página de un id que no corresponde a ninguna tienda responde con un HTTP 200 de unos 670 bytes, sin título ni datos: un scraper que solo mire el código de estado guarda una tienda vacía. `store_info` reconoce esa respuesta y devuelve NOT_FOUND al primer intento.

Antes de escribir el primer selector, decide qué vas a llamar «precio» en tu base de datos: el de la tarjeta de búsqueda, el `price_min` de la ficha o el de la variante concreta que sale de España. Aquí llegan separados, y en tu scraper también deberían estarlo.

Límites y notas honestas

  • Este servicio no lo ofrecen AliExpress ni Alibaba, ni cuenta con su aval: es un acceso independiente, sin ningún acuerdo de por medio.
  • Sin `country`, `currency` y `language` se usan los valores por defecto (US, USD, en): precios en dólares y envío a Estados Unidos. Para España hay que mandar los tres en cada llamada.
  • `search` no traduce: en tres búsquedas del 26 de octubre de 2026 con `"language": "es"` («funda iphone 16», la misma con `ship_from: "ES"` y «zapatillas running»), los 60 títulos llegaron en inglés, y el texto de ventas de las tarjetas, cuando lo había, también («50,000+ sold»). El título en español sale en `product_detail`; `sold_count` vino en null en las cuatro fichas, así que las ventas hay que leerlas en `sold_text`.
  • El precio de la tarjeta de búsqueda puede no coincidir con la ficha. En dos de las cuatro que comparamos quedaba fuera del rango de la ficha: 2,32 € frente a 3,39–3,89 €, y 4,02 € frente a 3,09–3,79 €.
  • En 3 de las 4 fichas consultadas, `store` devolvió la misma tienda (id 1103573332, con 10 valoraciones de vendedor). Es el mismo bloque que ya vimos en agosto de 2026 repetido, idéntico, en productos sin ninguna relación entre sí (una esterilla de yoga, un teclado, un cable USB-C): llega así en los datos de AliExpress, no lo pone nuestro parser, y sigue sin resolver. No atribuyas un producto a una tienda solo por ese bloque.
  • Los plazos de `shipping` son los que publica AliExpress y no siempre cuadran: en la ficha del ejemplo, «1 days» convivía con una entrega estimada para el 2 de noviembre. El texto del plazo llega en inglés aunque la fecha venga en español.
  • `product_detail` cuesta 2 créditos por llamada y el resto de endpoints, 1.
  • No hay histórico de precios ni respuestas guardadas: cada llamada trae el precio de ese instante (`cache_hit: false`), y si quieres ver cómo evoluciona tendrás que ir guardándolo tú.