Skip to main content

Frequently Asked Questions

note

Available since v2.0.0


Feed URLs & Access

Q: Facebook asks for a URL, where do I find it? A: The module generates up to three feed files per shop: the main feed, a languages feed, and a countries feed. Each feed URL appears directly below the generation options for that feed in the Feed Generation tab of the module configuration. Click any URL to copy it to your clipboard, then paste it into Facebook Ads Manager > Catalogues > Data Sources.

See: Feed Generation per Shop — Languages, Currencies & Countries


Q: When I try to open the feed URL in a browser it returns a 404 A: The feed file does not exist yet. After you configure the module you must trigger at least one generation run — the module does not create the file on save. Go to the Manual Generation tab, click Generate Now, wait for generation to finish, and then the feed URL will work.

See: Manual Feed Generation


Q: I opened the feed URL in my browser and it crashed the tab or showed an "out of memory" error — is my feed broken? A: No. When your catalogue is large (hundreds of megabytes of XML), most browsers run out of memory trying to render the raw XML in the tab. This is a browser limitation, not a feed problem. Your feed is almost certainly correct and Facebook's crawler has no trouble downloading it — it does not try to render it as a page.

A real feed or XML error looks completely different: the module displays a red error box at the top of the module configuration page showing the error message, the line number, and the character position in the file where the problem occurred. If you see that red box, investigate. If all you see is a browser crash or a blank tab, your feed is fine — use the dashboard statistics to confirm that it was generated with the expected number of products.

See: Dashboard & Fast View


Q: Can I force Facebook to update the catalogue immediately? A: Yes. In Facebook Ads Manager, go to Catalogues, select your catalogue, open Product Data Sources, choose your data source, click the Configuration tab, scroll down, and click Fetch Now. Facebook will re-download your feed within a few seconds.


Q: I have configured the cron job, but it is not executing A: If your server does not support the standard curl command in cron, try the wget alternative instead:

wget -O - -q -t 1 "YOUR_GENERATION_URL" >/dev/null 2>&1

You can also switch to the PHP CLI method, which runs entirely outside web-server constraints and is the most reliable option for large catalogues. All three command variants — cURL, wget, and PHP CLI — are shown in the Automatic Generation (Cron Jobs) tab of the module, pre-filled with your secret key.

See: Automatic Generation — Cron Jobs


Missing or Skipped Products

Q: My feed was generated, but some products are missing A: Open the Skipped and Errors tabs in the module configuration — they appear after every generation and list every excluded product along with the reason. Common reasons include: no stock (and "Generate Out of Stock products" is disabled), product excluded by ID in the Product Exclusions tab, product's main category excluded in the Category Exclusion tab, missing image, empty description, hidden visibility, or missing product identifier. Review the listed reasons to decide whether each skip is intentional or a data problem to fix.

See: Skipped Products, Errors & System Diagnostics


Q: A product is excluded because it has no stock. Should I keep it in the feed? A: Facebook recommends keeping out-of-stock products in your catalogue — it lets their algorithm continue optimising delivery for those items when stock returns. To include out-of-stock products, go to Product Options and set Generate Out of Stock products to Yes (the default). The product will appear in the feed marked as out of stock. If your store is set to allow orders on out-of-stock items, the module marks the product as in stock automatically.

See: Pricing, Tax & Stock


Q: Facebook is rejecting products or flagging them for missing descriptions or missing brand A: The module has auto-fix options designed for exactly this. In the Product Options tab, scroll to the Error Bypass section:

  • Enable Generate Missing Descriptions to auto-build a description from the product name, category, and meta description for any product whose description field is empty.
  • Enable Allow products without EAN, UPC or Manufacturer and fill in Mass assign manufacturer with your shop or brand name to prevent products without barcodes from being rejected.
  • Enable Remove non valid HTML from description if you use a page builder that injects shortcode tags like [vc_row][/vc_row] — Facebook rejects descriptions containing such tags.

Even with these options on, review the Errors and Skipped panels after the next generation to confirm that previously rejected products are now included.

See: Error Bypass & Auto-fill for Missing Data


Image Problems

Q: I have too many image errors, even though products have images A: This usually means your shop is storing images in WebP or AVIF format while the module's existence check looks for a .jpg file that is not there. Go to Image Options and enable Disable check image exists to skip the filesystem check and include image URLs regardless of format. Then verify in Facebook Commerce Manager that the images are loading correctly for a few products.

See: Image Options


Q: Facebook shows the wrong image — not the one I want to use as the main product photo A: There are two settings that control which image becomes the main image_link in the feed. If you want to use a specific position instead of the PrestaShop cover flag, go to Image Options and set Image Position Start to the position number you want (for example 2 to use the second image). If you simply want to ignore the cover designation and use the first image by position order, enable Ignore cover?. For products with combination-specific images, the module uses the combination's own images first.

See: Image Options


Category Filtering

Q: I want to exclude certain categories from the feed — how do I do that? A: Go to the Included / Excluded Categories tab, make sure the Category restriction method is set to Exclude (Default), and tick the categories you want to remove. In Exclude mode, the module checks each product's main (default) category only. If the main category is checked, the product is excluded. A product whose secondary category is checked but whose main category is not will still appear in the feed.

See: Category Inclusion / Exclusion


Q: I want only a specific subset of categories in the feed — not most of the catalogue A: Switch the Category restriction method to Include. Tick only the categories you want to advertise. In Include mode, the module checks all categories of a product — including secondary ones. If any of the product's categories is ticked, the product is included. This means you can pull in products even when they live primarily in an un-ticked category, as long as they are also assigned to a ticked one.

Be careful when switching between modes. If you had categories ticked for Exclusion and then switch to Include mode, those same ticked categories become the only ones in the feed — every other category is dropped. Always review your checkboxes after changing the method.

See: Category Inclusion / Exclusion


Multistore, Languages & Countries

Q: I have multiple shops — does each shop get its own feed? A: Yes. When PrestaShop's multistore feature is active, the Feed Generation tab shows a separate configuration block for each shop. You can enable or disable feed generation per shop independently. Each shop gets its own set of feed URLs (main, languages, countries). Most product configuration settings (image options, pricing, labels, etc.) are global and apply to all shops at once — you do not need to repeat those for each shop.

See: Feed Generation per Shop — Languages, Currencies & Countries


Q: My store sells in multiple languages — how do I get a feed per language? A: In the Feed Generation tab for the relevant shop, scroll to the Additional Languages section and enable each language you want to export. The module generates a separate Languages feed file that contains all enabled languages in one XML file. Use the Language Feed URL shown in that section when registering the catalogue in Facebook. Only enable languages for which your products have actual translations — if a language is missing translations the feed falls back to the default language content.

See: Feed Generation per Shop — Languages, Currencies & Countries


Q: I sell to multiple countries with different currencies — how do I set up country-specific feeds? A: In the Feed Generation tab, scroll to Currency / Prices Override by Country and enable each country you need. For each country, select the correct currency and the associated language for product URLs. The module generates a Countries feed with a separate section per enabled country. There are two scenarios this covers: (a) a country that uses a genuinely different currency (for example, selling in euros for France but pounds for the UK); and (b) a country that uses the same currency but may have different prices due to PrestaShop's price rules. Use the Country Feed URL when registering that catalogue in Facebook.

See: Feed Generation per Shop — Languages, Currencies & Countries


Prices & Discounts

Q: Should I enable prices with or without taxes? A: It depends on the country and how your store displays prices. In European markets (France, Germany, Spain, Italy, and others), consumer-facing prices must include VAT — enable Display Prices with Tax? (the default, Yes) so the feed matches what customers see on your product pages. In the United States and other markets where prices are shown pre-tax, disable this option so the feed shows net prices. If Facebook flags products with a "price mismatch" warning, this is the first setting to review.

See: Pricing, Tax & Stock


Q: I updated a discount in PrestaShop but the feed still shows the old price A: The feed is a snapshot generated at a point in time — it does not update live. You need to regenerate the feed for the new discount to appear. This is one of the main reasons a cron job matters: PrestaShop's discount system uses layered price rules where one rule may end and another begin at midnight. If your feed is only generated once every few days, it can show stale prices that no longer reflect the current discount. For accurate discount data, regenerate at least once every 24 hours, or more often if you run time-limited promotions.

See: Automatic Generation — Cron Jobs


Cron & Generation Frequency

Q: Why do I need a cron job? Can't I just generate the feed once? A: You can generate manually, but your prices, stock levels, and discount rules change over time. Facebook re-downloads your feed on its own schedule and expects the data to be reasonably current. If prices in your feed differ from your website, Facebook's catalogue review may flag your products or disapprove them. A cron job keeps generation automatic so you never have to think about it.

See: Automatic Generation — Cron Jobs


Q: How often should I regenerate the feed? A: For small and medium catalogues where generation takes a few minutes or less, schedule the cron to run 4 to 6 times per day, spread across the day. For very large catalogues where generation takes much longer, schedule it once per day during low-traffic hours — typically around midnight (00:00–01:00). At minimum, regenerate at least once every 24 hours so that PrestaShop's layered discount rules always reflect the current active discount tier.

See: Automatic Generation — Cron Jobs


Server Errors, Timeouts & Large Catalogues

Q: The feed generation times out or stops before it finishes A: Enable cycle-based generation. In the Product Options tab, set Cycle Items to a number lower than your total product count (for example 500 or 1000). The module will process that many products per request, save progress, and automatically continue with the next batch — even across separate cron calls. This is the recommended approach for any catalogue that cannot complete within a single server request.

