To get the most out of the Bazaarvoice platform, you must provide data about your product catalog to Bazaarvoice. This includes data about the brands, product categories, and products that you offer. Providing a complete view of your product catalog is critical for success.

Why is the product catalog important?

Why is the product catalog so important? Consider the following features that are powered by the product catalog:

  • Syndication—because retailers and brands often use different identifiers and metadata to describe the same product, a complete and accurate product catalog enables Bazaarvoice to match products offered by brands and retailers, and then share (syndicate) user-generated content (UGC) based on product matches. In particular, brand names, UPCs, EANs, and MPNs are key to enabling syndication.
  • Content—this includes review requests (formerly post-interaction email or PIE), social media alerts and notifications, and Bazaarvoice-hosted elements on your website, such as review submission pages. Data elements such as the IDs, names, and URLs of brands, categories, and products help power this content.
  • Workbench reports—product catalog data appears in the Bazaarvoice Workbench and as filter options when you view reporting dashboards.
  • Reports and Insights—the quality of data available from your product catalog directly impacts generated reports and insights. Make sure your product catalog is up-to-date. Refer to Integration health for more information.
  • Integration with other Bazaarvoice products—key elements must be defined in your product catalog to support integration with Ratings & Reviews , Connections, Advertising, and Sampling. For example, suppliers who subscribe to Connections rely on brand names and vendor IDs in product catalogs.
  • Moderation accuracy—keep the product catalog updated to ensure moderators have complete visibility and context so they are able to fully understand if the submitted consumer feedback is relevant and appropriate to the product under review.

Provide your product catalog data

Bazaarvoice supports the following ways to provide your product catalog data:

  • Single XML feed file—Provide a single feed file that includes all of your catalog data. We accept both XML and flat (CSV or TXT) formats. However, using an XML feed has advantages over flat files, such as support for localization, rich category hierarchy configuration, and other additional benefits.
    Note: A single XML feed should be uploaded daily. Sending XML feeds multiple times a day will result in poor performance. If necessary, you can upload a supplemental feed (with missing or updated product data) using a flat text file.
  • Multiple sources—Provide multiple catalog feeds when your catalog data is sourced in different systems or if combining multiple feeds into a single feed is too difficult. Contact Bazaarvoice Support before attempting to provide product catalog data using multiple files. Refer to Use multiple catalog sources for more information.

    If you're using Dynamic Catalog Collection (DCC), you can also provide additional data elements using a traditional feed (XML or CSV) file. Bazaarvoice will combine data from both sources.

  • Product Catalog application—Allows you to view and manage your product catalog. This Portal app shows all the information in your Bazaarvoice product catalog, including data provided by feeds, DCC, and the app itself.
    Note: Importing or updating data using the Product Catalog application will always take precedence and override data updates coming from your XML feed or from Dynamic Catalog Collection (DCC).
    Refer to Data source priority to learn more.
  • Product Catalog application—Allows you to view and manage your product catalog. This Portal app shows all the information in your Bazaarvoice product catalog, including data provided by feeds and the app itself.
    Note: Importing or updating data using the Product Catalog application will always take precedence and override data updates coming from your XML feed.
    Refer to Data source priority to learn more.
  • Tip: If you would like to view a sample product catalog file, download this spreadsheet .
  • Dynamic Catalog Collection (DCC)—Enables Bazaarvoice to collect and consume product catalog data using JavaScript on your product display pages. When shoppers visit a product display page, the JavaScript event passes catalog data to Bazaarvoice for consumption. DCC supports the collection of both new product catalog data as well as updates to previously provided catalog data.

Single feeds best practice

When using feeds, you can upload your catalog data using the following formats:

Format Description Best practice
XML file

Upload a single XML feed file that includes all of your catalog. Providing a well-formed structured product feed is critical for success.

  • Upload a single full XML feed daily
  • We highly recommend you use this method to provide your primary catalog feed
  • Sending feeds multiple times a day will result in poor performance

Caution: Do not include data with personally identifiable information (PII). PII is data that is personal and often private to consumers. Its use might identify a specific individual or distinguish one person from another in your product catalog feeds.

Required feed elements for Bazaarvoice product and feature support

High-quality feed content is required for successful syndication, notifications, reporting, insights, and integration with other Bazaarvoice solutions or features. Bazaarvoice relies primarily on an automated matching technique that depends on globally unique product identifiers. The completeness and accuracy of your product feed determine how well products can be matched.

The following Bazaarvoice features and solutions rely on accurate identifiers in your product feed to ensure maximum value:

The following sections provide information about key feed components that are required for product and feature support (some exceptions are noted below). For XML feeds, they are elements. For text feeds, they are column names.

Name should consist of attributes and descriptors that most uniquely identify the product. Examples of useful product name attributes include brand names, model numbers, sizes, and colors.

Brand represents the most important data item to provide for each product in the feed. Brands are used for more than product matching; in Bazaarvoice reporting systems, they also help you get the most benefit from your syndication and Connections programs.

In an XML feed, use the household brand name for the product for the brand's <Name> element, rather than the supplier’s or manufacturer’s brand name. This is particularly true for retailers that may carry multiple brands from a single supplier. Products without brands often appear “invisible” with respect to these reporting systems.

Example:
Supplier BrandOne markets the identically-named BrandOne brand bleach. The supplier BrandOne also markets BrandTwo brand charcoal and BrandThree brand salad dressing. In this case, we recommend that both supplier BrandOne and the retailers that carry these products use BrandThree, BrandTwo, and BrandOne as brands for the respective salad dressing, charcoal and cleaning products. It is not recommended that all products use BrandOne in the brand field, even though the company supplies all of the products.

Category defines a category that is represented by products in your feed using the following child elements. You can also use this element to define a category hierarchy.

UPC, EAN, and ISBN are globally unique identifiers (GTINs). The product category you manufacture or sell and your region determine which identifiers are relevant. If more than one value applies to a product item, we recommend providing all relevant values. For example, electronics or consumer packaged goods (CPG) products might be assigned a UPC and an EAN.

Without globally unique identifiers, Bazaarvoice cannot match products to vendors or catalogs as quickly, making the likelihood of mismatches higher. Because of poorer product data quality, the confidence level of the matches declines. This lack of confidence forces more manual reviews of the matches, slowing down the process. Due to delays caused by the lack of automated matching tools, newly introduced products will not syndicate immediately.

Note: Version 14.3+ of the schema does not enforce length or numerical constraints on UPCs, EANs, and ISBNs. Any string in one of these fields is treated as valid by the product schema. Values in the UPC, EAN and ISBN fields are validated during the catalog import process, however, and only valid values are stored. You can find the complete syntax for all globally unique identifiers in this example product feed file.

Do not use placeholder (sample) values in place of valid UPC, EAN, or ISBN values. Placeholder values could cause the feed to fail validation. Specifically, you should not:

  • Use letters.

  • Include values with character lengths that deviate from the defined global standards for UPC, EAN, or ISBN.

However, depending on your system's capabilities, you may be required to include a placeholder value when adding products to your catalog. In this situation, enter a string of zeros (0) that matches the identifier’s standard character length. Bazaarvoice does not store the null values, but their inclusion will not produce errors during validation.

Data type and format:

  • UPC: 6- or 12-digit value whose last digit provides a verifiable checksum of the number. Some systems internally store only the leading 11-digit product code, so make sure to include the checksum digit in the feed. Products sold in the US and Canada primarily use UPCs.
  • EAN: 13-digit value whose last digit provides a verifiable checksum of the number. Products sold outside the US and Canada primarily use EANs.
  • ISBN: 10- or 13-character value used predominantly for media products such as books, music, and videos. The last character provides a checksum that helps validate the product identifier. Most ISBNs are composed only of digits, except for some 10-character ISBN values that use an X for the checksum.

Required elements:

  • UPC and EAN: At least one for all relevant categories. We recommend that global companies supply both.
  • ISBN: For books, movies, music, and media.

The second most useful product identifier for syndication is the manufacturer part number (MPN). Use the MPN in conjunction with the manufacturer’s name to match products accurately and automatically. In your feed, provide MPNs using ManufacturerPartNumber, and make sure each product's Brand uses the name of the manufacturer responsible for the MPN. Your feed can have multiple MPN values for a single product, so provide all MPNs applicable to a product.

Note: The distinction between “brand” and “manufacturer” is not always clear. When providing MPN values, include the name of the brand or manufacturer that assigned the product’s specific MPN value.

Description provides a description of the product.

ImageUrl acts as a very important differentiator in the manual matching process. Provide an image that is accurate and meaningful for identifying the product. The primary reason for including these images is that they will appear on your submission form.

Note: If Ratings & Reviews is deployed on an HTTPS site, you must provide image URLs at an HTTPS location in your product catalog. If you do not, your customers will see a mixed content warning.

The link to the product page on your website, which is specified by ProductPageUrl, enables manual matchers to access the full context of your product. This method represents the least preferred way to match products manually because it is so time consuming. The primary reason for including a PDP URL is that they route SSURLs to the correct product pages.

Bazaarvoice uses a supplier or vendor ID to determine which questions and product reviews to send to the supplier. This data is required by all feature and product integration, though it is required for retailers only for Ratings & Reviews Collect-Distribute and Connections integration.

Use a custom attribute to provide a supplier or vendor ID in the feed by specifying an id="VendorID" attribute for the <Attribute> element. Example:

<Attributes>
    <Attribute id="VendorID"> 
        <Value>2598</Value>
    </Attribute>
    <Attribute id="VendorName">
        <Value>RAWLINGS CANADA INC.</Value>
    </Attribute>
</Attributes>

If you are a retailer using Connections, Bazaarvoice provides two options for suppliers (also referred to as "brands" or "vendors") to use when signing up for Connections Basic and Connections Premium:

  • Supplier or vendor ID—Provides a guaranteed mapping to the supplier and avoids confusion for large suppliers, which may supply products in different categories. To provide a supplier or vendor ID, add the VendorID attribute to existing <Attribute> elements of a product feed. This option also proves very useful for private labels that may be supplied by different manufacturers. This is the recommended option.
  • Brand name—Provides the brand or vendor name using the <Brand> element. The drawback to using this option is that all vendors that supply products for the specified brand will receive questions about all of the products, including those they do not supply.

After sign-up, Bazaarvoice uses this value to determine which questions and product reviews to send to the supplier.

Multi-category supplier example

Retailer A carries products from Vendor V in three categories: small appliances, televisions, and mobile phones. A different division of the vendor manufactures and markets each product. Retailer A provides Bazaarvoice the vendor ID for each product and then uses the ID for Connections sign-up. Bazaarvoice can now send questions for the small appliances products to only that division of Vendor V. This process makes it easier and faster for Vendor V to respond. Without the supplier or vendor ID, the television and mobile phone divisions would also receive the small appliances questions.

Private label example

Retailer A has a private label called Brand XYZ. This retailer sells packaged food, toiletries, and cleaning supplies under the Brand XYZ name, but each product type has its own vendors. If Retailer A’s product feed contains vendor IDs, Bazaarvoice can determine which questions go to which vendor. If the product feed does not contain vendor IDs, then Bazaarvoice uses only the <Brand> element to determine where to route questions. Without vendor IDs, all vendors for Brand XYZ’s products will receive questions about all Brand XYZ products, including those they do not supply.

Single feeds best practice

When using feeds, you can upload your catalog data using the following formats:

Format Description Best practice
XML file

Upload a single XML feed file that includes all of your catalog. Providing a well-formed structured product feed is critical for success.

  • Upload a single full XML feed daily
  • We highly recommend you use this method to provide your primary catalog feed
  • Sending feeds multiple times a day will result in poor performance

Text file

If creating an XML feed is too difficult, you can provide your catalog data in the form of a separator-delimited text file.

Note: Although Bazaarvoice accepts XML and flat (CSV or TXT) formats, XML is the preferred format. It supports localization, has a rich category hierarchy configuration, as well as other features.

  • Use supplemental feed files to provide updated or missing data from the main XML feed to Bazaarvoice
  • We recommend that you upload supplemental flat files (CSV or TXT) weekly
  • Don’t provide your primary catalog data using a text file (due to its format limitations).

Caution: Do not include data with personally identifiable information (PII). PII is data that is personal and often private to consumers. Its use might identify a specific individual or distinguish one person from another in your product catalog feeds.

Create an XML product catalog feed

