retail search exchangedeveloper.hooklogic.com/developers/docs/retailsearch...retail search exchange...

15
Retail Search Exchange Publisher Technical Implementation Guide (JavaScript) Version: 2.2.2 -- Last Revised: 6/17/2015

Upload: others

Post on 13-Oct-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Technical Implementation Guide (JavaScript) Version: 2.2.2 -- Last Revised: 6/17/2015

Page 2: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 2 of 15

Retail Search Exchange Implementation

How Retail Search Exchange Works

When a shopper visits a Retail Search Exchange enabled retail web page, HookLogic receives an

asynchronous request via JavaScript. The function acquires and passes page specific properties that allow

HookLogic's system to determine what, if any, product ads should be returned to the shopper's browser

and seamlessly inserted within the page as it loads. Throughout the shopper's journey, HookLogic records

every request along with whatever content was displayed for reporting and billing purposes. When the

shopper purchases products, HookLogic identifies which are attributable to the ad interaction in order to

provide the Advertiser with aggregated reporting showing their Return On Ad Spend (ROAS) for their

campaigns across the network.

Implementation Process Overview

Activity Task Owner Tasks

Implementation

Kick-off Meeting

HookLogic &

Publisher

Identify product ad placement location and creative requirements

Walk through implementation guide

Establish project plan and timeline

Implementation

Publisher Provide data feed via FTP

Instrument HookLogic scripts in lower environment

HookLogic Consume product data feed

Configure Retail Search Exchange product ad delivery

QA of product ads on lower environment

Acceptance

Testing Publisher

Signoff on product ad placement and creatives

Confirm go live date

Go Live Publisher Deploy HookLogic instrumentation to production

HookLogic QA of product ads on production

Page 3: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 3 of 15

Publisher Site Tagging

Enabling the Retail Search Exchange on your website requires placing a call on every page to the HookLogic

JavaScript library file, creating optional <div /> elements where the ads are to be displayed, and setting page

specific properties. The properties vary by type of page, and are necessary to determine ad selection, content

delivery and reporting processes.

Description Code Snippet

1 Load JavaScript Library Place the HookLogic JavaScript library on all pages of the site in the <head>. Minimum required pages are search results, product listings, product detail, and order confirmation pages.

<script

src="//www.hlserve.com/Delivery/ClientPaths/Library/hook.js?apiK

ey=CLIENTGUID&channel=web"></script>

The Client GUID will be provided during the implementation kickoff call. For a mobile

implementation, please replace "web" with "mobile".

2 Optional: place <div /> tag Place <div /> tag(s) within the page at the precise location(s) where Retail Search Exchange product ads are to be displayed. HookLogic can insert <div /> tags by adding the element to the DOM using JavaScript.

One <div /> for each product ad module on the page (multiple products can be shown

per module such as a row). Note, for pages with multiple ad modules, please

