Product catalog feed
This product catalog feed is used to map Bazaarvoice user-generated content such as reviews and ratings to your relevant products and categories.
The XML product catalog feed must follow a specific structure. Bazaarvoice accepts XML or flat (CSV or TXT) file formats. Although, XML is the preferred file format.
Why is product catalog data so important?
The product catalog feed powers the following:
- Content—Review requests (formerly post-interaction email or PIE), notifications, and review submission pages must pull in content such as IDs, names, URLs of brands, categories, and product information.
- Syndication—Because retailers and brands often use different identifiers and metadata to describe the same product, an accurate product catalog enables Bazaarvoice to match products offered by brands and retailers, and then share or “syndicate” user-generated content (UGC) based on product matches.
- Reporting dashboards—Product catalog data is displayed when you’re viewing reporting dashboards (and filters) in the Workbench.
Product catalog data
Bazaarvoice supports the following ways to provide your product catalog data:
-
XML-based feed file—Provide a single structured XML based feed that includes all of your catalog data. The majority of PRR clients currently provide catalog data via a single XML based feed file.
Note: Bazaarvoice accepts flat (CSV or TXT) formats (if creating an XML feed is too difficult). -
Dynamic Catalog Collection (DCC)—Enables Bazaarvoice to collect and consume product catalog data using JavaScript tag placed on your product display pages. When shoppers visit a product display page, the JavaScript event automatically passes catalog data to Bazaarvoice for consumption.
Implement XML feed step-by-step instructions
Complete the following steps to create an XML feed and upload it to Bazaarvoice:
Step 1: Create an XML product feed
Step 2: Check the elements and attributes
Step 3: Validate product feeds
Step 4: Upload product feeds
Step 5: Check the feed status
Step 6 (Optional): Send incremental product feeds
Step 1: Create an XML product feed
Your technical team must provide Bazaarvoice with an XML based, production-ready data feed of your products and product categories. The XML product catalog feed must follow a specific structure.
Structure your product catalog feed
Use the Product Feed Generator tool as a starting point for creating your outline product catalog feed. You can copy and paste the markup from the generator to your text editor.
- Check the feed to make sure 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.
-
Check that your XML-based product catalog feed begins with a root node of
Feed
. For example:<Feed xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/14.7" name="CLIENT" incremental="false" extractDate="2019-11-04T00:00:00">
Attribute Value xmlns
http://www.bazaarvoice.com/xs/PRR/ProductFeed/14.7
. This is product feed XML schema you use to define the structure of your feed.name
Client name which is the name of your company (for example, looneytunes
)incremental
If you are sending a data feed that contains your entire product catalog, set this value to false
.If the number of products in your catalog exceeds 750,000, set this value to
true
and send incremental feeds with no more than 750,000 products in each feed.extractDate
Populate this value automatically with a timestamp that identifies the date and time at which the data that constitutes the feed was extracted from your database. This value must be presented in XML's dateTime format. -
The XML product catalog feed must follow a specific structure. Use this product feed XML schema to define the detailed structure and contents of your 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.
Example XML product catalog feed
The following example shows the general structure of a product catalog feed.
<?xml version="1.0" encoding="utf-8"?>
<Feed xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/14.7" name="CLIENT" incremental="false" extractDate="2019-11-04T00:00:00.000000">
<Brands>
<Brand>...</Brand>
</Brands>
<Categories>
<Category>...</Category>
</Categories>
<Products>
<Product>...</Product>
</Products>
</Feed>
- Categories, brands, and their associated content appear as children elements under the
Feed
element and within parentCategories
andBrands
elements, respectively. - Each product in the product catalog features its own
Product
element within a parentProducts
element under the rootFeed
. - Product-related metadata like
ProductPageUrl
appears as children elements under the appropriate product.
Step 2: Check the elements and attributes
You must use the appropriate elements and attributes to describe your feed, brand, category, and product information. Refer to the following tables for child elements and attributes for Feed, Brand, Category, and Product elements.
Attributes associated with the ‘Feed’ element
The following table identifies the attributes that are associated with a data feed’s required, top-level Feed
element (also described in previous section).
Attribute | Value |
---|---|
xmlns |
http://www.bazaarvoice.com/xs/PRR/ProductFeed/14.7 |
name |
Client name which is the name of your company. |
incremental |
If you are sending a data feed that contains your entire product catalog, set this value to false .
If the number of products in your catalog exceeds 750,000, set this value to |
extractDate |
Populate this value automatically with a timestamp that identifies the date and time at which the data that constitutes the feed was extracted from your database. This value must be presented in XML's dateTime format. |
Children elements associated with the ‘Brand’ element
The following table identifies the required children elements that are associated with a data feed’s Brand
element.
Element | Value |
---|---|
ExternalId |
Unique brand ID that can contain only alphanumeric characters and the following special characters: asterisk ( Ensure that the ID is a stable ID that will not change for the same logical brand, even if the name of the brand changes. |
Name |
Name of the brand; visible to end users. |
Children elements associated with the ‘Category’ element
The category structure in your data feed affects several aspects of your Bazaarvoice implementation. Tags can be assigned to categories, which allow contributors to highlight specific product attributes when submitting content.
For example, an electronics retailer could create the following tags for the “headphones” product category: perfect fit, poor fit, stylish, good sound quality, and poor sound quality.
The tags appear as check boxes on the content submission form and can also appear on product category or product display pages. A reviewer can select the appropriate tags when submitting content, and shoppers can filter products within a category to see only the ones where ratings include the matching tags.
Categories also populate the category picker, which impacts how people at your organization can filter user-generated content in reports, etc. For example, a well-defined category structure can help a Merchandiser see reviews only for the product categories they care about.
Avoid using false categories like Sale
because they do not truly categorize products.
The following table identifies the children elements that are associated with a data feed’s Category
element.
Element | Value | Required |
---|---|---|
Name |
Name of the category or subcategory; visible to end users. | Yes |
ExternalId |
Unique category or subcategory ID that can contain only alphanumeric characters and the following special characters: asterisk ( Ensure that the ID is a stable ID that will not change for the same logical category, even if the name of the category changes. |
Yes |
CategoryPageUrl |
Unique, uncorrupted URL for the category or subcategory. Do not include extraneous query string parameters that you might use for tracking and partnership codes. | Yes |
CategoryPageUrls |
Contains a |
No |
ParentExternalId |
Parent category's ID of the subcategory in question. | No |
ImageUrl |
URL for the category image, which is usually hosted on your website or a content delivery network (CDN). Spaces are not allowed in the ImageURL node. |
No |
ImageUrls |
Contains an |
No |
Children elements associated with the ‘Product’ element
The following table identifies common children elements that are associated with a data feed’s Product
element. For a complete list of available elements, consult the data feed schema.
Element | Value | Required |
---|---|---|
ExternalId |
Unique, product family-level ID that can contain only alphanumeric characters and the following special characters: asterisk (* ), hyphen (- ), period (. ), and underscore (_ ). If your product IDs contain invalid characters, replace them with an alternate character, such as an underscore. If a product has its own page, that page is the product ID.
The product ID is not necessarily the stock keeping unit (SKU) ID, as Bazaarvoice does not collect separate content for different styles of product. This format is used in the data feed only and is not surfaced to end users. |
Yes |
Name |
Name of the product; visible to end users. | Yes |
CategoryExternalId |
Category ID or subcategory ID within your store catalog to which the product belongs. | Yes |
ProductPageUrl |
Unique, uncorrupted URL for the product page. Do not include extraneous query string parameters that you might use for tracking and partnership codes. | Yes |
ImageUrl |
Unique URL for the product image. The optimal but slightly flexible display size is 100 pixels x 100 pixels. Thumbnail images are recommended. Spaces are not allowed in the ImageURL node. |
Yes |
EANs |
Contains at least one child <EAN> element. |
No, unless including <EAN> elements |
EAN |
European Article Number, which is used worldwide for marking retail goods; can be a string of digits either 8 or 13 characters long. | No |
ManufacturerPartNumbers |
Contains at least one child <ManufacturerPartNumber> element. |
No, unless including <ManufacturerPartNumber> elements |
ManufacturerPartNumber |
Manufacturer-specific part number that can contain letters, numerals, and characters. | No |
UPCs |
Contains at least one child <UPC> element. |
No, unless including <UPC> elements |
UPC |
Universal Product Code, which is the 6- or 12-digit bar code used for standard retail packaging in the United States. The UPC must contain numerals only, with no letters or characters. Further, spaces and hyphens disrupt syndication matching and must be removed. | No |
ISBNs |
Contains at least one child <ISBN> element. |
No, unless including <ISBN> elements |
ISBN |
International Standard Book Number, which is a unique identifier for books and which is intended for commercial use. The number is either 10 or 13 digits long and consists of four or five parts. The different sections of the number can be of different lengths and are usually separated by hyphens (- ) or tildes (~ ). Spaces and hyphens disrupt syndication matching and must be removed. |
No |
Names |
Contains a child |
No |
Description |
Description of the product. To help products with few or short reviews contribute a significant amount of content to the SEO-optimized landing pages, it is recommended that product descriptions be at least three sentences or 300 characters in length. If you store descriptive information about your products across multiple elements, concatenate your elements into the Description element.
No HTML elements are recognized within the |
No |
Descriptions |
Contains a child |
No |
BrandExternalId |
Brand ID of the product. | No |
ProductPageUrls |
Contains a child |
No |
ImageUrls |
Contains a |
No |
ModelNumber |
Unique referencing code that businesses use to identify a part that a particular industry uses. The model number can contain letters, numerals, and other characters. | No |
If an element is not required but you maintain it for your products, include it in the data feed.
Step 3: Validate product feeds
Your feed needs well-formed XML that works with the following Bazaarvoice XML schema:
http://www.bazaarvoice.com/xs/PRR/ProductFeed/14.7
Validate your feed against the schema before uploading it to Bazaarvoice using a feed validation tool. There are a number of free feed validation tools available online, for example, XMLBeans.
The feed validation tool will help you to view the following information:
- Import status
- Errors and warnings related to data feeds that you have dropped into the
/import-inbox
directory and that have been processed by the automatic importer - Ad-hoc imports on staging that use the “Invoke one-time import” link. These need to be removed.
Step 4: Upload product feeds
Bazaarvoice recommends updating your product catalog feed daily to reflect any changes made to your product catalog.
Add an extra 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.
Contact Bazaarvoice Support if you want to set up this key-based authentication method.
Before you go live
Upload your feed to the /import-inbox
directory on the SFTP staging server .
You can also trigger an import manually. Complete the following steps to manually import the feed:
- Log in to the staging Workbench .
- Select Settings » Validate Product Feed.
- Click One-Time Import to manually import the feed.
After you go live
Upload your feed to the /import-inbox
directory on the SFTP production server .
You cannot manually trigger an import to the production server.
SFTP connection values
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
- Staging server:
- If your data is hosted in Europe, use the following URLs:
- Staging server
sftp7-stg.bazaarvoice.com
- Production server
sftp7.bazaarvoice.com
- Staging server
Step 5: Check the feed status
After uploading a feed to the staging or production SFTP server, you can view the import summary (error or warning count) of the feed.
Checking the import summary helps you to correct errors before the next import.
To view the import summary
- Sign in to the Portal .
- From the navigation bar, select More > Workbench.
- Select your company from the Select Instance drop-down menu.
Tip: Depending on your level of access, choose between signing in to your staging or production environment.
- Select Go to Workbench.
- Select Settings > Validate Product Feed to view your feed import summary. If your feed returns an error or warning, select the message to display more detailed information.
Step 6 (Optional): Send incremental product feeds
A full product catalog feed (recommended strategy) 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.
To reduce file size, you can send incremental feeds that include newly added and updated products, categories, and brands, including items that have been removed.
Incremental feeds differ from standard XML feeds in the following ways:
- The root
Feed
element contains an incremental attribute that is set totrue
- The
removed
attribute that is associated with the applicableProduct
,Category
, andBrand
elements is set totrue
The following example shows an incremental product feed.
<Feed name="ExampleClient" incremental="true" extractDate="2019-08-31T08:02:00-05:00">
<Categories>
<Category>
<ExternalId>1-8</ExternalId>
<Name> How my pet makes me a champion </Name>
<ParentExternalId>1-16</ParentExternalId>
<CategoryPageUrl>
http://www.client.com/Content/ContentNoNAV.aspx?PC=heartofchampion
</CategoryPageUrl>
</Category>
<Category>
<ExternalId>1-9</ExternalId>
<Name> Why my pet is a champion </Name>
<ParentExternalId>1-16</ParentExternalId>
<CategoryPageUrl>
http://www.client.com/Content/ContentNoNAV.aspx?PC=heartofchampion
</CategoryPageUrl>
</Category>
<Category removed="true">
<ExternalId>1-6</ExternalId>
<Name> Naughty </Name>
<CategoryPageUrl>
http://www.client.com/Content/ContentNoNAV.aspx?PC=naughtynicecontest
</CategoryPageUrl>
</Category>
<Category removed="true">
<ExternalId>1-7</ExternalId>
<Name> Nice </Name>
<CategoryPageUrl>
http://www.client.com/Content/ContentNoNAV.aspx?PC=naughtynicecontest
</CategoryPageUrl>
</Category>
</Categories>
</Feed>
In this example, the following element defines the feed as an incremental product feed:
<Feed name="ExampleClient" incremental="true" extractDate="2019-08-31T08:02:00-05:00”>
Further, the following element specifies the removal of the relevant category:
<Category removed="true">
Example feeds
To assist with your implementation, refer to Bazaarvoice’s Ratings & Reviews knowledge base for the following example feeds and formats: