[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"cms-page:\u002Fresources\u002Ftools\u002Fgoogle-ads-campaign-optimisation":3},{"date":4,"date_gmt":4,"content":5,"categories":7,"coauthors":9,"class_list":11,"acf":19,"head_links":310,"breadcrumbs":311,"head":319},"2021-06-14T16:00:00",{"rendered":6},"\n\u003Cp>Automatically add high-performing search queries as keywords to your paid search campaign. This script looks through your account, finds any converting search queries that would make great keywords and automatically adds them to your account. Sounds as good as it is.\u003C\u002Fp>\n\n\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"why-did-we-create-this-script\">Why did we create this script?\u003C\u002Fh2>\n\n\n\n\u003Cp>No matter how much keyword research you do, you can never be 100% sure what people are going to type into Google. Since people are always searching for things in different ways, there’s plenty of potential traffic that isn’t targeted every day, simply because those long-tail searches are not being targeted.&nbsp;\u003C\u002Fp>\n\n\n\n\u003Cp>This is why we created this script (affectionately referred to as “Dave” at Impression HQ, find out why at the bottom of this post). It works by scouring an account, finding keywords that both convert and are being actively searched for by users and adding them into a campaign for you. The script constantly monitors all of the search terms existing in the account and adds new, high-performing keywords in seconds, based on parameters set by you. Jump straight to the code here.\u003C\u002Fp>\n\n\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"the-script\">The script\u003C\u002Fh2>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\n\u002F*******************************************************************************\n*\n* &#91;DAVE] Query To Keyword\n* Author: Lauren Capon (@PPCLoz) &amp; Nathan Ifill (@nathanifill), Impression\n*\n* This script adds search terms with a cost per acquisition (CPA) lower than\n* target as either an exact, phrase or broad match modifier keyword.\n*\n* v1.15\n*\n* Any suggestions? Email nathan.ifill@impression.co.uk\n*\n* Change History:\n* v1.15\n* - NI changed broad match modifier to broad keywords\n* - NI added options for default match types to add if no names are found\n* \n* v1.14\n* - NI changed Broad keywords to add unmodified broad keywords\n*\n* v1.13\n* - NI added label to DAVE-added keywords\n*\n* v1.12\n* - NI stopped email sending if there are no new keywords\n*\n* v1.11\n* - NI added another fix to avoid DSA search terms because the first one in\n* version 1.8 was clearly rubbish and didn't work\n*\n* v1.10\n* - NI added a clean log\n*\n* v1.9\n* - NI added impressions as a metric\n* - NI added email option to send log once finished\n*\n* v1.8\n* - NI added more stats and details to output - campaign, ad group, clicks, ctr,\n* conv. rate, CPA, revenue, roas\n* - NI added fix to avoid DSA campaigns and ad groups\n* - NI fixed target CPA to be less than or equals to instead of just less than\n*\n* v1.7\n* - NI added parseInt functions to parse CPAs and CPCs and integers\n* - NI added support for minimum number of conversions\n*\n* v1.6\n* - NI added function to add keywords with bid set to average CPA\n* - NI added error handling for keywords which are longer than 80 chars\n* - NI added error handling for keywords with more than 10 words\n*\n* v1.5\n* - NI added support for phrase match\n*\n* v1.4\n* - NI added BMM and exact split\n*\n* v1.3\n* - NI restricted selection to search queries which have not been added or\n* excluded in enabled ad groups and campaigns\n*\n* v1.2\n* - NI added new longQuery to speed up script and extend lookback period\n*\n* v1.1\n* - LC fixed CPA bug\n*\n*******************************************************************************\u002F\n\u002F******************************************************************************\u002F\u002F*                           SEARCH TERM CRITERIA                             *\u002F\u002F******************************************************************************\u002F\n\u002F\u002F Below you can set the criteria that each converting search term must meet \n\u002F\u002F before DAVE adds it as a keyword. You must set all four criteria as only \n\u002F\u002F search terms which meet all four will be added.\n\n\u002F\u002F If you'd like to add the most amount of keywords possible, set ma\n\nvar maxCPA = 100;\n\u002F\u002F Enter the maximum all-time CPA the search term requires above.\n\u002F\u002F To only consider search terms with a £10 CPA, enter 10. To only consider\n\u002F\u002F search terms with a £1.50 CPA, enter 1.50.\n\u002F\u002F Example: var maxCPA = 10;\n\u002F\u002F Example: var maxCPA = 1.50;\n\nvar minROAS = 0;\n\u002F\u002F Enter the minimum all-time ROAS the search term requires above.\n\u002F\u002F To only consider search terms with at least a 3.5:1 all-time ROAS, enter 3.5.\n\u002F\u002F To only consider search terms with at least a 5 to 1 all-time ROAS, enter 5.\n\u002F\u002F Example: var minROAS = 3.5;\n\u002F\u002F Example: var minROAS = 5;\n\nvar minImpressions = 0;\n\u002F\u002F Enter the minimum number of all-time impressions the search term requires\n\u002F\u002F above as an integer. To only consider search terms with 2 or more\n\u002F\u002F all-time impressions, enter 2.\n\u002F\u002F Example: var minImpressions = 2;\n\nvar minConversions = 0.01;\n\u002F\u002F Enter the minimum number of all-time conversions the search term requires\n\u002F\u002F above. To only consider search terms with 2 or more all-time conversions,\n\u002F\u002F enter 2. To only consider search terms with 0.5 or more all-time\n\u002F\u002F conversions, enter 0.5.\n\u002F\u002F Example: var minConversions = 2;\n\u002F\u002F Example: var minConversions = 0.5;\n\n\u002F******************************************************************************\u002F\u002F*                            MATCH TYPE DEFAULTS                             *\u002F\u002F******************************************************************************\u002F\n\u002F\u002F If a campaign or ad group has a match type in its name, e.g. \"broad\", \"phrase\",\n\u002F\u002F \"exact\", then DAVE will only add keywords with those match types. The section\n\u002F\u002F below allows you to specify which match types to add by default if there is no \n\u002F\u002F such name for guidance in the campaign or ad group name.\n\nvar addBroadKeywordsByDefault = false;\n\u002F\u002F If set to true (with no speech marks), DAVE will add any converting search \n\u002F\u002F terms that meet the criteria in the previous section as broad match keywords \n\u002F\u002F in the same ad group UNLESS the ad group or campaign contains \"phrase\" or \n\u002F\u002F \"exact\" in its name.\n\u002F\u002F\n\u002F\u002F Examples:\n\u002F\u002F var addBroadKeywordsByDefault = true;\n\u002F\u002F var addBroadKeywordsByDefault = false;\n\nvar addPhraseKeywordsByDefault = false;\n\u002F\u002F If set to true (with no speech marks), DAVE will add any converting search \n\u002F\u002F terms that meet the criteria in the previous section as phrase match keywords \n\u002F\u002F in the same ad group UNLESS the ad group or campaign contains \"broad\" or \n\u002F\u002F \"exact\" in its name.\n\u002F\u002F\n\u002F\u002F Examples:\n\u002F\u002F var addPhraseKeywordsByDefault = true;\n\u002F\u002F var addPhraseKeywordsByDefault = false;\n\nvar addExactKeywordsByDefault = true;\n\u002F\u002F If set to true (with no speech marks), DAVE will add any converting search \n\u002F\u002F terms that meet the criteria in the previous section as phrase match keywords \n\u002F\u002F in the same ad group UNLESS the ad group or campaign contains \"broad\" or \n\u002F\u002F \"phrase\" in its name.\n\u002F\u002F\n\u002F\u002F Examples:\n\u002F\u002F var addExactKeywordsByDefault = true;\n\u002F\u002F var addExactKeywordsByDefault = false;\n\n\n\u002F******************************************************************************\u002F\u002F*                              EMAILS AND LABELS                             *\u002F\u002F******************************************************************************\u002F\nvar yourEmail = \"\";\n\u002F\u002F Enter your email above if you'd like to be emailed the log when the script\n\u002F\u002F has finished running. If you'd rather not receive the email log, leave this\n\u002F\u002F blank. You can add multiple emails using commas, if you want.\n\u002F\u002F Example: var yourEmail = \"james.jameson@impression.co.uk\";\n\u002F\u002F Example: var yourEmail = \"dave@impression.co.uk, becky@impression.co.uk\";\n\nvar keywordLabel = \"DAVE\";\n\u002F\u002F Enter the label that you want applied to keywords which have been added by\n\u002F\u002F DAVE.\n\u002F\u002F Example: var keywordLabel = \"DAVE\";\n\u002F\u002F Example: var keywordLabel = \"Automatically Added\";\n\n\u002F******************************************************************************\u002F\u002F*                       DON'T TOUCH THE STUFF BELOW                          *\u002F\u002F******************************************************************************\u002F\nminImpressions--;\nminConversions -= 0.01;\nminROAS -= 0.01;\n\nvar fullCleanLog = \"\"; \u002F\u002F initialise fullCleanLog\nvar keywordCount = 0; \u002F\u002F intialise keyword count\n\nfunction main() {\n  labelMaker(); \u002F\u002F runs the label maker if needed\n\n  cleanLog(\"---- ADDING NEW KEYWORDS BASED ON CAMPAIGN AND AD GROUP NAMES ----\");\n  cleanLog(\" \");\n\n  \u002F\u002F Campaign Broad\n  var broadCampaignReport = gimmeMyReport(\"Campaign\", \"Broad\");\n  cpaCheck(broadCampaignReport, \"broad\");\n  cleanLog(\" \");\n\n  var bmmCampaignReport = gimmeMyReport(\"Campaign\", \"BMM\");\n  cpaCheck(bmmCampaignReport, \"broad\");\n  cleanLog(\" \");\n\n  \u002F\u002F Ad Group Broad\n  var broadAdGroupReport = gimmeMyReport(\"Ad Group\", \"Broad\");\n  cpaCheck(broadAdGroupReport, \"broad\");\n  cleanLog(\" \");\n\n  var bmmAdGroupReport = gimmeMyReport(\"Ad Group\", \"BMM\");\n  cpaCheck(bmmAdGroupReport, \"broad\");\n  cleanLog(\" \");\n\n  \u002F\u002F Campaign Phrase\n  var phraseCampaignReport = gimmeMyReport(\"Campaign\", \"Phrase\");\n  cpaCheck(phraseCampaignReport, \"phrase\");\n  cleanLog(\" \");\n\n  \u002F\u002F Ad Group Phrase\n  var phraseAdGroupReport = gimmeMyReport(\"Ad Group\", \"Phrase\");\n  cpaCheck(phraseAdGroupReport, \"phrase\");\n  cleanLog(\" \");\n\n  \u002F\u002F Campaign Exact\n  var exactCampaignReport = gimmeMyReport(\"Campaign\", \"Exact\");\n  cpaCheck(exactCampaignReport, \"exact\");\n  cleanLog(\" \");\n\n  \u002F\u002F Ad Group Exact\n  var exactAdGroupReport = gimmeMyReport(\"Ad Group\", \"Exact\");\n  cpaCheck(exactAdGroupReport, \"exact\");\n  cleanLog(\" \");\n\n  \u002F\u002F DEFAULTS\n\n  cleanLog(\"---- ADDING DEFAULT MATCH TYPES ----\");\n  cleanLog(\" \");\n\n  var report = AdWordsApp.report(\n    \"SELECT Query, Conversions, Cost, AdGroupId, QueryTargetingStatus,\"\n    + \" CampaignStatus, AdGroupStatus, CampaignName, AdGroupName, Impressions,\"\n    + \" Clicks, Ctr, ConversionRate, CostPerConversion, ConversionValue,\"\n    + \" QueryMatchTypeWithVariant, KeywordTextMatchingQuery, AverageCpc\"\n    + \" FROM SEARCH_QUERY_PERFORMANCE_REPORT\"\n    + \" WHERE Conversions &gt; \"  + minConversions\n    + \" AND QueryTargetingStatus = 'NONE' AND\"\n    + \" CampaignStatus = 'ENABLED' AND AdGroupStatus = 'ENABLED'\"\n    + \" AND Impressions &gt; \" + minImpressions\n    + \" AND KeywordTextMatchingQuery DOES_NOT_CONTAIN 'URL=='\"\n    + \" AND KeywordTextMatchingQuery DOES_NOT_CONTAIN 'CATEGORY=='\"\n    + \" AND KeywordTextMatchingQuery != '*'\"\n    + \" AND CampaignName DOES_NOT_CONTAIN_IGNORE_CASE 'broad'\"\n    + \" AND CampaignName DOES_NOT_CONTAIN_IGNORE_CASE 'bmm'\"\n    + \" AND CampaignName DOES_NOT_CONTAIN_IGNORE_CASE 'phrase'\"\n    + \" AND CampaignName DOES_NOT_CONTAIN_IGNORE_CASE 'exact'\"\n    + \" AND AdGroupName DOES_NOT_CONTAIN_IGNORE_CASE 'broad'\"\n    + \" AND AdGroupName DOES_NOT_CONTAIN_IGNORE_CASE 'bmm'\"\n    + \" AND AdGroupName DOES_NOT_CONTAIN_IGNORE_CASE 'phrase'\"\n    + \" AND AdGroupName DOES_NOT_CONTAIN_IGNORE_CASE 'exact'\"\n  );\n\n  \u002F\u002F If broad keywords are flagged, add broad keywords\n\n  if (addBroadKeywordsByDefault) {\n    cpaCheck(report, \"broad\");\n    cleanLog(\" \");\n  }\n\n  \u002F\u002F If phrase keywords are flagged, add broad keywords\n\n  if (addPhraseKeywordsByDefault) {\n    cpaCheck(report, \"phrase\");\n    cleanLog(\" \");\n  }\n\n  \u002F\u002F If exact keywords are flagged, add broad keywords\n\n  if (addExactKeywordsByDefault) {\n    cpaCheck(report, \"exact\");\n    cleanLog(\" \");\n  }\n\n  if (keywordCount &gt; 0) {\n    try {\n      var subject = \"&#91;DAVE] Keyword Report for \" + AdsApp.currentAccount().getName();\n      var body = fullCleanLog;\n      MailApp.sendEmail(yourEmail, subject, body);\n    } catch (e) {\n      cleanLog(\"Unable to send keyword report email. Please check the email \"\n      + \"addresses provided are valid.\");\n    }\n  }\n\n  Logger.log(\"Added \" + keywordCount + \" keyword(s).\");\n}\n\n\u002F\u002F Gets the report at either campaign or ad group level of search queries which:\n\u002F\u002F - have at least the minimum threshold of conversions\n\u002F\u002F - are not currently being targeted in the account\n\u002F\u002F - are in enabled ad groups and campaigns\n\u002F\u002F - have at least the minimum threshold of impressions\nfunction gimmeMyReport(level, matchType) {\n  if (level.toLowerCase() == \"campaign\") {\n    reportLevel = \"CampaignName\";\n  } else if (level.toLowerCase() == \"ad group\") {\n    reportLevel = \"AdGroupName\";\n  }\n  cleanLog(\"Level: \" + level + \". Match Type: \" + matchType);\n\n  var report = AdWordsApp.report(\n    \"SELECT Query, Conversions, Cost, AdGroupId, QueryTargetingStatus,\"\n    + \" CampaignStatus, AdGroupStatus, CampaignName, AdGroupName, Impressions,\"\n    + \" Clicks, Ctr, ConversionRate, CostPerConversion, ConversionValue,\"\n    + \" QueryMatchTypeWithVariant, KeywordTextMatchingQuery, AverageCpc\"\n    + \" FROM SEARCH_QUERY_PERFORMANCE_REPORT\"\n    + \" WHERE Conversions &gt; \"  + minConversions\n    + \" AND QueryTargetingStatus = 'NONE' AND\"\n    + \" CampaignStatus = 'ENABLED' AND AdGroupStatus = 'ENABLED'\"\n    + \" AND Impressions &gt; \" + minImpressions\n    + \" AND KeywordTextMatchingQuery DOES_NOT_CONTAIN 'URL=='\"\n    + \" AND KeywordTextMatchingQuery DOES_NOT_CONTAIN 'CATEGORY=='\"\n    + \" AND KeywordTextMatchingQuery != '*'\"\n    + \" AND \" + reportLevel + \" CONTAINS_IGNORE_CASE '\" + matchType + \"'\"\n  );\n\n  return report;\n}\n\n\u002F\u002F Checks whether CPA is below target. If so, it checks if checks whether query\n\u002F\u002F is eligible to be added as a keyword and then adds it if so.\nfunction cpaCheck(report, criterionType) {\n  var rows = report.rows();\n\n  while (rows.hasNext()) {\n\n    var row = rows.next();\n    var adGroupId = row&#91;\"AdGroupId\"];\n    var searchQuery = row&#91;\"Query\"];\n    var campaignName = row&#91;\"CampaignName\"];\n    var adGroupName = row&#91;\"AdGroupName\"];\n    var impr = row&#91;\"Impressions\"];\n    var clicks = row&#91;\"Clicks\"];\n    var ctr = row&#91;\"Ctr\"];\n    var avgCpc = row&#91;\"AverageCpc\"];\n    var cost = row&#91;\"Cost\"];\n    var conv = row&#91;\"Conversions\"];\n    var convRate = row&#91;\"ConversionRate\"];\n    var CPA = row&#91;\"CostPerConversion\"]; \u002F\u002F can this use CostPerConversion ?\n    var revenue = row&#91;\"ConversionValue\"];\n    var roas = revenue \u002F cost;\n    var kwText = row&#91;\"KeywordTextMatchingQuery\"];\n\n    var stats = &#91;\"Search Query: \" + searchQuery,\n    \"Campaign: \" + campaignName,\n    \"Ad Group: \" + adGroupName,\n    \"Keyword: \" + kwText,\n    \"Impressions: \" + impr,\n    \"Clicks: \" + clicks,\n    \"CTR: \" + ctr,\n    \"Avg. CPC: \" + avgCpc,\n    \"Cost: \" + cost,\n    \"Revenue: \" + revenue,\n    \"ROAS: \" + roas.toFixed(2),\n    \"Conversions: \" + conv,\n    \"Conv. rate: \" + convRate,\n    \"CPA: \" + CPA];\n\n    var adGroupSelector = AdsApp.adGroups().withIds(&#91;adGroupId]);\n\n    var adGroupIterator = adGroupSelector.get();\n    while (adGroupIterator.hasNext()) {\n      var adGroup = adGroupIterator.next();\n\n      if (CPA &lt;= maxCPA) {\n        if (roas &gt;= minROAS) {\n          try {\n            if (canWeEvenDealWithThisTing(searchQuery)) {\n              addThatTing(searchQuery, adGroup, criterionType, CPA, avgCpc, conv, stats);\n              keywordCount++;\n            }\n          } catch (e) {\n            cleanLog(\"Unable to add \" + searchQuery + \" as keyword.\");\n          }\n        }\n      }\n    }\n  }\n}\n\n\u002F\u002F Adds the search term as a targeted keyword with either a broad match\n\u002F\u002F modifier, phrase or exact match type\nfunction addThatTing(thatQuery, thatAdGroup, thatCriterionType,\n  thatCPA, bid, thatConv, thatStats) {\n    if (thatCriterionType == \"broad\") {\n      \u002F\u002Fvar addedQuery = \"+\" + thatQuery.replace(\u002F \u002Fg,\" +\"); \u002F\u002Ffor bmm\n      var addedQuery = thatQuery;\n    } else if (thatCriterionType == \"phrase\") {\n      var addedQuery = '\"' + thatQuery + '\"';\n    } else {\n      var addedQuery = \"&#91;\" + thatQuery + \"]\";\n    }\n\n    var keywordOperation = thatAdGroup.newKeywordBuilder()\n    .withText(addedQuery)\n    .withCpc(bid)\n    .build();\n\n    \u002F\u002F Gets the newly built keyword and applies the keyword label\n    var keyword = keywordOperation.getResult();\n    keyword.applyLabel(keywordLabel);\n\n    cleanLog(\" \");\n\n    \u002F\u002F Logs statistics and details of the search query to the Logger\n    thatStats.forEach(function(stat) {\n      cleanLog(\"- \" + stat);\n    });\n  }\n\n\u002F\u002F Logs a message and returns false if query is too long (more than 10 words or\n\u002F\u002F more than 80 characters) to be added as a targeted keyword\nfunction canWeEvenDealWithThisTing(longQuery) {\n  if ((longQuery.match(\u002F\\s\u002Fgi) || &#91;]).length &gt; 10) {\n    cleanLog(\" \");\n    cleanLog(\"&gt;&gt; '\" + longQuery\n    + \"' is more than 10 words so can't be added.\");\n    return false;\n  } else if (longQuery.length &gt; 80) {\n    cleanLog(\" \");\n    cleanLog(\"&gt;&gt; '\" + longQuery\n    + \"' is longer than 80 characters so can't be \" +\n    \"added.\");\n    return false;\n  } else {\n    return true;\n  }\n}\n\nfunction cleanLog(input) {\n  Logger.log(input);\n  fullCleanLog += \"\\n\" + input;\n}\n\nfunction labelMaker() {\n  try {\n    \u002F\u002F checks to see if keywordLabel exists\n    var labelSelector = AdsApp.labels();\n    var labelIterator = labelSelector.get();\n    var createKeywordLabel = true;\n\n    while (labelIterator.hasNext()) {\n      var label = labelIterator.next();\n      var labelName = label.getName();\n\n      if (labelName == keywordLabel) {\n        createKeywordLabel = false;\n      }\n    }\n\n    if (createKeywordLabel) { \u002F\u002F if keywordLabel wasn't found amongst labels\n      AdsApp.createLabel(keywordLabel); \u002F\u002F creates keywordLabel\n      Logger.log(\"Creating keyword label '\" + keywordLabel + \"'.\");\n      Logger.log(\"\");\n    }\n  } catch (e) {\n    Logger.log(\"There was an error creating the keyword label. It might \"\n    + \"already be on this account.\");\n    Logger.log(\"\");\n    \u002F\u002F error catching\n  }\n}\n\n\n\n\n    \n\n\n \n    \n   \n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"how-does-it-work\">How does it work?\u003C\u002Fh2>\n\n\n\n\u003Cp>This script effectively looks through every search query that triggered your ads and led to conversions, such as contact form fills, phone calls, or transactions. Once it finds a sufficient candidate, it will add these to the target campaign and set relevant bids for you.&nbsp;\u003C\u002Fp>\n\n\n\n\u003Cp>Since search term performance can vary over time, it looks at all-time data to establish exactly which search terms are actually performing consistently. By running the script on a daily or weekly basis, you can keep your account up-to-date with the best performing keywords possible and automatically grow the account.\u003C\u002Fp>\n\n\n\n\u003Cp>To decide what bid to give a keyword, this script sets the all-time Avg. CPC at a keyword-level. This won’t matter too much if you’re using an automated bidding strategy, but if you’re not, you can rest assured that Dave is setting appropriate bids at around the level that it has previously seen performance.\u003C\u002Fp>\n\n\n\n\u003Cp>The script only adds search terms which haven’t been already added as targeted keywords or excluded with negative keywords. If you have a high-converting search term but have blocked it with a negative keyword, Dave will obediently ignore it.\u003C\u002Fp>\n\n\n\n\u003Cp>Sometimes, the script will add misspellings and close variants which have been performing well. In our testing, the keywords that the script adds tend to be far less competitive than the ones you already have in the account, so not only can you appear where your competitors aren’t, but you should also end up with cheaper clicks and cheaper conversions too.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter\">\u003Cimg decoding=\"async\" src=\"https:\u002F\u002Flh4.googleusercontent.com\u002F7no3SQ-dH3P4UHyn7Up6Qu-HfqkBVvT-MCzcOVguBGPBBmmJ33AD9LsqEqIdZYjTndaBnovheAKiu7WmO0EN_xvUKOhzqoueDKzhtVH_x-ewQSQQWcfbeUMmJMkBpNfo02HpuqS1\" alt=\"This image has an empty alt attribute; its file name is 7no3SQ-dH3P4UHyn7Up6Qu-HfqkBVvT-MCzcOVguBGPBBmmJ33AD9LsqEqIdZYjTndaBnovheAKiu7WmO0EN_xvUKOhzqoueDKzhtVH_x-ewQSQQWcfbeUMmJMkBpNfo02HpuqS1\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Cp>In fact, this query to keyword script is so good at finding these diamonds in the rough, that in one of our accounts it added an alternative keyword that lead to a&nbsp;\u003Cstrong>300% increase in conversions\u003C\u002Fstrong>, a&nbsp;\u003Cstrong>17% decrease in Avg. CPC\u003C\u002Fstrong>, a&nbsp;\u003Cstrong>76% decrease in cost per acquisition\u003C\u002Fstrong>&nbsp;and a&nbsp;\u003Cstrong>257% increase in conversion rate\u003C\u002Fstrong>. Tidy.&nbsp;\u003C\u002Fp>\n\n\n\n\u003Cfigure class=\"wp-block-image\">\u003Cimg decoding=\"async\" src=\"https:\u002F\u002Flh4.googleusercontent.com\u002F7no3SQ-dH3P4UHyn7Up6Qu-HfqkBVvT-MCzcOVguBGPBBmmJ33AD9LsqEqIdZYjTndaBnovheAKiu7WmO0EN_xvUKOhzqoueDKzhtVH_x-ewQSQQWcfbeUMmJMkBpNfo02HpuqS1\" alt=\"This image has an empty alt attribute; its file name is 7no3SQ-dH3P4UHyn7Up6Qu-HfqkBVvT-MCzcOVguBGPBBmmJ33AD9LsqEqIdZYjTndaBnovheAKiu7WmO0EN_xvUKOhzqoueDKzhtVH_x-ewQSQQWcfbeUMmJMkBpNfo02HpuqS1\"\u002F>\u003C\u002Ffigure>\n\n\n\n\u003Cp>The keyword at the top is a keyword chosen by a human with years of PPC experience and familiarity with the client&#8217;s industry. The far-better performing keyword below was added by Dave.\u003C\u002Fp>\n\n\n\n\u003Cp>That is why we love this PPC script.&nbsp;\u003C\u002Fp>\n\n\n\n\u003Cp>Would you like to see similar performance from keywords in your account? Try it today!\u003C\u002Fp>\n\n\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"how-do-i-use-it\">How do I use it?\u003C\u002Fh2>\n\n\n\n\u003Cp>You can pretty much use this script without any customisation at all, if you like. Out of the box it’s ready to rock, suitable for the majority of accounts. Providing you’ve labelled your campaigns or ad groups with the keyword match types you’d like Dave to add (e.g. “Broad”, “Phrase” or “Exact”), the script should work from the off.&nbsp;\u003C\u002Fp>\n\n\n\n\u003Cp>Since Dave looks at the names of your campaigns or ad groups to work out which match type to add the keywords as, if you have the word “Broad” in your campaign or ad group, Dave will add the converting keywords as broad keywords (e.g. nottingham ppc agency). Similarly, any campaigns or ad groups containing the word “Phrase” or “Exact” will have phrase (“\u003Ca rel=\"noreferrer noopener\" href=\"\u002Fpaid-media\u002Fppc\u002F\">nottingham ppc agency\u003C\u002Fa>”) or exact ([nottingham ppc agency]) keywords added.\u003C\u002Fp>\n\n\n\n\u003Cp>You can mix and match your keyword match-types too, for example, if you had “Broad, Phrase &amp; Exact” in the campaign (or ad group), it would add the keyword as all three match types to the ad group that the converting search query converted in.\u003C\u002Fp>\n\n\n\n\u003Cp>If you have different match types in the name of your campaign to the name of your ad group &#8211; for example, “Exact” at ad group level and “Broad” at campaign level &#8211; Dave will add both broad match modifier and exact match keywords to that ad group.\u003C\u002Fp>\n\n\n\n\u003Cp>The only other thing to remember is that you’ll need conversion data for the script to work and the more conversion data you have, the better. If you haven’t set up conversion tracking yet, that’s the first thing that you need to do. Once you’ve got some conversions, you can set up Dave to keep its watchful eye over your account. It can’t build a campaign from scratch, basically.&nbsp;\u003C\u002Fp>\n\n\n\n\u003Cp>To set up the script, follow the steps below:\u003C\u002Fp>\n\n\n\n\u003Col class=\"wp-block-list\">\u003Cli>\u003Cstrong>Copy the script.\u003C\u002Fstrong> Go to your \u003Ca rel=\"noreferrer noopener\" href=\"\u002Fpaid-media\u002Fppc\u002Fgoogle-ads-management\u002F\">Google Ads\u003C\u002Fa> account. Click Tools &amp; Settings on the toolbar and then click “Scripts” underneath Bulk Operations. Make a new script, delete the code that Google creates and then paste our code in\u003C\u002Fli>\u003Cli>\u003Cstrong>Set the options at the top of the code\u003C\u002Fstrong>. maxCPA allows you to set the maximum all-time cost per acquisition a search query is allowed to have for you to consider adding it as a keyword. minROAS lets you set the minimum all-time return on ad spend (revenue divided by cost) that the search query should have before it should be added as a keyword. If you’re not tracking revenue\u002Fconversion value in your account (e.g. it’s a lead-generation account), just set this to 0. minImpressions is the minimum number of all-time impressions the search query must have before the script is allowed to add it as a targeted keyword. This helps prevent the script from adding lots of search queries that only get searched for once. minConversions is the setting which allows you to tell Dave how many all-time conversions a search query must have before it can be added as a keyword. Your Email is where you can enter your email address so that the script emails you when it has finished running and lets you know of any keywords that it’s added. To add multiple email addresses, separate them by commas.\u003C\u002Fli>\u003Cli>\u003Cstrong>Save and preview the script.\u003C\u002Fstrong> It’ll probably ask you to authorise the script at least once. Once you’ve hit Preview, you’ll see the keywords that the script would add in the Changes or Log section. If everything looks good, run the script for real!\u003C\u002Fli>\u003Cli>\u003Cstrong>Create a schedule so the script runs daily.\u003C\u002Fstrong> This will allow the script to constantly add new keywords as soon as they meet your set requirements\u003C\u002Fli>\u003C\u002Fol>\n\n\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"extra-credit-why-is-it-called-dave\">Extra credit: Why is it called Dave?\u003C\u002Fh3>\n\n\n\n\u003Cp>For those dying to know, the script was originally called “QTK” &#8211; Query to Keyword. Then we made a new version that added keywords based on their CPA and named it the even more confusing “QTKC” (Query To Keyword &#8211; CPA).&nbsp;\u003C\u002Fp>\n\n\n\n\u003Cp>Based on the “KC” part of the name, some members of staff said we should call it Casey. Others preferred the name Quentin, citing the “QT” in the name to back up their stance. Eventually, two factions formed and we ended up referring to the script under both names as well as occasionally referring to it as QTKC 1.12 in order to be more specific.\u003C\u002Fp>\n\n\n\n\u003Cp>Needless to say, things got a little bit confusing, so eventually, we decided we’d just call it Dave, the name of one of our legendary security guards here at Impression HQ.\u003C\u002Fp>\n\n\n\n\u003Cp>Of course, a few rebels at Impression still call it Quentin, but its name is definitely Dave and our security guard is absolutely chuffed to bits about it. (We are too!)\u003C\u002Fp>\n\n\n\n\u003Cp>\u003C\u002Fp>\n",[8],40,[10],135,[12,13,14,15,16,17,18],"post-2144","tools","type-tools","status-publish","has-post-thumbnail","hentry","category-ppc",{"gated":20,"form_title":20,"form_button_text":20,"confirmation_title":20,"confirmation_body":20,"tool_link":20,"page_content_modules":21,"hero":118},null,[22,89],{"acf_fc_layout":23,"reduced":24,"top_overlap":-1,"bottom_underlap":-1,"disable_observer":24,"title":25,"content":6,"authors":26,"gated":20,"form_title":20,"form_button_text":20,"confirmation_title":20,"confirmation_body":20,"tool_link":20},"tool_content",true,"High-Performing Query to Keyword: A Google Ads Automation Script",[27],{"id":28,"path":29,"display_name":30,"job_title":31,"description":32,"avatar_url":33,"acf":34},33,"\u002Fabout\u002Four-team\u002Fimpression-team\u002F","Team Impression","","This post may have been written by a past member of the Impression team, or be a collaboration of us all. We hope you like it!","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress&fit=crop&fm=jpg&h=150&q=80&w=150&bg=CFE6F9",{"job_title":31,"full_bio":31,"specialist_service_links":35,"photo":36},false,{"ID":37,"id":37,"title":38,"filename":39,"filesize":40,"url":41,"link":42,"alt":31,"author":43,"description":31,"caption":31,"name":44,"status":45,"uploaded_to":40,"date":46,"modified":46,"menu_order":40,"mime_type":47,"type":48,"subtype":49,"icon":50,"width":51,"height":51,"sizes":52},12476,"Impression-Icon","Impression-Icon.jpg",0,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&q=90","\u002Fimpression-icon\u002F","12","impression-icon","inherit","2021-11-02 16:49:21","image\u002Fjpeg","image","jpeg","\u002Fwp\u002Fwp-includes\u002Fimages\u002Fmedia\u002Fdefault.png",500,{"thumbnail":53,"thumbnail-width":54,"thumbnail-height":54,"medium":55,"medium-width":56,"medium-height":56,"medium_large":57,"medium_large-width":58,"medium_large-height":58,"large":59,"large-width":60,"large-height":61,"1536x1536":62,"1536x1536-width":63,"1536x1536-height":63,"2048x2048":64,"2048x2048-width":65,"2048x2048-height":65,"post-thumbnail":66,"post-thumbnail-width":67,"post-thumbnail-height":68,"12_col":69,"12_col-width":70,"12_col-height":71,"default_landscape":72,"default_landscape-width":73,"default_landscape-height":74,"default_portrait":75,"default_portrait-width":74,"default_portrait-height":73,"6_col_and_margin_short":76,"6_col_and_margin_short-width":67,"6_col_and_margin_short-height":71,"11_col_and_margin":77,"11_col_and_margin-width":78,"11_col_and_margin-height":71,"9_col_rectangle":79,"9_col_rectangle-width":80,"9_col_rectangle-height":81,"11_col":82,"11_col-width":83,"11_col-height":71,"staff_image_696_600":84,"staff_image_696_600-width":85,"staff_image_696_600-height":74,"rectangular_thumbnail":86,"rectangular_thumbnail-width":87,"rectangular_thumbnail-height":88},"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=640&q=90&w=640","640","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=scale&h=200&q=90&w=200",200,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=scale&h=768&q=90&w=768",768,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=1000&q=90&w=1892","1892","1000","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=scale&h=1536&q=90&w=1536",1536,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=scale&h=2048&q=90&w=2048",2048,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=1180&q=90&w=1860",1860,1180,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=870&q=90&w=2880",2880,870,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=600&q=90&w=800",800,600,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=800&q=90&w=600","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=870&q=90&w=1860","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=870&q=90&w=3080",3080,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=1400&q=90&w=2150",2150,1400,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=870&q=90&w=2640",2640,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=600&q=90&w=696",696,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress%2Cformat&fit=crop&h=300&q=90&w=750",750,300,{"acf_fc_layout":90,"reduced":24,"top_overlap":91,"bottom_underlap":91,"disable_observer":-1,"heading":92,"cta_text":93,"cta_link":94,"items":95},"related_module","small","See more tools","See all tools","\u002Fresources\u002Ftools\u002F",[96,104,111],{"type_key":13,"title":97,"excerpt":-1,"to":98,"postedAt":99,"readingTime":40,"image":100,"authors":101,"type":103},"Eliminate wasted spend with this Google Ads script","\u002Fresources\u002Ftools\u002Feliminate-wasted-spend-with-this-google-ads-script\u002F","2020-08-24T09:56:00","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F05\u002FpE4HDwaz-Script_KIWF.jpg?auto=compress%2Cformat&fit=crop&h=300&q=90&w=750",[102],{"name":30,"image":33},"Tool",{"type_key":13,"title":105,"excerpt":-1,"to":106,"postedAt":107,"readingTime":40,"image":108,"authors":109,"type":103},"Keyword Performance Report","\u002Fresources\u002Ftools\u002Fkeyword-performance-report\u002F","2020-07-09T13:46:00","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F04\u002FBDlA6puR-Script_Keyword-Performance-Report.jpg?auto=compress%2Cformat&fit=crop&h=300&q=90&w=750",[110],{"name":30,"image":33},{"type_key":13,"title":112,"excerpt":-1,"to":113,"postedAt":114,"readingTime":40,"image":115,"authors":116,"type":103},"How To Create Local Google Ads Dynamically","\u002Fresources\u002Ftools\u002Flocal-google-ads\u002F","2020-05-12T06:55:00","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F05\u002FgQt0MLS0-Script_Location-Data-Updater.jpg?auto=compress%2Cformat&fit=crop&h=300&q=90&w=750",[117],{"name":30,"image":33},{"type":119,"style":120,"heading":25,"title":121,"categories":122},"tool","dark","Tools",[123],{"id":8,"count":124,"description":125,"name":126,"slug":127,"taxonomy":128,"parent":40,"meta":129,"acf":130,"head_links":131,"resource_count":132,"yoast_title":133,"yoast_meta":134,"yoast_json_ld":178,"_links":277,"link":309},272,"\u003Cp class=\"p1\">Keeping up to date with the latest digital trends, strategies, and announcements can be difficult. Our digital experts regularly blog about the PPC news that’s stirring up the industry, so check back regularly or sign up to our newsletter to stay informed!\u003C\u002Fp>\r\n\r\n\u003Cp class=\"p1\">Find out more about our \u003Ca href=\"\u002Fpaid-media\u002Fppc\u002F\">PPC services\u003C\u002Fa>, or browse our latest tips, advice and opinions below.\u003C\u002Fp>","PPC","ppc","category",[],[],[],16,"PPC Blog | PPC Tips, Advice & Guides | Impression",[135,137,140,143,146,149,152,154,156,158,161,164,167,170,172,175],{"property":136,"content":133},"title",{"property":138,"content":139},"description","Keeping up to date with the latest PPC trends, strategies, and announcements can be difficult. Browse our tips, advice and opinions in our latest PPC blogs!",{"name":141,"content":142},"robots","index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1",{"property":144,"content":145},"canonical","https:\u002F\u002Fadmin.impressiondigital.com\u002Fblog\u002Fcategory\u002Fppc\u002F",{"name":147,"content":148},"og:locale","en_GB",{"property":150,"content":151},"og:type","article",{"property":153,"content":133},"og:title",{"property":155,"content":139},"og:description",{"property":157,"content":145},"og:url",{"property":159,"content":160},"og:site_name","Impression",{"property":162,"content":163},"og:image","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F06\u002FABFPXguH-Opengraph-BLUE.jpg?auto=compress%2Cformat&q=90",{"property":165,"content":166},"og:image:width",1200,{"property":168,"content":169},"og:image:height",630,{"property":171,"content":47},"og:image:type",{"property":173,"content":174},"twitter:card","summary_large_image",{"property":176,"content":177},"twitter:site","@impressiontalk",{"@context":179,"@graph":180},"https:\u002F\u002Fschema.org",[181,189,199,210],{"@type":182,"@id":183,"url":183,"name":133,"isPartOf":184,"description":139,"breadcrumb":186,"inLanguage":188},"CollectionPage","https:\u002F\u002Fwww.impressiondigital.com\u002Fblog\u002Fcategory\u002Fppc\u002F",{"@id":185},"https:\u002F\u002Fwww.impressiondigital.com\u002F#website",{"@id":187},"https:\u002F\u002Fwww.impressiondigital.com\u002Fblog\u002Fcategory\u002Fppc\u002F#breadcrumb","en",{"@type":190,"@id":187,"itemListElement":191},"BreadcrumbList",[192,197],{"@type":193,"position":194,"name":195,"item":196},"ListItem",1,"Home","https:\u002F\u002Fwww.impressiondigital.com\u002F",{"@type":193,"position":198,"name":126},2,{"@type":200,"@id":185,"url":196,"name":160,"description":31,"publisher":201,"inLanguage":203,"potentialAction":204},"WebSite",{"@id":202},"https:\u002F\u002Fwww.impressiondigital.com\u002F#organization","en-GB",{"@type":205,"target":206,"query-input":209},"SearchAction",{"@type":207,"urlTemplate":208},"EntryPoint","https:\u002F\u002Fwww.impressiondigital.com\u002Fsearch?q={search_term_string}","required name=search_term_string",{"@type":211,"@id":202,"name":160,"url":196,"logo":212,"image":218,"sameAs":219,"@context":223,"email":224,"foundingDate":225,"legalName":226,"vatID":227,"description":228,"telephone":229,"address":230,"location":237,"areaServed":270},"Organization",{"@type":213,"inLanguage":203,"@id":214,"url":215,"contentUrl":215,"width":216,"height":217,"caption":160},"ImageObject","https:\u002F\u002Fwww.impressiondigital.com\u002F#\u002Fschema\u002Flogo\u002Fimage\u002F","https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F06\u002FA5LuTDrq-Impression_Wordmark.png",920,176,"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F04\u002FFAVxDeOS-Nottingham.jpg",[220,221,222],"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fimpression-digital-limited","https:\u002F\u002Fwww.facebook.com\u002Fimpression\u002F","https:\u002F\u002Fwww.instagram.com\u002Fimpressiontalk\u002F","https:\u002F\u002Fwww.schema.org\u002F","hello@impressiondigital.com","2012-11-07","Impression Digital Limited","GB186363774","Impression is an award-winning digital marketing agency based in the UK and USA. We offer SEO agency, PPC agency, Digital PR agency and Analytics services to companies of all sizes across the UK, North America, Europe and beyond. Get in touch with us if you think we can work together.","01158 242 212",{"@type":231,"streetAddress":232,"addressLocality":233,"addressRegion":234,"postalCode":235,"addressCountry":236},"PostalAddress","Fothergill House, 16 King Street","Nottingham","Nottinghamshire","NG1 2AS","United Kingdom",[238,247,259],{"@type":239,"name":240,"geo":241,"address":245,"photo":218,"telephone":246},"Place","Impression Digital - Nottingham",{"@type":242,"latitude":243,"longitude":244},"GeoCoordinates","52.95501401025914","-1.1494887460285232",{"@type":231,"streetAddress":232,"addressLocality":233,"addressRegion":234,"postalCode":235,"addressCountry":236},"+44 01158 242 212",{"@type":239,"name":248,"geo":249,"address":252,"photo":257,"telephone":258},"Impression Digital - London",{"@type":242,"latitude":250,"longitude":251},"51.50237208377361","-0.09229841534284115",{"@type":231,"streetAddress":253,"addressLocality":254,"addressRegion":255,"postalCode":256,"addressCountry":236},"201 Borough High St","Southwark","London","SE1 1JA","https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F04\u002FwD0pPVWz-London.jpg","+44 020 7112 8148",{"@type":239,"name":260,"geo":261,"address":264},"Impression Digital - New York",{"@type":242,"latitude":262,"longitude":263},"40.726722746949","-74.00527778220652",{"@type":231,"streetAddress":265,"addressLocality":266,"addressRegion":267,"postalCode":268,"addressCountry":269},"160 Varick St","New York","NY","10013","USA",[271,274,276],{"@type":272,"name":273},"Country","Worldwide",{"@type":272,"name":275},"GBR",{"@type":272,"name":269},{"self":278,"collection":288,"about":291,"wp:post_type":294,"curies":305},[279],{"href":280,"targetHints":281},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u002F40",{"allow":282},[283,284,285,286,287],"GET","POST","PUT","PATCH","DELETE",[289],{"href":290},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories",[292],{"href":293},"\u002Fwp-json\u002Fwp\u002Fv2\u002Ftaxonomies\u002Fcategory",[295,297,299,301,303],{"href":296},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts?categories=40",{"href":298},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fwhite_papers?categories=40",{"href":300},"\u002Fwp-json\u002Fwp\u002Fv2\u002Ftools?categories=40",{"href":302},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fwebinars?categories=40",{"href":304},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fevents?categories=40",[306],{"name":307,"href":308,"templated":24},"wp","https:\u002F\u002Fapi.w.org\u002F{rel}","\u002Fresources\u002Ftools\u002Fcategory\u002Fppc\u002F",[],[312,314,317,318],{"path":313,"name":195},"\u002F",{"path":315,"name":316},"\u002Fresources\u002F","Resources",{"path":94,"name":121},{"path":20,"name":25},{"title":320,"script":321,"meta":393,"link":414},"PPC Automation Scripts: High-Performing Query to Keyword | Impression",[322],{"type":323,"key":324,"innerHTML":325},"application\u002Fld+json","yoast-json-ld",{"@context":179,"@graph":326},[327,344,352,354,364,368,386],{"@type":328,"@id":329,"isPartOf":330,"author":332,"headline":25,"datePublished":334,"dateModified":335,"mainEntityOfPage":336,"wordCount":337,"publisher":338,"image":340,"thumbnailUrl":342,"articleSection":343,"inLanguage":203},"TechArticle","https:\u002F\u002Fwww.impressiondigital.com\u002Fresources\u002Ftools\u002Fgoogle-ads-campaign-optimisation\u002F#article",{"@id":331},"https:\u002F\u002Fwww.impressiondigital.com\u002Fresources\u002Ftools\u002Fgoogle-ads-campaign-optimisation\u002F",{"name":30,"@id":333},"https:\u002F\u002Fadmin.impressiondigital.com\u002F#\u002Fschema\u002Fperson\u002F401562873f414eb98c8fb548c6a15fb6","2021-06-14T16:00:00+00:00","2022-11-25T10:12:57+00:00",{"@id":331},1374,{"@id":339},"https:\u002F\u002Fadmin.impressiondigital.com\u002F#organization",{"@id":341},"https:\u002F\u002Fwww.impressiondigital.com\u002Fresources\u002Ftools\u002Fgoogle-ads-campaign-optimisation\u002F#primaryimage","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F09\u002Ftest-script.jpg?auto=compress%2Cformat&q=90",[126],{"@type":345,"@id":331,"url":331,"name":320,"isPartOf":346,"primaryImageOfPage":347,"image":348,"thumbnailUrl":342,"datePublished":334,"dateModified":335,"description":349,"breadcrumb":350,"inLanguage":188},"WebPage",{"@id":185},{"@id":341},{"@id":341},"Automatically mine for and add high-performing search queries as keywords using our free script. Learn how to use this in your Google Ads campaign here.",{"@id":351},"https:\u002F\u002Fwww.impressiondigital.com\u002Fresources\u002Ftools\u002Fgoogle-ads-campaign-optimisation\u002F#breadcrumb",{"@type":213,"inLanguage":203,"@id":341,"url":342,"contentUrl":342,"width":353,"height":74},1500,{"@type":190,"@id":351,"itemListElement":355},[356,357,359,362],{"@type":193,"position":194,"name":195,"item":196},{"@type":193,"position":198,"name":316,"item":358},"https:\u002F\u002Fwww.impressiondigital.com\u002Fresources\u002F",{"@type":193,"position":360,"name":121,"item":361},3,"https:\u002F\u002Fwww.impressiondigital.com\u002Fresources\u002Ftools\u002F",{"@type":193,"position":363,"name":25},4,{"@type":200,"@id":185,"url":196,"name":160,"description":31,"publisher":365,"inLanguage":203,"potentialAction":366},{"@id":202},{"@type":205,"target":367,"query-input":209},{"@type":207,"urlTemplate":208},{"@type":211,"@id":202,"name":160,"url":196,"logo":369,"image":218,"sameAs":370,"@context":223,"email":224,"foundingDate":225,"legalName":226,"vatID":227,"description":228,"telephone":229,"address":371,"location":372,"areaServed":382},{"@type":213,"inLanguage":203,"@id":214,"url":215,"contentUrl":215,"width":216,"height":217,"caption":160},[220,221,222],{"@type":231,"streetAddress":232,"addressLocality":233,"addressRegion":234,"postalCode":235,"addressCountry":236},[373,376,379],{"@type":239,"name":240,"geo":374,"address":375,"photo":218,"telephone":246},{"@type":242,"latitude":243,"longitude":244},{"@type":231,"streetAddress":232,"addressLocality":233,"addressRegion":234,"postalCode":235,"addressCountry":236},{"@type":239,"name":248,"geo":377,"address":378,"photo":257,"telephone":258},{"@type":242,"latitude":250,"longitude":251},{"@type":231,"streetAddress":253,"addressLocality":254,"addressRegion":255,"postalCode":256,"addressCountry":236},{"@type":239,"name":260,"geo":380,"address":381},{"@type":242,"latitude":262,"longitude":263},{"@type":231,"streetAddress":265,"addressLocality":266,"addressRegion":267,"postalCode":268,"addressCountry":269},[383,384,385],{"@type":272,"name":273},{"@type":272,"name":275},{"@type":272,"name":269},{"@type":387,"@id":388,"name":30,"image":389,"description":32,"url":392},"Person","https:\u002F\u002Fwww.impressiondigital.com\u002F#\u002Fschema\u002Fperson\u002F401562873f414eb98c8fb548c6a15fb6",{"@type":213,"inLanguage":203,"@id":390,"url":391,"contentUrl":391,"caption":30},"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress&fit=fit&fm=jpg&h=96&q=90&w=96124cc556989aa8a89f2f74da512d68e4","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress&fit=fit&fm=jpg&h=96&q=90&w=96","https:\u002F\u002Fwww.impressiondigital.com\u002Fabout\u002Four-team\u002Fimpression-team\u002F",[394,395,396,397,398,399,400,401,402,405,407,409,410,411,412,413],{"name":138,"content":349},{"name":141,"content":142},{"property":147,"content":148},{"property":150,"content":151},{"property":153,"content":320},{"property":155,"content":349},{"property":157,"content":331},{"property":159,"content":160},{"property":403,"content":404},"article:publisher","https:\u002F\u002Fwww.facebook.com\u002Fimpression",{"property":406,"content":335},"article:modified_time",{"property":162,"content":408},"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F09\u002Ftest-script.jpg?auto=compress%2Cformat",{"property":165,"content":353},{"property":168,"content":74},{"property":171,"content":47},{"name":173,"content":174},{"name":176,"content":177},[]]