Google Ads Scripts Raportare automată pe mail [RO] Cum funcționează? Acest script automatizează procesul de generare a rapoartelor de performanță, precum costurile, conversiile și numele campaniilor Google Ads, pe diverse intervale de timp și trimite aceste rapoarte prin email sub formă de tabele HTML bine structurate. Este un instrument util pentru monitorizarea eficientă a campaniilor de marketing și pentru menținerea echipei informate în mod regulat. [EN] How does it work? This script automates the process of generating performance reports, such as costs, conversions, and campaign names for Google Ads campaigns over various time intervals, and sends these reports via email in the form of well-structured HTML tables. It is a useful tool for efficiently monitoring marketing campaigns and keeping the team regularly informed. function main() { var reportConfigs = [ {days: 7, label: “Last 7 Days”}, {days: 14, label: “Last 14 Days”}, {days: 30, label: “Last 30 Days”} ]; var recipientEmails = “example.mail@gmail.com”; var subject = “Raport Cost Google Ads”; var body = “Raport al costurilor campaniilor pentru ultimele 7, 14 și 30 de zile:”; for (var i = 0; i < reportConfigs.length; i++) { var days = reportConfigs[i].days; var label = reportConfigs[i].label; var campaignReport = AdsApp.report( "SELECT CampaignName, Cost, AccountCurrencyCode, Conversions " + "FROM CAMPAIGN_PERFORMANCE_REPORT " + "WHERE Impressions > 0 ” + “DURING LAST_” + days + “_DAYS”); var rows = campaignReport.rows(); var data = []; while (rows.hasNext()) { var row = rows.next(); var rowData = [ row[“CampaignName”], row[“Cost”], row[“AccountCurrencyCode”], row[“Conversions”] ]; data.push(rowData); } // Format data as HTML table var htmlTable = “”; htmlTable += “” + label + “”; htmlTable += “Nume campaniiCostValutaConversii”; for (var j = 0; j < data.length; j++) { htmlTable += "" + data[j][0] + "" + data[j][1] + "" + data[j][2] + "" + data[j][3] + ""; } htmlTable += ""; // Add table to email body body += htmlTable; } // Send data to email MailApp.sendEmail({ to: recipientEmails, subject: subject, htmlBody: body }); Logger.log("Data sent to email: " + recipientEmails); } Cum să Implementezi Scriptul Navighează la interfața Google Ads. Mergi la “Instrumente și Setări” (pictograma cheii) în colțul din dreapta sus. Sub “Acțiuni în masă”, selectează “Scripturi”. Click pe butonul albastru plus pentru a crea un nou script. Copiază și lipeste scriptul furnizat în editor. Autorizează scriptul să acceseze contul tău Google Ads urmând instrucțiunile. Salvează și previzualizează scriptul pentru a te asigura că rulează corect. Programează scriptul să ruleze zilnic pentru a menține actualizați parametrii personalizați. Contactează-ne!
Category: <span>Google Ads Scripts</span>
Google Ads Scripts Search terms additions Cum funcționează? Acest script este un instrument pentru automatizarea adăugării de cuvinte cheie în Google Ads, în special pentru conturile mari cu volume mari de date. Urmând acest tutorial, poți configura și personaliza scriptul pentru a răspunde nevoilor tale specifice, asigurând performanța optimă a contului tău fără a fi nevoie de intervenții manuale constante. Scriptul este conceput pentru a adăuga termeni de căutare cu conversii ridicate în grupurile de anunțuri relevante ca și cuvinte cheie, pe baza unor criterii specifice precum tipul de potrivire, conversiile, CPA și ROAS. Cerințe preliminare: Acces la contul Google Ads cu permisiuni pentru a crea și rula scripturi. Un Google Spreadsheet pentru înregistrarea adăugărilor de cuvinte cheie. Configurarea Scriptului Trebuie să personalizezi anumite variabile din script pentru a-l adapta la nevoile tale specifice: ✘1.Perioada de Observare: Setează câte zile în urmă scriptul trebuie să caute termeni de căutare cu conversii. var LOOKBACK_DAYS = 30; // Exemplu: 30 zile ✘2.Tipul de Potrivire: Definiți tipul de potrivire pentru cuvintele cheie care vor fi adăugate (de exemplu, EXACT, PHRASE, BROAD). var MATCH_TYPE = ‘EXACT’; // Exemplu: Potrivire exactă ✘3.Filtre pentru Grupuri de Anunțuri și Campanii: Opțional, filtrează după numele grupurilor de anunțuri sau campaniilor. Acest lucru te ajută să eviți erorile de timeout prin reducerea datelor procesate. var INCLUDE_ADGROUP_NAME_CONTAINS = “”; // Exemplu: “exact”var INCLUDE_CAMPAIGN_NAME_CONTAINS = “”; // Exemplu: “brand” ✘4.URL-ul Spreadsheet-ului: Furnizează URL-ul Google Spreadsheet-ului unde vor fi stocate înregistrările. var SPREADSHEET_URL = ‘URL_SPREADSHEET_AICI’; ✘5.Conversii Minime: Setează numărul minim de conversii pe care trebuie să le aibă un termen de căutare pentru a fi adăugat ca și cuvânt cheie. var MIN_CONVERSIONS = 1; ✘6.Praguri CPA și ROAS: Definiți pragurile pentru CPA (Cost per Achiziție) și ROAS (Return on Ad Spend) dacă este necesar. var CPA_THRESHOLD = 100; // Exemplu: Adăugați doar cuvinte cheie cu CPA sub 100 USDvar ROAS_THRESHOLD = 0.5; // Exemplu: Adăugați doar cuvinte cheie cu ROAS peste 0.5 var logEntries = []; function main() { // Set your tresholds here var LOOKBACK_DAYS = 30; var MATCH_TYPE = ‘EXACT’; //select what match type you want the queries to be added as var INCLUDE_ADGROUP_NAME_CONTAINS = “”; //filter for ad group name, if no filter it will consider all ad groups var INCLUDE_CAMPAIGN_NAME_CONTAINS = “”; //HIGHLY RECOMMENDED, without campaign filters GAQL will run into limits fast. Filter for campaign name, if no filter it will consider all campaigns var SPREADSHEET_URL = ”; //insert your own spreadsheet URL here, make sure it’s set to public editing var MIN_CONVERSIONS = 1; //set minimum amount of conversions var CPA_THRESHOLD = null; //leave null if you don’t want a maximum CPA threshold. Otherwise, set a max CPA threshold e.g. if you set it to 100 it will not add queries as keywords that exceed a CPA of 100 var ROAS_THRESHOLD = null; //leave null if you don’t want a minimum ROAS threshold. Otherwise, set a minimum ROAS threshold e.g. if you set it to 0.5 it will not add queries as keywords that have a ROAS lower than 0.5 // end of tresholds var dateRange = getDateRange(LOOKBACK_DAYS); var startDate = dateRange.startDate; var endDate = dateRange.endDate; var campaigns = AdsApp.campaigns() .withCondition(“Status = ENABLED”) //filter only for enabled campaigns, if you want to run it on paused campaigns for some reason change the word ENABLED to PAUSED .withCondition(“AdvertisingChannelType = SEARCH”) //filter for search campaigns to not into errors with shopping or pmax campaigns .get(); var adGroupIds = []; var campaignIds = []; while (campaigns.hasNext()) { var campaign = campaigns.next(); if (INCLUDE_CAMPAIGN_NAME_CONTAINS && !campaign.getName().toLowerCase().includes(INCLUDE_CAMPAIGN_NAME_CONTAINS.toLowerCase())) { continue; } campaignIds.push(campaign.getId()); var adGroups = campaign.adGroups() .withCondition(“Status = ENABLED”) //filter only for enabled ad groups, if you want to run it on paused ad groups for some reason change the word ENABLED to PAUSED .withCondition(“AdGroupType != SEARCH_DYNAMIC_ADS”) //filter our dynamic search ads as we cannot add keywords there .get(); while (adGroups.hasNext()) { var adGroup = adGroups.next(); if (INCLUDE_ADGROUP_NAME_CONTAINS && !adGroup.getName().toLowerCase().includes(INCLUDE_ADGROUP_NAME_CONTAINS.toLowerCase())) { continue; } adGroupIds.push(adGroup.getId()); } } if (adGroupIds.length > 0) { //GAQL query that fetches only search terms with view status none, have not been added or excluded var query = ` SELECT campaign.name, search_term_view.ad_group, search_term_view.search_term, metrics.clicks, metrics.conversions, metrics.conversions_value, metrics.cost_micros, metrics.conversions_value_per_cost, metrics.cost_per_conversion, search_term_view.status FROM search_term_view WHERE search_term_view.status = ‘NONE’ AND metrics.conversions > ${MIN_CONVERSIONS – 1} AND ad_group.id IN (${adGroupIds.join(“,”)}) AND segments.date BETWEEN ‘${startDate}’ AND ‘${endDate}’ `; var report = AdsApp.report(query); var rows = report.rows(); while (rows.hasNext()) { var row = rows.next(); var searchTerm = row[“search_term_view.search_term”]; var conversions = parseFloat(row[“metrics.conversions”]); var cost = parseFloat(row[“metrics.cost_micros”]) / 1000000; var conversionValue = parseFloat(row[“metrics.conversions_value”]) / 1000000; var roas = parseFloat(row[“metrics.conversions_value_per_cost”]); var cpa = parseFloat(row[“metrics.cost_per_conversion”]) / 1000000; // where statements for cpa and roas in GAQL not possible so I added them to be sequenced later if ((CPA_THRESHOLD !== null && cpa > CPA_THRESHOLD) || (ROAS_THRESHOLD !== null && roas < ROAS_THRESHOLD)) { Logger.log("Did not add keyword: " + searchTerm + " due to CPA (" + cpa + ") or ROAS (" + roas + ") thresholds."); continue; } try { var adGroupId = row["search_term_view.ad_group"].split("/").pop(); // Extract numeric ID var adGroup = AdsApp.adGroups().withIds([parseInt(adGroupId)]).get().next(); adGroup.newKeywordBuilder().withText(formatKeywordText(searchTerm, MATCH_TYPE)).build(); Logger.log("Added keyword: " + searchTerm + " to ad group: " + adGroup.getName()); logAdditionToSheet(row["campaign.name"], adGroup.getName(), searchTerm, MATCH_TYPE, conversions, cpa.toFixed(2), roas.toFixed(8)); } catch (e) { Logger.log("Failed to add keyword: " + searchTerm + " - " + e.message); } } } writeLogsToSheet(SPREADSHEET_URL); } function getDateRange(lookbackDays) { var today = new Date(); var endDate = formatDate(today); var startDate = new Date(today.getTime() - (lookbackDays * 24 * 60 * 60 * 1000)); return { startDate: formatDate(startDate), endDate: endDate }; } //senator, we run ads function formatDate(date) { var year = date.getFullYear(); var month = (date.getMonth() + 1).toString().padStart(2, '0'); var day = date.getDate().toString().padStart(2, '0'); return year + "-" + month + "-" + day; } function formatKeywordText(searchTerm, matchType) { switch (matchType) { case 'PHRASE': return """ + searchTerm + """; case 'EXACT': return "[" + searchTerm + "]"; case 'BROAD': default: return searchTerm; } } // Logs function logAdditionToSheet(campaignName, adGroupName, keyword, matchType, conversions, cpa, roas) { var dateAdded = new Date().toLocaleDateString(); logEntries.push([campaignName, adGroupName,
Google Ads Scripts Pause Keywords – CTR & COST Economisește timp și optimizează-ți bugetul lăsând scriptul să pună automat pe pauză cuvintele cheie care au performanțe slabe și îți epuizează resursele. Cum funcționează? Acest script automatizează procesul de identificare și oprire a cuvintelor cheie care nu îndeplinesc criteriile tale de performanță. Se concentrează pe grupurile de anunțuri specificate de tine și analizează performanța cuvintelor cheie din ultimele 30 de zile, pe baza unor praguri stabilite pentru rata de click și cost. function main() { var TARGET_ADGROUP_NAMES = [‘Name of the AD GROUP’]; // Add your ad group names here var CTR_THRESHOLD = 0.05; // 5% CTR threshold var COST_THRESHOLD = 30; // 30 Currency cost threshold var adGroups = AdsApp.adGroups() .withCondition(“Status = ENABLED”) .get(); while (adGroups.hasNext()) { var adGroup = adGroups.next(); var adGroupName = adGroup.getName(); // Check if the current ad group is one of the target ad groups if (TARGET_ADGROUP_NAMES.indexOf(adGroupName) !== -1) { var keywords = adGroup.keywords() .withCondition(“Status = ENABLED”) .get(); while (keywords.hasNext()) { var keyword = keywords.next(); var stats = keyword.getStatsFor(“LAST_30_DAYS”); // Get stats for the last 30 days var ctr = stats.getCtr(); var cost = stats.getCost(); // Assuming the cost is reported in RON if (ctr < CTR_THRESHOLD && cost < COST_THRESHOLD) { keyword.pause(); // Pausing the keyword } } } } } Cum să Implementezi Scriptul Navighează la interfața Google Ads. Mergi la “Instrumente și Setări” (pictograma cheii) în colțul din dreapta sus. Sub “Acțiuni în masă”, selectează “Scripturi”. Click pe butonul albastru plus pentru a crea un nou script. Copiază și lipeste scriptul furnizat în editor. Autorizează scriptul să acceseze contul tău Google Ads urmând instrucțiunile. Salvează și previzualizează scriptul pentru a te asigura că rulează corect. Programează scriptul să ruleze zilnic pentru a menține actualizați parametrii personalizați. Contactează-ne!
Google Ads Scripts Auto-etichetare la nivel de cont Auto-etichetarea în Google Ads este o metodă de a adăuga automat parametri UTM la URL-urile reclamelor tale, permițându-ți să urmărești performanța reclamelor în Google Analytics. Aici, vom activa auto-etichetarea la nivel de cont și vom folosi un script pentru a seta parametri personalizați pentru campanii și grupuri de anunțuri. Pasul 1: Adăugarea Parametrilor UTM în Setările la Nivel de Cont Mai întâi, trebuie să adaugi parametri UTM în setările la nivel de cont. Acest lucru poate fi făcut în interfața Google Ads. Navighează la contul tău Google Ads. Mergi la “Setări” în meniul din stânga. Selectează “Setări cont”. Găsește câmpul “Șablon de urmărire” și adaugă următorii parametri: {lpurl}?utm_source=google&utm_campaign={_campaign}&utm_medium=cpc&utm_content={_adgroup}&utm_term={keyword} Pasul 2: Script pentru Setarea Parametrilor Personalizați (Numele Campaniei și al Grupului de Anunțuri) Următorul script va seta automat parametri personalizați pentru grupurile tale de anunțuri, înlocuind spațiile cu sublinieri în numele campaniilor și al grupurilor de anunțuri. Acest script ar trebui rulat zilnic pentru a asigura actualizarea regulată a parametrilor. function main() { let adGroups = AdsApp.adGroups() .withCondition(“CampaignStatus = ENABLED”) .get(); while (adGroups.hasNext()) { let adGroup = adGroups.next(); let group = adGroup.getName().replace(/s/g, ‘_’); let campaign = adGroup.getCampaign().getName().replace(/s/g, ‘_’); adGroup.urls().setCustomParameters({ adgroup: group, campaign: campaign }); } } Cum să Implementezi Scriptul Navighează la interfața Google Ads. Mergi la “Instrumente și Setări” (pictograma cheii) în colțul din dreapta sus. Sub “Acțiuni în masă”, selectează “Scripturi”. Click pe butonul albastru plus pentru a crea un nou script. Copiază și lipeste scriptul furnizat în editor. Autorizează scriptul să acceseze contul tău Google Ads urmând instrucțiunile. Salvează și previzualizează scriptul pentru a te asigura că rulează corect. Programează scriptul să ruleze zilnic pentru a menține actualizați parametrii personalizați. Rezumat Activând auto-etichetarea la nivel de cont și folosind scriptul furnizat, poți asigura că URL-urile reclamelor tale sunt etichetate constant cu parametrii UTM necesari. Acest lucru permite o mai bună urmărire și analiză a performanței reclamelor în Google Analytics, ajutându-te să iei decizii bazate pe date pentru campaniile tale. Contactează-ne!
Google Ads Scripts – Cost Alert RO: Cum funcționează?Dacă costul pe conversie depășește o limită stabilită de tine, vei primi un mail atunci când rulează scriptul, arătând costul mediu pe conversie pentru ultimele 30 de zile și media pentru acea zi. ENG: How it works?If the cost per conversion exceeds a limit you set, you will receive an mail when the script runs, showing the average cost per conversion over the last 30 days and the average for that day. var emailAddress = “contact@encorem.ro”; // Replace with your email addressvar campaignThreshold = 10; // Set your desired threshold for campaigns in your currencyvar keywordThreshold = 10; // Set your desired threshold for search terms in your currency javascript function main() { var emailAddress = “contact@encorem.ro”; // Replace with your email address var campaignThreshold = 10; // Set your desired threshold for campaigns in EURO var keywordThreshold = 10; // Set your desired threshold for search terms in EURO // Get the account var account = AdsApp.currentAccount(); // Get all campaigns in the account var campaignIterator = AdsApp.campaigns().get(); var tableRows = []; while (campaignIterator.hasNext()) { var campaign = campaignIterator.next(); // Calculate average conversion cost for the last 30 days for campaigns var campaignStats = campaign.getStatsFor(“LAST_30_DAYS”); var campaignConversions = campaignStats.getConversions(); var campaignCost = campaignStats.getCost(); var campaignAvgConvCost = campaignCost / campaignConversions; // Check if the average conversion cost for the campaign exceeds the campaign threshold if (campaignAvgConvCost > campaignThreshold) { var highCostSearchTerms = getHighCostSearchTerms(campaign, keywordThreshold); for (var i = 0; i < highCostSearchTerms.length; i++) { var rowData = [ campaign.getName(), campaignAvgConvCost.toFixed(2) + " EURO", highCostSearchTerms[i].term, highCostSearchTerms[i].avgConvCost ]; tableRows.push(rowData); } } } // Create an HTML table with dynamic introductory text var introText = "List of campaigns + search terms containing high costs. Campaign threshold set at: " + campaignThreshold + " EURO, Search term threshold set at: " + keywordThreshold + " EURO"; var tableHtml = "" + introText + " Campaign Name Average Cost Conv. - 30 Days Search Terms Average Cost Conv. - Today "; for (var i = 0; i < tableRows.length; i++) { tableHtml += ""; tableHtml += "" + tableRows[i][0] + ""; tableHtml += "" + tableRows[i][1] + ""; tableHtml += "" + tableRows[i][2] + ""; tableHtml += "" + tableRows[i][3] + ""; tableHtml += ""; } tableHtml += ""; // Send email alert with the HTML table var subject = "Google Ads Alert - High Conversion Cost"; sendEmail(emailAddress, subject, tableHtml); } function getHighCostSearchTerms(campaign, threshold) { var highCostTerms = []; var queryIterator = campaign.keywords() .withCondition("Conversions > 0″) .forDateRange(“TODAY”) .get(); while (queryIterator.hasNext()) { var keyword = queryIterator.next(); var keywordStats = keyword.getStatsFor(“TODAY”); var keywordConversions = keywordStats.getConversions(); var keywordCost = keywordStats.getCost(); var keywordAvgConvCost = keywordCost / keywordConversions; // Check if the average conversion cost for the keyword exceeds the keyword threshold if (keywordAvgConvCost > threshold) { highCostTerms.push({ term: keyword.getText(), avgConvCost: keywordAvgConvCost.toFixed(2) + ” EURO” }); } } return highCostTerms; } function sendEmail(recipient, subject, message) { MailApp.sendEmail({ to: recipient, subject: subject, htmlBody: message }); } Cum să Implementezi Scriptul Navighează la interfața Google Ads. Mergi la “Instrumente și Setări” (pictograma cheii) în colțul din dreapta sus. Sub “Acțiuni în masă”, selectează “Scripturi”. Click pe butonul albastru plus pentru a crea un nou script. Copiază și lipeste scriptul furnizat în editor. Autorizează scriptul să acceseze contul tău Google Ads urmând instrucțiunile. Salvează și previzualizează scriptul pentru a te asigura că rulează corect. Contactează-ne!