About dynamic promotions

Dynamic promotions helps retailers by automatically selecting the optimal coupon or promotion and applying it to Shopping ads on Google to maximize gross profit. Dynamic promotions uses the information provided by you about the cost of goods sold (COGS) for your inventory, discount promotions, and feedback on conversions to present the best suited promotion to customers using Google’s AI powered price modeling.

This product is still in beta. If you’re interested, reach out to [email protected].

On this page


Benefits

Google pricing models automatically determine the optimal promotional discount that produces the highest gross profit. Dynamic promotions helps you by:

  • Automating promotions with real-time discounts optimization, saving time and effort.
  • Improving return on ad spend (ROAS) and profitability.
  • Updating promotions with best suited discounts across Shopping ads and your site’s landing pages with the help of Google’s high scale pricing models.

Eligibility criteria for dynamic promotions

Before you can use dynamic promotions, make sure you meet all eligibility requirements. If you have multiple Merchant Center (sub) accounts, each account must fulfill all requirements separately.

  • Country availability of dynamic promotions is limited to those countries where the regular promotions tool is available. For a full list of countries, refer to the "Availability" section of Participation criteria and policies.
  • At least 1,000 consumer clicks across the entire inventory of your Merchant Center account.
  • At least 20% of your product impressions is opted in by populating the [auto_pricing_min_price] and [cost_of_goods_sold] attributes. If you need more information about the impression coverage of your products, refer to the Performance report in your Merchant Center. To get you started, you can set:
    • [auto_pricing_min_price] attribute to <= 95% of the [price] and >= [cost_of_goods]. Check details below.
      • [cost_of_goods] < [auto_pricing_min_price] and >= 5% [price]
    • Conversion tracking with cart data. Check more implementation details here.
  • Your website integration must be able to accept and honor Google-provided coupons from Google-generated JSON web tokens.
  • Allow Google to show opted-in products to consumers with a performance-based ramp up of 10% for the first 3 days and 90% after.

How dynamic promotions works

Dynamic promotions helps merchants automate selection and application of best suited discounts to the products in Shopping ads to increase gross profit.

Merchants must provide: Intended discount percentage, cost of goods sold for your inventory, and conversion data. Using that data, Google’s AI powered price modeling automates promotions decisions, selecting the optimal promotion for all opted-in products. Dynamic promotions works in the following order:

  1. Merchants upload promotions and coupons to Merchant Center along with required information.
  2. Promotions are displayed to consumers on Shopping surfaces, improving performance
  3. Shoppers apply those promotions in the merchant’s eStore at checkout time.

Google uses AI algorithms to continuously optimize coupons based on market signals such as:

  • Price competitiveness
  • Price elasticity
  • Seasonality trends
  • Estimated delivery day
  • Brand value
  • Shipping cost

Adjusted sale prices will be shown in Shopping ads (channel-based discounting) and will be passed securely to display the same price on the product landing page in your online store.

Your products will be displayed as on “sale” with a strikethrough price.

Note: We calculate overall gross profit impact by taking into account sale of all the items purchased in the same session, including discounted and non-discounted products, when a shopper clicks on a dynamic promotions ad.

URL coupon passing

When a shopper clicks on your dynamic promotions listing, they're redirected to your product’s landing page. Your website needs to display the coupon on the landing page to match the strikethrough price shown on Google, preferably next to the product price.

Product landing page of a green candle with the original price crossed out and sale price in red.

To display the coupon on your landing page, the dynamic promotions generated clickthrough URL passes coupon information as a parameter. The URL is encoded in JSON Web Token that can be decoded with a base64 decoder and used as it.

Below is an example clickthrough URL with pv2 parameter used for passing coupon information:

https://yourwebsite.html?pv2=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjIjoiRVVSIiwiZXhwIjoxNjg0NDE2ODk5LCJtIjoiMTIzNDU2IiwibyI6IjY1NDMyMSIsInAiOjE0LjA2LCJkcCI6MTIsImRjIjoiTktMRVdBT0kifQ.D0dYYxnqki8aUnlPKFM-sFcHxSzu1HJ9v9wOGXGk2Lw

The encoded token contains 2 relevant field for price passing:

  • dp – represents the discount percentage
  • dc – represents the coupon code

Example:

"dp": 10,

"dc": "RHNKLNEQ"

// 10% percent discount

// coupon code = RHNKLNEQ

Note: Coupons are dynamically generated and aren’t assigned to individual shoppers. They're updated for everyone several times a day.

Example coupon passing code

// Example code validating and decoding Google Automated Discounts pv2 token.
// Displays the coupon on the top of the website after running the script.
// To run:

// 1. Open website with pv2 token in Chrome e.g. https://yourwebsite.html?pv2=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjIjoiRVVSIiwiZXhwIjoxNjg0NDE2ODk5LCJtIjoiMTIzNDU2IiwibyI6IjY1NDMyMSIsInAiOjE0LjA2LCJkcCI6MTIsImRjIjoiTktMRVdBT0kifQ.D0dYYxnqki8aUnlPKFM-sFcHxSzu1HJ9v9wOGXGk2Lw

// 2. Right click on site -> inspect element

// 3. Go to "Console" tab

// 4. Paste the whole script to the console and click enter

 

// Google public key used for signing Automated Discounts pv2 tokens

const google_public_key = `-----BEGIN PUBLIC KEY-----

MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERUlUpxshr67EO66ZTX0Fpog0LEHc

nUnlSsIrOfroxTLu2XnigBK/lfYRxzQWq9K6nqsSjjYeea0T12r+y3nvqg==

-----END PUBLIC KEY-----`

 

// const verify_signature = true  // use to verify the token signature

verify_signature = false  // use for non-google tokens

 

function verifyAutomatedDiscountTokenCorrectness(jwt) {

  console.log("verifyAutomatedDiscountTokenCorrectness")

  if (jwt == null) {

    console.log("error: no JWT")

    return false

  }

 

  const current_page_offer = "654321" // TODO: get offer_id of the current page

  const expected_merchant_id = "123456"  // TODO: use real Merchant Center ID

 

  const jwt_offer = jwt.o

  const jwt_merchant = jwt.m

  const jwt_expiry_date = Date(jwt.exp)

 

  if (jwt_offer != current_page_offer) {

    console.log("error: incorrect offer id:", jwt_offer, " vs", current_page_offer)

    return false

  }

  if (jwt_merchant != expected_merchant_id) {

    console.log("error: incorrect merchant id", jwt_merchant, " vs", expected_merchant_id)

    return false

  }

  if (Date() < jwt_expiry_date) {

    console.log("error: expired token")

  }

 

  return true

}

 

function displayAutomatedDiscountLitePricePassingCoupon(jwt) {

  if (!verifyAutomatedDiscountTokenCorrectness(jwt)){

    return

  }

 

  const discount_percent = jwt.dp

  const coupon_code = jwt.dc

 

  if (discount_percent == undefined) {

    console.log("error: missing discount percentage")

    return

  }

 

  if (coupon_code == undefined) {

    console.log("error: missing coupon code")

    return

  }

 

  // TODO: set a proper place in which the coupon should be displayed

  let target_element = document.getElementsByTagName("body")[0]

  target_element.innerHTML = `<div><h1><font color="red">-${discount_percent}% with coupon: ${coupon_code}</font></h1></div>` + target_element.innerHTML

}

 

function parseJwtAndDisplayCoupon()

{

  const urlParams = new URLSearchParams(window.location.search)

  const jwt = urlParams.get('pv2')

 

  if (jwt == undefined){

    console.log("error: pv2 parameter is not in the URL")

    return

  }

 

  // Use Jose (https://github.com/panva/jose) library to validate and decode JWT token.

  fetch('https://cdnjs.cloudflare.com/ajax/libs/jose/4.14.0/index.umd.min.js')

      .then(response => response.text())

      .then(text => eval(text))

      .then(() => {

        jose.importSPKI(google_public_key, 'ES256').then(publicKey => {

          if (verify_signature) {

            jose.jwtVerify(jwt, publicKey).then(

                (decoded_jwt, _) => {

              displayAutomatedDiscountLitePricePassingCoupon(decoded_jwt.payload)

            })

          }

          else {

            displayAutomatedDiscountLitePricePassingCoupon(jose.decodeJwt(jwt))

          }

        })

      })

}

 

parseJwtAndDisplayCoupon()

Instructions to set up dynamic promotions

You can set up dynamic promotions for your products by following these steps sequentially or in parallel:

Step 1 of 4: Provide auto pricing minimum price [auto_pricing_min_price]

  • Pricing minimum price [auto_pricing_min_price] attribute is used to set a minimum price to which a product's price can be reduced by pricing rules you create in your Merchant Center account.
  • Learn how to set Auto pricing minimum price [auto_pricing_min_price].
  • You may provide this attribute via a supplemental feed or feed rules in your Merchant Center or through the API.
  • Keep in mind that the maximum price is the regular [price] or [sale_price] provided in your product feed and the minimum price is the value you provided in the [auto_pricing_min_price] attribute. Google will optimize the coupon value between those 2 limits. Google will also generate the coupon at a given time only for those products in your inventory that benefit the overall goal of maximizing profit across your entire inventory, taking cross-sell and cannibalization effects into account.

Step 2 of 4: Provide cost of goods (COGS) [cost_of_goods_sold]

Cost of goods sold data is used to calculate an estimated gross profit of your products. Without COGS, we won’t be able to calculate optimal coupon discounts and gross profit for items sold. Provide COGS information for as much inventory as possible to help Google deliver better profitability for the sales of your products.

Learn how to set up Cost of goods (cogs) [cost_of_goods_sold].

Note: If you’d prefer not to provide a specific COGS for each item, you can specify a margin percentage for COGS using a supplemental feed in Merchant Center. This can be applied to individual items or categories of items.

You may provide this attribute via a supplemental feed or feed rules in your Merchant Center or through the API.

Step 3 of 4: Set up reporting conversions with cart data

Conversion with cart data reporting is used to calculate the impact of dynamic promotions and provide you best results. Set up conversion with cart data reporting to submit cart data which will allow you to track the number of transactions, revenue, and profit generated by your dynamic promotions.

Set up reporting conversion with cart data to:

  • Clearly measure revenue and profit generated by your dynamic promotions.
  • View detailed reporting on cart size and average order value.
  • View detailed reporting on items sold.

Learn how to Set up and test reporting with conversions with cart data.

Step 4 of 4: Set up coupons

The coupons used by dynamic promotions have to be configured and set up just like any other promotion in Merchant Center or the promotions feed. Set up Merchant promotions on Shopping Ads.

Note: Dynamic promotions is subject to Promotions feed specification and Promotions policies.

Dynamic promotions is intended to be used as "percentage off" or "money off" promotions for online offers, so certain attributes for dynamic promotions should be configured as follows:

Attribute

Required

promotion_id

Must start with "spd_" prefix

offer_type

Must be set to "generic_code"

redemption_channel

Must be set to "Online"

promotion_destination

Must be set to "Shopping_ads"

generic_redemption_code

Must be specified

percent_off OR money_off_amount

Must be specified

In addition to the above fields, other fields marked as required need to be specified.


Google review

After the implementation steps have been completed, request Google to conduct a full review by clicking Request verification. The review will go through end-to-end testing that covers multiple scenarios. It’ll be completed within the Google Network to ensure the integration is functioning correctly. Any open issues will be displayed on the last setup page. Allow up to 24 hours for updates after you made a change.

If there are issues found, resolve the issue and submit a follow-up review request by clicking the button again. You’ll have to resubmit review requests until all issues have been resolved.

After Google reviews and approves your account, you’ll be able to monitor your performance in the “Automated discounts” tab, as well as pause and activate the generation of optimized sale prices with only a click on the button.

Launch schedule

Ramp-up

After your review is complete, the ramp-up process starts according to the schedule below.

Ramp-up schedule

  1. First stage: Optimized coupons shown to 10% of customers.
  2. Second stage: Optimized coupons shown to 90% of customers.

You can check your ramp-up percentage in Merchant Center at any time by navigating to the “Automated discounts” tab under "Marketing".


Best practices

  • Provide as many discount values as possible

    Dynamic promotions selects the optimal discount from the discount values provided. So having from 1 to 10 possible discount values or more will allow the best gross profit uplift. For example, you provided 5%, 10%, and 20% as discount values. If the optimal discount calculated is 8%, then the 5% coupon will be selected, limiting effectiveness. In this situation, providing 5%, 7%, 9%, 11%, 13%, up to 20% discount values would be best.

  • Avoid using coupon codes that are easy to guess

    Avoid using common coupon codes like "5OFF", "10OFF", and more. Shoppers may guess common coupon codes and apply them for maximum discount, causing undesired results.

  • Limit time frame and product applicability

    To limit coupon reuse, you can limit the duration each coupon is valid for. Use promotion start date [promotion_effective_dates] attribute to set a timeframe for the promotion. Although dynamic promotions work best when associated with the majority of inventory, you can consider creating category-specific coupons.

Frequently asked questions

  1. How does dynamic promotions work with tROAS setting in Google Ads?

    Dynamic Promotions works best when tROAS bidding is enabled, but they don’t require tROAS.

  2. Can a merchant mix money off and percent off promotions?

    Yes. While a specific feed row can’t have both a [percent_off] and [money_off_amount] attribute set at the same time, separate promotions can be configured for the same product with money and percent off discounts.

  3. What factors are considered when choosing what promotions from the range to show?

    Google’s AI considers many factors and data sets to decide the right product discount. One of the main inputs we use to understand the right discount is the demand curve and price elasticity.

  4. Is there a minimum and/or maximum requirement within which the percent off or money off value must adhere to?

    There are no minimum or maximum discount requirements for the promotions.

  5. Can the promotion destination be set to both Shopping ads and free listings?

    Currently, only Shopping Ads are supported. We're continuously working to expand the availability of dynamic promotions to expand the impact for merchants and shoppers.

  6. What if my coupons have a minimum order value?

    Coupons with minimum order value are supported.

  7. Can a merchant specify a margin percentage for cost of goods sold (COGS) instead of providing a specific value for every offer?

    Yes, a merchant can specify a margin percentage for COGS using a supplemental feed in Merchant Center.

  8. Does dynamic promotions work with Performance Max campaigns?

    Dynamic promotions currently only applies to Shopping ads, but is compatible with Performance Max. This means that it works with Performance Max campaigns, but the promotions will only appear on the Shopping ads run by the Performance Max campaign.

  9. How is dynamic promotions different from the automated discounts program?

    Both programs are powered by similar models. Dynamic promotions offers a much lighter integration requirement for price passing or landing pages.

  10. I have a single MCID account but multiple product feeds for different countries. Can I opt in products from different countries?

    You may opt in products by adding the [auto_pricing_min_pricing] attribute for the countries of your preference. Performance reporting will show data across all countries in aggregate, but you’re currently not able to filter by a specific country.

Related links

Was this helpful?

How can we improve it?
Search
Clear search
Close search
Google apps
Main menu
15230183269754747882
true
Search Help Center
true
true
true
true
true
71525
false
false