Page Summary
-
Shopping campaigns and ad groups can be retrieved and managed using AdsApp scripts.
-
Product groups within a shopping ad group can be organized into hierarchies and acted upon.
-
Specific product groups like the "Everything else" category can be identified and accessed.
-
Bids for product groups can be updated based on performance criteria.
-
Product ads can be retrieved and created within a shopping ad group.
Get all shopping campaigns
function getAllShoppingCampaigns () { // AdsApp . shoppingCampaigns () will return all campaigns that are not removed // by default . const campaignIterator = AdsApp . shoppingCampaigns () . get (); console . log ( ` Total shopping campaigns found : $ { campaignIterator . totalNumEntities ()} ` ); return campaignIterator ; }
Get a shopping campaign by its name
function getShoppingCampaignByName ( shoppingCampaignName ) { const campaignIterator = AdsApp . shoppingCampaigns () . withCondition ( ` campaign . name = "${shoppingCampaignName}" ` ) . get (); if ( campaignIterator . hasNext ()) { const campaign = campaignIterator . next (); console . log ( ` Campaign Name : $ { campaign . getName ()} ` ); console . log ( ` Enabled : $ { campaign . isEnabled ()} ` ); console . log ( ` Bidding strategy : $ { campaign . getBiddingStrategyType ()} ` ); console . log ( ` Ad rotation : $ { campaign . getAdRotationType ()} ` ); console . log ( ` Start date : $ { formatDate ( campaign . getStartDate ())} ` ); console . log ( ` End date : $ { formatDate ( campaign . getEndDate ())} ` ); return campaign ; } else { throw new Error ( ` No shopping campaign named "${shoppingCampaignName}" found ` ); } } function formatDate ( date ) { function zeroPad ( number ) { return Utilities . formatString ( ' %02d ' , number ); } return ( date == null ) ? 'None' : zeroPad ( date . year ) + zeroPad ( date . month ) + zeroPad ( date . day ); }
Get a shopping adgroup by its name
function getShoppingAdGroupByName ( shoppingAdGroupName ) { const adGroupIterator = AdsApp . shoppingAdGroups () . withCondition ( ` ad_group . name = "${shoppingAdGroupName}" ` ) . get (); if ( ! adGroupIterator . hasNext ()) { throw new Error ( ` No ad group with name "${shoppingAdGroupName}" found ` ); } const shoppingAdGroup = adGroupIterator . next (); if ( adGroupIterator . totalNumEntities () > 1 ) { console . warn ( ` Multiple ad groups named "${shoppingAdGroupName}" found . Using the one from campaign "${shoppingAdGroup.getCampaign().getName()}" ` ); } return shoppingAdGroup ; }
Create a shopping ad group
function createElectronicsShoppingAdGroup () { // This example snippet assumes a user has a shopping campaign named // 'Shopping' and creates a new ad group named 'Electronics' in the campaign . // Please customize the snippet to suit your use case . const shoppingCampaignName = 'Shopping' ; const newAdGroupName = 'Electronics' ; const shoppingCampaign = AdsApp . shoppingCampaigns () . withCondition ( ` campaign . name = "${shoppingCampaignName}" ` ) . get () . next (); const adGroupOperation = shoppingCampaign . newAdGroupBuilder () . withName ( newAdGroupName ) . withCpc ( 0.75 ) . build (); if ( adGroupOperation . isSuccessful ()) { const adGroup = adGroupOperation . getResult (); console . log ( ` Successfully created ad group "${ adGroup . getName ()} " in campaign " $ { adGroup . getCampaign () . getName ()} "`); } else { const errors = adGroupOperation . getErrors (); console . error ( ` Creation failed with errors : $ { errors } ` ); throw new Error ( ` Failed to create ad group "${ newAdGroupName } " in campaign " $ { shoppingCampaignName } "`); } }
Create a shopping product group hierarchy
function createElectronicsProductGroups () { // This example snippet assumes a user has a shopping campaign named // 'Shopping' that includes an ad group named 'Electronics' . Please customize // the product group hierarchy to suit your use case . const shoppingCampaignName = 'Shopping' ; const shoppingAdGroupName = 'Electronics' ; const shoppingAdGroup = AdsApp . shoppingAdGroups () . withCondition ( ` campaign . name = "${shoppingCampaignName}" ` ) . withCondition ( ` ad_group . name = "${shoppingAdGroupName}" ` ) . get () . next (); const rootProductGroup = shoppingAdGroup . rootProductGroup (); // The created product group hierarchy will be // - root // - 'Cardcow' brand // - New condition // - Refurbished condition // - Other conditions // - Other brands // Add a brand product group for 'Cardcow' under the root product group . const brandNode = rootProductGroup . newChild () . brandBuilder () . withName ( 'Cardcow' ) . withBid ( 1.2 ) . build () . getResult (); // Add groups for new and refurbished Cardcow brand items . const newItems = brandNode . newChild () . conditionBuilder () . withCondition ( 'NEW' ) . build () . getResult (); const refurbishedItems = brandNode . newChild () . conditionBuilder () . withCondition ( 'REFURBISHED' ) . withBid ( 0.9 ) . build () . getResult (); }
Act on each product group in the hierarchy
function actOnAllElectronicsProductGroups () { // This example snippet assumes a user has a hierarchy of product groups under // an ad group named 'Electronics' in a shopping campaign named 'Shopping' . It // applies the function 'actOnProductGroupAndChildren' to each product group // in the hierarchy . Please customize the 'actOnProductGroupAndChildren' // function to suit your specific use case . const shoppingCampaignName = 'Shopping' ; const shoppingAdGroupName = 'Electronics' ; const shoppingAdGroup = AdsApp . shoppingAdGroups () . withCondition ( ` campaign . name = "${shoppingCampaignName}" ` ) . withCondition ( ` ad_group . name = "${shoppingAdGroupName}" ` ) . get () . next (); const rootProductGroup = shoppingAdGroup . rootProductGroup (); actOnProductGroupAndChildren ( rootProductGroup , 0 ); } function actOnProductGroupAndChildren ( productGroup , level ) { // This example function logs descriptive information about the given // productGroup and all children of the given productGroup . Please customize // the function to suit your particular use case . let description = '' ; if ( productGroup . isOtherCase ()) { description = 'Other' ; } else if ( productGroup . getDimension () == 'CATEGORY' ) { description = productGroup . asCategory () . getName (); } else { description = productGroup . getValue (); } // Note : Child product groups may not have a max cpc if it has been excluded . const padding = new Array ( level + 1 ) . join ( '-' ); console . log ( ' %s %s , %s , %s , %s , %s ' , padding , description , productGroup . getDimension (), productGroup . getMaxCpc (), productGroup . isOtherCase (), productGroup . getId () . toFixed ()); for ( const childProductGroup of productGroup . children ()) { actOnProductGroupAndChildren ( childProductGroup , level + 1 ); } }
Get the 'Everything else' product group
function getEverythingElseProductGroupForAdGroup ( shoppingAdGroupName ) { const adGroupIterator = AdsApp . shoppingAdGroups () . withCondition ( ` ad_group . name = "${shoppingAdGroupName}" ` ) . get (); if ( ! adGroupIterator . hasNext ()) { throw new Error ( ` No ad group with name "${shoppingAdGroupName}" found ` ); } const shoppingAdGroup = adGroupIterator . next (); if ( adGroupIterator . totalNumEntities () > 1 ) { console . warn ( ` Multiple ad groups named "${shoppingAdGroupName}" found . Using the one from campaign "${shoppingAdGroup.getCampaign().getName()}" ` ); } const rootProductGroup = shoppingAdGroup . rootProductGroup (); for ( const childProductGroup of rootProductGroup . children ()) { if ( childProductGroup . isOtherCase ()) { // Note : Child product groups may not have a max cpc if it has been // excluded . console . log ( ` "Everything else" product group found . Type of the product group is $ { childProductGroup . getDimension ()} and bid is $ { childProductGroup . getMaxCpc ()} ` ); return childProductGroup ; } } console . warn ( '"Everything else" product group not found under root product group.' ); return null ; }
Update bids for product groups
function updateVariousProductGroupBids () { // This example snippet modifies the bids of some product groups based on // criteria . Please modify the snippet to suit your use case . const productGroups = AdsApp . productGroups () . withCondition ( 'Clicks > 5' ) . withCondition ( 'Ctr > 0.01' ) . forDateRange ( 'LAST_MONTH' ) . get (); for ( const productGroup of productGroups ) { productGroup . setMaxCpc ( productGroup . getMaxCpc () + 0.01 ); } }
Get product ads
function getProductAdsInShoppingAdGroup ( shoppingAdGroupName ) { const adGroupIterator = AdsApp . shoppingAdGroups () . withCondition (` ad_group . name = "${shoppingAdGroupName}" `) . get (); if (! adGroupIterator . hasNext ()) { throw new Error (` No ad group with name "${shoppingAdGroupName}" found `); } const shoppingAdGroup = adGroupIterator . next (); if ( adGroupIterator . totalNumEntities () > 1 ) { console . warn (` Multiple ad groups named "${shoppingAdGroupName}" found . Using the one from campaign "${shoppingAdGroup.getCampaign().getName()}" `); } const productAdIterator = shoppingAdGroup . ads (). get (); console . log (` Ad Group "${shoppingAdGroup.getName()}" has ${ productAdIterator . totalNumEntities ()} ads `); return productAdIterator ; }
Create product ads
function createElectronicsProductAd () { // This example snippet assumes a user has a shopping campaign named // 'Shopping' that includes an ad group named 'Electronics' . Please customize // the snippet to suit your use case . const shoppingCampaignName = 'Shopping' ; const shoppingAdGroupName = 'Electronics' ; const shoppingAdGroup = AdsApp . shoppingAdGroups () . withCondition ( ` campaign . name = "${shoppingCampaignName}" ` ) . withCondition ( ` ad_group . name = "${shoppingAdGroupName}" ` ) . get () . next (); const adOperation = shoppingAdGroup . newAdBuilder () . withMobilePreferred ( true ) . build (); if ( adOperation . isSuccessful ()) { const productAd = adOperation . getResult (); console . log ( ` Successfully created product ad in ad group "${ productAd . getAdGroup () . getName ()} "`); } else { const errors = adOperation . getErrors (); console . error ( ` Creation failed with errors : $ { errors } ` ); throw new Error ( ` Failed to create product ad in ad group "${shoppingAdGroupName}" ` ); } }

