Get more control over how much you spend on AdWords with this Enhanced Script.
Maintain your own advanced budgets:
Set budgets for campaigns, ad groups, keywords, or ad texts.
Set budgets for monthly, weekly or daily periods.
Pause items when their cost exceeds the maximum budget you specified.
Re-enable paused items when a new budget period starts.
Get notifications via email when changes are made or when an account exceeds a total cost for the period.
How It Works
The script can check all items at the selected level of the account:
the entire account
all enabled campaigns
all enabled ad groups
all enabled keywords
all enabled ad texts
The script can also be configured to check only those items from the above list that have an AdWords label that you've created.
The script checks if the cost for any item exceeds the maximum allowed during the current budget period.
When the cost of an item exceeds the maximum amount, the item is labeled and paused.
When the script runs during the first hour of the start of a new budget period, it re-enables any paused items with the label that was added when the script paused the item.
The script sends an email when items are paused or re-enabled.
If the script is used to check the cost for an entire account, it will only send a notification email when the cost exceeds the allowed amount. It does NOT pause the account. It will continue to send the warning email until there are no active campaigns in the account or until the next budget period starts.
The script has been tested to work with the following campaign and ad group types: search, display, shopping.
Example Use Cases
Send yourself an email when the cost of an entire account is coming close to your total budget for the month so that you can pause the campaigns to prevent incurring more charges than you want for the month.
Limit the amount of money you spend on experimental keywords by adding a label to experimental keywords and then checking that none of these keywords exceed your maximum allowed cost for the day, the week, or the month.
Read Before Using
IMPORTANT - This script must be scheduled to run every hour if you want it to re-enable paused items at the start of a new budget period. If the script does NOT run during the first hour of the start of a new budget period, your items will remain paused.
This script is limited by Google's current limits for how many items can be checked. This means that the script will only be able to check up to 250,000 entities. If you need to check more, you can use labels and set up multiple settings using Optmyzr's patent-pending Enhanced Script technology.
This script lets you set hourly bid adjustments for every campaign in AdWords. The AdWords website limits users to 6 dayparts per day. This script enables 24 hourly dayparts by updating the bid adjustments for the next 5 hours. By running this script automatically every hour, you will always have your desired bid adjustments ready for the next couple of hours.
Your bid adjustments can be set by making a copy of this Google Spreadsheet.
Make a new tab for every campaign you want this script to manage. The name of the tab should be an exact match of the name of the campaign in AdWords. This is case sensitive.
To temporarily pause bid adjustments for a campaign, you can add the word 'paused' before or after the name of the tab.
If you want to apply the same dayparting bid adjustments to all active and paused campaigns, use the tab with the name "All Campaigns"
AdWords accepts bids ranging from -90% to +900%. If your value falls outside this range, the spreadsheet will highlight the incorrect field in red. The script will break if you use values outside of Google's accepted range.
To set a bid that is 90% lower than your normal bid from 1am to 2am on Mondays, enter the value '-90%' in the row labeled "MONDAY" and the column labeled "1".
To set a bid that is 50% higher on Sundays from 3pm to 4pm, enter the value '50%' in the row labeled "SUNDAY" and the column labeled "15". (the script uses 24-hour notation)
Just like in Google's dayparting settings, you are entering the bid adjustments so if you want your bid to be 150% of normal, you enter 50% as the bid adjustment. This 50% gets added to the regular bid, and we get your desired bid that is 150% of normal.
If this script fails to run for more than 5 hours in a row, your account will have incorrect bid adjustments. When you no longer want to use this script, be sure to manually remove all dayparting bid adjustments.
Bid adjustments are stacked on top of each other. If you have geo bid adjustments and device bid adjustments, make sure you take these into consideration. For example, if your device modifier is 120%, and your geo modifier is 75% and your daypart adjustment is 110%, your final bid is 120% * 75% * 110% = 99%.
This score calculates the percentage of all ad impressions that come from undefined product groups, i.e. those that are labeled 'everything else in ...'. Shopping campaigns by default include all products in your merchant feed so it's desirable to take as much control over the performance by controlling the bids through product groupings defined by the advertiser. If the VSE score is close to 100%, it means that a large portion of the feed has been split into defined product groups that can each be managed separately, and this is a good thing. If the score is low, it means that a large percentage of impressions come from 'everything else' and the campaign should probably be restructured to drive a larger portion of traffic through advertiser defined groupings.
VSE Bid Ratio
This is the ratio of cost per converted click for product groupings of 'everything else' over cost per converted click for defined product groups.
A score less than 100%: indicates that conversions from 'everything else' are cheaper than defined product groups. If satisfied with the performance of defined product groups, this means bids for 'everything else' are too low and there is an opportunity to get more conversions.
Score of 100%: indicates that conversions from 'everything else' cost the same as defined product groups. It may not be necessary to further split products currently in 'everything else'.
A score greater than 100%: indicates that conversions from 'everything else' are more expensive than defined product groups. Money is likely wasted. By bidding less for 'everything else' or splitting out your products further, the overall account's cost per converted click could be reduced.
Shopping Ad Optimization Suggestions
The script provides a list of product groups that should be considered for further division or consolidation based on a target number of conversions to hit the sweet spot for bid management. If a product group has too few conversions, it will take too long before there is enough data to make a bid decision. If a product group has more than the target number of conversions needed for regular bid optimization, its performance could possibly be improved by splitting it into sub groups which could get different bids. By default the script looks for product groups to have between 5 and 50 conversions last month. These values and the date range can be modified to meet your own needs.
This Enhanced Script™ for AdWords helps find and pause destination URLs that are either broken, or lead to landing pages for out-of-stock products. By automatically pausing the keywords or ads associated with bad landing pages, you'll avoid wasting money on AdWords clicks that have no chance of converting.
The tool checks for 404 errors first. If the page loads fine, it scans the content for the presence of a phrase that indicates it may be a poor landing page, for example "out of stock" or "temporarily backordered". You can specify which phrases the tool monitors.
Example Use Cases
Retailers can pause ads when a product goes out of stock
Pause ads for products that have a low review score based on user comments
Delete ads that lead to broken landing pages
Under The Hood
This script goes through every item that has a destination URL in the specified portion of your account. You can specify whether you want to check ad URLs, keyword URLs, or both. You can also limit the tool to only evaluate campaigns whose name includes a phrase you specify. It first checks if the page loads correctly without a 404 error. If the page does not load correctly, it pauses the item or just notifies you depending on your settings. It then loads the content of the landing page and checks whether it contains at least one of the specified phrases of undesirable text. If that text is found, it can disable the item or notify you.
This script will only pause items, it cannot delete anything.
Optionally, you can assign a label in AdWords to any keyword or ad that gets paused, making it easier to find these back later, for example, when you've fixed the 404 error and are ready to resume your ads.
The script sends an email when it is finished checking landing pages.
The script puts all URLs it has checked in a Google Sheet, making it easy to see what was checked, and what URLs had 404 errors or issues with the content.
The script is able to follow redirects in your destination URLs but if you want to test whether your redirects are compatible, take a look at our FAQs for more details.
This AdWords Enhanced Script™ is an adaptation of Google's Anomaly Detection script. We have adapted it to work in an MCC account, aggregate all settings and outputs in a single Google Sheet and adding a color coded dashboard to complement email notifications.
This AdWords Script generates a Google Sheet with a list of all the active keywords in your account that have a Quality Score lower than a predefined Quality Score. It also provides the option to pause these keywords.
This script provides other metrics like cost, impressions etc. for a given period of time to help you gauge the performance of keywords in your account prominently.
Example Use Cases
Get a list of keywords that fall below a certain quality score and optimize them
Do a regular clean up of your AdWords account by pausing keywords with very low Quality Scores
Settings and Customization
EMAILADDRESS: tells the script the email addresses that should get a notification when it finishes creating the spreadsheet. To send to multiple recipients, separate the email addresses with a comma. Do NOT include the name of the person... only include their email address.
QualityScore: defines the threshold Quality Score for the keywords to be identified.
Pause: To pause keywords with a lower quality score, change the value of the field Pause to true.
Date_Range: tells the script the date range to include in the calculation. E.g. 'LAST_30_DAYS'. You can also use the format 'YYYYMMDD,YYYYMMDD'.
Generate a Google Sheet with time-segmented data and charts for all the elements that you've labeled.
The script can aggregate the data or report on every individual element that has the label. It can do calculations with any of the data (e.g. create new metrics like Conversion Per Impression) and it can compare data for 2 time periods so you can see both seasonality and whether you're doing better or worse than last period. Download Script
Example Use Cases
Create a dashboard with year-over-year performance graphs for any set of ad groups, campaigns or keywords.
Create a dashboard that shows charts for all keywords with the label "My Top Keywords"
Create graphs using calculated metrics not directly available in AdWords, for example you could build a chart showing the trend in "Conversions per Impression" for your top ad groups
Create charts that group the data for multiple campaigns that have the same label, for example, if you have 2 campaigns to sell widgets, you can graph the aggregate performance of these campaigns by giving them the same label. This is particularly useful if your account management strategy requires you to split up campaigns for different target audiences, e.g. by time zone.
Settings and Customizations
The settings below let you customize how the script works. Simply change the values as needed at the top of the script to fit your needs.
SPREADSHEET: The URL of the Google spreadsheet that will receive the data. Make sure this spreadsheet has added your AdWords login email address as an editor. Otherwise the script will fail because it can't access the spreadsheet.
LABELS = new Array("Label 1", "Label 2"); Replace "Label 1" and "Label 2" with the label names you want to build a report for. You can add additional labels as needed, just be sure to enclose the name in quotes and separate each label with a comma
LEVEL: The script can only report on one type of item so choose campaigns, keywords, or ad groups
STARTDAYSAGO: This tells the script how many days back to start your report
TIMESEGMENT: This tells the script how to segment the report by time, valid choices are Week, Date, Month, Quarter (capitalization matters!)
METRICS: This is a list of objects to tell the script which metrics to include in the tables. These metrics should NOT be ratios so not Ctr or ConversionRate. Instead include only metrics that are not calculated based on other metrics in AdWords. For name, you can include any metric that is included in a standard AdWords performance report (documentation: https://developers.google.com/adwords/api/docs/appendix/reports#ad-group). Some example values we find useful are Conversions, Clicks, Impressions, Cost, TotalConvValue. For each of these metrics, you can also include modifierForNewMetric and modifierForOldMetric. These let you calculate a value from the AdWords data. For example, if you want to increase last year's click values by 10%, you'd set modifierForOldMetric=1.1 for the metric Clicks. If you don't understand what this means, simply leave it at 1 so your reports will include the exact data that comes from AdWords.
CALCULATEDMETRICS: This is a list of objects for metrics to include in the report that are ratios, e.g. Ctr. You can also include a set of static values which is useful if you want your charts to include your target as a line. You can name these metrics anything you want. If the metric is a ratio, e.g. CTR, set type to 'ratio' and 'formula' to the division of metrics. These metrics have to be included in the METRICS section. For a static value, set 'type' to static and 'formula' to the static number. We've already included the metrics you'll most likely want in the sample script.
CHARTMETRICS: This tells the script which metrics and calculatedmetrics to show in charts. The name has to match one of your choices in METRICS or CALCULATEDMETRICS. If you set includeComparison to 1, then the chart will also include a line for the previous time period
AGGREGATESTATSBYLABEL: This tells the script to either total all the metrics by label or to report on every element individually. So for example, if you have 2 campaigns labeled 'Widgets' and you set AGGREGATESTATSBYLABEL to 1, then the output will combine the stats for these 2 campaigns. If on the other hand you set AGGREGATESTATSBYLABEL to 0, it will report stats for each of the two campaigns separately.
THOUSANDSSEPARATOR: This tells the script how you display currency in your AdWords account and whether you use a period or comma between thousands. For example, in the US we say $1,000.22 so the value should be "," whereas in Europe you say $1.000,22 so the value for this should be "."
INCLUDETOTALS: Tell the script if you want to aggregate all the data from all the labels and include it on its own tab in the Google Sheet. Set to 1 to include the aggregate totals or 0 to NOT include them
CHARTWIDTH: This tells the script the width in pixels of every chart
CHARTHEIGHT: This tells the script the height in pixels of every chart
This AdWords Script produces a report of the various elements of your ad texts. It aggregates data for commonly used headlines, URLs and description lines, and also for entire ads that you use in multiple places in the account.
Example Use Cases
Find the best performing ad text elements in your AdWords account
Find the best headline, description or display URL for new ad texts
Get enough data to make statistically valid decisions about ad text performance by aggregating data from similar ads across an entire account.
Settings and Customizations
Please refer to the script download page for the settings.