# Product Feed

Present products during your events, viewers can see a list of selected products, see the product detail page and add products to their cart without leaving the live.

To do that you have to share with us a XML product feed with all the information needed.

***

There are two ways of sharing this XML file:

* Dynamic, your product feed is accessible via a URL, the sync will be done automatically every night, and all the changes you make on your products will replace the information we had. You can also launch the sync manually at any time from the back office (more information [here](/features/product-management.md#product-feed))
* Static, you send us an XML file when you need new products to be added or information to be updated.

### The product feed

Here is the list of attributes you need to add in your product feed.

<table data-header-hidden><thead><tr><th width="227"></th><th width="121.33333333333331"></th><th></th></tr></thead><tbody><tr><td><strong>Attribute</strong></td><td><strong>Required</strong></td><td><strong>Description</strong></td></tr><tr><td><code>title</code></td><td>yes</td><td>Product title</td></tr><tr><td><code>description</code></td><td>yes</td><td>Product description</td></tr><tr><td><code>image_link</code></td><td>yes</td><td>Product image link</td></tr><tr><td><code>id</code></td><td>yes</td><td>The product ID used by the Add To Cart. If there are variants, it represents the child product Id.</td></tr><tr><td><code>link</code></td><td>no</td><td>Product page URL, this field is mandatory if you're using the link to product page option instead of the add to cart (more information here)</td></tr><tr><td><code>price</code></td><td>no</td><td>Product price. The currency should not be added. It represents a floating number (e.g : 49.99)</td></tr><tr><td><code>sale_price</code></td><td>no</td><td>Product price if there is any discount. Both prices will be displayed.</td></tr><tr><td><code>gtin</code></td><td>no</td><td>Product GTIN. It should represent an EAN13 / UPC (barcode)</td></tr><tr><td><code>sku</code></td><td>no</td><td>Product SKU. An unique alphanumeric code for each product variant</td></tr><tr><td><code>weightPrice</code></td><td>no</td><td>Product price per weight, don't include currency</td></tr><tr><td><code>group_id</code></td><td>yes (if variants)</td><td>The parent ID of the product.</td></tr><tr><td><code>variant1</code></td><td>yes (if variants)</td><td>Product variant. For exemple, if it is a color, it should be <code>&#x3C;color>red&#x3C;/color></code></td></tr><tr><td><code>variant2</code> (if any)</td><td>yes (if variants)</td><td>The seconds product's variant. For exemple, if it is a size, it should be <code>&#x3C;size>XXL&#x3C;/size></code></td></tr></tbody></table>

{% hint style="danger" %}
Products missing one required field won't be imported.
{% endhint %}

## Product feed integration

We are currently supporting 2 product feed formats, Lengow and Google Shopping. During the onboarding, you will need to give us a public URL to an XML file with your product feed. Every night we will use this link to synchronize the feed. Existing products will be updated and new ones added.

If you're not using one of these platforms, you have 2 solutions:

### You have a public URL linked to an XML product feed

During the onboarding, we will communicate with you in order to understand your file format and map it with ours. Once done the sync will be automatically done every night

### Create products manually

Add products directly from our back office, click [this link](/features/product-management.md#manual-products) to see how.

### You have a static XML file

We will ask during your onboarding for an XML file with your product feed in order to match it with our and solve any corresponding issues we can find. Then each time you need to update your products you will have to send us a new file. You can find below examples of XML product feed.

## Lengow XML feed

Here is an **XML** example of a Products Feed, based on a **Lengow** configuration.

#### **With variants :**

```xml
<Product>
<id>ProducID</id>
<group_id>ParentID</group_id>
<title>ProductTitle</title>
<description>ProductDescription</description>
<link>ProductURL</link>
<image_link>productImgURL</image_link>
<price>Price</price>
<sale_price>PriceWithDiscount</sale_price>
<gtin>GTIN</gtin>
<brand>Brand</brand>
<sku>SKU</sku>
<stock>Stock</stock>
<variantName1>variant1Value</variantName1>
<variantName2>variant2Value</variantName2>
</Product>
```

#### **Without variants :**

```xml
<Product>
<id>ProducID</id>
<title>ProductTitle</title>
<description>ProductDescription</description>
<link>ProductURL</link>
<image_link>productImgURL</image_link>
<price>Price</price>
<gtin>GTIN</gtin>
<brand>Brand</brand>
<stock>Stock</stock>
</Product>
```

## **Google Shopping XML Feed**

```xml
<products>
<item>
<id>productID</id>
<item_group_id>productGroupID</item_group_id>
<title>productTitle</title>
<link>productLink</link>
<price>productPrice</price>
<sale_price>productSalePrice</sale_price>.
<description>productDescription</description>
<image_link>productImgURL</image_link>
<gtin>productGTIN</gtin>
<brand>productBrand</brand>
<availability>productStock</availability>
<variant1>productVariant1</variant1>
<variant2>productVariant2</variant2>


<condition>condition</condition>
<mpn>mpn</mpn>
<product_type>product_type</product_type>
<shipping>shipping</shipping>
<shipping_weight>shipping_weight</shipping_weight>
<adwords_grouping>adwords_grouping</adwords_grouping>
<adwords_labels>adwords_labels</adwords_labels>
<gender>gender></gender>
<age_group>age_group></age_group>
<adwords_redirect>adwords_redirect</adwords_redirect>
<tax>tax</tax>
<custom_label_0>custom_label_0</custom_label_0><
<custom_label_1>custom_label_1</custom_label_1>
<custom_label_2>custom_label_2</custom_label_2>
...........
</item>
</products>
```

## Variants auto sorting

Ideally, your product feed should present the variant values in the order you want them to be displayed in the dropdown menu. If that is not possible, you can use this feature to get them sorted in a logical manner, usually from smallest to largest.

{% hint style="info" %}
Contact us to activate this feature
{% endhint %}

<figure><img src="/files/eCiXW6tvnW1PpK1CGwLL" alt=""><figcaption></figcaption></figure>

If this feature is enabled, the product sync script will attempt to detect the nature of the variant (shoe size, bra size, t-shirt size, etc) using regular expressions. Our algorithm was designed not to meddle with the ordering of the values if we are not sure of what they represent. In order for that to happen, the algorithm will parse a product's variant values into an array of strings and **will only sort them if they all match a given regular expression**.

For instance, an array of `["30ml", "100ml", "15ml", "pineapple"]` will not be sorted and will be imported as-is.

Examples of supported variant formats:

```json
supported = {
  // Strings containing only letters are sorted alphabetically
  "colours": ["Blue", "Green", "Indigo", "Orange", "Red", "Violet", "Yellow"],

	// Numeric values, including the ones with decimals, are sorted from lowest to highest
  "numeric": ["36", "38", "40", "42", "44", "46", "48"],
  "numeric_with_dot": ["36", "36.5", "36.8", "42", "44", "44.2" "46", "48"],
  "numeric_with_comma": ["36", "36,5", "36,8", "42", "44", "44,2" "46", "48"],

  "numeric_with_sml": ["36 XS", "38 S", "40 M", "42 L", "44 XL", "46 XXL"],

  "numeric_with_unit": ["15ml", "30ml", "45ml", "60ml"],
  
  // Values with the same unit will be grouped together, and the units will be sorted alphabetically
  "numeric_with_mixed_units": ["1l", "2l", "15ml", "30ml", "45ml", "60ml"],
  
  // Surfaces are sorted by width, then height
  "surface": ["60x60", "60x80", "60x100", "60x120", "80x80", "80x100", "80x120", "100x100", "100x120", "120x120"],

	// Bra sizes - UK format also supported
  // Please note that they are sorted first by cup size, then by band size
  "bra_us": ["30AA", "32AA", "32A", "34A", "36A", "32B", "34B", "36B", "38B", "32C", "34C", "36C", "38C", "40C", "32D", "34D", "36D", "38D", "40D", "42D", "32DD", "34DD", "36DD", "38DD", "40DD", "42DD", "38E", "40E", "42E"],
  "bra_us_alternative": ["30AA", "32AA", "32A", "34A", "36A", "32B", "34B", "36B", "38B", "32C", "34C", "36C", "38C", "40C", "32D", "34D", "36D", "38D", "40D", "42D", "32DD", "34DD", "36DD", "38DD", "40DD", "42DD", "38DDD", "40DDD", "42DDD"],
  "bra_fr": ["85A", "90A", "95A", "85B", "90B", "95B", "100B", "85C", "90C", "95C", "100C", "85D", "90D", "95D", "100D", "85E", "90E", "95E", "90F", "95F", "100F", "105F"],
  
  // Sizes that follow a Small - Medium - Large pattern
  "sml": ["XS","S", "M", "L", "XL"],
  "sml_hyphen": ["X-S","S", "M", "L", "X-L"],
  "sml_space": ["X S","S", "M", "L", "X L"],
  "sml_lowercase": ["xs","s", "m", "l", "xl"],
  "sml_extended_letters": ["XXS", "XS", "S", "M", "L", "XL", "XXL", "XXXL", "XXXXL", "XXXXXL"],
  "sml_extended_numbers": ["2XS", "XS", "S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL"]
}
```

Examples of **not supported** variant formats:

```json
not_supported = {
	// Sizes with intermediate values, such as these ones containing a /
	"sml_with_intermediate_values": ["S", "S/M", "M", "M/L"],
  "numeric_with_intermediate_values": ["38", "38/40", "40", "40/42"],
  
  // Complex strings containing special characters such as (), |, {}
  "complex": ["US 8 | UK 7.5 | EUR 41", "US 8.5 | UK 8 | EUR 42"],
  
  // Small - Medium - Large in full words instead of abbreviation
  "sml_full_words": ["small", "medium", "large"]
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.ls.skeepers.io/overview/product-feed.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