If you choose to provide your catalog to Bazaarvoice in an XML feed, which is the recommended method, a well-formed product feed is critical for success. The following example shows the general structure of a simplified XML product feed:

<?xml version="1.0" encoding="UTF-8"?> 
<Feed>
    <Brands>
        <Brand>...</Brand>
        ...
    </Brands>
    <Categories>
        <Category>...</Category>
        ...
    </Categories>
    <Products>
        <Product>...</Product>
        ...
    </Products>
</Feed>

Complete the steps in this section to create an XML feed and upload it to Bazaarvoice.

Quick start steps

This section provides the quick start steps for creating your product feed. Refer to other sections of this topic for detailed information on how to create and validate product feed.

  1. Create or update the product XML feed as described by the XML schema . You can use the Product Feed Generator as a starting point for creating your product feed.

    Each product in the feed must include these properties:

    • Brand
    • Product ID
    • Product name
    • Product URL
    • Image URL
    • EAN, UPC, or MPN
    Note: The product ID is set in the $BV.configure call on your product page. In the product feed, you must specify the value of the product ID for ExternalId. Within Bazaarvoice, ExternalId is especially important. Without it, product matching across features cannot occur. Product ID is also used in submission form links (productId) and in the integration code on product description pages (PDPs), and it is used by sku in BV Pixel transactions.

    Refer to this XML feed example if necessary.

  2. Validate the XML feed against the schema using this validation tool .
  3. Upload feed to the Bazaarvoice staging or production SFTP server, in /import-inbox. Feeds are processed in a daily queue at 2 AM Central Time (CST: UTC-6 or CDT: UTC-5) and are placed in the /backup folder.
  4. Check the results from your staging or production server Workbench.
Note: If you want to provide catalog data to Bazaarvoice using multiple sources, it is recommended to provide the majority of catalog data using an XML feed, and then use a text feed to provide supplemental data.

Step 1: Create an XML feed file

How you generate a feed depends on your system and processes. Regardless of your situation, every feed must be an XML file and follow the same structure.

Get started structuring your product feed by referring to the following:

  • Product Feed Generator, which provides a starting point for creating your product feed
  • Product feed XML schema , which defines the structure and contents of the feed.

    Note: Version 14.3+ of the schema does not enforce length or numerical constraints on UPCs, EANs, and ISBNs. Any string in one of these fields is treated as valid by the product schema. Values in the UPC, EAN, and ISBN fields are validated during the catalog import process, however, and only valid values are stored. You can find the complete syntax for all globally unique identifiers in this example xml product feed file.

We recommend the following best practices when you create a product feed:

  • Ensure that the first line of your feed adheres to the following format:
    <?xml version="1.0" encoding="utf-8"?>
  • The standard character-encoding scheme, such as UTF-8 or Windows-1252, must match the scheme that you use for any special characters in the feed.
  • If you do not have a value for a particular field, omit the field from your feed. Do not include the field with a blank value.

Refer to the example below to view an XML feed that includes multiple products.

Step 2: Check the elements and attributes

You must use the appropriate elements and attributes to describe the feed, brand, category, and product information. Refer to the following tables for child elements and attributes for the <Feed>, <Brands>, <Categories>, and <Products> elements.

Note: If an element is not required but you maintain it for your products, include it in the feed.

Feed element

This element is required. The following table identifies required attributes for the <Feed> element.

Attribute Description
name The short version of your Bazaarvoice client name.
extractDate A timestamp that should be populated automatically in the XML DateTime format .
incremental Whether the feed includes all catalog data. If you are uploading a data feed that contains your entire product catalog, set this value to false.
supplemental Whether the feed contains supplemental catalog data. This feed type should be used only when providing multiple catalog sources.
xmlns Schema reference. Set this value to http://www.bazaarvoice.com/xs/PRR/ProductFeed/15.1.
<Feed xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/15.1" 
      name="ExampleClient" incremental="false" 
      extractDate="2016-01-18T12:00:00">

Brands element

You can declare all product brands in the <Brands> element using these child elements:

Element Value
Brand

Represents a product brand in your feed and must contain the following <ExternalId> and <Name> or <Names> child elements.

You can include the removed="true" attribute in the <Brand> element to mark the brand inactive.

ExternalId

Unique brand ID that can contain only alphanumeric characters, hyphens (-), and underscores (_). If a brand ID contains an invalid character, replace it with an alternate character, such as an underscore. This format is used in the data feed only and does not affect end users. The ID is case insensitive, so you cannot use IDs that match except for case.

Ensure the ID is a stable ID that will not change for the same logical brand, even if the name of the brand changes.

Name or Names Name of the brand, which is visible to end users.

If specifying localized brand names in a multilingual implementation, include a <Name> element for each locale in a parent <Names> element, and then specify the locale attribute (of type String) for each <Name> child element.

Then, when defining products in the <Products> element, you can use the <BrandExternalId> element to reference a brand's ID in the <Brands> element.

Note: Another way to declare brands in your catalog is to use the <Brand> child element in the <Product> element. You can use this method instead of using the <Brands> element as described here.
<Brands>
   <Brand>
      <ExternalId>AAA</ExternalId>
      <Name>First Brand</Name>
   </Brand>
   <Brand>
      <ExternalId>BBB</ExternalId>
      <!-- Default brand name -->
      <Name>Second Brand</Name>
      <!-- Localized brand names -->
      <Names>
         <Name locale="en_CA">Second Brand CA</Name>
         <Name locale="fr_CA">Deuxième marque CA</Name>
      </Names>
   </Brand>
</Brands>
<Products>
   <Product>
      <Name>First Product</Name>
      <ExternalId>Prod-1234</ExternalId>
      <BrandExternalId>AAA</BrandExternalId>
      ...
   </Product>
</Products>

Categories element

The <Categories> element defines each category that is represented by products in your feed using the following child elements. It can also be used to define a category hierarchy. This element is required.

Element Value Required
Category

Represents a product category in your feed and may include other elements listed in this table.

You can include the removed="true" attribute in the <Category> element to mark the category inactive.

Yes
ExternalId

Unique category or subcategory ID that can contain only alphanumeric characters, hyphens (-), and underscores (_). If a category ID contains an invalid character, replace it with an alternate character, such as an underscore. This format is used in the data feed only and does not affect end users. The ID is case insensitive, so you cannot use IDs that match except for case.

Ensure that the category ID is stable and will not change, even if the name of the category changes.

Yes
ParentExternalId Parent category's ID of the subcategory in question. No
Name or Names

Name of the category or subcategory, which is visible to end users.

If specifying localized categories in a multilingual implementation, include a <Name> element for each locale in a parent <Names> element, and then specify the locale attribute (of type String) for each <Name> child element.

Yes
CategoryPageUrl or CategoryPageUrls

Unique URL for the category or subcategory. When specifying a URL, be aware of the following:

  • Do not include extraneous query string parameters that you might use for tracking and partnership codes.
  • If the URL contains a reserved (special) character, you must URL-encode the character. For example, use &amp for an ampersand, use %20 for a space, or use %5B and %5D for square brackets ([ ]).
  • If specifying localized categories in a multilingual implementation, include a <CategoryPageUrl> element for each locale in a parent <CategoryPageUrls> element, and then specify the locale attribute (of type String) for each <CategoryPageUrl> child element.
Only if collecting Questions & Answers content at the Category level
ImageUrl or ImageUrls

Unique URL for the category or subcategory image, which is usually hosted on your website or a content delivery network. When specifying a URL, be aware of the following:

  • If the URL contains a reserved (special) character, you must URL-encode the character. For example, use &amp for an ampersand, use %20 for a space, or use %5B and %5D for square brackets ([ ]).
  • If specifying localized categories in a multilingual implementation, include an <ImageUrl> element for each locale in a parent <ImageUrls> element, and then specify the locale attribute (of type String) for each <ImageUrl> child element.
Note: If Ratings & Reviews is deployed on an HTTPS site, you must provide image URLs at an HTTPS location in your product catalog. If you do not, your customers will see a mixed content warning.
Only if collecting Questions & Answers content at the Category level
<Categories>
    <Category>
        <ExternalId>1010</ExternalId>
        <!-- Default category name -->
        <Name>First Category</Name>
        <!-- Localized category names -->
        <Names>
            <Name locale="en_CA">First Category CA</Name>
            <Name locale="fr_CA">Première catégorie CA</Name>
        </Names>
        <!-- Default category page URL -->
        <CategoryPageUrl>
            http://www.example.com/category.htm?cat=1010
        </CategoryPageUrl>
        <!-- Localized category page URLs -->
        <CategoryPageUrls>
            <CategoryPageUrl locale="en_CA">
                 http://www.example.ca/en_ca/category.htm?cat=1010
            </CategoryPageUrl>
            <CategoryPageUrl locale="fr_CA">
                 http://www.example.ca/fr_ca/category.htm?prod=1010
            </CategoryPageUrl>
        </CategoryPageUrls>
        <!-- Default category image URL -->
        <ImageUrl>http://images.example.com/catimages/1010.gif</ImageUrl>
        <!-- Localized category image URLs -->
        <ImageUrls>
            <ImageUrl locale="en_CA">
                http://images.example.ca/en_ca/catimages/1010.gif
            </ImageUrl>
            <ImageUrl locale="fr_CA">
                http://images.example.ca/fr_ca/catimages/1010.gif
            </ImageUrl>
        </ImageUrls>
    </Category>
    <Category>
        <ExternalId>1020</ExternalId>
        <Name>Second Category</Name>
        <CategoryPageUrl>
            http://www.example.com/category.htm?cat=1020
        </CategoryPageUrl>
        <ImageUrl>http://images.example.com/catimages/1020.gif</ImageUrl>
    </Category>
    <Category>
        <ExternalId>1021</ExternalId>
        <ParentExternalId>1020</ParentExternalId>
        <Name>Sub Category</Name>
        <CategoryPageUrl>
            http://www.example.com/category.htm?cat=1021
        </CategoryPageUrl>
        <ImageUrl>http://images.example.com/catimages/1021.gif</ImageUrl>
    </Category>
</Categories>

Products element

<Products> is a required parent element that defines each product in your feed using the common child elements shown in the following table. This element is required. Refer to the product feed schema for a complete list of available elements.

Element Value Required
Product

Represents a product in your feed and may include other elements listed in this table.

You can include the removed="true" attribute in the <Product> element to mark the product inactive. If the product does not exist in the database and is marked inactive, it is not added to the database.

Yes
ExternalId

Unique product ID that can contain only alphanumeric characters, hyphens (-), and underscores (_). If the external product ID contains an invalid character, replace it with an alternate character, such as an underscore. The ID is case insensitive, so you cannot use IDs that match except for case.

This format is used in the data feed only and is not visible to end users.

Yes, one for each product
Name or Names

Name or names of the product, which is visible to end users.

If specifying localized product names in a multilingual implementation, include a <Name> element for each locale in a parent <Names> element, and then specify the locale attribute (of type String) for each <Name> child element.

Yes, one for each locale
Description or Descriptions

Description of the product. We recommend that product descriptions be at least three sentences or 300 characters long.

If specifying localized product descriptions in a multilingual implementation, include a <Description> element for each locale in a parent <Descriptions> element, and then specify the locale attribute (of type String) for each <Description> child element.

Yes, one for each locale
Brand The name of the brand to which the product belongs. You must include a <Name> child element, to specify the brand name.
Note: Specify either <Brand> or <BrandExternalId> in the <Product> element, but do not specify both.
Yes, one per product, if <BrandExternalId> is not provided
BrandExternalId

ID of the brand to which the product belongs. Specify this element if a brand is declared as a separate element in the <Brands> block. The value of <BrandExternalId> must match a brand ID defined in the <Brands> block. If the <Brands> block is not defined in the product feed, use <Brand> (above) instead.

Note: Specify either <BrandExternalId> or <Brand> in the <Product> element, but do not specify both.
Yes, one per product, if <Brand> is not provided
CategoryExternalId

Category or subcategory ID for the product. Specify this element if a category is declared as a separate element in the <Categories> block. The value of <CategoryExternalId> must match a category ID defined in the <Categories> block. If the <Categories> block is not defined in the product feed, use <CategoryPath> (below) instead.

Note: Specify either <CategoryExternalId> or <CategoryPath> in the <Product> element, but you cannot specify both.
Yes, one per product
CategoryPath

A list of categories ordered by hierarchy. Each category must be specified in a <CategoryName> child element. You can specify multiple <CategoryName> child elements, each for a subcategory of the <CategoryName> immediately above it.

Note: Specify either <CategoryPath> or <CategoryExternalId> in the <Product> element, but you cannot specify both.
Recommended, one per product
ProductPageUrl or ProductPageUrls

Unique, uncorrupted URL for a product page. Do not include extraneous query string parameters that you might use for tracking and partnership codes. When specifying a URL, be aware of the following:

  • If the URL contains a reserved (special) character, you must URL-encode the character. For example, use &amp for an ampersand, use %20 for a space, or use %5B and %5D for square brackets ([ ]).
  • If specifying localized URLs in a multilingual implementation, include a <ProductPageUrl> element for each locale in a parent <ProductPageUrls> element, and then specify the locale attribute (of type String) for each <ProductPageUrl> child element.
Yes, one per locale
ImageUrl or ImageUrls

Unique URL for the product image. The optimal but slightly flexible display size is 600 x 600 pixels. When specifying a URL, be aware of the following:

  • If the URL contains a reserved (special) character, you must URL-encode the character. For example, use &amp for an ampersand, use %20 for a space, or use %5B and %5D for square brackets ([ ]).
  • If specifying localized images in a multilingual implementation, include an <ImageUrl> element for each locale in a parent <ImageUrls> element, and then specify the locale attribute (of type String) for each <ImageUrl> child element.
Note: If Ratings & Reviews is deployed on an HTTPS site, you must provide image URLs at an HTTPS location in your product catalog. If you do not, your customers will see a mixed content warning.
Yes, one per locale
ModelNumbers Unique referencing code that businesses use to identify a part that a particular industry uses. Specify a <ModelNumber> child element for each model number you want to define. Each model number can contain letters, numerals, and other characters. No; if included, one per product
ManufacturerPartNumbers Manufacturer-specific part number. Specify a <ManufacturerPartNumber> child element for each part number you want to define. Part numbers can contain letters, numerals, and characters. Yes; you can specify an unlimited number of child elements
EANs

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.

Note: Version 14.3+ of the schema does not enforce length or numerical constraints on UPCs, EANs, and ISBNs. Any string in one of these fields is treated as valid by the product schema. Values in the UPC, EAN, and ISBN fields are validated during the catalog import process, however, and only valid values are stored. You can find the complete syntax for all globally unique identifiers in this example product feed file.

Either EANs, UPCs, or ISBNs is required.

If included, you can specify an unlimited number of child elements. Syndication matching improves if you specify multiple values.

UPCs

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.

Note: Version 14.3+ of the schema does not enforce length or numerical constraints on UPCs, EANs, and ISBNs. Any string in one of these fields is treated as valid by the product schema. Values in the UPC, EAN, and ISBN fields are validated during the catalog import process, however, and only valid values are stored. You can find the complete syntax for all globally unique identifiers in this example product feed file.

Either EANs, UPCs, or ISBNs is required.

If included, you can specify an unlimited number of child elements. Syndication matching improves if you specify multiple values.

ISBNs International Standard Book Number (ISBN), which is a 10- or 13-character value used predominantly for media products such as books, music, and videos. Specify an <ISBN> child element for each ISBN you want to define. The last character provides a checksum that helps validate the product identifier. Most ISBNs are composed only of digits, except for some 10-character ISBN values that use an X for the checksum.

Either EANs, UPCs, or ISBNs is required.

If included, you can specify an unlimited number of child elements. Syndication matching improves if you specify multiple values.

Attributes Custom attributes that enable you to define additional product-specific information, to report on product-specific information or to support product families. Specify an <Attribute> child element for each product attribute you want to define. Be sure to include the name of the product attribute using the id attribute of the <Attribute> element; spaces are not permitted in the attribute ID. No; if included, you can specify an unlimited number of child elements
Color

Color of the product.

No; Recommended
Size

Size of the product.

No; Recommended
Material

Material of the product. For example, steel, plastic, silk, etc.

No; Recommended
Currency

Currency of the product in each Locale.

Note: Currency must be provided in the format ISO 4217N.

No; Recommended
Price

Price of the product.

No; Recommended
Availability

Indicates whether or not a product is available to purchase. It may be out of stock or out of season.

No; Recommended
<Products>
    <Product>
        <ExternalId>11111111111abc</ExternalId>
        <Name>First Product Round with Green</Name>
        <Description>First Product Description Text</Description>
        <Brand>
            <Name>brand-123</Name>
        </Brand>
        <CategoryPath>
            <CategoryName>Category</CategoryName>
            <CategoryName>Sub Category</CategoryName>
        </CategoryPath>
        <ProductPageUrl>http://www.example.com/product.htm?prod=2000001</ProductPageUrl>
        <ImageUrl>http://images.example.com/prodimages/2000001.gif</ImageUrl>
        <Color>Red</Color>
        <Size>L</Size>
        <Material>Denim</Material>
        <Availability>false</Availability>
        <Currency Price="12.99" CurrencyCode="GBP"/>
        <!-- Product details needed for syndication -->
        <ManufacturerPartNumbers>
            <ManufacturerPartNumber>26-12345-8Z</ManufacturerPartNumber>
        </ManufacturerPartNumbers>
        <EANs>
            <EAN>0213354752286</EAN>
            <EAN>0188173724031</EAN>
        </EANs>
        <UPCs>
            <UPC>382157229380</UPC>
            <UPC>283929327281</UPC>
        </UPCs>
        <!-- Custom product attributes -->
        <Attributes>
            <Attribute id="SAP_STATUS">
               <Value>L</Value>
            </Attribute>
            <Attribute id="BUYING_NUMBER">
               <Value>Not_Available</Value>
            </Attribute>
            <Attribute id="PROD_MGMT_GRP_NUMBER">
               <Value>Group56789</Value>
            </Attribute>
        </Attributes>
    </Product>
    <Product>
        <ExternalId>22</ExternalId>
        <Name>Second Product Round and Green</Name>
        <Description>Second Product Description Text</Description>
        <BrandExternalId>BBB</BrandExternalId>
        <CategoryExternalId>1021</CategoryExternalId>
        <ProductPageUrl>http://www.example.com/product.htm?prod=2000002</ProductPageUrl>
        <ImageUrl>http://images.example.com/prodimages/2000002.gif</ImageUrl>
        <ModelNumbers>
           <ModelNumber>1235832</ModelNumber>
           <ModelNumber>1235839</ModelNumber>
        </ModelNumbers>
        <ManufacturerPartNumbers>
           <ManufacturerPartNumber>26-12345-8W</ManufacturerPartNumber>
        </ManufacturerPartNumbers>
        <EANs>
           <EAN>0213354752287</EAN>
        </EANs>
        <UPCs>
           <UPC>138313830283</UPC>
        </UPCs>
    </Product>
</Products>

Step 3: Validate the feed

Your feed needs well-formed XML that works with the Bazaarvoice XML schema . Validate your feed against the schema before uploading it to Bazaarvoice. You can use an XML validation tool to validate your feed, or you can upload your product feed by SFTP by following the steps below and trigger an import via staging Workbench.

Step 4: Upload the feed

We recommend that you upload an updated product feed whenever changes are made to your product catalog as reflected by your website. It is imperative that you provide Bazaarvoice with matching updates as your product catalog changes on your live site.

You can add another level of security to your data by supplying a public Secure Socket Shell (SSH) key using SSH passwordless entry. This process relies on a private key that resides with you, paired with a public key used by a Bazaarvoice SFTP server. If you want to set up this key-based authentication method, contact Bazaarvoice Support for information and assistance.

Upload the XML feed file to the /import-inbox directory of the SFTP server:

  • If your data is hosted in the US, use the following URLs:
    • Staging server—sftp-stg.bazaarvoice.com
    • Production server—sftp.bazaarvoice.com
  • If your data is hosted in Europe, use the following URLs:
    • Staging server—sftp7-stg.bazaarvoice.com
    • Production server—sftp7.bazaarvoice.com

Be sure to connect to SFTP using port 22. Contact Bazaarvoice Support if you do not know your SFTP credentials or where your data is hosted.

After you upload a product feed to an SFTP server, Bazaarvoice automatically begins importing the feed at 2 AM Central Time (CST: UTC-6 or CDT: UTC-5), although Bazaarvoice may not finish importing your feed until later the same day due to the import process.

If you uploaded the feed to a staging server, you can trigger an import manually. (You cannot manually trigger an import to the production server.) Complete the following steps to manually import the feed:

  1. From the Bazaarvoice Workbench of your staging server, select Settings > Validate Product Feed.
  2. Select Schedule one-time import to manually import the feed.

Step 5: Check the feed status

After uploading a feed to the staging or production SFTP server, you can view the import summary and error or warning count of the feed. Checking the import summary enables you to correct errors before the next import, so you can ensure you provide a valid feed for the next import.

View the import summary for your staging server or production server by selecting Settings > Validate Product Feed. If your feed returns an error or warning, select it for more information.

Note: Validate the feed as described in Step 3 before uploading it and using the feed validation tool in the Workbench. You should upload only well-formed feeds to the server and use the feed validation tool to catch errors your primary validation tool may have missed.

Example XML feed

Although the following example product feed is probably smaller and less complex than your product feed, you can review it to learn about the basic feed structure required by Bazaarvoice.

<?xml version="1.0" encoding="utf-8"?>
<Feed xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/15.1" name="ExampleClient" incremental="false" extractDate="2011-10-18T12:00:00.000000">

   <!-- Brands -->
   <Brands>
      <Brand>
         <ExternalId>AAA</ExternalId>
         <Name>First Brand</Name>
      </Brand>
      <Brand>
         <ExternalId>BBB</ExternalId>
         <!-- Default brand name -->
         <Name>Second Brand</Name>
         <!-- Localized brand names -->
         <Names> 
            <Name locale="en_US">Second Brand US</Name>
            <Name locale="en_CA">Second Brand CA</Name>
            <Name locale="fr_CA">Deuxième marque CA</Name>
         </Names>
      </Brand>
   </Brands>

   <!-- Categories -->
   <Categories>
      <Category>
         <ExternalId>1010</ExternalId>
         <!-- Default category name -->
         <Name>First Category</Name>
         <!-- Localized category names -->
         <Names> 
            <Name locale="en_US">First Category US</Name>
            <Name locale="en_CA">First Category CA</Name>
            <Name locale="fr_CA">Première catégorie CA</Name>
         </Names>
         <!-- Default category page URL -->
         <CategoryPageUrl>http://www.example.com/category.htm?cat=1010</CategoryPageUrl>
         <!-- Localized category page URLs -->
         <CategoryPageUrls>
            <CategoryPageUrl locale="en_US">http://www.example.com/en_us/category.htm?cat=1010</CategoryPageUrl>
            <CategoryPageUrl locale="en_CA">http://www.example.com/en_ca/category.htm?cat=1010</CategoryPageUrl>
            <CategoryPageUrl locale="fr_CA">http://www.example.com/fr_ca/category.htm?prod=1010</CategoryPageUrl>
         </CategoryPageUrls>
         <!-- Default category image URL -->
         <ImageUrl>http://images.example.com/catimages/1010.gif</ImageUrl>
         <!-- Localized category image URLs -->
         <ImageUrls>
            <ImageUrl locale="en_US">http://images.example.com/en_us/catimages/1010.gif</ImageUrl>
            <ImageUrl locale="en_CA">http://images.example.com/en_ca/catimages/1010.gif</ImageUrl>
            <ImageUrl locale="fr_CA">http://images.example.com/fr_ca/catimages/1010.gif</ImageUrl>
         </ImageUrls>
      </Category>
      <Category>
         <ExternalId>1020</ExternalId>
         <Name>Second Category</Name>
         <CategoryPageUrl>http://www.example.com/category.htm?cat=1020</CategoryPageUrl>
         <ImageUrl>http://images.example.com/catimages/1020.gif</ImageUrl>
      </Category>
      <Category>
         <ExternalId>1021</ExternalId>
         <ParentExternalId>1020</ParentExternalId>
         <Name>Sub Category</Name>
         <CategoryPageUrl>http://www.example.com/category.htm?cat=1021</CategoryPageUrl>
         <ImageUrl>http://images.example.com/catimages/1021.gif</ImageUrl>
      </Category>
   </Categories>

   <!-- Products -->
   <Products>
      <Product>
         <ExternalId>11111111111abc</ExternalId>
         <Name>First Product Round with Green</Name>
         <Description>First Product Description Text</Description>
         <BrandExternalId>AAA</BrandExternalId>
         <CategoryExternalId>1010</CategoryExternalId>
         <ProductPageUrl>http://www.example.com/product.htm?prod=2000001</ProductPageUrl>
         <ImageUrl>http://images.example.com/prodimages/2000001.gif</ImageUrl>
         <!-- Product details needed for syndication -->
         <ManufacturerPartNumbers>
            <ManufacturerPartNumber>26-12345-8Z</ManufacturerPartNumber>
         </ManufacturerPartNumbers>
         <EANs>
            <EAN>0213354752286</EAN>
            <EAN>0188173724031</EAN>
            <EAN>1833474920123</EAN>
         </EANs>
         <UPCs>
            <UPC>382157229380</UPC>
            <UPC>283929327281</UPC>
            <UPC>058227392728</UPC>
         </UPCs>
         <!-- Custom product attributes -->
         <Attributes>
            <!-- Families the product is a member of -->
            <Attribute id="BV_FE_FAMILY">
               <Value>Green</Value>
            </Attribute>
            <Attribute id="BV_FE_FAMILY">
               <Value>Round</Value>
            </Attribute>
            <!-- Product management group ID -->
            <Attribute id="ProductManagementGroupId">
               <Value>Group56789</Value>
            </Attribute>
         </Attributes>
      </Product>
      <Product>
         <ExternalId>22</ExternalId>
         <Name>Second Product Round and Green</Name>
         <Description>Second Product Description Text</Description>
         <BrandExternalId>BBB</BrandExternalId>
         <CategoryExternalId>1021</CategoryExternalId>
         <ProductPageUrl>http://www.example.com/product.htm?prod=2000002</ProductPageUrl>
         <ImageUrl>http://images.example.com/prodimages/2000002.gif</ImageUrl>
         <ModelNumbers>
            <ModelNumber>1235832</ModelNumber>
            <ModelNumber>1235839</ModelNumber>
         </ModelNumbers>
         <ManufacturerPartNumbers>
            <ManufacturerPartNumber>26-12345-8W</ManufacturerPartNumber>
         </ManufacturerPartNumbers>
         <EANs>
            <EAN>0213354752287</EAN>
         </EANs>
         <UPCs>
            <UPC>138313830283</UPC>
         </UPCs>
         <!-- Custom product attributes -->
         <Attributes>
            <!-- Families the product is a member of -->
            <Attribute id="BV_FE_FAMILY">
               <Value>Round</Value>
            </Attribute>
            <Attribute id="BV_FE_FAMILY">
               <Value>Green</Value>
            </Attribute>
            <!-- Show all content from other products in the Round Family -->
            <Attribute id="BV_FE_EXPAND">
               <Value>BV_FE_FAMILY:Round</Value>
            </Attribute>
            <!-- Product management group ID -->
            <Attribute id="ProductManagementGroupId">
               <Value>Group56789</Value>
            </Attribute>
         </Attributes>
      </Product>
      <!-- Example product with multiple languages -->
      <Product>
         <ExternalId>333</ExternalId>
         <!-- Default product name -->
         <Name>Third Product Square and Red</Name>
         <!-- Localized product names -->
         <Names> 
            <Name locale="en_US">Third Product US</Name>
            <Name locale="en_CA">Third Product CA</Name>
            <Name locale="fr_CA">Troisième produit CA</Name>
         </Names>
         <!-- Default product description -->
         <Description>Third Product Description Text</Description>
         <!-- Localized product descriptions -->
         <Descriptions>
            <Description locale="en_US">Third Product Description Text US</Description>
            <Description locale="en_CA">Third Product Description Text CA</Description>
            <Description locale="fr_CA">Troisième texte Description du produit</Description>
         </Descriptions>
         <BrandExternalId>BBB</BrandExternalId>
         <CategoryExternalId>1021</CategoryExternalId>
         <!-- Default product page URL -->
         <ProductPageUrl>http://www.example.com/product.htm?prod=2000003</ProductPageUrl>
         <!-- Localized product page URLs -->
         <ProductPageUrls>
            <ProductPageUrl locale="en_US">http://www.example.com/en_us/product.htm?prod=2000003</ProductPageUrl>
            <ProductPageUrl locale="en_CA">http://www.example.com/en_ca/product.htm?prod=2000003</ProductPageUrl>
            <ProductPageUrl locale="fr_CA">http://www.example.com/fr_ca/product.htm?prod=2000003</ProductPageUrl>
         </ProductPageUrls>
         <!-- Default product image URL -->
         <ImageUrl>http://images.example.com/prodimages/2000003.gif</ImageUrl>
         <!-- Localized product image URLs -->
         <ImageUrls>
            <ImageUrl locale="en_US">http://images.example.com/en_us/prodimages/2000003.gif</ImageUrl>
            <ImageUrl locale="en_CA">http://images.example.com/en_ca/prodimages/2000003.gif</ImageUrl>
            <ImageUrl locale="fr_CA">http://images.example.com/fr_ca/prodimages/2000003.gif</ImageUrl>
         </ImageUrls>
         <ModelNumbers>
            <ModelNumber>123523832</ModelNumber>
            <ModelNumber>123325839</ModelNumber>
         </ModelNumbers>
         <ManufacturerPartNumbers>
            <ManufacturerPartNumber>26-93812-8W</ManufacturerPartNumber>
         </ManufacturerPartNumbers>
         <EANs>
            <EAN>0813354723287</EAN>
         </EANs>
         <UPCs>
            <UPC>138313830999</UPC>
         </UPCs>
         <!-- Custom product attributes -->
         <Attributes>
            <!-- Families this product is a member of -->
            <Attribute id="BV_FE_FAMILY">
               <Value>Red</Value>
            </Attribute>
            <Attribute id="BV_FE_FAMILY">
               <Value>Square</Value>
            </Attribute>
            <!-- Show all content from other products in the Red Family -->
            <Attribute id="BV_FE_EXPAND">
               <Value>BV_FE_FAMILY:Red</Value>
            </Attribute>
            <!-- Show all content from other products in the Square Family -->
            <Attribute id="BV_FE_EXPAND">
               <Value>BV_FE_FAMILY:Square</Value>
            </Attribute>
            <!-- Price of this product in USA -->
            <Attribute id="PriceUs">
               <Value>65.30</Value>
            </Attribute>
            <!-- Price of this product in Canada -->
            <Attribute id="PriceCa">
               <Value>67.25</Value>
            </Attribute>
            <!-- Product management group ID -->
            <Attribute id="ProductManagementGroupId">
               <Value>Group12345</Value>
            </Attribute>
         </Attributes>
      </Product>
      <Product>
         <ExternalId>4444</ExternalId>
         <Name>Fourth Product Round and Black</Name>
         <Description>Fourth Product Description Text</Description>
         <BrandExternalId>BBB</BrandExternalId>
         <CategoryExternalId>1021</CategoryExternalId>
         <ProductPageUrl>http://www.example.com/product.htm?prod=2000002</ProductPageUrl>
         <ImageUrl>http://images.example.com/prodimages/2000002.gif</ImageUrl>
         <ModelNumbers>
            <ModelNumber>1235832</ModelNumber>
            <ModelNumber>1235839</ModelNumber>
         </ModelNumbers>
         <ManufacturerPartNumbers>
            <ManufacturerPartNumber>26-12345-8W</ManufacturerPartNumber>
         </ManufacturerPartNumbers>
         <EANs>
            <EAN>0213354752287</EAN>
         </EANs>
         <UPCs>
            <UPC>138313830283</UPC>
         </UPCs>
         <!-- Custom product attributes -->
         <Attributes>
            <!-- Families this product is a member of -->
            <Attribute id="BV_FE_FAMILY">
               <Value>Round</Value>
            </Attribute>
            <!-- Show all content from other products in the Round Family -->
            <Attribute id="BV_FE_EXPAND">
               <Value>BV_FE_FAMILY:Round</Value>
            </Attribute>
            <!-- Product management group ID -->
            <Attribute id="ProductManagementGroupId">
               <Value>Group56789</Value>
            </Attribute>
         </Attributes>
      </Product>
      <Product>
         <ExternalId>55555</ExternalId>
         <Name>Fifth Product- Family level</Name>
         <Description>Use this product to collect reviews at a Family level. This product is also a member of the Green Family. It has the BV_FE_EXPAND Attribute set which will pull all reviews for the family</Description>
         <BrandExternalId>BBB</BrandExternalId>
         <CategoryExternalId>1021</CategoryExternalId>
         <ProductPageUrl>http://www.example.com/product.htm?prod=2000002</ProductPageUrl>
         <ImageUrl>http://images.example.com/prodimages/2000002.gif</ImageUrl>
         <ModelNumbers>
            <ModelNumber>1235832green</ModelNumber>
            <ModelNumber>1235543green</ModelNumber>
            <ModelNumber>127654green</ModelNumber>
            <ModelNumber>123111green</ModelNumber>
         </ModelNumbers>
         <UPCs>
            <UPC>138313830281</UPC>
            <UPC>138313830282</UPC>
            <UPC>138313830283</UPC>
            <UPC>138313830284</UPC>
         </UPCs>
         <!-- Custom product attributes -->
         <Attributes>
            <!-- Families this product is a member of -->
            <Attribute id="BV_FE_FAMILY">
               <Value>Green</Value>
            </Attribute>
            <!-- Show all content from other products in the Green Family -->
            <Attribute id="BV_FE_EXPAND">
               <Value>BV_FE_FAMILY:Green</Value>
            </Attribute>
         </Attributes>
      </Product>
   </Products>
</Feed>

Create a text product catalog feed

Bazaarvoice supports receiving catalog data in a text file. Though this format can be used to provide the main catalog feed, we recommend that you use the text format for supplemental feed files because the text format has the following limitations:

  • Lack of localization—You cannot provide localized catalog attributes such as product name, category name, and URLs.
  • Simple category hierarchy—Though the text format supports category information, only non-localized category names can be provided in a text file. Unique category identifiers cannot be sent to Bazaarvoice in a text file; if they are, downstream issues may occur if category names change over time for any reason.
  • Strict limitations on field values—You must adhere to the following rules when creating a text feed:

    • Do not include instances of a delimiter (commas, pipes, or tabs) within the field values, such as Name or Description.
    • Do not use double-quotes around field values.
    • Avoid including leading and trailing spaces in field values because they will be included with the value when stored in the Bazaarvoice database.

Complete the steps in this section to provide catalog data to Bazaarvoice in the form of a text file.

Step 1: Create and format the text file

The following sections detail the exact specifications of the Bazaarvoice text feed file.

File attributes

The file must be formatted as follows:

File Attribute Description
Header

Must be listed as the first line in the file and begin with //. Include a header for specific scenarios when using multiple catalog sources, such as when using a text file as your main feed in conjunction with multiple catalog feed sources. Here is an example:

//catalogMode=COMPLETE
Delimiter

Use one of the following delimiters to separate columns:

  • Comma
  • Pipe (I)
  • Tab

Column Header Row

Required to describe the values provided in the file. The file must include at least two columns. Refer to Column definitions for a list of headers and values that can be included in the file.

File extension

You can use any file extension when naming the feed file because Bazaarvoice automatically detects the file type. However, we recommend using common extensions, such as .csv, .tsv, or .txt.

Columns definitions

The following columns are supported in the text file. Note that column names are not case sensitive.

Column Name Value Required
ExternalId

Unique product ID that can contain only alphanumeric characters, hyphens (-), and underscores (_). If the external product ID contains an invalid character, replace it with an alternate character, such as an underscore. The ID is case insensitive, so you cannot use IDs that match except for case.

This format is used in the data feed only and is not visible to end users.

Yes
Name

Name of the product, which is visible to end users.

No
Description

Description of the product. A description is only used within the optional Facebook Ratings & Reviews or Questions & Answers app. We recommend that product descriptions be at least three sentences or 300 characters long.

No
Brand

The name of the brand to which the product belongs.

Note: If BrandExternalId is not specified in addition to Brand, a brand external ID is created even if a brand external ID was specified in a feed or created in the past.
Recommended
BrandExternalId

ID of the brand to which the product belongs.

Recommended
Category

The product's category name.

Recommended
CategoryExternalId

Category ID for the product.

Note: If CategoryExternalId is not specified in addition to Category, a category external ID is created even if a category external ID was specified in a feed or created in the past.
Recommended
ProductUrl

