A Catalog is a lookup table with one primary key item_id that can be used in various ways. E-commerce websites typically use catalogs for storing products and their related information. Publishing businesses, on the other hand, use catalogs for their articles and section details.

Watch this short introductory video about this feature:

To see your catalogs, go to Data & Assets > Catalogs

To import a new catalog, follow the guide to imports.

There are two types of catalogs in Bloomreach Engagement:

General CatalogThis type of catalog can serve as a generic lookup table for your project. item_id is the only required column as the primary key, and there are no further predefined ID's.
Product CatalogProduct catalogs are designed to store information about your products. They have a specific data structure that helps Bloomreach Engagement identify the most important information that will be used for recommendations, inventory management, and stock level calculation.

You can define the type of your catalog during the first import.

Full list of recommended product catalog columns

item_idstringUnique identifier of your product variants (sku, ean - considering sizes, colors, etc.)

Note that to enable edits using our Catalog API, it is recommended to use item_id's that do not contain /. Due to the way the endpoint is decomposed, edit attempts will not work with item_id's containing /. Notice that using / also affects edits via the platform UI.
product_idstringProduct identifier not considering sizes, colors, etc. More products of the same type have different item_id, but the same product_id.
titlestringProduct name, e.g. Black fitted crew neck t-shirt
descriptionstringDescription of product.
activebooleanInformation about product availability. Options: true/false; 0/1
brandstringBrand of product. E.g.: Nike, Adidas...
category_idslistInternal id of category from your e-commerce tool. E.g.: 12345
category_level_1stringName of first level category, where the product belongs, e.g.: Shoes
category_pathstringFull path of category tree, where product belongs delimited by pipe “|". E.g.: Tops | T-shirts | V-neck t-shirts
colorstringMain color of product. E.g.: red
genderstringGender for which is product designed. Options: Male / Female / Unisex
imagestringUrl to main product image (not thumbnail). E.g.: http://…
lead_timestringTime needed for re-stocking of the product from the supplier. E.g.: 7
supplierstringIdentification of supplier for this product (name / id).
sizestringSize of product for current EAN / SKU. E.g.: XL / 12 / ...
urlstringDirect url to product on your site. E.g.: http;//
stock_levelintegerNumber of product of given ean in stock.
cost_per_unitfloatPrice of product without your margin (cost of product).
discount_percentagefloatPercentual discount. E.g.: 50
pricefloatFinal price displayed to your customer (already discounted by “discount” field)
returned_productsstringNumber of returned products of this type (per ean / sku).
date_addedtimestampTime of first occurrence on your stock.


Catalogs should never contain PII (personally identifiable information) such as emails and/or phone numbers etc.

Catalogs that have not been used in the previous 90 days (i.e., no access from app/UI and no import) will be automatically deleted. All respective scenarios will remain editable. This change will be introduced on April 4, 2023. On that day, all catalogs unused since January 1, 2023 will be deleted.

We also want to encourage fair usage of catalogs with the following limits:
Max number of catalogs per Project: 50
Max number of items within one catalog: 6,000,000

Importing a Catalog

Read our guide to imports to learn how to import your catalog.

Downloading a Catalog

Downloading/exporting catalogs is not possible.

Common use cases

Showing a Web Layer with the last visited product on the homepage


  • catalog with required columns (item_id, picture_url, link_url, price, available).
  • event tracking (Track event view_item on every page visit of a product page. Track with property item_id that matches the item_id in the product catalog)

Design a new Web Layer where you can show an item based on the last viewed item. Create an aggregate to get last(view_item) 'item_id'. In personalization, find your aggregate and use it in catalog lookup personalization.

{% set item = catalogs.products.item_by_id(aggregates['586e0b8d830434e7cc369263']) %}

To check if an item is available and print values from the catalog:

{% if item and item.available == "true" %}
    {{ item.picture_url }}
    {{ item.link_url }}
    {{ item.price }}
{% endif %}


A catalog is required when using a recommendation engine. The resulting recommendations will be presented in a list of item_ids. To use these recommendations in an email or web layer you can use a catalog lookup as in the example below.

<ul id="recommendations">
  {% for item in recommendations['58aee25afb6009bfe0852332'][:8] %}
  <li> <a href="{{ item.link_url }}">{{ item.title }}</a> </li>
  {% endfor %}