You are here

AdWords Dynamic Parameters: A Sneaky Way to Double Your CTR

April 08, 2014

Ad text relevancy is important to keeping your audience engaged, and in some cases can dramatically improve key metrics like click-through rate (CTR). Whether it’s advertising your latest promotion, lowest sale price, or resonating with an audience interested in up-to-date stock prices, there are many scenarios when switching up your ad text is not only valuable but imperative.

Constantly updating ad text has its challenges. Keeping up with these updates can be time-consuming, especially for large accounts. Additionally, ad text updates are not always timely as they need to go through the Google review process which can take up to 24 hours. When a last-minute promotion only lasts a day, the update to your ad text can become moot as it may never reach the SERP. A great workaround to update ad copy in a timely manner is through utilizing dynamic parameters.

Not only can dynamic parameters expedite ad copy updates, but they can also improve key metrics in your account. On average, we have seen CTR double in ad groups where we’ve tested dynamic parameter implementation. One of our success stories lies with a gold buyer. The price of gold changes daily, and can greatly impact a consumer’s decision as to whether or not to sell their gold. As a test, we started pulling the daily gold price into our ad copy with a dynamic parameter.

The results were fantastic. Over one month, we saw CTR increase from 0.84% to 1.75%; a 107% improvement. What’s even better is that we saw conversions increase by 300%, indicating that the quality of the traffic sent to the site was high, and that visitors were farther down the decision-making funnel.

How to Set Up Dynamic Parameters in AdWords

Dynamic Parameters can be set up using an AdWords script. For the non-developers out there, we broke down the process:

  1. Select the ad group(s) where you would like to implement dynamic parameters. I would recommend starting with one to ensure everything’s pulling through correctly.
  2. Create a text ad within the selected ad group around the dynamic text that you’ll be pulling into the ad. Something like this:

google dynamic parameters

The parameter is set up similar to dynamic keyword insertion. Put a default number into the param in the event that there is not a value to pull through the script (in the example above, the default value is 10).

  1. Create a live Google doc where you will store your data. The doc should have 3 columns (or 4 if you’d like to test 2 parameters). It should look something like this:

how to use dynamic parameters

The param1 info is where you will update your data. In this case, we are changing the dog collar price to $5.50.

  1. Next, set up the AdWords script. Within AdWords, go to Bulk operations > Scripts

adwords dynamic parameters

And click the +Script button.

  1. Copy and paste the following script (update the highlighted section with the full link to your Google doc created in Step 3):
* Update Ad Params by Ad Groups
var SET_PARAM1 = true;
var SET_PARAM2 = false;
var DATA_RANGE = 'A:D'; // A - CampaignName, B - AdGroupName, 
                        // C - Param1, D - Param2
function main() {
  var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
  var allSheets = spreadsheet.getSheets();
  var allData = [];
  for(var i in allSheets) {
    var sheet = allSheets[i];
    var data = sheet.getRange(DATA_RANGE).getValues();
    data.shift(); //get rid of headers
    allData = allData.concat(data);
  var allDataHash = {};
  for(var i in allData) {
    var row = allData[i];
    if(row[0] === '') { continue; }
    var rowKey = [row[0],row[1]].join('~~!~~');
    allDataHash[rowKey] = { param1 : row[2], param2: row[3] };
  var kwIter = AdWordsApp.keywords()
    .withCondition('CampaignStatus = ENABLED')
    .withCondition('AdGroupStatus = ENABLED')
    .withCondition('Status = ENABLED')
  while(kwIter.hasNext()) { 
    var kw =;
    var campName = kw.getCampaign().getName();
    var adGroupName = kw.getAdGroup().getName();
    var rowKey = [campName,adGroupName].join('~~!~~');
    if(allDataHash[rowKey]) {
      if(SET_PARAM1) { kw.setAdParam(1, allDataHash[rowKey].param1); }
      if(SET_PARAM2) { kw.setAdParam(2, allDataHash[rowKey].param2); }
  1. Authorize your script, and then run it! You can set up a schedule for your script to run daily, weekly, etc. to fit your needs.

And, voila! The result will load with your ad modified for how it is queried on the SERP:

dynamic parameters example

Key Takeaways

In our tests, AdWords dynamic parameters have proven to be an extremely effective and easy to way to improve your ad performance. Dynamic parameters:

  • Keep your ad text timely without the need for approval
  • Ensure that your ads are as relevant as possible to users
  • Increase click-through rate, conversion rate and Quality Score


Mike Peters
Apr 08, 2014

This sort of thing is exactly what I want to do with my eComm account. We change prices on items virtually daily so if I can set this up to run automatically it will save me tons of time.

I followed the guide here but it seems when I preview my script it runs indefinitely picking up hundreds of changes whereas it should just be changing one ad for the purposes of my test. Any idea why it would hang up like this?

Jaclyn Jordan
Apr 10, 2014

Hi Mike,

Thanks for testing out the script. The script attempts to change every ad in the adgroup listed if that ad contains param1. I've been trying to troubleshoot what you're seeing and cannot reproduce your error. The drop-off may be in the setup. Please feel free to reach out directly at to help further diagnose the issue.


Apr 09, 2014

This is great. I never knew how this was done before. Many thanks for posting.

Sarmista Aun
Apr 09, 2014

Hi Jaclyn,

                Thanks for sharing the steps of setting dynamic parameters in AdWords. It is truely effective.

Stephen Kapusta
Apr 16, 2014

Hey Jaclyn, 

This script is great, but it would be recommended to point out that only numerical values are supported.


Jun 17, 2014

Hi there Jordan,

Very interesting post, concise and well writen thanks for posting! Do you know if it is possible to do this on Sitelinks level? Imagine having your 4 post links with dynamic prices for similar products... Nice :)


Jun 20, 2014

Thanks indeed for this excellent script.

As Google docs aren't always 100% reliable is there a way to get an email if the script encounters errors when run?



Jul 03, 2014


Thanks for sharing it. I have just set up it and it works fine! ;-)

I think if you want to use also the param2 for some adverts, the script should change the line: var SET_PARAM2 = false 

Replacing false by true, but then, there are some "error" on the adverts withouth param2. 

Would be it ok? Do you know if there is any other way to do it?




Erik González
Nov 26, 2014

Thank you very much for the script guys! It works perfectly :)

Just one question: Do I have to run it manually every time I want to update prices or is there any way I can get it to run automatically, lets say every Monday for instance.


Leave a Comment