Unique, uncorrupted URL for a product page. Do not include extraneous query string parameters that you might use for tracking and partnership codes. If the URL contains a reserved (special) character, you must URL-encode the character. For example, use &amp for an ampersand, use %20 for a space, or use %5B and %5D for square brackets ([ ]).

Yes
ImageUrl

Unique URL for the product image. The optimal but slightly flexible display size is 600 x 600 pixels. If the URL contains a reserved (special) character, you must URL-encode the character. For example, use &amp for an ampersand, use %20 for a space, or use %5B and %5D for square brackets ([ ]).

Note: If Ratings & Reviews is deployed on an HTTPS site, you must provide image URLs at an HTTPS location in your product catalog. If you do not, your customers will see a mixed content warning.
Yes
ModelNumber Unique referencing code that businesses use to identify a part that a particular industry uses. Each model number can contain letters, numerals, and other characters. No; if included, one per product
ManufacturerPartNumber Manufacturer-specific part number (MPN). Part numbers can contain letters, numerals, and characters. Recommended
EAN

European Article Numbers (EAN), which is used worldwide for marking retail goods. An EAN 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.

Note: Bazaarvoice does not enforce length or numerical constraints on EANs. Values are validated during the catalog import process, however, and only valid values are stored.

Either EANs, UPCs, or ISBNs is required.

If included, you can specify an unlimited number of child elements. Syndication matching improves if you specify multiple values.

UPC

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

Note: Bazaarvoice does not enforce length or numerical constraints on EANs. Values are validated during the catalog import process, however, and only valid values are stored.

Either EANs, UPCs, or ISBNs is required.

If included, you can specify an unlimited number of child elements. Syndication matching improves if you specify multiple values.

ISBN International Standard Book Number (ISBN), which is a 10- or 13-character value used predominantly for media products such as books, music, and videos. The last character provides a checksum that helps validate the product identifier. Most ISBNs are composed only of digits, except for some 10-character ISBN values that use an X for the checksum.

Either EANs, UPCs, or ISBNs is required.

If included, you can specify an unlimited number of child elements. Syndication matching improves if you specify multiple values.

GTIN Global Trade Item Number (GTIN), which is a globally unique 14-digit number used to identify trade items, products, or services. Bazaarvoice auto-detects the type of value provided in the GTIN field and stores it as the appropriate UPC, EAN, or ISBN value in the Bazaarvoice database. No
BV_FE_Family The product family name to which the product belongs. We recommend that you exclude special characters from product family names. No
BV_FE_Expand The product bundle name, to enable a product to display all content about family components on the product bundle's page. No
Inactive

Marks the product inactive if a yes or true value is specified in this column.

Note: If the product does not exist in the database and is marked inactive, it is not added to the database.
No

Product attributes with multiple values

If a product has more than one value for an attribute, you should provide all values if possible to maximize the value of the Bazaarvoice Network. For example, a shirt may have different SKUs in your catalog system, one for each color or size variant. Bazaarvoice supports multiple values for the following product attributes:

  • UPC
  • EAN
  • ISBN
  • GTIN
  • ManufacturerPartNumber
  • ModelNumber

To provide multiple values for an attribute, you can

  • Combine values into a single column and separate the values using spaces. Here is an example:
    ExternalId | UPC  
    123 | 123000000001
    456 | 456000000001 456000000002 456000000003
    788 | 789000000001 789000000002
  • Repeat the product in the file, providing a different value on each line. Here is an example:
    ExternalId, UPC
    123,123000000001
    456,456000000001
    456,456000000002
    789,789000000001
    789,789000000002
    789,789000000003

Step 2: Upload the feed

We recommend that you upload an updated product feed whenever changes are made to your product catalog as reflected by your website. It is imperative that you provide Bazaarvoice with matching updates as your product catalog changes on your live site.

Note: If you are attempting to provide product catalog data using multiple sources, contact Bazaarvoice to enable this functionality before uploading the feed file.

You can add another level of security to your data by supplying a public Secure Socket Shell (SSH) key using SSH passwordless entry. This process relies on a private key that resides with you, paired with a public key used by a Bazaarvoice SFTP server. If you want to set up this key-based authentication method, contact Bazaarvoice Support for information and assistance.

Upload the feed file to the /import-inbox directory of the SFTP server:

  • If your data is hosted in the US, use the following URLs:
    • Staging server—sftp-stg.bazaarvoice.com
    • Production server—sftp.bazaarvoice.com
  • If your data is hosted in Europe, use the following URLs:
    • Staging server—sftp7-stg.bazaarvoice.com
    • Production server—sftp7.bazaarvoice.com

Be sure to connect to SFTP using port 22. Contact Bazaarvoice Support if you do not know your SFTP credentials or where your data is hosted.

After you upload a product feed to an SFTP server, Bazaarvoice automatically begins importing the feed at 2 AM Central Time (CST: UTC-6 or CDT: UTC-5), although Bazaarvoice may not finish importing your feed until later the same day due to the import process.

If you uploaded the feed to a staging server, you can trigger an import manually. (You cannot manually trigger an import to the production server.) Complete the following steps to manually import the feed:

  1. From the Workbench of your staging server, select Settings > Validate Product Feed.
  2. Select Schedule one-time import to manually import the feed.

Step 3: Check the feed status

After uploading a feed to the staging or production SFTP server, you can view the import summary and error or warning count of the feed. Checking the import summary enables you to correct errors before the next import, so you can ensure you provide a valid feed for the next import.

View the import summary in the Workbench for your staging or production server by selecting Settings > Validate Product Feed. If your feed returns an error or warning, select it for more information.

Example text feeds

The following example is a simple comma-separated value (CSV) file that provides supplemental EAN catalog data:

ExternalId, EAN
123,0123000000001
456,0456000000001
456,0456000000002
789,0789000000001
789,0789000000002
789,0789000000003

Here is an example of a CSV file that can be used as the primary feed for product catalog data:

//catalogMode=COMPLETE
ExternalId, UPC    
123,123000000001
456,456000000001
456,456000000002
789,789000000001
789,789000000002
789,789000000003

Use Dynamic Catalog Collection (DCC)

Dynamic Catalog Collection allows Bazaarvoice to collect and consume product catalog data using JavaScript from your product display pages (PDPs).

Why use DCC?

The following are just a few advantages of using DCC instead of product feeds:

  • We support custom product attributes in DCC.
  • Accessing URL values is often easier directly on front-end PDPs than by using back-office feed scripts.
  • There is no requirement to update feed contents when product display pages come online or go offline.

DCC Signed Events

DCC events are triggered when a consumer visits a PDP on a client's website. This event sends product data to Bazaarvoice which, due to the PDP’s publicly viewable code, becomes vulnerable to copying or interception.

Traditional DCC includes an event callback feature that triggers an AWS Bazaarvoice component which signals the PDP. Once the callback event and product data have reached Bazaarvoice, the AWS component validates that the data received matches the PDP data. This regularly fails due to IP blocking, timeouts, or redirects which prevent the data validation step from completing.

DCC Signed Events, however, digitally signs events using a JSON Web Token (JWT). This JWT is sent alongside the product data. In configuration, a public key is recorded which is used to verify this data on Bazaarvoice servers. This removes the need for a callback and reduces the potential of failed product updates in the catalog.

Prerequisites

Contact Bazaarvoice Support to enable DCC before attempting to provide product catalog data using the following steps.

Setup DCC Signed Events

Perform the following steps to set up DCC Signed Events.

Step 1: Generate keys

To generate the required keys, run the following commands on OSX/linux:

ssh-keygen -t rsa -b 2048 -m PEM -f bvdcc.key
openssl rsa -in bvdcc.key -pubout -outform PEM -out bvdcc.key.pub
Note: The RSA encoding element must be used for Bazaarvoice to accept your code.

These commands will generate the following two files:

  • bvdcc.key —The client’s private key. This should only be used for signing events on the client’s server.
  • Caution: It should be stored securely and never shared.
  • bvdcc.key.pub — The client’s public key. This does not need to be stored securely. It should be added under the DCC key setting in configuration:

Step 2: Implementing server-side data

The recommended approach will be to:

  1. Modify the product data javascript so it is in the correct format for DCC.
  2. Sign product data using the JWT token by using the following code as a template for signing events using a JWT with a node library .
  3. Note: The key part is the signCatalogUpdate function which will return an array of strings.
    Installing library;
    npm install --save jsonwebtoken
    
    Usage;
    /*
    Resources:
    jsonwebtoken Module: https://www.npmjs.com/package/jsonwebtoken
    fs Module: https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options
    JSON.stringify method: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
    */
     
     
    //SERVER SIDE PSEUDO CODE
     
     
    //Import required modules (jsonwebtoken and fs)
    const jwt = require('jsonwebtoken');
    const fs = require('fs');
     
    //Assigns previously generated (and secretly stored) private key to a variable
    const privateKey = fs.readFileSync('PATH TO PRIVATE KEY GOES HERE');
      
    const locale = 'en_US';
    const products = [
    {productId":"MH02",
                  "inactive": false,
    "productName":"Teton Pullover Hoodie",
                "productDescription":"The Teton Hoodie Description",
                "productImageURL":"https:\\mywebsite.com\pub\media\catalog\product\mh02-black_main.jpg",
                "productPageURL":"https:\\mywebsite.com\teton-pullover-hoodie.html",           
                "brandName":"MyBrand",
                "categoryPath" : [
                    {
                       "id" : "123",
                       "Name" : "Parent Category Name"
                    },
                    {
                      "id" : "123-1",
                      "Name" : "Mens"
                    },
                    {
                      "id" : "123-1-9",
                      "Name" : "Pants"
                    }],
    
                "upcs":["724742001735","724742006907","077320775406","077320775307"],
                "manufacturerPartNumbers":["mpn1","mpn2","mpn3","mpn4","mpn5"],
                "eans":["0724742001735","0724742006907","0077320775406","0077320775307"],
                "isbns":["9781891830754","9781603090506","9781891830716","9781603090254"],
                "modelNumbers":["model1","model2","model3","model4"],
                "family": "F02",
                "price": "12.99",
                "currencyCode": "USD",
                "color": "red",
                "size": "large",
                "material": "nylon",
                "availability": true
    
              },
    //Example of custom attributes
                "customAttributes": [
                    {
                      "id": "CustomAttributeId123",
                      "value": "Custom attribute value 1"
                    },
                    {
                      "id": "CustomAttributeId456",
                      "value": "Custom attribute value 2",
                    }],
    
    //Example of adding multi-products into a single call
        {
            "productId": "1_Black",
            "productName": "Hummingbird printed t-shirt Black",
            "productPageURL": "http://dcc-test-site.qa.us-east-1.nexus.bazaarvoice.com/men/1-3-hummingbird-printed-t-shirt-6419892469002.html",
        },
    ];
      
    //Passes catalog data and privateKey into the token; encoded as RS256
    function signCatalogUpdate(products, privateKey) {
        return products.map(product => jwt.sign({ locale, catalogProducts: [ product ] }, privateKey, { algorithm: 'RS256' }));
    }
     
    //Assigns the returned output from the signCatalogUpdate function to a variable which is then visible on front-end
    const bvDCC = signCatalogUpdate(products, privateKey);
     
    //Outputs DCC product data in a console log, and enters 2 spaces for any NULL values 
    console.log(JSON.stringify(bvDCC, null, 2));
    
  4. Expose the signed data to the front-end javascript using an API.
  5. Expose your code to the front-end as window.dccSignedTokens.
    Note: To view a code example, visit this site and access the developer window by right-clicking and selecting ‘Inspect’.

Step 3: Implementing front-end data

Replace the existing “CatalogUpdate” DCC javascript on the PDP with one of the following implementations:

Multi-product PDP:

<script async type="text/javascript">
window.bvCallback = function (BV) {
  // Use a loop for multiple products
  for(var i=0, len=window.dccSignedTokens; i < len; ++i){
    BV.pixel.trackEvent("CatalogUpdate", {
      type: 'Product',
      token: window.dccSignedTokens[i]
    });
  }
};
</script>

Single-product PDP:

<script async type="text/javascript">
window.bvCallback = function (BV) {
  BV.pixel.trackEvent("CatalogUpdate", {
    type: 'Product',
    token: window.dccSignedToken
  });
};
</script>
Caution: Make sure that the value assigned to “token” is the signed version of the “catalogProducts” data, and matches the validation outlined in the DCC data attributes section

DCC data attributes

