Cómo adaptar tu catálogo de productos al Product Feed Spec de OpenAI Commerce
¿Quieres que tu tienda online esté lista para integrarse con las experiencias de OpenAI Commerce?
En esta guía creada por mi Yago Vázquez (Consultor SEO) aprenderás a transformar tu catálogo en un feed compatible, siguiendo las mejores prácticas de SEO para LLMs.
👉 Para participar oficialmente y habilitar tu tienda en el ecosistema, primero debes inscribirte en el portal de comerciantes de OpenAI. Solo necesitas crear tu cuenta en https://chatgpt.com/es-ES/merchants/, donde podrás registrar tu negocio, aceptar las condiciones de uso y empezar a configurar tu catálogo de productos para que se muestre dentro de las experiencias de ChatGPT y otros servicios.
1. Auditoría inicial de tu catálogo
Antes de exportar cualquier información, realiza una revisión exhaustiva de tu catálogo o ERP para conocer qué campos tienes disponibles y cuáles te faltan. Esto te permitirá anticiparte a errores comunes en la integración.
- ID único o SKU
- Nombre del producto
- Descripción (sin HTML)
- URL del producto (PDP)
- Precio y divisa
- Stock disponible
- Marca y categoría
- Imágenes
- Variantes (color, talla, etc.)
- Políticas de devolución (si usarás checkout)
👉 Haz especial hincapié en este paso: una auditoría bien hecha evita pérdidas de tiempo en fases posteriores.
2. Mapeo de campos (source → spec)
Para que tu feed funcione correctamente con el estándar de OpenAI, debes mapear tus campos internos al formato requerido. A continuación te muestro los campos obligatorios y los recomendados.
Campos obligatorios:
id→ SKU o product_idtitle→ Nombre del productodescription→ Descripción sin HTMLlink→ URL canónicaimage_link→ Imagen principalprice→ Precio + divisa (ej. 79.99 USD)availability→ in_stock / out_of_stock / preorderinventory_quantity→ Cantidad en stockenable_search,enable_checkout
Campos recomendados:
brand,product_category,weight
👉 Si activas checkout, añade también: seller_name, seller_url, return_policy, return_window.
3. Ejemplo de feed en CSV
enable_search,enable_checkout,id,title,description,link,image_link,price,availability,inventory_quantity,brand,product_category,weight,seller_name,seller_url,return_policy,return_window
true,false,SKU12345,"Men's Trail Running Shoes Black","Waterproof trail shoe with cushioned sole","https://example.com/product/SKU12345","https://example.com/images/skሴ5.jpg","79.99 USD",in_stock,25,OpenAI,"Apparel & Accessories > Shoes","1.5 lb","Example Store","https://example.com/store","https://example.com/returns",304. Ejemplo de feed en JSON
{
"enable_search": "true",
"enable_checkout": "false",
"id": "SKU12345",
"title": "Men's Trail Running Shoes Black",
"description": "Waterproof trail shoe with cushioned sole",
"link": "https://example.com/product/SKU12345",
"image_link": "https://example.com/images/skሴ5.jpg",
"price": "79.99 USD",
"availability": "in_stock",
"inventory_quantity": 25,
"brand": "OpenAI",
"product_category": "Apparel & Accessories > Shoes",
"weight": "1.5 lb"
}5. Reglas de validación esenciales
sale_pricedebe ser menor o igual quepricey requieresale_price_effective_date.- Si
availability = preorder, debe definirseavailability_dateen el futuro. - Las variantes deben compartir
item_group_id. - Todas las URLs deben devolver un código HTTP 200.
- El feed puede actualizarse cada 15 minutos para mantener la frescura del catálogo.
Siguiendo estas reglas aseguras que el sistema rechace lo mínimo posible y tu feed pase las validaciones de OpenAI.
6. Script de transformación en Python
Ejemplo para transformar un CSV en un feed válido (CSV + JSONL):
import csv, json, html, re
with open("catalogo.csv", newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
feed = []
for row in reader:
item = {
"enable_search": "true",
"enable_checkout": "false",
"id": row["sku"],
"title": row["title"],
"description": html.unescape(re.sub("<[^>]*>", "", row["description"])),
"link": row["url"],
"image_link": row["image"],
"price": f"{row['price']} USD",
"availability": "in_stock" if int(row["stock"]) > 0 else "out_of_stock",
"inventory_quantity": int(row["stock"]),
"brand": row.get("brand", ""),
"product_category": row.get("category", ""),
"weight": row.get("weight", "0.5 kg")
}
feed.append(item)
with open("openai_feed.jsonl", "w", encoding="utf-8") as out:
for item in feed:
out.write(json.dumps(item) + "\n")
7. Exportar el feed desde PrestaShop
En PrestaShop, los datos del catálogo se encuentran distribuidos en varias tablas (productos, descripciones, stock, imágenes, marcas). Para generar el feed compatible con OpenAI Commerce puedes usar una consulta SQL base y luego transformarla.
Mapeo de campos clave
id→ ps_product.id_producttitle→ ps_product_lang.namedescription→ ps_product_lang.descriptionlink→ ps_product_lang.link_rewriteimage_link→ ps_image.id_image (combinado con URL base)availability→ ps_stock_available.quantitybrand→ ps_manufacturer.name
Ejemplo en SQL
sql
SELECT p.id_product AS id,
pl.name AS title,
pl.description AS description,
CONCAT('https://tu-dominio.com/', pl.link_rewrite, '.html') AS link,
CONCAT('https://tu-dominio.com/img/p/', i.id_image, '-large_default.jpg') AS image_link,
FORMAT(p.price, 2) AS price_raw,
IF(s.quantity > 0, 'in_stock', 'out_of_stock') AS availability,
s.quantity AS inventory_quantity,
m.name AS brand
FROM ps_product p
JOIN ps_product_lang pl ON p.id_product=pl.id_product AND pl.id_lang=1
LEFT JOIN ps_stock_available s ON s.id_product=p.id_product
LEFT JOIN ps_manufacturer m ON m.id_manufacturer=p.id_manufacturer
LEFT JOIN ps_image i ON i.id_product=p.id_product AND i.cover=1
WHERE p.active=1;8. Exportar el feed desde Magento 2
En Magento 2 (Adobe Commerce), lo más recomendable es usar el stack nativo de Magento en lugar de SQL crudo, ya que trabaja con un modelo EAV.
Mapeo de campos clave
id→ SKUtitle→ namedescription→ descriptionlink→ getProductUrl()image_link→ media/catalog/product + imageavailability→ stock (MSI)brand→ atributo personalizadoproduct_category→ nombres de categorías
Ejemplo en PHP
use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';
$params = $_SERVER;
$bootstrap = Bootstrap::create(BP, $params);
$obj = $bootstrap->getObjectManager();
$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
$productCollection = $obj->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory')->create();
$productCollection->addAttributeToSelect(['sku','name','description','price','brand','weight','image']);
$fp = fopen(__DIR__.'/openai_feed.csv','w');
fputcsv($fp,['enable_search','enable_checkout','id','title','description','link','image_link','price','availability','inventory_quantity','brand','product_category','weight']);
foreach($productCollection as $p){
$sku = $p->getSku();
$name = $p->getName();
$desc = strip_tags($p->getDescription());
$url = $p->getProductUrl();
$img = $baseUrl.'media/catalog/product'.$p->getImage();
$price = number_format((float)$p->getPrice(),2,'.','').' EUR';
...
}
9. Validación final del feed
Independientemente del CMS que uses, antes de entregar el feed conviene validarlo con un script en Python:
import csv, sys
req = {'id','title','description','link','image_link','price','availability','inventory_quantity'}
with open('openai_feed.csv', newline='', encoding='utf-8') as f:
r = csv.DictReader(f)
for i,row in enumerate(r, start=2):
missing = [k for k in req if not row.get(k)]
if missing:
print(f'Fila {i}: faltan campos {missing}')
sys.exit(1)
print('Feed OK')
10. Buenas prácticas para tu feed
- Usa IDs estables (evita cambiar SKUs una vez lanzado).
- Limpia las descripciones de HTML y elimina tags innecesarios.
- Incluye divisa en el precio y unidades en medidas.
- Automatiza la generación/refresco del feed cada ~15 min para máxima frescura.
- Prueba primero con un feed de muestra reducido antes de exportar el catálogo completo.
Estas buenas prácticas mejoran la calidad, fiabilidad y velocidad de integración.
Conclusiones finales
Adaptar tu catálogo al Product Feed Spec de OpenAI Commerce no es complicado si sigues un flujo claro:
Auditar → Mapear → Normalizar → Validar → Exportar → Refrescar.
Siguiendo estos pasos, tu tienda estará lista para integrarse en el ecosistema de IA de OpenAI y tus productos podrán aparecer correctamente en experiencias de ChatGPT y otros servicios.
Da el siguiente paso con OpenAI Commerce
¿Estás listo para que tus productos se muestren en las experiencias de ChatGPT y otros servicios de OpenAI? El primer paso es inscribirte como comerciante y registrar tu tienda en el portal oficial de comerciantes.
No pierdas la oportunidad de adelantarte: configura hoy tu catálogo y empieza a vender directamente en el ecosistema de IA.
No pierdas la oportunidad de adelantarte: configura tu catálogo hoy y empieza a vender directamente en el ecosistema de IA.






