Marc_Cornelius

Google Ads - Automated Reports v1.0

Jul 22nd, 2024
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  1. function main() {
  2. const monthYearFormat = "MMMM";
  3. const numberFormat = "#,##0";
  4. const currencyFormat = "€#,##0";
  5. const percentageFormat = "0.00%";
  6.  
  7. var today = new Date();
  8. var previousMonth = new Date(today.getFullYear(), today.getMonth() - 1, 1);
  9. var twoMonthsAgo = new Date(today.getFullYear(), today.getMonth() - 2, 1);
  10.  
  11. var mccAccount = AdsApp.currentAccount();
  12. var accounts = AdsManagerApp.accounts().get();
  13.  
  14. var sheet = SpreadsheetApp.openByUrl('<Spreadsheet URL>'); // Change this if using a different spreadsheet
  15. var dataSheet = sheet.getSheetByName('<Sheet Name>'); // Enter the name of the sheet
  16.  
  17. while (accounts.hasNext()) {
  18. var account = accounts.next();
  19. AdsManagerApp.select(account);
  20.  
  21. var rowPreviousMonth = createRowForMonth(previousMonth);
  22. var rowTwoMonthsAgo = createRowForMonth(twoMonthsAgo);
  23.  
  24. AdsManagerApp.select(mccAccount);
  25.  
  26. var roiPreviousMonth = (rowPreviousMonth.conversionValue / rowPreviousMonth.cost).toFixed(2);
  27. var roiTwoMonthsAgo = (rowTwoMonthsAgo.conversionValue / rowTwoMonthsAgo.cost).toFixed(2);
  28.  
  29. dataSheet.appendRow([
  30. account.getName(),
  31. '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
  32. roiTwoMonthsAgo,
  33. '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
  34. roiPreviousMonth
  35. ]);
  36.  
  37. // Update the corresponding number formatting as per your new data placement
  38. dataSheet.getRange(dataSheet.getLastRow(), 7, 1, 2).setNumberFormat(numberFormat);
  39. dataSheet.getRange(dataSheet.getLastRow(), 9, 1, 2).setNumberFormat(numberFormat);
  40. dataSheet.getRange(dataSheet.getLastRow(), 11, 1, 1).setNumberFormat(currencyFormat);
  41. dataSheet.getRange(dataSheet.getLastRow(), 12, 1, 1).setNumberFormat(currencyFormat);
  42. dataSheet.getRange(dataSheet.getLastRow(), 8, 1, 1).setNumberFormat(percentageFormat);
  43. dataSheet.getRange(dataSheet.getLastRow(), 16, 1, 2).setNumberFormat(numberFormat);
  44. dataSheet.getRange(dataSheet.getLastRow(), 18, 1, 2).setNumberFormat(numberFormat);
  45. dataSheet.getRange(dataSheet.getLastRow(), 20, 1, 1).setNumberFormat(currencyFormat);
  46. dataSheet.getRange(dataSheet.getLastRow(), 21, 1, 1).setNumberFormat(currencyFormat);
  47. dataSheet.getRange(dataSheet.getLastRow(), 17, 1, 1).setNumberFormat(percentageFormat);
  48. dataSheet.getRange(dataSheet.getLastRow(), 13, 1, 1).setNumberFormat(numberFormat);
  49. dataSheet.getRange(dataSheet.getLastRow(), 25, 1, 1).setNumberFormat(numberFormat);
  50. }
  51. }
  52.  
  53. function parseCurrency(value) {
  54. if (typeof value === "string") {
  55. // Remove currency symbols, thousand separators and convert to a number
  56. return parseFloat(value.replace(/[^0-9.-]+/g, ""));
  57. }
  58. return value; // If it's already a number, just return it
  59. }
  60.  
  61. function createRowForMonth(date) {
  62. var firstDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1);
  63. var lastDayOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0);
  64. var report = AdsApp.report(
  65. `SELECT Clicks, Conversions, Impressions, ConversionValue, Cost
  66. FROM ACCOUNT_PERFORMANCE_REPORT
  67. DURING ${Utilities.formatDate(firstDayOfMonth, "PST", "yyyyMMdd")},${Utilities.formatDate(lastDayOfMonth, "PST", "yyyyMMdd")}`
  68. );
  69. var rows = report.rows();
  70. while (rows.hasNext()) {
  71. var row = rows.next();
  72. var conversionValue = parseCurrency(row['ConversionValue']);
  73. var cost = parseCurrency(row['Cost']);
  74. var roi = (conversionValue / cost).toFixed(2);
  75. return {
  76. clicks: row['Clicks'],
  77. conversions: row['Conversions'],
  78. impressions: row['Impressions'],
  79. conversionValue: conversionValue,
  80. cost: cost,
  81. conversionRate: row['Conversions'] / row['Clicks'],
  82. roi: roi
  83. };
  84. }
  85. return {};
  86. }
  87.  
Add Comment
Please, Sign In to add comment