The following table describes data attributes used in DCC JavaScript.

Attribute Value Required
productId

Unique product ID that can contain only alphanumeric characters, hyphens (-), and underscores (_). If the external product ID contains an invalid character, replace it with an alternate character, such as an underscore. The ID is case insensitive, so you cannot use IDs that match except for case.

This format is used in the data feed only and is not visible to end users.

Type: string

Yes
locale

Specifies the desired locale. If this attribute is not provided, the locale of the BV loader reference is used.

Type: string

Yes
productName

Name of the product, which is visible to end users.

Type: string

Yes
productDescription

Description of the product. We recommend that product descriptions be at least three sentences or 300 characters long.

Type: string

No
productPageURL

Unique, uncorrupted URL for a product page. Do not include extraneous query string parameters that you might use for tracking and partnership codes. When specifying a URL, be aware of the following:

If the URL contains a reserved (special) character, you must URL-encode the character. For example, use &amp for an ampersand, use %20 for a space, or use %5B and %5D for square brackets ([ ]).

Type: URL

Yes
productImageURL

Unique URL for the product image. The optimal but slightly flexible display size is 600 x 600 pixels. When specifying a URL, be aware of the following:

If the URL contains a reserved (special) character, you must URL-encode the character. For example, use &amp for an ampersand, use %20 for a space, or use %5B and %5D for square brackets ([ ]).

Note: If Ratings & Reviews is deployed on an HTTPS site, you must provide image URLs at an HTTPS location in your product catalog. If you do not, your customers will see a mixed content warning.

Type: URL

Yes
Color

Color of the product.

No; Recommended
Size

Size of the product.

No; Recommended
Material

Material of the product. For example, Steel, plastic, silk, etc.

No; Recommended
Currency

Currency of the product in each locale.

Note: Currency must be provided in the format ISO 4217N.

No; Recommended
Price

Price of the product.

No; Recommended
Availability

Indicates whether or not a product is available to purchase. It may be out of stock or out of season.

No; Recommended
brandId

Unique brand ID that can contain only alphanumeric characters, hyphens (-), and underscores (_). If a brand ID contains an invalid character, replace it with an alternate character, such as an underscore. This format is used in the data feed only and does not affect end users. The ID is case insensitive, so you cannot use IDs that match except for case.

Ensure the ID is a stable ID that will not change for the same logical brand, even if the name of the brand changes.

Refer to the Brands section for details about how to collect Brand data using DCC.

Type: string

No
brandName

The name of the brand to which the product belongs. Refer to the Brands section for details about how to collect Brand data using DCC.

Type: string

No
categoryPath A list of categories ordered by hierarchy. Refer to the Categories section for details about how to collect Category data using DCC. No
family The product family name to which the product belongs. We recommend that you exclude special characters from product family names. Refer to this section for details about how to configure product families using DCC. No
upcs

Universal Product Code (UPC), which is a 6- or 12-digit bar code used for standard retail packaging in the United States. In an array, include 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.

Note: Bazaarvoice does not enforce length or numerical constraints on UPCs, EANs, and ISBNs. Any string in one of these fields is treated as valid by the product schema. Values in the UPC, EAN, and ISBN fields are validated during the catalog import process, however, and only valid values are stored.

Type: array

No; syndication matching improves if you specify UPCs.
manufacturerPartNumbers

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

Type: array

No
eans

European Article Numbers (EAN), which is used worldwide for marking retail goods. An EAN 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.

Note: Bazaarvoice does not enforce length or numerical constraints on EANs. Values are validated during the catalog import process, however, and only valid values are stored.

Type: array

No; syndication matching improves if you specify EANs.
isbns

International Standard Book Number (ISBN), which is a 10- or 13-character value used predominantly for media products such as books, music, and videos. The last character provides a checksum that helps validate the product identifier. Most ISBNs are composed only of digits, except for some 10-character ISBN values that use an X for the checksum.

Type: array

No
modelNumbers

Unique referencing code that businesses use to identify a part that a particular industry uses. Each model number can contain letters, numerals, and other characters.

Type: array

No
inactive

Signals that the product is inactive. The default value is false. Refer to Control the active set of products for more details.

Type: boolean

No
customAttributeId

Enables you to define additional product-specific information for reporting. Specify an ID and value for each product attribute you want to define. Spaces are not permitted in the attribute ID.

Type: array

No. If included, you can specify an unlimited number of child elements.

Required feed elements for Bazaarvoice product and feature support

High-quality feed content is required for successful syndication, notifications, reporting, insights, and integration with other Bazaarvoice solutions or features. Bazaarvoice relies primarily on an automated matching technique that depends on globally unique product identifiers. The completeness and accuracy of your product feed determine how well products can be matched.

The following Bazaarvoice features and solutions rely on accurate identifiers in your product feed to ensure maximum value:

The following sections provide information about key feed components that are required for product and feature support (some exceptions are noted below). For XML feeds, they are elements. For text feeds, they are column names.

Name should consist of attributes and descriptors that most uniquely identify the product. Examples of useful product name attributes include brand names, model numbers, sizes, and colors.

Brand represents the most important data item to provide for each product in the feed. Brands are used for more than product matching; in Bazaarvoice reporting systems, they also help you get the most benefit from your syndication and Connections programs.

In an XML feed, use the household brand name for the product for the brand's <Name> element, rather than the supplier’s or manufacturer’s brand name. This is particularly true for retailers that may carry multiple brands from a single supplier. Products without brands often appear “invisible” with respect to these reporting systems.

Example:
Supplier BrandOne markets the identically-named BrandOne brand bleach. The supplier BrandOne also markets BrandTwo brand charcoal and BrandThree brand salad dressing. In this case, we recommend that both supplier BrandOne and the retailers that carry these products use BrandThree, BrandTwo, and BrandOne as brands for the respective salad dressing, charcoal and cleaning products. It is not recommended that all products use BrandOne in the brand field, even though the company supplies all of the products.

Category defines a category that is represented by products in your feed using the following child elements. You can also use this element to define a category hierarchy.

UPC, EAN, and ISBN are globally unique identifiers (GTINs). The product category you manufacture or sell and your region determine which identifiers are relevant. If more than one value applies to a product item, we recommend providing all relevant values. For example, electronics or consumer packaged goods (CPG) products might be assigned a UPC and an EAN.

Without globally unique identifiers, Bazaarvoice cannot match products to vendors or catalogs as quickly, making the likelihood of mismatches higher. Because of poorer product data quality, the confidence level of the matches declines. This lack of confidence forces more manual reviews of the matches, slowing down the process. Due to delays caused by the lack of automated matching tools, newly introduced products will not syndicate immediately.

Note: Version 14.3+ of the schema does not enforce length or numerical constraints on UPCs, EANs, and ISBNs. Any string in one of these fields is treated as valid by the product schema. Values in the UPC, EAN and ISBN fields are validated during the catalog import process, however, and only valid values are stored. You can find the complete syntax for all globally unique identifiers in this example product feed file.

Do not use placeholder (sample) values in place of valid UPC, EAN, or ISBN values. Placeholder values could cause the feed to fail validation. Specifically, you should not:

  • Use letters.

  • Include values with character lengths that deviate from the defined global standards for UPC, EAN, or ISBN.

However, depending on your system's capabilities, you may be required to include a placeholder value when adding products to your catalog. In this situation, enter a string of zeros (0) that matches the identifier’s standard character length. Bazaarvoice does not store the null values, but their inclusion will not produce errors during validation.

Data type and format:

  • UPC: 6- or 12-digit value whose last digit provides a verifiable checksum of the number. Some systems internally store only the leading 11-digit product code, so make sure to include the checksum digit in the feed. Products sold in the US and Canada primarily use UPCs.
  • EAN: 13-digit value whose last digit provides a verifiable checksum of the number. Products sold outside the US and Canada primarily use EANs.
  • ISBN: 10- or 13-character value used predominantly for media products such as books, music, and videos. The last character provides a checksum that helps validate the product identifier. Most ISBNs are composed only of digits, except for some 10-character ISBN values that use an X for the checksum.

Required elements:

  • UPC and EAN: At least one for all relevant categories. We recommend that global companies supply both.
  • ISBN: For books, movies, music, and media.

The second most useful product identifier for syndication is the manufacturer part number (MPN). Use the MPN in conjunction with the manufacturer’s name to match products accurately and automatically. In your feed, provide MPNs using ManufacturerPartNumber, and make sure each product's Brand uses the name of the manufacturer responsible for the MPN. Your feed can have multiple MPN values for a single product, so provide all MPNs applicable to a product.

Note: The distinction between “brand” and “manufacturer” is not always clear. When providing MPN values, include the name of the brand or manufacturer that assigned the product’s specific MPN value.

Description provides a description of the product.

ImageUrl acts as a very important differentiator in the manual matching process. Provide an image that is accurate and meaningful for identifying the product.

Note: If Ratings & Reviews is deployed on an HTTPS site, you must provide image URLs at an HTTPS location in your product catalog. If you do not, your customers will see a mixed content warning.

The link to the product page on your website, which is specified by ProductPageUrl, enables manual matchers to access the full context of your product. This method represents the least preferred way to match products manually because it is so time consuming.

Bazaarvoice uses a supplier or vendor ID to determine which questions and product reviews to send to the supplier. This data is required by all feature and product integration, though it is required for retailers only for Ratings & Reviews Collect-Distribute and Connections integration.

Use a custom attribute to provide a supplier or vendor ID in the feed by specifying an id="VendorID" attribute for the <Attribute> element. Example:

<Attributes>
    <Attribute id="VendorID"> 
        <Value>2598</Value>
    </Attribute>
    <Attribute id="VendorName">
        <Value>RAWLINGS CANADA INC.</Value>
    </Attribute>
</Attributes>

If you are a retailer using Connections, Bazaarvoice provides two options for suppliers (also referred to as "brands" or "vendors") to use when signing up for Connections Basic and Connections Premium:

  • Supplier or vendor ID—Provides a guaranteed mapping to the supplier and avoids confusion for large suppliers, which may supply products in different categories. To provide a supplier or vendor ID, add the VendorID attribute to existing <Attribute> elements of a product feed. This option also proves very useful for private labels that may be supplied by different manufacturers. This is the recommended option.
  • Brand name—Provides the brand or vendor name using the <Brand> element. The drawback to using this option is that all vendors that supply products for the specified brand will receive questions about all of the products, including those they do not supply.

After sign-up, Bazaarvoice uses this value to determine which questions and product reviews to send to the supplier.

Multi-category supplier example

Retailer A carries products from Vendor V in three categories: small appliances, televisions, and mobile phones. A different division of the vendor manufactures and markets each product. Retailer A provides Bazaarvoice the vendor ID for each product and then uses the ID for Connections sign-up. Bazaarvoice can now send questions for the small appliances products to only that division of Vendor V. This process makes it easier and faster for Vendor V to respond. Without the supplier or vendor ID, the television and mobile phone divisions would also receive the small appliances questions.

Private label example

Retailer A has a private label called Brand XYZ. This retailer sells packaged food, toiletries, and cleaning supplies under the Brand XYZ name, but each product type has its own vendors. If Retailer A’s product feed contains vendor IDs, Bazaarvoice can determine which questions go to which vendor. If the product feed does not contain vendor IDs, then Bazaarvoice uses only the <Brand> element to determine where to route questions. Without vendor IDs, all vendors for Brand XYZ’s products will receive questions about all Brand XYZ products, including those they do not supply.

Incremental feed files

A full product catalog feed includes all products that are available in your catalog and for which you want to collect content. An incremental feed contains data for a subset of your products.

Consider the following strategies for using full vs. incremental feeds:

  • Only full feeds

    You can upload a full, periodic, XML catalog feed to Bazaarvoice that includes all current data for all active products and categories. This is the recommended strategy.

  • Full and incremental feeds

    You can provide a mix of full and incremental catalog feeds. We recommend that you provide an initial full catalog feed followed by periodic, incremental feeds that contain only changes to your catalog data. Consider using full and incremental product feeds if:

    • Your product catalog changes so frequently that daily product feed updates are necessary
    • Infrequent or modest updates are made to your product feed

    However, to prevent gaps in the data set that can result from failure to upload and process any given incremental feed, we recommend that you provide a full feed periodically (with current data for your complete catalog) to ensure no data gaps exist.

  • Only incremental feeds

    If you cannot provide all products in a single, full catalog feed, you can provide incremental feeds only. Be sure to include the removed=”true” attribute when providing only incremental feeds. Refer to Control the active set of products for more information about this approach.

    Caution: If you use incremental feeds only and you never provide a full feed to Bazaarvoice, it is possible that catalog data may become out of sync with your source product catalog if an incremental feed upload is missed or fails in any way.

