If you have a client that wants a BazaarVoice export, you’ll have to change your feed a bit, add some fields, and get FTP/SFTP information from the client.
Here’s the general structure of a BazaarVoice XML export:
<xml>
<Feed>
<Brands>
<Brand>
<ExternalID></ExternalID>
<Name></Name>
</Brand>
</Brands>
<Categories>
<Category>
<ExternalID></ExternalID>
<Name></Name>
<CategoryPageUrl></CategoryPageUrl>
</Category>
</Categories>
<Products>
<Product>
<ExternalID></ExternalID>
<Name></Name>
<Description></Description>
<ProductPageUrl></ProductPageUrl>
<ImageUrl></ImageUrl>
<BrandExternalID></BrandExternalID>
<CategoryExternalID></CategoryExternalID>
<ManufacturerPartNumbers>
<ManufacturerPartNumber></ManufacturerPartNumber>
</ManufacturerPartNumbers>
<UPCs>
<UPC></UPC>
</UPC>
</Product>
</Products>
</Feed>
UPCs/UPC and ManufacturerPartNumbers/ManufacturerPartNumber are the only non-required fields.
To accomplish this, create an XML export in feedonomics. You’ll need to format your header in the header section on the left side of the export. Enter this:
{{feedonomics::bazaarvoice:categories_brands}}
This will format the Feed command the way it should be for BazaarVoice, as well as create the Brand and Category sections. Instead of “storename” you will be placing the name of the company whose feed you are building. This should match the sftp login name.
In the footer section below, put .
In the products section, Feedonomics builds this out by separating the fields into tiers. For instance, in the example above, ExternalID is the first populated field in Products. In the Feedonomics export, this will be named Products/Product/ExternalID, since is inside the tag, which is inside the tag.
UPC, for instance, would be Products/Product/UPCs/UPC.
Fields
<xml>: this contains information about the xml file. It is generated automatically with Feedonomics
<Feed>: this notes the feed information. It needs the specifications listed above.
<Brands>: The list of all brands in the feed
<Brand>: This contains the information of a single brand
<Brand>/<ExternalID>: this contains a Brand’s unique ID. This can be generated using the transformer unique_id([brand]), which will provide unique ID’s for every brand. This needs to match <BrandExternalID> in the <Products> tag.
<Brand>/<Name>: this will be the [brand] field
<Categories>: The list of all categories in the feed. Categories for bazaarvoice must be similar to the domain website.
<Category>: This contains the information for a single category
<Category>/<ExternalID>: This contains a category’s unique ID. This can be generated using the transformer unique_id([product_type]), or whatever field you use for the categories. This needs to match <CategoryExternalID> in the <Products> tag.
<Category>/<Name>: This will be the field you use for category.
<Category>/<CategoryPageURL>: a URL without any tracker information (everything left of the ?), that lands on a page unique to the category. This will be tricky, as the information is rarely included in a feed. It will likely have to be crawled or generated otherwise.
<Products>: The list of all products in the feed.
<Product>: The information for a single product.
<Product>/<ExternalID>: This is the product ID. It’s likely [id] in your feed, however parent ID’s ([item_group_id]) are also allowed, as BazaarVoice doesn’t collect data specific to child elements like color or size.
<Product>/<Name>: [title]<Product>/<Description>: [description]<Product>/<ProductPageUrl>: [link]<Product>/<ImageUrl>: [image_link]<Product>/<BrandExternalID>: The unique brand id. This must match the <ExternalID> tag inside of each <Brand> section.
<Product>/<CategoryExternalID>: The unique category id. This must match the <ExternalID> tag inside of each <Category> section.
<Product>/<ManufacturerPartNumbers>: This is a tag where you will list all MPNs within an item group. If you used parent ID’s for your products, you may have multiple MPNs in this tag. If you used unique child ID’s for your product ID’s, you’ll only have one MPN per product.
<Product>/<ManufacturerPartNumbers>/<ManufacturerPartNumber>: [mpn]<Product>/<UPCs>: This is a tag where you will list all UPCs within an item group. If you used parent ID’s for your products, you may have multiple UPCs in this tag. If you used unique child ID’s for your product ID’s, you’ll only have one UPC per product.
<Product>/<UPCs>/<UPC>: The UPC. It may be under [upc] or [gtin].
Notes:
and are the ONLY tags in the Products section that reference other sections. These ID’s are used to identify which brand/category each product is using, and the remainder of the information is found inside the respective or section.
You can compare your XML file to a BazaarVoice schema to see if your feed:
a) is a well-formed XML file.
b) matches the given schema.
If either is a problem, you will be given the exact line/character reference for the error.
The BazaarVoice schema can be found at http://release-assets.bazaarvoice.com/xs/PRR/ProductFeed/5.6
A good validator can be found at https://www.corefiling.com/opensource/schemaValidate.html
Exporting to BazaarVoice
Your export will need to be pushed via ftp/sftp to a specific location. There will be host information for both a staging site and a production site. You’ll likely be pushing to the staging site first, then to the production site when the feed has been approved by BazaarVoice. This will be pushed to a specific import folder within your client’s BazaarVoice. It’ll look something like sftp-stg.bazaarvoice.com/import-inbox. You can verify you found the right location with a program like filezilla, but you’ll need to start in the root folder, sftp://sftp-stg.bazaarvoice.com, then check the import-inbox folder for your pushed file. When you have approval to go live, you’ll switch the export to the production site, which will look something like stfp.bazaarvoice.com with your client’s login credentials.
Brian Roizen is the Cofounder and Chief Architect of Feedonomics, a full-service feed optimization platform that optimizes product data for hundreds of channels. He has been featured on numerous podcasts and eCommerce webinars, and regularly contributes to Search Engine Land and other industry-leading blogs. Brian graduated summa cum laude from UCLA with both a Bachelor’s and Master’s degree in Mechanical Engineering.