If the feed still stops at the very start and produces nothing, also check Generation Options > Use Curl Timeout. If your server does not support background-mode curl, disable this option so generation runs synchronously instead.

See: Cycle-based Generation for Large Catalogues


Q: The feed generation gives a memory error A: First, reduce the Cycle Items count in Product Options so fewer products are loaded into memory at once. Also review the File batch process setting in Generation Options — set it to roughly one quarter of your cycle size (for example cycle 1000 → batch 250). This splits each cycle into smaller PHP operations that use less peak memory. If memory errors persist, contact your hosting provider about increasing the PHP memory limit, or switch to the PHP CLI cron method which runs outside web-server memory constraints.

See: Cycle-based Generation for Large Catalogues and Automatic Generation — Cron Jobs


Q: I have a very large catalogue with hundreds of thousands of products — what is the recommended setup? A: Use cycle mode with a conservative cycle size (500–2000 products per cycle, depending on how data-heavy each product is). Set the cron to run with the PHP CLI method — it has no HTTP timeout and no web-server execution time limit. Schedule generation during low-traffic hours. The module has handled catalogues of hundreds of thousands of products using this setup. Monitor the dashboard after the first full run to see total generation time and adjust cycle size accordingly.

See: Cycle-based Generation for Large Catalogues and Automatic Generation — Cron Jobs


Output Format

Q: What is the difference between RSS and Atom format? A: Both are XML dialects that product catalogue platforms accept. RSS is the older, more widely supported format. Atom is newer, more flexible, and is the module's default — it is preferred by Google and works with Facebook and Instagram. If you are submitting your feed to Pinterest, RSS may be required or preferred by that platform. For all other platforms (Facebook, Instagram, Google), keep the default Atom setting unless the platform's documentation explicitly requires RSS.

See: Generation Options — Output Format & cURL


Google Categories

Q: Why should I assign Google categories to my products? A: Google's product taxonomy is a standardized classification system that Facebook, Instagram, Pinterest, and Google Shopping all understand. When you assign a Google category to your PrestaShop categories, the feed includes a <g:google_product_category> field for every product. This helps these platforms correctly classify your products, serve them to the right audiences, apply the right ad formats, and understand which fields are required for your product type. It is not mandatory but it improves catalogue quality and can reduce rejection rates.

See: Google Product Category Association


Q: How do I set up Google categories in the module? A: There are two steps. First, download the Google taxonomy: go to the Google Categories Download tab and click to download the latest taxonomy file. This gives the module a local copy so it can work without depending on Google being available at generation time. Second, go to the Google Category Association tab, find each of your shop's categories in the tree, and pick the most accurate matching Google category. Your product feed will then include the correct google_product_category for every product.

See: Google Taxonomy Download and Google Product Category Association


Feed Protection

Q: Can I password-protect my feed so competitors cannot see my prices? A: Yes. Go to the Feed Protection tab, set Protect the feeds URL? to Yes, and enter a username and password. The module writes an .htaccess and .htpasswd file into the feeds folder — Apache and LiteSpeed will enforce HTTP Basic Authentication on every request to the feed XML files. The password is stored as a bcrypt hash, never in plain text. Note that this mechanism works only on Apache and LiteSpeed servers; it has no effect on Nginx.

See: Feed Protection — HTTP Basic Auth


Q: If I add a password, will Facebook still be able to download my feed? A: Yes. Facebook's Catalog Manager fully supports HTTP Basic Authentication. When you register or update the feed URL in Catalog Manager, embed the credentials directly in the URL using the format https://username:password@yourstore.com/modules/facebookproductsfeed/feeds/feed_1_en.xml. Facebook's crawler passes those credentials on every scheduled fetch. The module's Cron Jobs tab also automatically prepends the credentials to the cURL command shown there when protection is enabled.

See: Feed Protection — HTTP Basic Auth


Other Common Questions

Q: Facebook does not find data in my feed A: Start by opening the feed URL in your browser. If the page loads and shows XML product data, the issue is on Facebook's side — a schedule delay, a stale data source, or the feed was just registered and Facebook has not fetched it yet. If the page loads but is empty or returns very few products, check the Skipped and Errors panels in the module. If you receive a server error or the page times out, your hosting may have hotlink protection or firewall rules blocking external requests to your feed URL — contact your host and ask them to allow external GET requests to your feed URLs.

See: Skipped Products, Errors & System Diagnostics


Q: I see PHP notices or warnings in the System Diagnostics panel — does that mean my feed is broken? A: Not necessarily. PHP notices and warnings are informational messages that can appear during generation without blocking a correct feed. A notice does not mean a product was skipped or that the file is invalid. Review the message to see whether it points to a real data problem. Only errors labeled as fatal, or errors that appear alongside a very low product count, indicate that generation was actually interrupted. The System Diagnostics panel shows the product ID and file/line number so you can investigate the specific product if needed.

See: Skipped Products, Errors & System Diagnostics