Each feed file indicates whether it is full or incremental, though this is done differently depending on the feed format:

  • XML feed files: use the incremental attribute in the <Feed> element
  • Text feed files: specify a file header

Filter catalog data based on custom product attributes

To filter your product feed by custom product attributes, you must add them to your feed configuration. This lets you filter based on attributes in the content dashboards and reports in the Workbench. Custom product attributes give you a way to report on product-specific information; however, it does not provide multiple categories in a feed. For example, you could define a "region" attribute to report on hotels in a region of the country. Or, you could define a "department" attribute to track how products from various departments are being received by your customers.

Note: If you want to include custom product attributes in a text feed, contact Bazaarvoice Support for assistance.

The following video illustrates how to use custom product attributes.

Complete these steps to add a custom product attribute to your implementation and then enable custom product attributes in the Workbench:

  1. Include custom product attributes in the feed by adding the <Attributes> block to the <Products> element. Each <Attribute> element in the <Attributes> block identifies a custom attribute. Here is an example of three custom attributes:
    <Products>
    <Product> ... <Attributes> <Attribute id="CHANNEL_VISIBILITY">
    <Value>Any</Value>
    </Attribute>
    <Attribute id="SAP_STATUS">
    <Value>L</Value>
    </Attribute>
    <Attribute id="BUYING_NUMBER">
    <Value>Not_Available</Value>
    </Attribute>
    </Attributes> </Product>
    </Products>
  2. Sign in to the Bazaarvoice Portal .
    Note: You can create attributes on your production server, but you may want to test and preview this on the staging server first.
  3. From the upper-right corner, select the settings icon settings icon.
  4. Select Configuration.
  5. Select an instance.
  6. Select Go to Configuration. The Site Manager appears, listing the available deployment zones and implementations.

    Note: You can also add new deployment zones and implementations on this screen.

  7. Under Implementations, use the filter to find the name of the implementation you require.
  8. Select Edit next to the implementation you want to configure.
    Note: You can't enable custom product attributes in individual deployment zones. If you haven't enabled them in the Main Site deployment zone, they won't display in the Workbench.
  9. From the menu on the left side of the page, select Technical Setup under Getting Started.
  10. Select the Product Catalog tab.
  11. In the Feed Attributes section, type an attribute name in the Custom Product Attributes field and then select Add. The attribute name must match the id attribute of the <Attribute> element in the product feed. Repeat this step for every attribute you want to add.

    This example shows attributes that match the IDs in the previous XML example:

You can use custom product attributes to filter content in Workbench analyst reports, dashboards, and other views.

Share reviews using product families

The product families feature in Ratings & Reviews enables you to share UGC among multiple related products. By grouping products into families, you can display UGC written about one family member on the product display pages of all family members. Sharing reviews among product family members increases the following key performance indicators for your Bazaarvoice implementation:

  • Percentage of products with displayed reviews
  • Number of products with displayed reviews
  • Average reviews for each product
  • Number of total displayed reviews

Types of product families

The type of product family that you use depends on how products differ:

  • Product variants — Products that are nearly identical to other products in terms of consumer experience, but they have different SKUs or part numbers. For example, products that come in different colors, different sizes, or are packaged in different weights or quantities may be variants of one another. Content from product variants is usually shared in all directions. All products in a given family display content that was written about the other family members.

    Creating a product family of product variants works best when each product variant is featured on its own product display page. If all product variants share the same page on your site, treating the variants as one product when integrating with Bazaarvoice may be simpler and more practical than setting up a product family for those products.

  • Product bundles — Groups of products sold together that otherwise may be sold individually. Content about product bundles is usually shared in one direction: from individual components to the product bundle. Typically, the product display page of a bundle displays all reviews written about the individual components. However, the product display page of each component shows reviews only about that component.

Configure product families

You can configure product families in your product feed or through the Workbench. You can assign a product to one or more families at the same time using these methods.

Keep the following caveats in mind when configuring product families:

  • Product family configurations do not carry over between the staging and production environments.
  • Any changes you make to product families in the Workbench can be undone only through the Workbench.
  • Family definitions in the product feed do not override any family operations in the Workbench.
Note: Product families only work for native reviews. Syndication ignores product family relationships. If you plan to or have implemented syndication, contact Bazaarvoice Support before configuring product families in your product feed.

Using the product feed

We recommend you create product families through the product feed if you have a clear idea about which products can be grouped into families. Automating those relationships in the product feed is straightforward and faster than creating them using the Workbench.

You can configure product families in your product feed by including one or both of the following attributes:

  • BV_FE_FAMILY—Adds a product to a specific family.
  • BV_FE_EXPAND—Enables a product to display all content from other members of the family.
Tip: We recommend that you do not use special characters, such as commas, in product family names.

In this XML example, all products in a family display content about all other members in the family.

<Product>
     <ExternalId>...</ExternalId>
     <Name>Green iPod Nano</Name>
     <Description>...</Description>
     <BrandExternalId>...</BrandExternalId>
     <CategoryExternalId>...</CategoryExternalId>
     <ProductPageUrl>...</ProductPageUrl>
     <ImageUrl>...</ImageUrl>
     <Attributes>
          <Attribute id="BV_FE_FAMILY">
               <Value>iPod_Nanos</Value>
          </Attribute>
          <Attribute id="BV_FE_EXPAND">
               <Value>BV_FE_FAMILY:iPod_Nanos</Value>
          </Attribute>
     </Attributes>
</Product>
<Product>                 
     <ExternalId>...</ExternalId>
     <Name>Pink iPod Nano</Name>
     <Description>...</Description>
     <BrandExternalId>...</BrandExternalId>
     <CategoryExternalId>...</CategoryExternalId>
     <ProductPageUrl>...</ProductPageUrl>
     <ImageUrl>...</ImageUrl>
     <Attributes>
       <Attribute id="BV_FE_FAMILY">
        <Value>iPod_Nanos</Value>
        </Attribute>
        <Attribute id="BV_FE_EXPAND">
             <Value>BV_FE_FAMILY:iPod_Nanos</Value>
       </Attribute>
     </Attributes>
</Product>

In the following XML example, the product bundle includes BV_FE_EXPAND, so all reviews about family components display on the bundle's page. However, BV_FE_EXPAND is omitted from the product <Attribute> definitions of the individual components to prevent reviews about the bundle from displaying on component pages.

<Product>
     <ExternalId>...</ExternalId>  
     <Name>Value Bundle</Name>   
     <Description>...</Description>
     <BrandExternalId>...</BrandExternalId>
     <CategoryExternalId>...</CategoryExternalId>
     <ProductPageUrl>...</ProductPageUrl>
     <ImageUrl>...</ImageUrl>
     <Attributes>
          <Attribute id="BV_FE_FAMILY">
               <Value>Value_Bundle</Value>
          </Attribute>
          <!-- Including BV_FE_EXPAND displays content from all components on the bundle page -->
          <Attribute id="BV_FE_EXPAND">
               <Value>BV_FE_FAMILY:Value_Bundle</Value>
          </Attribute>
     </Attributes>
</Product>
<Product>
     <ExternalId>...</ExternalId>
     <Name>Standalone Component</Name>
     <Description>...</Description>
     <BrandExternalId>...</BrandExternalId><CategoryExternalId>...</CategoryExternalId>
     <ProductPageUrl>...</ProductPageUrl>
     <ImageUrl>...</ImageUrl>
     <Attributes>
          <Attribute id="BV_FE_FAMILY">
               <Value>Value_Bundle</Value>
          </Attribute>
     </Attributes>
     <!-- Omitting BV_FE_EXPAND prevents content from the bundle from being displayed on the component page -->
</Product>

Using the Workbench

Use the Workbench to manually create families in the following situations:

  • You are not familiar with XML.
  • You are unable to work on the product feed.
  • You need to create a family whose UGC sharing relationships are not straightforward or possible to configure in the product feed.

    The following two examples describe scenarios in which a product family should be created using the Workbench.

    • A category manager for MP3 players wants to share reviews among all the colors of the 32 MB and 64 MB players. Setting up separate families for the 32 MB device and the 64 MB device is straightforward in the feed. However, because the 32 MB device and 64 MB device have different SKUs, combining them into one family using the feed might not be possible. The category manager should configure the family in the Workbench.
    • A personal-care brand manager wants to bundle lip balm and sunscreen for sale during the summer months. The brand manager wants to configure a product family containing the lip balm and sunscreen so that reviews about the individual family members will be shared on the product bundle's page. However, the lip balm and sunscreen do not have a common product feed element to link them together. The brand manager should configure the product family in the Workbench. When the season ends and the brand manager no longer wants to sell the products together, the manager can delete the product family bundle using the Workbench.

Complete the following steps to configure product families through the Workbench.

  1. Sign in to the Workbench and navigate to Content > Manage Families.
  2. Select Add New Family, and enter a name for the product family.
  3. Enter the Product ID, as listed in your XML product feed, for every product you want to add to the family, and select Add Product.
  4. Deselect Expand if you do not want the corresponding product to display content from family members.
  5. Select x to return to the Manage Families page.

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 Support 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>

DCC Legacy

Note: DCC has recently been updated to DCC Signed Events which removes the need for a callback and reduces the potential of failed product updates in the catalog. Please refer to the DCC Signed Events section for information on implementation.

Step 1: Add the BV loader

The BV loader is a small, asynchronous JavaScript application that manages and displays configured features and UGC on your web pages. The BV loader will only download the required applications requested on the specific page.

To integrate the BV loader, add the following to your HTML inside the <head> of each PDP:

<!-- load BV loader -->
            <script async src="https://apps.bazaarvoice.com/deployments/<client_name>/<site_ID>/<environment>/<locale>/bv.js"></script>

where:

  • async—Downloads the BV loader asynchronously. This attribute is optional but recommended.
  • src—Specifies the path to the BV loader. Replace the following elements in your HTML:
    • <client_name>—The client name provided by Bazaarvoice. Be sure to use lowercase letters for the value.
    • <site_ID>—The ID of the deployment zone you want to use. This is set in the configuration in the Bazaarvoice Portal. The default deployment zone is "main_site". Check with your Bazaarvoice representative to ensure the correct ID, or select to the right of Main Site on the configuration page in the Bazaarvoice Portal.
    • <environment>—The deployment environment where you want to implement Bazaarvoice features. For a production environment, include production in the path. If you are referencing a staging environment, include staging in the path.
    • <locale>—The locale that is used by the implementation. For example, en_US for English.

Here is an example URL for Endurance Cycle's staging environment of the Main Site deployment zone:

https://apps.bazaarvoice.com/deployments/endurancecycles/main_site/staging/en_US/bv.js

Here is an example URL for Endurance Cycle's production environment of the implementation. The deployment zone (site ID) is named "mobile":

https://apps.bazaarvoice.com/deployments/endurancecycles/mobile/production/en_US/bv.js

Caution: If you have already added the BV loader while implementing Bazaarvoice-hosted display or BV Pixel, do not add it again. Add the BV loader only once on each page.

Step 2: Add DCC JavaScript to product display pages

To collect catalog information from your product display pages, add the following JavaScript to each of your PDPs immediately before the closing </body> tag.

Tip: To make sure your JavaScript is valid, escape all string values to avoid special characters in fields such as productName.

Example JavaScript for product display page with one product

<script async type="text/javascript">
      window.bvDCC = {
        catalogData: {
         locale: "en_US",
         catalogProducts: [{
            "productId":"MH02",
            "productName":"Teton Pullover Hoodie",
            "productDescription":"The Teton Hoodie Description",
            "productImageURL":"https:\\mywebsite.com\pub\media\catalog\product\mh02-black_main.jpg",
            "productPageURL":"https:\\mywebsite.com\teton-pullover-hoodie.html",           
            "brandName":"MyBrand",
            "categoryPath" : [
                {
                   "id" : "123",
                   "Name" : "Parent Category Name"
                },
                {
                  "id" : "123-1",
                  "Name" : "Mens"
                },
                {
                  "id" : "123-1-9",
                  "Name" : "Pants"
                }],
            "upcs":["724742001735","724742006907","077320775406","077320775307"],
            "manufacturerPartNumbers":["mpn1","mpn2","mpn3","mpn4","mpn5"],
            "eans":["0724742001735","0724742006907","0077320775406","0077320775307"],
            "isbns":["9781891830754","9781603090506","9781891830716","9781603090254"],
            "modelNumbers":["model1","model2","model3","model4"],
            "family": "F02",
            "inactive": false,
            "price": "12.99",
            "currencyCode": "USD",
            "color": "red",
            "size": "large",
            "material": "nylon",
            "availability": true

}]
        }
      };

