Google Ads data to Google Sheets for FREE

Here's how you can get hourly data into Google Sheets for $0, no strings attached

I shared this a little while ago

Confused with a Claude AI subscription, I thought I could solve this easily, and I did!

Here is exactly how to get hourly refreshes on your Google Ads data to a Google Sheet for $0.

Supermetrics charge $899/mth for this functionality

Dataslayer charge $124.90/mth for this functionality

The Google Ads x Google Sheets extension doesn’t even have this functionality built in as it limits 1 account per sheet AND only allows for daily automated refreshes.

This will cost you $0 to download, install and maintain

And, the best part is that it doesn’t require

  • Any accounts

  • Any CC details for free trials

  • Giving away your account data to 3rd part companies

This is a no-strings attached method WITH a free budget tracker

No, let’s get into it!

How to get set up

Watch THIS VIDEO (<3min) on how to configure everything.

1) Duplicate THIS SHEET.

2) Get your sheet ID from the URL once you duplicate the sheet

3) Copy the script below

function main() {
  var today = new Date();
  var firstDayOfMonth = new Date(today.getFullYear(), today.getMonth(), 1);
  
  // Open the specific spreadsheet
  var spreadsheetId = "YOUR-SHEET-ID-HERE";
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sheet = spreadsheet.getSheetByName("RAW_DATA_EXPORT");
  
  // Create the sheet if it doesn't exist
  if (!sheet) {
    sheet = spreadsheet.insertSheet("RAW_DATA_EXPORT");
    sheet.appendRow(["Account Number", "Account Name", "Date", "Cost", "Conversions"]);
  } else {
    // Clear existing content if the sheet already exists
    sheet.clear();
    sheet.appendRow(["Account Number", "Account Name", "Date", "Cost", "Conversions"]);
  }
  
  // Check if this is an MCC account
  if (typeof AdsManagerApp !== 'undefined') {
    // MCC account
    var accounts = AdsManagerApp.accounts().get();
    while (accounts.hasNext()) {
      var account = accounts.next();
      AdsManagerApp.select(account);
      runReportForAccount(sheet, firstDayOfMonth, today);
    }
  } else {
    // Individual account
    runReportForAccount(sheet, firstDayOfMonth, today);
  }
  
  Logger.log("Report has been updated in the spreadsheet: " + spreadsheet.getUrl());
}

function runReportForAccount(sheet, firstDayOfMonth, today) {
  var report = AdsApp.report(
    "SELECT ExternalCustomerId, AccountDescriptiveName, Date, Cost, Conversions " +
    "FROM ACCOUNT_PERFORMANCE_REPORT " +
    "WHERE Date >= '" + formatDate(firstDayOfMonth) + "' AND Date <= '" + formatDate(today) + "' " +
    "ORDER BY Date ASC");
  
  var rows = report.rows();
  while (rows.hasNext()) {
    var row = rows.next();
    sheet.appendRow([
      row['ExternalCustomerId'],
      row['AccountDescriptiveName'],
      row['Date'],
      row['Cost'],
      row['Conversions']
    ]);
  }
}

function formatDate(date) {
  var year = date.getFullYear();
  var month = padZero(date.getMonth() + 1);
  var day = padZero(date.getDate());
  return year + "-" + month + "-" + day;
}

function padZero(number) {
  return (number < 10 ? '0' : '') + number;
}

4) Install in your MCC or single account. Authorize and preview

5) Set the script to run hourly

6) Add in the account number for the specific account in coluumn A of the Dashboard tab and add your monthly budget to get detailed metrics