What does it do?
This script lets you set hourly bid adjustments for every campaign in Google Ads. The Google Ads website limits users to 6 dayparts per day, but 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.
Why Use It?
With this script, you can:
Apply precise hourly bid adjustments across all campaigns, overcoming the limitation of only 6 dayparts in Google Ads.
Maintain consistent bid strategies at scale by managing all campaigns from a single spreadsheet.
Improve budget efficiency by lowering bids during low-performing hours and increasing them when performance is stronger.
Align your bids with real performance trends by adjusting them for each hour of the day, helping you capture high-converting time windows.
Does the Script stack the bids on one another?
There is no way to mix and match 'all campaigns' and single campaigns. The bid modifiers mentioned in the spreadsheet reflects the target bid adjustment so the script doesn't stack bid changes.
Campaign types supported by the script
The script updates campaign settings for all campaigns that are either active or paused. The "Hourly Campaign Level Dayparts" Enhanced Script has been tested to work with the following types of Google Ads campaigns:
Search
Search with Display Select
Display
Shopping
Supported Campaign Subtypes
The script has also been tested to work with the following campaign subtypes:
Dynamic Search Ads
Remarketing
Unsupported Campaign Types
The script does NOT support these campaign types.
Video (YouTube)
We will add support for these campaign types as soon as Google adds this capability on their end.
Basic Settings
The bid adjustments for this script are specified in a Google Spreadsheet.
To get started, make a copy of our template spreadsheet to your own Google Drive (https://docs.google.com/spreadsheets/d/11IcRzJDdsdGJVzLNw0IlczhXYl_l0HTk5lXkfGLq1ig) then add the URL of your copy of this spreadsheet in the settings of the script in Optmyzr.
In your copy of the spreadsheet, update the bid adjustments by finding the cell in the sheet that corresponds to the day of week and hour of the day you want to adjust.
A bid adjustment of 0% means your current maximum CPC will be unchanged. An adjustment of 10% means your maximum CPC will be increased by 10% to 110% of normal. A bid adjustment of -20% means your maximum CPC will be reduced by 20% to 80% of your normal bid.
Bid adjustments are restricted between -90% and +900%, just like if you were setting the adjustments through the Google Ads website.
"Paused" tab in the spreadsheet
It is hard to delete a tab, and then bring it back later, so if you want to temporarily disable a setting, you can pause it by using the Paused Tab.
Warning
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 remove all dayparting bid adjustments manually.
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%.
Use Cases
Reduce Wasted Spend
Problem: Your campaigns continue to spend budget during hours when conversions are unlikely, leading to inefficient spend and lower ROAS.
Solution: You can update the spreadsheet with negative bid adjustments for low-performing hours. The script automatically applies these adjustments, reducing your bids when conversion likelihood is low.
Test and Refine Hourly Bidding Strategies
Problem: You want to experiment with different bid strategies by hour, but frequent manual changes make testing difficult and inconsistent.
Solution: You can use the spreadsheet to quickly modify hourly bid adjustments and test different strategies. If needed, temporarily disable settings using the "Paused" tab without losing your configurations.