window.bvCallback = function (BV) {
          BV.pixel.trackEvent("CatalogUpdate", {
              type: 'Product',
              locale: window.bvDCC.catalogData.locale,
              catalogProducts: window.bvDCC.catalogData.catalogProducts
 
});
       }; 
</script>

Example JavaScript for product display page with multiple products

If you have a product display page that references multiple products (often variants in size, color, etc.), add JavaScript similar to the following example. The Bazaarvoice catalog requires IDs for each of these child products.

<script async type="text/javascript">
  window.bvDCC = {
        catalogData: {
         locale: "en_US",
         catalogProducts: [{
            "productId":"MH02",
            "productName":"Red Teton Pullover Hoodie",
            ...
          },
          {
            "productId":"MH03",
            "productName":"Blue Teton Pullover Hoodie",
            ...
          },
          {
            "productId":"MH04",
            "productName":"Green Teton Pullover Hoodie",
            ...
          }]
        }
      };

window.bvCallback = function (BV) {
        // Use a loop for multiple products
        const len = window.bvDCC.catalogData.catalogProducts.length;
        for (var i = 0; i < len; i++) {
            BV.pixel.trackEvent("CatalogUpdate", {
                type: "Product",
                locale: window.bvDCC.catalogData.locale,
                catalogProducts: [window.bvDCC.catalogData.catalogProducts[i]],
            });
        }
      };
  </script>

Example JavaScript for product display page for products with custom attributes

If you have products with attributes that are not included in our standard collection of DCC data attributes, you can still add them as custom attributes to your JavaScript as shown in the following example.

<script async type="text/javascript">
      window.bvDCC = {
        catalogData: {
         locale: "en_US",
         catalogProducts: [{
            "productId":"MH02",
            "productName":"Red Teton Pullover Hoodie",
            "productDescription":"The Teton Hoodie Description",
            "productImageURL":"https:\\mywebsite.com\pub\media\catalog\product\mh02-black_main.jpg",
            "productPageURL":"https:\\mywebsite.com\teton-pullover-hoodie.html",           
            "brandName":"MyBrand",
            "categoryPath" : [
                {
                   "id" : "123",
                   "Name" : "Parent Category Name"
                },
                {
                  "id" : "123-1",
                  "Name" : "Mens"
                },
                {
                  "id" : "123-1-9",
                  "Name" : "Pants"
                }],
            "customAttributes": [
                {
                  "id": "CustomAttributeId123",
                  "value": "Custom attribute value 1"
                },
                {
                  "id": "CustomAttributeId456",
                  "value": "Custom attribute value 2",
                }],
            "upcs":["724742001735","724742006907","077320775406","077320775307"],
            "manufacturerPartNumbers":["mpn1","mpn2","mpn3","mpn4","mpn5"],
            "eans":["0724742001735","0724742006907","0077320775406","0077320775307"],
            "isbns":["9781891830754","9781603090506","9781891830716","9781603090254"],
            "modelNumbers":["model1","model2","model3","model4"],
            // "family": "F02",
            "families": [{
                  "id": "123",
                  "expand": true,
                  "members": ["MH02", "MH01", "MH03"]
            }],
            "inactive": false,
            "price": "12.99",
            "currencyCode": "USD",
            "color": "red",
            "size": "large",
            "material": "nylon",
            "availability": true
          }]
        }    
      };
 
window.bvCallback = function (BV) {
          BV.pixel.trackEvent("CatalogUpdate", {
            type: 'Product',
            locale: window.bvDCC.catalogData.locale,
            catalogProducts: [ window.bvDCC.catalogData ]
          });
        }
</script>

DCC data attributes

The following table describes data attributes used in DCC JavaScript.

Attribute Value Required
productId

Unique product ID that can contain only alphanumeric characters, hyphens (-), and underscores (_). If the external product ID contains an invalid character, replace it with an alternate character, such as an underscore. The ID is case insensitive, so you cannot use IDs that match except for case.

This format is used in the data feed only and is not visible to end users.

Type: string

Yes
locale

Specifies the desired locale. If this attribute is not provided, the locale of the BV loader reference is used.

Type: string

Yes
productName

Name of the product, which is visible to end users.

Type: string

Yes
productDescription

Description of the product. We recommend that product descriptions be at least three sentences or 300 characters long.

Type: string

No
productPageURL

Unique, uncorrupted URL for a product page. Do not include extraneous query string parameters that you might use for tracking and partnership codes. When specifying a URL, be aware of the following:

If the URL contains a reserved (special) character, you must URL-encode the character. For example, use &amp for an ampersand, use %20 for a space, or use %5B and %5D for square brackets ([ ]).

Type: URL

Yes
productImageURL

Unique URL for the product image. The optimal but slightly flexible display size is 600 x 600 pixels. When specifying a URL, be aware of the following:

If the URL contains a reserved (special) character, you must URL-encode the character. For example, use &amp for an ampersand, use %20 for a space, or use %5B and %5D for square brackets ([ ]).

Note: If Ratings & Reviews is deployed on an HTTPS site, you must provide image URLs at an HTTPS location in your product catalog. If you do not, your customers will see a mixed content warning.

Type: URL

Yes
Color

Color of the product.

No; Recommended
Size

Size of the product.

No; Recommended
Material

Material of the product. For example, Steel, plastic, silk, etc.

No; Recommended
Currency

Currency of the product in each locale.

Note: Currency must be provided in the format ISO 4217N.

No; Recommended
Price

Price of the product.

No; Recommended
Availability

Indicates whether or not a product is available to purchase. It may be out of stock or out of season.

No; Recommended
brandId

Unique brand ID that can contain only alphanumeric characters, hyphens (-), and underscores (_). If a brand ID contains an invalid character, replace it with an alternate character, such as an underscore. This format is used in the data feed only and does not affect end users. The ID is case insensitive, so you cannot use IDs that match except for case.

Ensure the ID is a stable ID that will not change for the same logical brand, even if the name of the brand changes.

Refer to the Brands section for details about how to collect Brand data using DCC.

Type: string

No
brandName

The name of the brand to which the product belongs. Refer to the Brands section for details about how to collect Brand data using DCC.

Type: string

No
categoryPath A list of categories ordered by hierarchy. Refer to the Categories section for details about how to collect Category data using DCC. No
family The product family name to which the product belongs. We recommend that you exclude special characters from product family names. Refer to this section for details about how to configure product families using DCC. No
upcs

Universal Product Code (UPC), which is a 6- or 12-digit bar code used for standard retail packaging in the United States. In an array, include 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.

Note: Bazaarvoice does not enforce length or numerical constraints on UPCs, EANs, and ISBNs. Any string in one of these fields is treated as valid by the product schema. Values in the UPC, EAN, and ISBN fields are validated during the catalog import process, however, and only valid values are stored.

Type: array

No; syndication matching improves if you specify UPCs.
manufacturerPartNumbers

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

Type: array

No
eans

European Article Numbers (EAN), which is used worldwide for marking retail goods. An EAN 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.

Note: Bazaarvoice does not enforce length or numerical constraints on EANs. Values are validated during the catalog import process, however, and only valid values are stored.

Type: array

No; syndication matching improves if you specify EANs.
isbns

International Standard Book Number (ISBN), which is a 10- or 13-character value used predominantly for media products such as books, music, and videos. The last character provides a checksum that helps validate the product identifier. Most ISBNs are composed only of digits, except for some 10-character ISBN values that use an X for the checksum.

Type: array

No
modelNumbers

Unique referencing code that businesses use to identify a part that a particular industry uses. Each model number can contain letters, numerals, and other characters.

Type: array

No
inactive

Signals that the product is inactive. The default value is false. Refer to Control the active set of products for more details.

Type: boolean

No
customAttributeId

Enables you to define additional product-specific information for reporting. Specify an ID and value for each product attribute you want to define. Spaces are not permitted in the attribute ID.

Type: array

No. If included, you can specify an unlimited number of child elements.

Brands

A product can be associated with only one Brand entity in your product catalog. A Brand entity has a single unique brandId with localized brandName values (if provided in your catalog data). There are two ways to provide Brand data via DCC, depending on how many locales are specified in your implementation.

Single locale implementation

If your implementation only uses one locale, only brandName is required. Bazaarvoice will auto-generate brandId values using the brand name provided.

Note: You can provide your own brandId values if you have defined them already and want Bazaarvoice to use them in your product catalog instead.
Multi-locale implementation

If your implementation uses multiple locales, how you provide Brand data depends on whether brandName values differ by locale.

If your brandName values vary from locale to locale, you must pass a consistent brandId value and localized brandName value for each Brand across all locales. If you do not include brandId values in these scenarios, Bazaarvoice will auto-generate the brand ID using the localizedbrandNames. This will cause confusion within the Bazaarvoice catalog system for which Brand to associate with the given product.

Code examples

Example of providing only brandName:

...
        catalogProducts: [{
            ...           
            "brandName":"MyBrand",
            ...
        }]
      };
...

Example of providing brandId and brandName:

...
         catalogProducts: [{
            ...
            "brandId":"789",           
            "brandName":"MyBrand",
            ...
        }]
      };
...

Categories

A product can be associated with only one parent Category entity in your product catalog. A Category entity has a single unique category id with localized category Name values (if provided in your catalog data). There are two ways to provide Category data via DCC, depending on how many locales are specified in your implementation.

Single locale implementation

If your implementation only uses one locale, only category Name is required. Bazaarvoice will auto-generate category id values using the category name provided.

Note: You can provide your own category id values if you have defined them already and want Bazaarvoice to use them in your product catalog instead.
Multi-locale implementation

If your implementation uses multiple locales, how you provide Category data depends on whether category Name values differ by locale.

If your category Name values vary from locale to locale, you must pass a consistent category id value and localized Name value for each Category across all locales. If you do not include id values in these scenarios, Bazaarvoice will auto-generate the category ID using the localizedNames. This will cause confusion within the Bazaarvoice catalog system for which Category to associate with the given product.

Code examples

Example of providing category id and category Name values:

...
    "categoryPath" : [
          {
            "id" : "123",
            "Name" : "Parent Category Name"         // Parent
          },
          {
            "id" : "123-1",                       // Child1
            "Name" : "Mens"
          },
          {
            "id" : "123-1-9",                     // Child2
            "Name" : "Pants"
          }
        ]
    },
...

Example of providing only category Name values:

...
    "categoryPath" : [
          {
            "Name" : "Parent Category Name"         // Parent
          },
          {
            "Name" : "Mens"                       // Child1
          },
          {
            "Name" : "Pants"                      // Child2
          }
        ]
    },
...

Step 3: Request to run the DCC Accelerator

To prevent Bazaarvoice from waiting for each product display page to be visited once in order to collect catalog data for all of your products, Bazaarvoice has created the DCC Accelerator. DCC Accelerator is a one-time tool used during implementation to "walk" (traverse various pages on) your website, visiting each product display page in the process. Each page "view" will trigger DCC for that page. After the "walk" process is complete, Bazaarvoice should have product catalog data for all products (with product display pages) on your website.

Note: When you have finished adding DCC JavaScript to your product display pages, contact Bazaarvoice Support to run the DCC Accelerator.

Combine DCC with product catalog feeds

DCC can be combined with product catalog feeds. This hybrid approach is useful in situations where all required catalog data is not available in the DCC JavaScript. Typically, your JavaScript data would be missing GTINs (UPC, EAN, and ISBN). You can provide this missing data by using simple CSV files. Refer to Use multiple catalog sources for more information on using multiple sources to provide catalog data to Bazaarvoice.

Active and inactive status

DCC can rely on one or both of the following mechanisms for controlling when a product, brand, or category is active or inactive:

We recommend using the Bazaarvoice-controlled inactivity capability. Use the inactive data element if you want the active/inactive state of a product to be tied to the state of something other than the existence of the product's PDP. For example, this could be useful when you want a product's active/inactive state to be tied to the in-stock/out-of-stock state.