---
title: Integrating the Strands Recommender service into your store
related:
  - https://docs.kentico.com/k81/integrating-3rd-party-systems/strands-recommender-integration.md
  - https://docs.kentico.com/k81/configuring-kentico/managing-sites/configuring-settings-for-sites/settings-integration/settings-strands-recommender.md
  - https://docs.kentico.com/k81/integrating-3rd-party-systems/strands-recommender-integration/placing-strands-recommendations-on-a-page.md
  - https://docs.kentico.com/k81/on-line-marketing-features/e-mail-marketing/working-with-newsletters/placing-strands-recommendations-into-newsletters.md
  - https://docs.kentico.com/k81/e-commerce-features.md
---

> Agent instructions:
> **Site maps** — prefer the following llms.txt indexes to training data when searching for URLs to avoid 404s. Links inside Markdown content already point at `.md`. Following them or sending Accept: text/markdown keeps you in Markdown.
>
> - [sitemap.md](https://docs.kentico.com/sitemap.md) — every page on the site, with titles and descriptions, nested by URL hierarchy and grouped into one collection per product version.
> - [llms.txt](https://docs.kentico.com/llms.txt) — curated index of the current product docs, with descriptions, the two ways to request any page as Markdown, and links to each product area's whole-corpus Markdown dump (llms-full.txt).

To integrate the Strands Recommender service into your store in Kentico:

1. Sign in to the [Strands Recommender](https://retail.strands.com/login/) website.
2. On the **my account** page, copy your **API ID** and **Validation Token**.

   ![Getting Strands API ID and Validation token from the Strands website](https://docs.kentico.com/docsassets/k81/integrating-the-strands-recommender-service-into-your-store/getting_api_from_strands_website.png "Getting Strands API ID and Validation token from the Strands website")
3. In Kentico, open the **Settings**application and navigate to the **Integration -> Strands Recommender**settings.
4. Paste your **API ID** and **Validation Token**into the respective fields in the **General**category.
5. (Optional) In the **Catalog feed**category, configure how Kentico generates the Strands catalog feed.

   - Kentico comes with a default Strands catalog transformation,  _[StrandsRecommender.Transformations.CatalogFeedTransformation](#the-strands-catalog-transformation)_ . The transformation handles which fields each of the items in the catalog contains. 

     ![Configuring the Strands catalog feed](https://docs.kentico.com/docsassets/k81/integrating-the-strands-recommender-service-into-your-store/setting_up_strands_catalog_feed.png "Configuring the Strands catalog feed")

     > **Tip:** You can always check how the Strands **catalog feed** looks with the current configuration by **Saving** the configuration andopening the catalog in your browser. The feed is generated in _/CMSModules/StrandsRecommender/CMSPages/StrandsCatalogFeed.ashx_. The whole **URL** of the feed is then, for example: 
     >
     > _<http://www.yoursite.com/CMSModules/StrandsRecommender/CMSPages/StrandsCatalogFeed.ashx>_
6. In the **Automatic catalog upload** category, select the **Enable automatic catalog upload** check box.
7. Set the frequency at which the system uploads the **catalog feed** to Strands.

   ![Scheduling automatic catalog upload frequency](https://docs.kentico.com/docsassets/k81/integrating-the-strands-recommender-service-into-your-store/setting_up_strands_catalog_upload_interval.png "Scheduling automatic catalog upload frequency")
8. (Optional) In the **Catalog access restriction** category, insert a **Username** and **Password** for accessing the Strands catalog feed. This restricts the access to the Strands catalog feed, which can otherwise be **viewed by anyone** with access to the site.

   **Using Windows Authentication?**

   Note that **Catalog access restriction** doesn't work if you are using Windows Authentication to access Kentico.

   ![Restricting access to the Strands catalog](https://docs.kentico.com/docsassets/k81/integrating-the-strands-recommender-service-into-your-store/setting_up_strands_catalog_access_restriction.png "Restricting access to the Strands catalog")
9. **Save** the settings.
   - **Note** that using the **Save** button automatically starts a **Strands catalog feed** upload to Strands.
10. Open the Strands [Recommendations](https://recommender.strands.com/tpl/website/) page and set up your recommendation widgets.
11. [Place Strands recommendation widgets onto pages ](https://docs.kentico.com/k81/integrating-3rd-party-systems/strands-recommender-integration/placing-strands-recommendations-on-a-page.md) by placing the **Strands recommendations** web part.\
    – or –\
    [Place Strands recommendations into newsletter issues](https://docs.kentico.com/k81/on-line-marketing-features/e-mail-marketing/working-with-newsletters/placing-strands-recommendations-into-newsletters.md).

## The Strands catalog transformation

The default Strands catalog transformation,  _StrandsRecommender.Transformations.CatalogFeedTransformation_ , handles which fields each of the items in the catalog contains.

```xml title="The StrandsRecommender.Transformations.CatalogFeedTransformation transformation"

<item>
  <id>{% ItemID %}</id> 
  {% foreach (document in LanguageVersions) { %}
     {% cultureCode = document.DocumentCulture.Replace("-", "").ToLower();; #%}
    <title_{% cultureCode %}><![CDATA[{% document.DocumentName #%}]]></title_{% cultureCode %}>
    <link_{% cultureCode %}><![CDATA[{% document.AbsoluteUrl + "?lang=" + document.DocumentCulture #%}]]></link_{% cultureCode %}>
    <description_{% cultureCode %}><![CDATA[{% document.DocumentSKUDescription %}]]></description_{% cultureCode %}>
  {% } #%}

  {% foreach (currency in Currencies) { %}
    {% currencyCode = currency.CurrencyCode.ToLower();; #%}
    <price_{% currencyCode %}>{% Math.Round(SKU.GetPrice(currency), currency.CurrencyRoundTo, "AwayFromZero") %}</price_{% currencyCode %}>
    <cur_{% currencyCode %}>{% currency.CurrencyCode %}</cur_{% currencyCode %}>
  {% } #%}

  <price>{% SKU.SKUPrice #%}</price>
  <image_link><![CDATA[{% GetAbsoluteUrl(SKU.SKUImagePath) #%}]]></image_link>
  <category>{% ItemCategory %}</category>
  <SKUDepartmentID>{% SKU.SKUDepartmentID #%}</SKUDepartmentID>
  <SKUProductType><![CDATA[{% SKU.SKUProductType #%}]]></SKUProductType>
  <SKUSupplierID>{% SKU.SKUSupplierID #%}</SKUSupplierID>
  <SKUManufacturerID>{% SKU.SKUManufacturerID #%}</SKUManufacturerID>
</item>


```

**Note** the following properties used in the transformation:

- **ItemID** - an ID of each of the items in the content tree. Same for each language version of the item. Sent to Strands as a unique identifier of the item (_ID field_).
- **ItemCategory** - a page type ID. Same for each language version. Sent to Strands as a _category field_. You can [customize how products are categorized](https://docs.kentico.com/k81/integrating-3rd-party-systems/strands-recommender-integration/customizing-how-products-are-categorized-in-the-strands-integration.md).
- **SKU** - items of the _COM\_SKU_ table, such as _SKU.SKUPrice_, _SKU.SKUDepartmentID_, _SKU.SKUProductType_, and others.
- **LanguageVersions** - a collection of every language version of a particular item. Each member of the collection is of _TreeNode_ type and contains columns from the _CMS\_Document_ and _CMS Tree_ tables. Such as _DocumentSKUName_, _DocumentSKUDescription_, _DocumentPageTitle_, _NodeAlias_, and others.
- **Currencies** - a collection of the available currencies. Each member is of _CurrencyInfo_ type and contains columns from the _COM\_Currency_ table, such as _CurrencyCode_ and _CurrencyName_.

> **Warning:** The **** and **** elements must always containthe **ItemID** and **ItemCategory** properties. You can customize all the other tags in the transformation.