increment the number (hl_#) for each div.

<!-- HookLogic Retail Search product ad module 1 -->

<div id="hl_1"></div>

3 Call top level function(s) HookLogic's library provides functions that operate independently to request ads, update product price and availability, and provide attribution details via order details and logging shopper actions.

One .newRequest() for each product ad module on the page. Call the function just

after the <div> has been placed. Note, for pages with multiple ad modules, please

change the id (eg. .submit("hl_#");) for each .newRequest()

<script>

HLLibrary.newRequest()

.setTaxonomy("43")

.setKeyword("laptop computer")

.setModule("AboveGrid")

.setProperty("hlPageType", "S")

.setProperty("brand", "sony")

.setProperty("minPrice", "750")

.setProperty("maxPrice", "999.99")

.setFilter("Screen Size", "13-14 inches")

.submit("hl_1");

</script>

Page 4: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 4 of 15

Top Level Functions

All HookLogic top level functions operate independently. There are occasions such as a product detail page with

an ad module when multiple different function calls would be made using the same or a similar set of required

properties for different purposes.

Function Description Example

newRequest Used on any type of page to request ads given context of targeting functions and properties. Multiple ad placements on a single page would have separate .newRequests()

<!-- HookLogic Request -->

<div id="hl_1"></div>

<script>

HLLibrary.newRequest()

.setTaxonomy("4563")

.setKeyword("laptop computer")

.setModule("AboveGrid")

// set of appropriate properties

.submit("hl_1");

</script>

newUpdate Used on product detail pages to provide intra-day pricing and availability updates. Also enables HookLogic to learn from Shopper behavior between search listing pages to associate keywords to SKUs based on your site traffic.

If there is to be an ad module on the product detail page, a newRequest would also be used.

<!-- HookLogic Update -->

<script>

HLLibrary.newUpdate()

// set of appropriate properties

.submit();

</script>

newOrder Used on order confirmation pages to provide order details to be used over a 30 day look back window to attribute sales of products associated with an impression or click on an ad.

If there is to be an ad module on the order confirmation page, a newRequest would also be used.

<!-- HookLogic Order -->

<script>

HLLibrary.newOrder()

// set of appropriate properties

.submit();

</script>

newEvent Typically used on product detail or listing pages to track shopper behavior as other signs of engagement with the Advertiser's products after a click on a product ad.

<!-- HookLogic Event -->

<script>

HLLibrary.newEvent()

// set of appropriate properties

.submit();

</script>

Page 5: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 5 of 15

SubFunctions

HookLogic's library has functions to communicate ad targeting and configuration information within the top

level functions. Note: the setTaxonomy, setKeyword, setModule, and setFilter functions only work with the

newRequest top level function.

SubFunction Description Examples

setTaxonomy Used to target ads against a given taxonomy that the Shopper browses to, or filters search results by. Must match values provided in the 'taxonomy' field in the feed specifications.

If the page is not targeted by a taxonomy, pass 'null'.

Only available on newRequest calls.

Targeting a taxonomy key:

.setTaxonomy("43")

No taxonomy set:

.setTaxonomy(null)

setKeyword Used to target ads against a given keyword or phrase the shopper uses, or filters results by. For a search that is also narrowed by category, you would set both a taxonomy and keyword.

Do not encode the keyword phrase.

Only available on newRequest calls.

.setKeyword("laptop computer")

setProduct Used to ensure that this product (SKU and/or parentSKU) is not displayed in a product ad placement on its own page.

Only available on newRequest calls.

.setProduct("12345","12345a"|"12345b")

setModule Used to identify the creative template that will be used to render an ad module and pass specific details to ad module location and details for use in HookLogic's machine learning algorithms.

Only available on newRequest calls.

.setModule("AboveGrid")

setProperty Globally understood properties used to further refine the ads to be displayed, or to update product and order information. Strongly encouraged to set as many properties as possible.

Available for all top level functions.

.setProperty("brand", "sony")

setFilter Retailer specific filters used to further refine the ads to be displayed. Strongly encouraged to set as many filters as possible.

Only available on newRequest calls.

.setFilter("Screen Size", "13-14 inches")

Page 6: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 6 of 15

Functions and Required Properties

Below is a table that identified which properties are required or optional for each of the library functions. These

properties are passed to HookLogic via the setProperty and setFilter functions as appropriate. X = required, O =

optional

Property newRequest newUpdate newOrder newEvent

cUserID X X X X

hlPageType X X X X

pCount X

pgSize X

organicSKUs X

pgN X

view X

sort O

[filters] X

brand X

minPrice X

maxPrice X

minRating X

sku X X X

parentSku X X X

price X X

regularPrice X

inStock X

availability O

quantity X

orderId X

eventType X

addId O O

Page 7: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 7 of 15

Page Property Glossary

Property Name Req Description Examples

cUserId Yes Your unique identifier for the authenticated Shopper. If a shopper is unauthenticated set this as an empty value.

("cUserId", "u270109003952")

hlPageType Yes This is the canonical page type for where the product ads placement is rendered.

S: Search - any listing page that is limited by a keyword (including browse pages filtered by keyword)

B: Browse - all listing pages which do not include a user search term

Q: Quick View - modal for product details on a listing page

P: Product detail page

T: Topic Page - any page which contains a hand-selected set of SKUs as a destination

M: Merchandising Page - browse page that does not include a product listing (list or grid) on the page

H: Home page of the site

C: Cart/Checkout - includes anything from the view cart through checkout and order confirmation

L: Registry/Wishlist

R: Unknown Retail

O: Off-network Media

U: Unknown

("hlPageType", "S")

pCount Yes Number of organic products displayed on the listing page.

("pCount", "11")

pgSize Yes Number of products that a Shopper can see per page. ("pgSize", "12")

organicSKUs Yes An ordered list of all SKUs on the page. This is used to associate keywords and filter values to maximize coverage when the Shopper filters listings. For variation products, please set the parent SKU value.

("organicSKUs", "1|2|3|4|5|6|7")

pgN Yes Identifies the current page number being viewed when a search or category result returns multiple pages.

("pgN", "2")

view Yes Page view style for product listing pages. Typical values are "grid" or "list" view.

("view", "grid")

sort Opt The sort order that is applied on the listing page. For instance "price ascending / descending" and/or "rating ascending / descending." If this value is not passed, it assumes "default."

("sort","default")

("sort","price-asc")

("sort","price-desc")

("sort","rating-asc")

("sort","rating-desc")

[filters] Yes Set one filter for each filter that is applied. If a filter is removed, remove that filter. When a product filter has is applied by the Shopper create a setFilter with the exact name/value as provided in the 'descriptive_attributes' column of the data feed. If no attributes are provided in the data feed, they will be automatically associated from Shopper traffic.

Single filter, single value:

setFilter("Color", "Black");

Multiple filters, multiple values:

setFilter("Screen Size", "13-14

inches");

setFilter("Color", "Black|Silver");

brand Yes The value(s) the Shopper has selected to limit the results by brand. Pipe (|) delimit values for multiple brands.

("brand", "sony")

("brand", "sony|panasonic")

minPrice Yes Minimum price to match a product for display. Match is inclusive (>=). For example, the Shopper selects "$10 -

("minPrice", "10")

Page 8: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 8 of 15

$25".

maxPrice Yes Maximum price to match a product for display. Match is inclusive (<=). For the example, the Shopper selects "$10 - $25".

("maxPrice", "25")

minRating Yes Minimum rating to match (>=) a product for display. For example, the Shopper selects 3 stars, we may return products with 3 or more star ratings.

("minRating", "3")

availability Opt Setting the availability property allows HookLogic to know if a product is in stock in other channels (i.e. on pre-order, or if an item is in-store eligible however not available on web).

("availability","preorder")

("availability","storeeligible")

("availability","web|storeeligible")

sku Yes Unique SKU identifier for the product. Pipe (|) delimit values for multiple products on an order confirmation page.

Product Page:

("sku", "333960")

("parentSku", "333000")

("price", "79.99")

("regularPrice", "84.99")

("inStock", "1")

Important: If HookLogic directs a Shopper to a product detail page using a sku that is no longer in stock, please ensure in that page's call, you pass that as item sku=[out of stock SKU] with a inStock=0 and we will remove that product from being displayed.

Order Confirmation:

("sku", "333960|337307|786304")

("parentSku", "333000||")

("price", "79.99|205.49|9.99")

("quantity", "1|1|2")

("orderId", "1883843891")

parentSku Opt For variation items such as a XL Blue Polo Shirt, this is identifier for this child SKU's parent.

price Yes Sale price for each product on the order. Pipe (|) delimit values for multiple products on an order confirmation page.

regularPrice Yes Non-sale price for each product on the order. Pipe (|) delimit values for multiple products on an order confirmation page.

inStock Yes Flag to identify if the product is available for purchase on the site. "0" = out of stock, "1" = in stock.

quantity Yes Units of each product in each order. Pipe (|) delimit values for multiple products on an order confirmation page.

orderId Yes The Order ID or Transaction ID

eventType Yes Details of the event types are available in the Event Based Secondary Attribution section of this document.

("eventType", "add|registry")

addId Opt The registry or wishlist id that the product was added to. ("addId", "123456789")

Page 9: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 9 of 15

HookLogic Tagging Examples

newRequest - Product Listing Page (search and browse) <!-- HookLogic Product Ad Request -->

<div id="hl_1"></div>

<script>

HLLibrary.newRequest()

.setTaxonomy("4235")

.setKeyword("laptop computer")

.setModule("AboveGrid")

.setProperty("cUserId", "u270109003952")

.setProperty("hlPageType", "S")

.setProperty("pCount", "11")

.setProperty("pgSize", "12")

.setProperty("organicSKUs", "1|2|3|4|5|6|7|8|9|10|11|12")

.setProperty("pgN", "2")

.setProperty("view", "grid")

.setProperty("sort", "price-asc")

.setProperty("minPrice", "250")

.setProperty("maxPrice", "499.99")

.setFilter("Color", "Black|Silver")

.setFilter("Screen Size", "13-14 Inches")

.submit("hl_1");

</script>

newRequest - Product Details Page

<!-- HookLogic Product Ad Request -->

<div id="hl_1"></div>

<script>

HLLibrary.newRequest()

.setProduct("12345")

.setTaxonomy("4235")

.setModule("carousel")

.setProperty("cUserId", "u270109003952")

.setProperty("hlPageType", "P")

.setProperty("minPrice", "250")

.setProperty("maxPrice", "499.99")

.submit("hl_1");

</script>

Page 10: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 10 of 15

newUpdate - Product Detail Page <!-- HookLogic Product Page Update -->

<script>

HLLibrary.newUpdate()

.setProperty("hlPageType", "P")

.setProperty("availability", "web|storeeligible")

.setProperty("sku", "401886")

.setProperty("parentSku", "401800")

.setProperty("price", "79.99")

.setProperty("regularPrice", "84.99")

.setProperty("inStock", "1")

.submit();

</script>

For a variation item (such as available in multiple sizes/colors): <!-- HookLogic Product Page Update -->

<script>

HLLibrary.newUpdate()

.setProperty("hlPageType", "P")

.setProperty("availability", "storeeligible")

.setProperty("sku", "6133730003|6133730004|6133730005")

.setProperty("parentSku", "6133730000||")

.setProperty("price", "14.99|14.99|17.99")

.setProperty("regularPrice", "19.99|19.99|22.99")

.setProperty("inStock", "1|1|0")

.submit();

</script>

newOrder - Order Confirmation Page <!-- HookLogic Order -->

<script>

HLLibrary.newOrder()

.setProperty("cUserId", "u270109003952")

.setProperty("hlPageType", "C")

.setProperty("parentSku", "4525943||")

.setProperty("sku", "401886|651363|444209")

.setProperty("price", "799.99|199.99|79.99") // unit price only

.setProperty("quantity", "1|1|2")

.setProperty("orderId", "1883843891")

.submit();

</script>

Page 11: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 11 of 15

Event Based Secondary Attribution

A purchase is not always the end point of a Shopper's journey, there are often other actions that a Shopper takes that are either an indication of the Shopper moving deeper in the buying funnel, or as an alternate form of "success" to the Advertiser. If a significant portion of your Shoppers use functionality such as adding products to a baby or wedding registries, or sharing products on social sites, this section is highly recommended.

eventTypes:

In order to track events for a specific type that can be aggregated across the Retail Search Exchange we have

created the below declared eventTypes. Please try and use the defined events whenever you can; however,

since each Publisher may have custom solutions we have engineered they system to support any value.

1. add – The Shopper added this product to a registry or list

a. subtypes: add|cart, add|registry, add|list, add|[custom type name]

b. Properties: addId – A unique identifier which will identify this cart/registry/list. Note that in the

case that more than one subtype is in use, the id should be unique across all subtypes.

2. social – The Shopper shared this product using a social link

a. subtypes: social|facebook, social|pintrest, social|twitter, social|[custom type name]

3. offline – The Shopper took action leading to an in-store purchase

a. subtypes: offline|store locator, offline|find in store, offline|print, offline|[custom type name]

4. research – The Shopper took an action to consider a purchase in the future

a. subtypes: research|email, research|follow price, research|[custom type name]

Event Instrumentation:

The script can be made within an existing onClick event, or HookLogic can use callback function serially. Please

contact your HookLogic Implementation Manager to work through the details specific to your needs.

newEvent - Add to Registry event (with registry ID):

HookLogic supports setting the ID of the Registry the product was added to in order to allow for the sale to be

attributed to the event. Note, the order confirmation instrumentation should be updated to pass the 'addId'

for each product that was purchased for a registry.

<!-- HookLogic newEvent -->

<script>

HLLibrary.newEvent()

.setProperty("cUserId", "u270109003952")

.setProperty("sku", "123456")

.setProperty("eventType", "add|registry")

.setProperty("addId", "123456789")

.submit();

</script>

Page 12: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 12 of 15

newEvent - Custom event:

For extensibility to support emerging and custom events, you can pass a custom string as the value for any of

the standard eventTypes that can be set.

<!-- HookLogic newEvent -->

<script>

HLLibrary.newEvent()

.setProperty("cUserId", "u270109003952")

.setProperty("sku", "123456")

.setProperty("eventType", "research|where to buy")

.submit();

</script>

Secondary Attribution Order Confirmation:

In order to attribute a sale of a product from an "Add" event, please add the additional property "addId" to the

order confirmation page instrumentation. This is to account for an item purchased for a Registry from a mixed

cart by any Shopper who has purchased a product for a specified list.

newOrder - Additional Order Confirmation property:

Single item example: <!-- HookLogic newOrder -->

<script>

HLLibrary.newOrder()

.setProperty("cUserId", "u270109003952")

.setProperty("sku", "401886")

.setProperty("price", "799.99")

.setProperty("quantity", "1")

.setProperty("addId", "123456789");

.setProperty("orderId", "1883843891")

.submit();

</script>

Multi-item example: <!-- HookLogic newOrder -->

<script>

HLLibrary.newOrder()

.setProperty("cUserId", "u270109003952")

.setProperty("sku", "401886|651363|444209")

.setProperty("price", "799.99|199.99|79.99")

.setProperty("quantity", "1|1|2")

.setProperty("addId", "123456789||");

.setProperty("orderId", "1883843891")

.submit();

</script>

If an order contains no products for a registry, you should omit the "addId" property.

Page 13: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 13 of 15

3rd Party Analytics

HookLogic can leverage the Publisher's existing analytics and reporting services by rendering tracking details within with the ad creative. Please provide scripts or URL parameters with detailed instructions to the HookLogic implementation manager, and they will be included.

Product Data Feed

The product data feed is required for the Retail Search Exchange in order to render the Product Ads in a

matching, or very similar manner to your organic product listings as well as the ability to attribute sales.

Additional data may be required based on the creative requirements and design elements of the ad module.

Name Req Data Type

Max Length Description Example

sku Yes string 50 Unique product identifier. A feed cannot contain duplicate SKUs. Products with duplicate SKUs will be marked as invalid.

60237

parent_sku Yes string 50 For variation items such as a XL Blue Polo Shirt, this is identifier for this child SKU's parent. Often referred to as the product ID.

401999

collection_id Opt string 100 For products that are part of a collection, this is the identifier for the collection.

853453

brand Yes string 50 The name of the brand/manufacturer of the product

Canon

mpn Yes string 50 The Manufacturer Part Number A1300BLK

model_number Opt string 50 The Model Number for the item A1300

upc Yes string 14 Universal Product Code or GTIN 013803146714

google_product_category Yes string 500 The categorization for each product to Google Product Category hierarchy. The value you send in field to Google Shopping.

Cameras & Camcorders > Digital

Cameras

taxomy_key Yes String 500 The identifier you can pass in the .setTaxonomy subFunction. Each key in the hierarchy needs to be delimited by " > ". If a product is available in multiple taxonomies, please send pipe delimited with the primary taxonomy first in the array.

Single:

3 > 70 > 466 > 4051

Multiple:

3 > 70 > 466 > 4051

|11 > 121 > 3211

breadcrumb Yes string 500 Your merchandising category for this product. Each level in the hierarchy needs to be delimited by " > ". If a product is available in multiple categories, please send as pipe delimited with the primary category first in the array.

Single:

Computing > Keyboards and

Mice > Mice > Wireless Mice

Multiple:

Computing > Keyboards and

Mice > Mice > Wireless

Mice|Gifts > For Dad > Mice

title Yes string 200 The product title Powershot A1300 Black 16

Megapixel Digital Camera

description Yes string 2000 Detailed description of the product PowerShot A1300 digital camera

is comfortable to use and

comfortably affordable! Its

Optical Viewfinder....

Page 14: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 14 of 15

bullets Opt string 500 Bulleted list of product features used in ad copy without <ul> or <li> markup. Multiple values are piped delimited

16.0 megapixels|8x optical/4x

digital zoom|3.0-inch TFT Color

LCD screen

promo_text Yes string 60 Promotional text for this product Special Buy

product_rating Yes numeric 8 Average rating of product 3.5

number_of_reviews Yes numeric 8 Number of reviews for the rating 67

image_url Yes string 2048 Thumbnail product image (size to be displayed within search/browse results product grid). If possible, please provide details on how to resize the image to a specified height and width.

http://www.azamon.com/image

s/products/

A1300BLK.jpg?h=180&w=180

click_url Yes string 2048 URL from where a web user can purchase the product. This can include your site analytics tracking parameters.

http://www.azamon.com

/product/60237/Canon-

A1300BLK.html

currency Opt string 3 ISO 4271 standard currency code. Required if not in US Dollars.

USD

regular_price Yes numeric 15 Price the product normally is, typically displayed as strike-through. Can be MSRP.

119.99

sale_price Yes numeric 15 Unit price the product can be purchased for. Do not include shipping cost.

109.00

map_price Opt numeric 15 Minimum Advertised Price of the SKU. 119.00

shipping_cost Opt numeric 15 Value must be numeric, no dollar signs or special characters supported. Decimal places not required.

0.00

in_stock Yes Boolean 1 "1" indicates product is in stock, "0" indicates product is out of stock. If a product has been previously sent, but is not in this data feed, it will be marked as "0" out of stock.

1

condition Opt string 20 Condition of the product "new", "used", or "refurbished". Default value is "new".

new

variation_attributes Yes string 4000 Variations are attributes that you designate to discern the differences between children SKUs. Delimited list of attribute name value pairs. (eg. Name1=value1|Name2=value2)

Color=Black|Size=XL

descriptive_attributes Opt string 4000 Recommended to explicitly declare filters that will be displayed, and ensure 100% of products have filter values set. Delimited list of attribute name value pairs. (eg. Name1=value1|Name2=value2)

Color=Black|Megapixels=12

rendering_attributes Opt string 4000 Required to explicitly declare product specific data that is required to be rendered in the ads. Delimited list of attribute name value pairs. (eg. Name1=value1|Name2=value2)

ClearanceFlag=1|StorePickupElig

ible=1

Page 15: Retail Search Exchangedeveloper.hooklogic.com/developers/docs/RetailSearch...Retail Search Exchange Publisher Implementation Guide V2.2.2 -- Last Revised: 6/17/2015 Confidential Page

Retail Search Exchange Publisher Implementation Guide

V2.2.2 -- Last Revised: 6/17/2015 Confidential Page 15 of 15

Feed and FTP Information FTP: HookLogic will set up either FTP or SFT credentials for delivery of the product data feed. The credentials will be provided during the kickoff meeting.

FTP Host: hookftp.hooklogic.com

Username: [TBD]

Password: [TBD] Feed Name: [RetailerName]_Products_[Date].txt.gz Example: Azamon_Products_20130227.txt.gz

File Format: Tab delimited text, quote enabled, with column headers. Feed is required to be compressed using

gzip in order to minimize file transfer times and ensure that only complete files are processed.

File header: The data feed should contain the header row using the column names in the order specified.

Delivery frequency: The product data feed should be uploaded to HookLogic FTP server daily, and should be

delivered by 1:00am ET / 6.00am BT.

Update type: HookLogic's operates using the "flush and reload" paradigm and does not process "delta" feeds. If a product is not in the data feed, it will be marked as out of stock.

Quality Assurance and Testing There are several performance and quality control measures in place to ensure error free implementation

and usage of the HookLogic solution.

The following QA process is undertaken when the HookLogic solution is implemented:

(i) Code changes are first deployed on HookLogic's staging servers and run through our robust testing process. HookLogic uses proprietary browser testing tools to run its code changes against a publisher's test or live environment (depending on process agreed with publisher's QA team). This allows HookLogic to check any code changes on its staging servers before installing them on the live environment. At this stage, no changes are visible to end users.

(ii) Code is then moved to HookLogic's staging or live servers (depending on process agreed with publisher's QA team) where the same testing process is performed. Again, at this stage, no changes are visible to end users.

(iii) After HookLogic's internal testing is complete, code changes are published for publisher QA team for testing. Only user browsers with HookLook's special “test cookie” are served new code. This allows both HookLogic and the publisher to QA without exposing code changes to the end users.

(iv) Once publisher QA team gives approval, HookLogic updates the systems so end users can experience latest code updates.

(v) HookLogic continues to monitor performance and data collection statistics ensuring that end users experience is as intended.

Contact HookLogic For implementation support, please contact [email protected] or by call (646) 467-8222.