shopping campaigns
TRANSCRIPT
Shopping Campaigns
Adam Ohren
Agenda
● Google Shopping & Merchant Center
● Content API for Shopping
● AdWords Shopping Campaigns
● Product Partition Trees
● Local Inventory Ads
● Product Partition Utility
Google Shopping & Merchant Center
Google Shopping
Merchant Center
● View products, but not edit
● Manage account and subaccounts
● Data quality and disapproval information
● Link to AdWords accounts
● Tax and delivery settings
Multi-client Accounts
● Analogous to AdWords MCCs
● Allows merchants to manage many sub-accounts
Data Feeds
● CSV, XML, Google Sheets with product data
● Fetched manually or on a schedule
Content API for Shopping
Content API
● Manage products, data feeds, users,
accounts
● Can make updates throughout the day
● Instant feedback on some data issues
Content API Example
POST /content/v2/YOUR_MERCHANT_ID/inventory/online/products/online:en:GB:book123
{
"price": {
"value": "3.99",
"currency": "USD"
}
}
Updating a product’s price:
Content API for Shopping
https://developers.google.com/shopping-content/
AdWords Shopping Campaigns
Shopping Campaigns
Shopping Campaigns
● Connects a linked Merchant Center to
AdWords campaign
● Enables Product Listing Ads (PLAs)
● Manages bids based on product hierarchy
Shopping Campaigns Differences
● AdvertisingChannelType is SHOPPING
● Must have a ShoppingSetting which sets
○ The Merchant Center account to use for product data
○ The target country of the products to use
○ Optional priority
● Must have a valid ProductPartition tree
Creating a Shopping Campaign
// Create regular campaign
Campaign c = new Campaign();
c.setAdvertisingChannelType(
AdvertisingChannelType.SHOPPING);
// Set shopping attributes
ShoppingSetting shoppingSetting = new ShoppingSetting();
shoppingSetting.setMerchantId((long) 1234567);
shoppingSetting.setSalesCountry("GB");
shoppingSetting.setCampaignPriority(0);
c.setSettings(new Setting[] {shoppingSetting});
Product Partition Trees
Product Partitions
Inventory is partitioned by various Product Dimensions
Product Dimensions
Make bidding decisions based on product data● Category● Brand● Item ID● Condition● Product type● Custom labels● Product channel v201502
● Product channel exclusivity v201502
Product Dimensions
Category ProductBiddingCategory
Brand ProductBrand
Item ID ProductOfferId
Condition ProductCanonicalCondition
Product type ProductType
Custom labels ProductCustomAttribute
Channel ProductChannel
Channel exclusivity ProductChannelExclusivity
Product Partitions
Product Partitions
Product Partitions
ProductPartition root = new ProductPartition();root.setPartitionType(ProductPartitionType.SUBDIVISION);root.setId(-1);
Product Partitions
Root is a subdivision. It has no value and no parent.
ProductBiddingCategory toysDimension = ...
ProductPartition toys = new ProductPartition();toys.setPartitionType(ProductPartitionType.UNIT);toys.setParentCriterionId(root.getId());toys.setCaseValue(toysDimension);
Product Partitions
The Toys category is a unit. It has root as it’s parent.
ProductBrand otherBrand = new ProductBrand();
ProductBiddingCategory otherCat = newProductBiddingCategory();
otherCat.setType(ProductDimensionType.BIDDING_CATEGORY_L1);
Product Partitions
To create an Other node, use a dimension with no value
BiddableAdGroupCriterion toysCriterion = new ...toysCriterion.setAdGroupId(...);toysCriterion.setCriterion = toys;toysCriterion.setBiddingStrategyConfiguration(...);
AdGroupCriterionOperation operation = new ...operation.setOperand(toysCriterion);operation.setOperation(Operator.ADD);
adGroupCriterionService.mutate(...);
Product Partitions
Create the tree
Local Inventory Ads
Local Inventory Ads
Easily make in-store products available in shopping campaigns
New LIA Controls in v201502
1. Enable local inventory ads
2. Campaign-level filters for Channel &
ChannelExclusivity
3. Product tree dimensions for Channel &
ChannelExclusivity
Enable Local Inventory Ads
● Opt-in campaigns to serve local information
Enable Local Inv. Ads Example
Campaign c = new Campaign();
c.setAdvertisingChannelType(AdvertisingChannelType.SHOPPING);
// Set shopping attributes
ShoppingSetting shoppingSetting = new ShoppingSetting();
shoppingSetting.setMerchantId((long) 1234567);
shoppingSetting.setSalesCountry("GB");
shoppingSetting.setCampaignPriority(0);
shoppingSetting.setEnableLocal(true);
c.setSettings(new Setting[] {shoppingSetting});
Campaign-level Filters
● Use inventory filters to include / exclude products based on channel dimensions
Campaign-level Filters Example
ProductScope scope = new ProductScope();
ProductChannel channel = new ProductChannel();
channel.setValue(“ONLINE”);
ProductChannelExclusivity channelEx = new ProductChannelExclusivity();
channelEx.setValue(“SINGLE_CHANNEL”);
scope.setDimensions(new ProductDimension[]{ channel, channelEx});
Product Tree Dimensions
● Segment product tree by Channel & ChannelExclusivity
Product Tree Dimensions Example
ProductPartition node1 = new ProductPartition();
node1.setPartitionType(ProductPartitionType.UNIT);
node1.setCaseValue(new ProductChannel(null, "ONLINE"));
node1.setParentCriterionId(root.getId());
ProductPartition node2 = new ProductPartition();
node2.setPartitionType(ProductPartitionType.UNIT);
node2.setCaseValue(new ProductChannel(null, "LOCAL"));
node2.setParentCriterionId(root.getId());
Product Partition Utility
Product Partition Utility
● Client-side extension that simplifies
creating, mutating, and removing
ProductPartitions
● Added in v201409
● Java client library only
Product Partition Utility
● ProductPartitionTree API○ Abstracts tree handling
● ProductPartitionNode API○ Abstracts nodes & properties (bids, dimensions, etc.)
Sample Use Cases
● Rebuild entire trees
● Convert SUBDIVISION <-> UNIT
● Update bids
Creating a ProductPartitionTree
ProductPartitionTree tree = ProductPartitionTree.
.createAdGroupTree(adWordsServices, adWordsSession, adGroupId);
ProductPartitionNode rootNode = tree.getRoot();
...
Construct a ProductPartitionTree using the static createAdGroupTree method.
Get the root ProductPartitionNode from the new tree.
Updating a Bid Example
tree.getRoot()
.getChild(ProductDimensions
.createType(ProductDimensionType.PRODUCT_TYPE_L1, "clothing"))
.asBiddableUnit()
.setBid(bid);
List<AdGroupCriterionOperation> operations = tree.getMutateOperations();
Convert UNIT to SUBDIVISION
Convert UNIT to SUBDIVISION - Cont.ProductPartitionNode shoes = tree.getRoot()
.getChild(createType(ProductDimensionType.PRODUCT_TYPE_L1, "shoes"))
.asSubdivision();
shoes.addChild(createCanonicalCondition(
ProductCanonicalConditionCondition.NEW))
.asBiddableUnit().setBid(1000000L);
shoes.addChild(createCanonicalCondition(
ProductCanonicalConditionCondition.REFURBISHED))
.asBiddableUnit().setBid(1500000L);
shoes.addChild(createCanonicalCondition(null)).asExcludedUnit();
List<AdGroupCriterionOperation> operations = tree.getMutateOperations();
Rebuilding a Tree
List<AdGroupCriterionOperation> operations = tree.getMutateOperations();
tree.getRoot()
.asBiddableUnit()
.setBid(bid);
tree.getRoot()
.removeAllChildren()
.asSubdivision()
tree.getRoot()
.addChild(...);
...
Send Us Feedback!
We're looking for feedback on this utility.If you use it, we want to hear from you!
Check out the guide on github:http://goo.gl/UmN17E
Resources● Shopping Campaigns Guide
https://developers.google.com/adwords/api/docs/guides/shopping
● Product Partition Utility Examplehttps://github.com/googleads/googleads-java-lib (see
AddProductPartitionTree.java)