PrestaShop Product Feeds: Google Shopping, Facebook Catalog, and More

408 views

PrestaShop Product Feeds: Google Shopping, Facebook Catalog, and More

Product feeds are the backbone of modern e-commerce advertising. They connect your PrestaShop store's catalog to advertising platforms like Google Shopping, Meta (Facebook and Instagram), Pinterest, and comparison shopping engines. A well-optimized product feed can dramatically increase your visibility, drive qualified traffic, and boost sales. This guide covers everything from setting up your first feed to advanced optimization techniques that will give your products a competitive edge.

What Is a Product Feed and Why Does It Matter

A product feed is a structured data file (typically XML, CSV, or JSON) that contains detailed information about every product in your catalog. Advertising platforms ingest this file to display your products in shopping ads, marketplace listings, and social commerce features.

The quality of your product feed directly impacts:

  • Ad eligibility - Products with missing or incorrect data get disapproved and never shown to shoppers
  • Ad relevance - Better product titles and descriptions mean your ads appear for more relevant searches
  • Click-through rate - Accurate prices, high-quality images, and compelling descriptions drive more clicks
  • Cost per acquisition - Optimized feeds lead to better quality scores, which lower your cost per click

Google Shopping Feed Setup

Prerequisites

Before creating your Google Shopping feed, you need:

  1. Google Merchant Center account - Create one at merchants.google.com. Verify and claim your website URL.
  2. Google Ads account - Required if you want to run Shopping campaigns (free listings do not require this).
  3. Product identifiers - GTIN (EAN-13 in Europe, UPC in North America), MPN (Manufacturer Part Number), and Brand must be present for most product categories.
  4. Compliant website - Your store must have clear return policies, shipping information, and contact details visible to shoppers.

Required Feed Attributes

AttributePrestaShop FieldRequirements
idProduct ID or ReferenceUnique identifier, max 50 characters
titleProduct NameMax 150 chars, include key attributes
descriptionProduct DescriptionMax 5000 chars, no HTML tags
linkProduct URLMust match verified domain
image_linkCover Image URLMin 100x100px, recommended 800x800px+
priceProduct PriceInclude currency code (e.g., 29.99 EUR)
availabilityStock Statusin_stock, out_of_stock, or preorder
brandManufacturerRequired for all products with a brand
gtinEAN-13 / UPCRequired for all products with a GTIN
mpnSupplier ReferenceRequired if no GTIN exists
conditionProduct Conditionnew, refurbished, or used
google_product_categoryMapped manually or via moduleGoogle's taxonomy ID or full path

Setting Up the Feed in PrestaShop

Option A - PrestaShop Marketing with Google (Official Module)

The official module connects directly to Google Merchant Center. Install it from the PrestaShop Addons marketplace or your back office. Configuration steps:

  1. Navigate to Modules > Module Manager, search for "PrestaShop Marketing with Google"
  2. Install and click Configure
  3. Connect your Google account using OAuth
  4. Map your product attributes to Google's required fields
  5. Select which products to include (you can exclude by category, stock status, or price range)
  6. Set the synchronization frequency (daily is recommended)

Option B - Third-Party Feed Modules

Third-party modules often provide more flexibility. Look for modules that support:

  • Custom attribute mapping (map any PrestaShop field to any feed attribute)
  • Feed filtering (exclude products by category, manufacturer, stock, price)
  • Multiple feed formats (XML, CSV, TXT)
  • Scheduled generation via cron
  • Support for product combinations/variants

Option C - Custom XML Feed

For maximum control, you can generate a feed programmatically. Create a PHP file that queries your database and outputs Google-compliant XML:

<?php
// Example - Basic Google Shopping feed generator
require_once(dirname(__FILE__) . '/config/config.inc.php');
require_once(dirname(__FILE__) . '/init.php');

header('Content-Type: application/xml; charset=utf-8');

$id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
$id_shop = (int)Context::getContext()->shop->id;
$link = new Link();

