Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Google Ads Script: Landing Page Conversion Rate Monitor
- Instructions:
- 1. Copy this entire script and paste it into your Google Ads script editor.
- 2. Replace '[email protected]' with the email address where you want to receive alerts.
- 3. (Optional) Adjust the CONVERSION_RATE_THRESHOLD value if you want to change the sensitivity of the alerts.
- 4. (Optional) Modify the DATE_RANGE_DAYS value if you want to analyze a different time period.
- 5. Save the script.
- 6. Run the script manually to test it, or set up a schedule for automated running.
- This script will:
- - Compare landing page performance over two consecutive periods (default: 14 days each).
- - Send an email alert if any landing page's conversion rate changes significantly.
- - Include click data for context in the email alert.
- - Add the account name to the email subject for easy identification.
- Note: Make sure you have the necessary permissions to create and run scripts in your Google Ads account.
- */
- function main() {
- var CONVERSION_RATE_THRESHOLD = 0.3; // 30% change
- var EMAIL_ADDRESS = '[email protected]'; // Replace with your email address
- var DATE_RANGE_DAYS = 14; // Number of days for each analysis period
- var account = AdsApp.currentAccount();
- var accountName = account.getName();
- var today = new Date();
- var periodEndDate = new Date(today.getTime() - DATE_RANGE_DAYS * 24 * 60 * 60 * 1000);
- var periodStartDate = new Date(periodEndDate.getTime() - DATE_RANGE_DAYS * 24 * 60 * 60 * 1000);
- var DATE_RANGE = formatDate(periodEndDate) + " AND " + formatDate(today);
- var PREVIOUS_DATE_RANGE = formatDate(periodStartDate) + " AND " + formatDate(periodEndDate);
- var report = AdsApp.report(
- "SELECT campaign.name, ad_group.name, ad_group_ad.ad.final_urls, " +
- "metrics.conversions, metrics.clicks " +
- "FROM ad_group_ad " +
- "WHERE segments.date BETWEEN " + DATE_RANGE
- );
- var rows = report.rows();
- var landingPageData = {};
- while (rows.hasNext()) {
- var row = rows.next();
- var urls = parseUrls(row['ad_group_ad.ad.final_urls']);
- var conversions = parseFloat(row['metrics.conversions']);
- var clicks = parseFloat(row['metrics.clicks']);
- urls.forEach(function(url) {
- if (!landingPageData[url]) {
- landingPageData[url] = { conversions: 0, clicks: 0 };
- }
- landingPageData[url].conversions += conversions;
- landingPageData[url].clicks += clicks;
- });
- }
- var previousReport = AdsApp.report(
- "SELECT ad_group_ad.ad.final_urls, " +
- "metrics.conversions, metrics.clicks " +
- "FROM ad_group_ad " +
- "WHERE segments.date BETWEEN " + PREVIOUS_DATE_RANGE
- );
- var previousRows = previousReport.rows();
- var previousLandingPageData = {};
- while (previousRows.hasNext()) {
- var row = previousRows.next();
- var urls = parseUrls(row['ad_group_ad.ad.final_urls']);
- var conversions = parseFloat(row['metrics.conversions']);
- var clicks = parseFloat(row['metrics.clicks']);
- urls.forEach(function(url) {
- if (!previousLandingPageData[url]) {
- previousLandingPageData[url] = { conversions: 0, clicks: 0 };
- }
- previousLandingPageData[url].conversions += conversions;
- previousLandingPageData[url].clicks += clicks;
- });
- }
- var alertMessages = [];
- for (var url in landingPageData) {
- var currentData = landingPageData[url];
- var previousData = previousLandingPageData[url] || { conversions: 0, clicks: 0 };
- var currentConvRate = currentData.clicks > 0 ? currentData.conversions / currentData.clicks : 0;
- var previousConvRate = previousData.clicks > 0 ? previousData.conversions / previousData.clicks : 0;
- if (previousConvRate > 0) {
- var convRateChange = Math.abs(currentConvRate - previousConvRate) / previousConvRate;
- if (convRateChange > CONVERSION_RATE_THRESHOLD) {
- var changeDirection = currentConvRate > previousConvRate ? 'increased' : 'decreased';
- var message = "Landing page: " + url + "\n" +
- "Conversion rate " + changeDirection + " by " + (convRateChange * 100).toFixed(2) + "%\n" +
- "Current conversion rate: " + (currentConvRate * 100).toFixed(2) + "%\n" +
- "Previous conversion rate: " + (previousConvRate * 100).toFixed(2) + "%\n" +
- "Current period clicks: " + currentData.clicks + "\n" +
- "Previous period clicks: " + previousData.clicks + "\n\n";
- alertMessages.push(message);
- }
- }
- }
- if (alertMessages.length > 0) {
- var emailBody = "Comparison of landing page performance:\n" +
- "Current period: Last " + DATE_RANGE_DAYS + " days\n" +
- "Previous period: " + DATE_RANGE_DAYS + " days prior to the current period\n\n" +
- "The following landing pages have experienced significant changes in conversion rates:\n\n" +
- alertMessages.join("");
- var emailSubject = "Landing Page Conversion Rate Alert - " + accountName;
- MailApp.sendEmail(EMAIL_ADDRESS, emailSubject, emailBody);
- }
- }
- function parseUrls(urlData) {
- if (typeof urlData === 'string') {
- try {
- var parsed = JSON.parse(urlData);
- return Array.isArray(parsed) ? parsed : [parsed];
- } catch (e) {
- return urlData.split(',').map(function(url) { return url.trim(); });
- }
- } else if (Array.isArray(urlData)) {
- return urlData;
- } else if (typeof urlData === 'object') {
- return Object.values(urlData);
- } else {
- return [];
- }
- }
- function formatDate(date) {
- var year = date.getFullYear();
- var month = ('0' + (date.getMonth() + 1)).slice(-2);
- var day = ('0' + date.getDate()).slice(-2);
- return year + month + day;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement