Extraer datos de producto
Una ficha de producto esconde sus datos reales detrás del diseño que trae el tema de la tienda, y no hay dos temas que coloquen el precio, la etiqueta de stock o la galería de imágenes en el mismo lugar. Este endpoint lee la página como lo haría un comprador y devuelve campos estructurados —nombre, precio, estado de stock, imágenes— sin importar qué plataforma o tema construyó la página.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
El problema de mil plantillas distintas
Cada plataforma de tienda en línea, y cada tema dentro de ella, organiza la información del producto de forma diferente: el precio puede estar en un span con el símbolo de moneda incrustado en el texto, el estado de stock puede ser una etiqueta de color sin texto real debajo, las imágenes pueden cargar de forma perezosa desde un carrusel que solo renderiza el primer cuadro en el HTML crudo. Un scraper escrito contra el marcado de una tienda se rompe apenas toca otra plataforma, y un catálogo que abarca decenas de proveedores implica decenas de analizadores a medida que escribir y mantener. web.product_extract está construido para leer la página como lo haría un comprador, no como un conjunto fijo de selectores CSS.
Qué devuelve una sola ficha de producto
Envíe la URL de una ficha de producto por POST a /web/product-extract y reciba un task_id de inmediato mientras la página se descarga y se interpreta. El resultado terminado incluye el nombre del producto, el precio actual, el estado de stock o disponibilidad, y el conjunto de imágenes del producto encontradas en la página, estructurado de la misma forma sin importar qué plataforma sirvió la página original. La entrega es por webhook firmado o mediante un enlace firmado válido por 24 horas, igual que el resto de las tareas asíncronas de la plataforma.
Los datos estructurados ayudan, pero no siempre están
Algunas tiendas emiten schema Product limpio en JSON-LD que hace esto casi trivial de leer; muchas otras no, o lo emiten de forma incompleta, dejando el precio o el stock totalmente fuera del marcado estructurado y obligando a leer la página visible directamente. Una extracción de producto confiable tiene que funcionar en ambos casos: usar datos estructurados donde están presentes y son correctos, y leer la página renderizada directamente donde no lo están, porque un catálogo de proveedores reales siempre va a incluir los dos tipos de sitios.
Dónde encaja en un flujo de catálogo o precios
Un catálogo de dropshipping que sincroniza precios desde páginas de proveedores, una herramienta de comparación de precios que sigue un producto en varias tiendas, o un equipo de compras que vigila cuándo vuelve el stock de un componente, todos necesitan la misma lectura confiable sobre el mismo puñado de campos, repetida en muchas páginas y muchas tiendas. El precio combina una tarifa base por solicitud con un cargo por URL, así que una sincronización nocturna sobre mil fichas de producto cuesta un monto predecible y lineal en lugar de una tarifa plana que castiga catálogos pequeños o una tarifa por consumo que sorprende a los grandes, y una página que no carga o que realmente no tiene los datos nunca se cobra.
Qué puede hacer con ella
Sincronización de precio y stock para dropshipping
Extraiga el precio actual y la disponibilidad de las fichas de proveedores cada noche para mantener exacto el listado de una tienda sin revisión manual.
Comparación de precios entre tiendas
Siga el precio del mismo producto en varias tiendas competidoras para alimentar una herramienta de comparación o una estrategia de reprecio.
Monitoreo de reposición de stock
Vigile la ficha de un componente o producto en busca de un cambio en el estado de stock y active una compra o una alerta en el momento en que vuelva a estar disponible.
Enriquecimiento de catálogo desde fichas de proveedores
Complete imágenes o nombres de producto que faltan en un catálogo interno extrayéndolos directamente de la ficha original del proveedor.
Preguntas frecuentes
¿Cómo extraigo datos de producto con la API?
Envíe la URL de la ficha de producto por POST a /web/product-extract, guarde el task_id devuelto y reciba los datos estructurados del producto por webhook o mediante un enlace firmado válido por 24 horas.
¿Es gratis la API para extraer datos de producto?
No, no hay plan gratuito ni prueba; cuesta $0.046 por solicitud más $0.0145 por URL, y una extracción fallida nunca se cobra.
¿Qué campos devuelve?
Nombre del producto, precio actual, estado de stock o disponibilidad, y las imágenes encontradas en la página, estructurados de forma consistente entre distintas tiendas y plataformas.
¿Funciona en cualquier plataforma de comercio electrónico?
Está construido para leer páginas de forma genérica en lugar de apuntar a una sola plataforma, combinando schema Product estructurado cuando está disponible con lectura directa de la página cuando no lo está.
¿Qué tan exactos son los datos de precio y stock?
Reflejan exactamente lo que mostraba la página en el momento de la extracción; los precios y el stock que cambian con frecuencia conviene volver a revisarlos con la frecuencia con que se actualiza la página de origen.
¿Puedo extraer datos de miles de fichas de producto por lote?
Sí, envíe una tarea asíncrona por cada URL y reciba cada resultado por webhook, que es como se construyen normalmente las sincronizaciones a escala de catálogo.
¿Qué pasa si una página no muestra precio o información de stock?
La tarea devuelve los campos que pudo extraer con confianza y deja el resto vacío en lugar de adivinar un valor.
¿Se guarda el contenido de la página después de la extracción?
No, las páginas descargadas y los datos de producto extraídos se eliminan después del período de retención y nunca se usan para entrenamiento.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/product-extract \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com"}'const res = await fetch("https://api.kit.forhosting.com/web/product-extract", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://ejemplo.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/product-extract",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://ejemplo.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/product-extract", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://ejemplo.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://ejemplo.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/product-extract", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"url": "https://ejemplo.com"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.product_extract",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
timeout_sec | 30 |
max_crawl_pages | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |