Google Sheets to Google Ads Uploader

Have you been dreaming of how nice it would be to be able to upload new ad groups, keywords, or ads directly to Google Ads from a Google Sheet? Dream no further. Here is a solution. I am introducing a new Google Ads script which allows you to upload new ad groups, keywords, and expanded text ads directly from Google Sheets to Google Ads.

***Not the Google Ads script you were looking for? I can also write custom Google Ads scripts to fit your needs. Contact me.***

Google Sheets to Google Ads

Configuration

  1. Get the script.
  2. Get the config sheet which has 4 sheets:
    1. config and counts
    2. adgrs to upload
    3. kws to upload
    4. etas to upload
  3. Enter your config spreadsheet ID into the script (row 5). It’s the ID is part of the URL:
    SS ID
    script ss idThat’s all you need to edit in the script!
  1. Configure the config sheet – you decide what “modules’ to keep ON or OFF.
  2. Set the spreadsheet to “United States” locale via File>Spreadsheet Settings. This is important so decimals points are handled correctly in your CPCs!
  3. Fill out notification email so you are notified in case the script fails.
  4. Fill the content sheets (adgrs to upload, kws to upload, etas to upload) with the new items which you want to upload to Google Ads.
    1. For adgrs, you need to enter these columns: campaign, ad group, cpc bid
    2. For kws, you need to enter these columns: campaign, ad group, keyword, keyword match type (accepted values: broad or phrase or exact), bid, final URL. Don’t use [ ] nor ” “ in your keyword texts to convey the match type. The script handles match types based on the “mt” column.
    3. For ads, you need to enter these columns: campaign, ad group, headline 1, headline 2, headline 3, description 1, description 2, path 1, path 2, final URL
  5. Run the script, grab coffee and watch how your rows are pushed to Google Ads one by one in case “Refresh this sheet in real time: = ON”.

Processing

The script proceeds from the bottom to the top. After the item is uploaded, the row is cleared and the script continues on the previous row and so on… The reason for this unusual setup is the fact that you may have a Supermetrics query in row 2 dumping the new stuff from BigQuery to the spreadsheet. If the script ran from the top to the bottom and deleted the second row, the “just deleted” Supermetrics query would cause a mess on the next run of the script.

If the script does not timeout, it will also remove most of the empty rows.

The script first processes the new adgrs, then KWs, then ads.

The script can process roughly 1000-1200 new items during 30 minutes. I personally have the script running every hour in one of my bigger accounts and it’s OK with me as it keeps working through the list of new items.

Handling of Duplicates

The script will not upload the same item again if it already exists in the account.

Statuses

All the items are uploaded as active.

DOWNLOAD FREE VERSION

And that’s all. Something not working as expected? Let me know in the comment section below!

DZ

***Not the Google Ads script you were looking for? I can also write custom Google Ads scripts to fit your needs. Contact me.***

2 thoughts on “Google Sheets to Google Ads Uploader

  1. Does an updated version exist? Migrated to the new Google Ads script environment + RSA’s instead of ETA’s?

    Also, this script could be awesome if it came with other upload/import functions (and sheet templates) such as;
    – Change Target-ROAS/CPA on campaign/ad group level
    – Change bid strategy and portfolio bid strategy
    – Add and change Seasonality adjustments
    – Change campaign settings incl. status, budget, location targeting, audiences etc.

    This, combined with an advanced reporting script – in order for me to make advanced formulas to make changes/optimizations through Google Sheets – would be awesome!

    1. Hi Morten,
      I do have a newer version with RSAs supoprted just not sure if I am gonna let it go for free 😀 I spent eternity on it plus I also need to some cleaning in the code first.

      Regarding your suggestions – those are all sounding good but they are very complex and I don’t think I would be able to build it in a way where the solution would fit for everyone.

      DZ

Leave a Reply

Your email address will not be published. Required fields are marked *