AdWords Dynamic Parameters: A Sneaky Way to Double Your CTR


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

Check out some more great AdWords scripts here.

Find out how you're REALLY doing in AdWords!

Watch the video below on our Free AdWords Grader:

Visit the AdWords Grader.


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.Thanks!

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.Cheers

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 :)Cheers

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?Thanks! 

Jul 03, 2014

Hi, 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?Thanks!!!Laura 

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.Cheers!

Apr 08, 2015


I upload all of my 4000+ products to Google Merchant Centre and that pricing is up-to-date. Is it possible to extract the price from a product ID within there?



Apr 11, 2015

Hi again, I spoke to Google and they said that it was a good idea but no one had developed a feature where Shopping data can be extracted for use in Adwords.

Since I already have an XML feed that my system generates and uploads to Google Merchant Centre, can this code be edited to extract pricing from there instead of Google Docs?

Thanks again


Apr 12, 2015

We've worked out how to do this. Just one question...

If the keyword is longer than the 25 character headline limit I've read that you can use KeyWord to get around the limit. (Anyone know how many more characters you can get away with?)

This got me thinking...

I've got a campaign called TN2220 (it's a Brother toner). I've got loads of AdGroups each with one keyword.

Rather than replicating the keyword in the headline box what about just putting "{KeyWord:Brother TN2220 Toner}"?

Does Google prefer to see the headline manually typed in and matching the keyword or is it happy to see that I'm asking for a perfect match using the KeyWord parameter?

If it makes no difference, using KeyWord is a bit easier to mass duplicate a load of identical AdGroups and go through and change the keyword for each one.



Jul 14, 2015


Can I use this same procedure to dynamically update Bing Ad pricing? I spoke to them but they had no idea.



Oct 13, 2015

Hi Jordan,

This script is valid only for 50000 max keyword list. do you have any solution for keyword list more than 50000, how can i use dynamic pricing where list is exceeding 50000 Limit??

Many thanks

Mar 30, 2016

This is awesome! Do you know a way to preview that everything's pulling through correctly while ads are paused?

Mar 30, 2016

This is awesome! Do you know a way to preview that everything's pulling through correctly while ads are paused?

Orlando Valencia
Jul 28, 2016

Can we do this so we're updating more frequently? Say every hour? I'd like to try this for updating stock prices on my ads.

Oct 06, 2016

Hi there,

I'm trying this out where I am using TWO dynamic params (param2 & param3) within Expanded Text Ads. I'm running into the issue "Value exceeds the allowed maximum" and I'm wondering if this is because (1) I'm using two dynamic parameter fields (2) it's using old character limits or (3) because I'm using a promo code which contains letters & numbers (i.e.: SAVE10)? The entire ad is still within character limits if you ignore the dynamic parameter characters.

Thanks in advance,

Jun 05, 2017

Hi There,

Thanks for this article ! Is it possible to use more than 2 param by account ?

I would like to use a {param3 : ***} etc...

Thanks !

Leave a comment