Control the active set of products

Bazaarvoice maintains a status for every brand, category, and product ever provided in a feed file. An active brand, category, or product is one that is available for purchase and review. An inactive brand, category, or product is one that is considered out-of-date, removed from production, and no longer available for purchase.

Inactive brands, categories, and products are excluded from the following:

  • Syndication, if you are manually matching products
  • Ratings-only feeds
  • SEO
  • Connections portal

Inactive brands, categories, and products continue to be included in the following:

  • Display
  • Syndication, if products are auto-matched
  • Submission
  • Standard client feed

Finally, based on status, you can filter Workbench content and reports and retrieve content using the API .

Control the active set of products using feeds

When you upload product feed files, Bazaarvoice processes the feeds differently based on whether they are full or incremental:

Full feeds Incremental feeds
  • Products, categories, and brands included in the full feed are added to the Bazaarvoice database
  • The status of included products, categories, and brands is marked active (unless the removed="true" attribute is set).
  • The status of products, categories, and brands that are already in the Bazaarvoice database but not in full feed is marked inactive.
  • Newly added and updated products, categories, and brands in the incremental feed are added to the Bazaarvoice database.
  • The status of included products, categories, and brands is marked active (unless the removed="true" attribute is set). If you cannot provide the removed="true" attribute, Bazaarvoice can enable a feature that infers the products that should be active based on the recency of the catalog data received incrementally. Contact Bazaarvoice regarding this feature.
  • The status of products, categories, and brands that are already in the Bazaarvoice database but not in the incremental feed are not changed (the active status is not updated).

Define a product category hierarchy

If you create an XML feed file, you can define product category hierarchy. You can associate each product with a specific category within the hierarchy using the <CategoryExternalId> element, and you can define a category's parent, thereby defining the category hierarchy, using the <ParentExternalId> element.

Be aware of the following if you are providing multiple feeds for your catalog data:

  • A product that appears in multiple feeds must be in the same category in all feeds. Therefore, if product A is in category X in Feed A, then product A cannot be in category Y in Feed B.
  • A category that is listed in multiple feeds must be in the same parent category in all feeds. Therefore, if category A is in parent category X in Feed A, then category A cannot be in parent category Y in Feed B.

The following XML file excerpt defines a <CategoryExternalId> for a category that is then reference by a <ParentExternalId> element.

<Categories>
   <Category>
      <ExternalId>food-1123</ExternalId>
       <Name>Food</Name>            <= no parent category; this is a top-level hierarchy element
         ...
   </Category>
   <Category>
      <ExternalId>fruit-1789</ExternalId>
      <Name>Fruit</Name>
      <ParentExternalId>food-1123</ParentExternalId>         <= "Fruit" category is a child of category “Food”
      ...
   </Category>
</Categories>
<Products>
   <Product>
      <ExternalId>123</ExternalId>
      <Name>Apple</Name>
      <CategoryExternalId>fruit-1789</CategoryExternalId>      <= belongs to category “Fruit”
      ...
   </Product>
   ...
</Products>

Use multiple catalog sources

Bazaarvoice can consume product catalog data from multiple sources. This alleviates the need for clients who store their data across separate systems to merge all product catalog data into a single source, such as a single feed file, before providing that single source to Bazaarvoice.

Note: Because there are so many possible scenarios for providing data from multiple sources, it is important to consult with Bazaarvoice about your particular needs. Considerations must be made regarding how data will be provided, and a Bazaarvoice representative must enable this feature to make sure data is properly merged from multiple sources. Therefore, contact Bazaarvoice Client Care before attempting to provide product catalog data using multiple files.

Example scenarios

Consider the following example scenarios:

  • Primary XML feed plus supplemental feed for missing data elements

    All product catalog data is stored in one system, such as a web storefront system, but the data elements required for syndication (such as UPC and EAN codes, ISBN, Brand, ManufacturerPartNumber) are stored in a separate order management system or product information management (PIM) system. You can use an XML feed to provide the catalog data to Bazaarvoice and use a simple, supplemental XML or text file to provide data missing from the XML feed to Bazaarvoice.

    This approach can be used to provide any data elements missing from the main XML feed. Bazaarvoice recommends that you supply all data for a given data element in the main XML feed or the supplemental feed, rather than providing data for a given element in both feed files.

  • Products and categories span multiple feeds

    The complete catalog of products is supplied by separate systems. For example, if a client sells fruit and cars, the fruit product catalog data comes from a different system than the product catalog data for car products. Rather than generating a single unified product catalog feed, it is easier to provide one feed for all current fruit products and another feed for all current car products.

  • Localized product catalog feeds
    If you implement Bazaarvoice in multiple locales, you can store product catalog data for each locale in a separate feed file.

Upload multiple feed files

If you are using multiple sources to provide catalog data to Bazaarvoice, you must upload the files from each catalog source on a recurring basis to ensure that catalog data is current and complete in the Bazaarvoice database. However, feed files from each source do not need to be provided to Bazaarvoice at the same or on the same upload schedule. For example, the main XML feed can be provided on a daily basis, but the supplemental text file can be provided on a weekly basis.

While it is a valid strategy to provide a one-time supplemental feed to quickly solve issues related to incomplete catalog data, you should consider an automated process to provide the supplemental data on an ongoing basis to ensure catalog completeness in the future.

Note: It is recommended that you upload a feed files at least every 30 days.

Examples

Primary XML feed plus supplemental feed containing data for syndication

In this scenario, a client includes all product catalog data from a web storefront system in an XML feed file and provides Brand, EAN, UPC, and Manufacturer Part Number data in a text feed file. The primary XML feed does not contain Brand, EAN, UPC, and Manufacturer Part Number data.

Here is the XML file. Note that this file is a "full" feed (incremental="false" in the <Feed> header); all products in the feed should be considered active within Bazaarvoice after consuming the feed.

<?xml version="1.0" encoding="utf-8"?>
<Feed name="Apples_n_Bananas" extractDate="2015-10-13T13:56:25" incremental="false" xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/15.1">
<Categories>
<Category>...</Category>
</Categories> <Products> <Product> <ExternalId>123</ExternalId> <Name>Apple</Name> ... </Product> <Product> <ExternalId>456</ExternalId> <Name>Banana</Name> ... </Product> <Product> <ExternalId>789</ExternalId> <Name>Orange</Name> ... </Product> </Products> </Feed>

Here is the supplemental CSV feed that contains the Brand, EAN, UPC, and Manufacturer Part Number values. Note that the file also contains each products ExternalId value, which is used by Bazaarvoice to merge the supplemental data with the product catalog data provided in the main XML feed.

ExternalId,Brand,UPC,EAN,ManufacturerPartNumber
123,Brand-123,123000000001,12300001,APL123
456,Brand-456,456000000001,45600001,BAN456 BAN-456-2
789,Brand-789,789000000001,78900001,ORG789 ORG-789-2 ORG789-YA-GLAD

If you are creating a supplemental CSV feed, use the following headers in your CSV file for each data element. Syndication matching improves if you specify multiple values.

Column Value
Brand Name of the brand, which is visible to end users.
EAN

European Article Numbers (EANs), which are used worldwide for marking retail goods. Specify an <EAN> child element for each EAN you want to define, which must be a string of eight numerals or 13 numerals (no letters or other characters are allowed). Remove spaces and hyphens because they disrupt syndication matching.

The TXT feed format does not enforce length or numerical constraints on EANs. Any string in this field is treated as valid by the product schema. Values are validated during the catalog import process, however, and only valid values are stored.

Column can contain a single value or multiple space-delimited values (e.g. "EAN1 EAN2 EAN3").

UPC

Universal Product Code (UPC), which is a 6- or 12-digit bar code used for standard retail packaging in the United States. Specify a <UPC> child element for each UPC you want to define, which can contain numerals only, with no letters or other characters. Remove spaces and hyphens because they disrupt syndication matching.

The TXT feed format does not enforce length or numerical constraints on UPCs. Any string in this field is treated as valid by the product schema. Values are validated during the catalog import process, however, and only valid values are stored.

Column can contain a single value or multiple space-delimited values (e.g. "UPCVALUE1 UPCVALUE2 UPCVALUE3").

ManufacturerPartNumber

Manufacturer-specific part number. Part numbers can contain letters, numerals, and characters.

Column can contain a single value or multiple space-delimited values (e.g. "MPN1 MPN2 MPN3").

Or, an XML feed file could be used to provide supplemental data. Note the use of incremental="true" supplemental="true" in the <Feed> header.

<?xml version="1.0" encoding="utf-8"?>
<Feed name="Apples_n_Bananas" extractDate="2015-10-13T13:56:25" incremental="true" supplemental="true" xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/15.1"> <Products> <Product> <ExternalId>123</ExternalId> <!-- Product details needed for syndication --> <Brand> <Name>Brand 123</Name> </Brand> <UPCs> <UPC>123000000001</UPC> </UPCs> <EANs> <EAN>12300001</EAN> </EANs> <ManufacturerPartNumbers> <ManufacturerPartNumber>APL123</ManufacturerPartNumber> </ManufacturerPartNumbers> </Product> <Product> <ExternalId>456</ExternalId> <Brand> <Name>Brand 456</Name> </Brand> <UPCs> <UPC>456000000001</UPC> <UPC>456000000002</UPC> </UPCs> <EANs> <EAN>45600001</EAN> <EAN>45600002</EAN> </EANs> <ManufacturerPartNumbers> <ManufacturerPartNumber>BAN456</ManufacturerPartNumber> <ManufacturerPartNumber>BAN-456-2</ManufacturerPartNumber> </ManufacturerPartNumbers> </Product> <Product> <ExternalId>789</ExternalId> <Brand> <Name>Brand 789</Name> </Brand> <UPCs> <UPC>789000000001</UPC> <UPC>789000000002</UPC> <UPC>789000000003</UPC> </UPCs> <EANs> <EAN>78900001</EAN> <EAN>78900002</EAN> <EAN>78900003</EAN> </EANs> <ManufacturerPartNumbers> <ManufacturerPartNumber>ORG789</ManufacturerPartNumber> <ManufacturerPartNumber>ORG-789-2</ManufacturerPartNumber> <ManufacturerPartNumber>ORG789-YA-GLAD</ManufacturerPartNumber> </ManufacturerPartNumbers> </Product> </Products> </Feed>

Products and categories span multiple feeds

In this scenario, a client provides two separate feeds:

  • An XML feed with product, brand, and category data for fruit products
  • An XML feed with product, brand, and category data for car products

The following is an example of the XML feed for fruit products. Note the incremental="true" attribute in the <Feed> header.

<?xml version="1.0" encoding="utf-8"?>
<Feed name="Apples_n_Bananas" extractDate="2015-10-13T13:56:25" incremental="true" xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/15.1">
<Categories>
<Category>...</Category>
</Categories> <Products> <Product> <ExternalId>123</ExternalId> <Name>Apple</Name> ... </Product> <Product> <ExternalId>456</ExternalId> <Name>Banana</Name> ... </Product> <Product> <ExternalId>789</ExternalId> <Name>Orange</Name> ... </Product> </Products> </Feed>

Here is the XML feed for car products. Again, note the incremental="true" attribute in the <Feed> header.

<?xml version="1.0" encoding="utf-8"?>
<Feed name="Apples_n_Bananas" extractDate="2015-10-13T13:56:25" incremental="true" xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/15.1">
<Categories>
<Category>...</Category>
</Categories> <Products> <Product> <ExternalId>9876547</ExternalId> <Name>Ferrari</Name> ... </Product> <Product> <ExternalId>7736208</ExternalId> <Name>Aston Martin</Name> ... </Product> <Product> <ExternalId>789632528</ExternalId> <Name>BMW</Name> ... </Product> </Products> </Feed>

Localized product catalog feeds

In this scenario, a client wants to implement Bazaarvoice across two locales: en_CA and fr_CA. The client stores its product catalog for the en_CA locale in a separate system from the product catalog data for the fr_CA locale. To use a single Bazaarvoice account, a client can provide one feed with the en_CA data and another feed with the fr_CA data.

The following example shows the product catalog feed containing the localized catalog data for the en_CA locale only. Note the incremental="false" attribute in the <Feed> header.

<?xml version="1.0" encoding="utf-8"?>
<Feed name="Apples_n_Bananas" extractDate="2015-10-13T13:56:25" incremental="false" xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/15.1">
<Categories>
<Category>...</Category>
</Categories> <Products> <Product> <ExternalId>123</ExternalId> <Name>Apple</Name> <Names> <Name locale="en_CA">Apple EN</Name> </Names> <ProductPageUrls> <ProductPageUrl locale=”en_CA”>http://www.example.com/en_CA/apple.htm</ProductPageUrl> </ProductPageUrls> ... </Product> <Product> <ExternalId>456</ExternalId> <Name>Banana</Name> <Names> <Name locale="en_CA">Banana EN</Name> </Names> <ProductPageUrls> <ProductPageUrl locale=”en_CA”>http://www.example.com/en_CA/banana.htm</ProductPageUrl> </ProductPageUrls> ... </Product> </Products> </Feed>

The following example shows the product catalog feed containing the localized catalog data for the fr_CA locale only. Note the incremental="false" attribute in the <Feed> header.

<?xml version="1.0" encoding="utf-8"?>
<Feed name="Apples_n_Bananas" extractDate="2015-10-13T13:56:25" incremental="false" xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/15.1">
<Categories>
<Category>...</Category>
</Categories> <Products> <Product> <ExternalId>123</ExternalId> <Name>Apple</Name> <Names> <Name locale="fr_CA">Apple FR</Name> </Names> <ProductPageUrls> <ProductPageUrl locale=”fr_CA”>http://www.example.com/fr_CA/apple.htm</ProductPageUrl> </ProductPageUrls> ... </Product> <Product> <ExternalId>456</ExternalId> <Name>Banana</Name> <Names> <Name locale="fr_CA">Banana FR</Name> </Names> <ProductPageUrls> <ProductPageUrl locale=”fr_CA”>http://www.example.com/fr_CA/banana.htm</ProductPageUrl> </ProductPageUrls> ... </Product> </Products> </Feed>