$products = Db::getInstance()->executeS('
    SELECT p.id_product, pl.name, pl.description, 
           p.reference, p.ean13, p.price, p.quantity,
           m.name as manufacturer_name,
           cl.name as category_name,
           i.id_image
    FROM ' . _DB_PREFIX_ . 'product p
    JOIN ' . _DB_PREFIX_ . 'product_lang pl 
        ON p.id_product = pl.id_product AND pl.id_lang = ' . $id_lang . '
    JOIN ' . _DB_PREFIX_ . 'product_shop ps 
        ON p.id_product = ps.id_product AND ps.id_shop = ' . $id_shop . '
    LEFT JOIN ' . _DB_PREFIX_ . 'manufacturer m 
        ON p.id_manufacturer = m.id_manufacturer
    LEFT JOIN ' . _DB_PREFIX_ . 'category_lang cl 
        ON p.id_category_default = cl.id_category AND cl.id_lang = ' . $id_lang . '
    LEFT JOIN ' . _DB_PREFIX_ . 'image i 
        ON p.id_product = i.id_product AND i.cover = 1
    WHERE ps.active = 1 AND p.quantity > 0
');

echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">';
echo '<channel>';
echo '<title>Your Store Name</title>';

foreach ($products as $product) {
    $productObj = new Product($product['id_product'], false, $id_lang);
    $finalPrice = $productObj->getPrice(true);
    $productUrl = $link->getProductLink($product['id_product']);
    $imageUrl = $link->getImageLink(
        $productObj->link_rewrite, 
        $product['id_image']
    );
    
    echo '<item>';
    echo '<g:id>' . $product['id_product'] . '</g:id>';
    echo '<g:title>' . htmlspecialchars($product['name']) . '</g:title>';
    echo '<g:link>' . htmlspecialchars($productUrl) . '</g:link>';
    echo '<g:price>' . number_format($finalPrice, 2) . ' EUR</g:price>';
    echo '<g:availability>in_stock</g:availability>';
    echo '<g:image_link>' . htmlspecialchars($imageUrl) . '</g:image_link>';
    echo '<g:brand>' . htmlspecialchars($product['manufacturer_name']) . '</g:brand>';
    echo '<g:gtin>' . $product['ean13'] . '</g:gtin>';
    echo '<g:condition>new</g:condition>';
    echo '</item>';
}

echo '</channel></rss>';

Set up a cron job to regenerate the feed periodically (e.g., every 6 hours).

Facebook and Instagram Catalog Feed

Setting Up a Meta Product Catalog

  1. Go to Meta Commerce Manager at business.facebook.com/commerce
  2. Create a new catalog and select "E-commerce" as the catalog type
  3. Choose "Data feed" as the upload method
  4. Set up a scheduled feed URL pointing to your PrestaShop feed

Required Attributes for Meta

AttributeDescriptionRequirements
idUnique product IDMax 100 characters
titleProduct nameMax 200 characters
descriptionProduct descriptionMax 9999 characters
availabilityStock statusin stock, out of stock, available for order
conditionProduct conditionnew, refurbished, used
priceCurrent priceFormat: 9.99 USD
linkProduct page URLMust be accessible and match verified domain
image_linkMain product imageMin 500x500px for ads, 1024x1024px recommended
brandBrand nameRequired for branded products

Meta Pixel Integration

For Dynamic Ads to work effectively, you need the Meta Pixel installed on your PrestaShop store. The pixel tracks user behavior and matches it with your product catalog to show relevant remarketing ads. Key events to track:

  • ViewContent - When a user views a product page (pass the product ID)
  • AddToCart - When a user adds a product to their cart
  • Purchase - When a user completes an order (pass order value and product IDs)

Feed Optimization Best Practices

Title Optimization

Product titles are the single most impactful element of your feed. Follow these guidelines:

  • Include the brand name first - "Nike Air Max 90 Men's Running Shoes" performs better than "Men's Running Shoes by Nike"
  • Add key attributes - Color, size, material, and model number help match search queries
  • Front-load important keywords - Google truncates titles after ~70 characters in Shopping ads
  • Avoid promotional text - "SALE" or "Free Shipping" in titles violates Google's policies

Image Optimization

  • Use white or neutral backgrounds for Google Shopping
  • Show the product clearly without watermarks, logos, or promotional overlays
  • Provide at least 800x800 pixels for standard products, 1200x1200 for apparel
  • Include additional images via the additional_image_link attribute (up to 10)

Price and Availability Accuracy

Google and Meta both check that the price and availability in your feed match what is shown on your product pages. Mismatches lead to disapprovals. Ensure your feed regenerates frequently enough to reflect:

  • Price changes from promotions or sales
  • Stock level changes (in stock vs. out of stock)
  • Sale prices (use the sale_price attribute with sale_price_effective_date)

Product Category Mapping

Google uses its own product taxonomy with over 6000 categories. You need to map each of your PrestaShop categories to the most specific Google category possible. For example:

Your category: "Shoes > Running Shoes"
Google category: "Apparel & Accessories > Shoes > Athletic Shoes > Running Shoes"
Google taxonomy ID: 3603

Handling Product Variants (Combinations)

PrestaShop combinations need special handling in product feeds. Each combination should be submitted as a separate item with:

  • A unique id (e.g., product_id-combination_id)
  • The parent product grouped via item_group_id
  • Specific attributes like color, size, material
  • The correct price for that specific combination
  • The image showing that specific variant (if available)
<!-- Example: same product, two color variants -->
<item>
  <g:id>SKU-001-RED</g:id>
  <g:item_group_id>SKU-001</g:item_group_id>
  <g:title>Premium Running Shoes - Red</g:title>
  <g:color>Red</g:color>
  <g:size>42</g:size>
</item>
<item>
  <g:id>SKU-001-BLUE</g:id>
  <g:item_group_id>SKU-001</g:item_group_id>
  <g:title>Premium Running Shoes - Blue</g:title>
  <g:color>Blue</g:color>
  <g:size>42</g:size>
</item>

Automating Feed Generation with Cron

Set up a cron job to regenerate your feed automatically. This ensures Google and Facebook always have up-to-date product data:

# Regenerate Google Shopping feed every 6 hours
0 */6 * * * php /var/www/html/modules/yourfeedmodule/cron.php > /dev/null 2>&1

# Or if your module provides a URL-based cron
0 */6 * * * curl -s "https://yourstore.com/modules/yourfeedmodule/cron.php?token=YOUR_TOKEN" > /dev/null 2>&1

For stores with more than 10,000 products, consider generating the feed during off-peak hours to minimize server load.

Troubleshooting Common Feed Issues

Products Disapproved for Missing Identifiers

If Google disapproves products for missing GTIN/MPN, check that:

  • The EAN-13 field in PrestaShop is filled for every product
  • The GTIN is valid (correct format and check digit)
  • The manufacturer is set for every product
  • If your products genuinely have no GTIN (custom or handmade items), set identifier_exists to false

Price Mismatch Errors

This occurs when the price in your feed does not match the price displayed on your product page. Common causes:

  • Feed shows price without tax, but product page shows price with tax (or vice versa)
  • Currency mismatch between feed and target country
  • Cart rules or group discounts changing the displayed price
  • Feed generation timing - prices changed after the last feed update

Image Rejection

Google rejects images that are too small, have watermarks, or contain promotional text. Ensure your product images meet these criteria:

  • Minimum 100x100 pixels (250x250 for apparel)
  • No text overlays, watermarks, or logos on the image
  • Product fills at least 75% of the image area
  • White or light background preferred

Measuring Feed Performance

After your feed is live, monitor these metrics in Google Merchant Center:

  • Active products - How many products are approved and eligible to show
  • Disapproved products - Fix these first as they represent lost opportunity
  • Click-through rate - Indicates how appealing your product listings are
  • Impression share - What percentage of eligible impressions your products receive

In Meta Commerce Manager, check:

  • Catalog diagnostics - Shows errors, warnings, and suggestions for improvement
  • Item match rate - How many pixel events match products in your catalog

For more details, read our guides: Google Merchant Center Feed Optimization: The PrestaShop Store Owner's Complete Guide and Google Merchant Center: How to Get Your Products into Google Shopping.

Was this answer helpful?

Still have questions?

Can't find what you're looking for? Send us your question and we'll get back to you quickly.

Loading...
Back to top