I have a script which helps to exclude placements from GDN campaigns marked with a special label under following conditions:
function getCampaigns() {
return AdWordsApp.campaigns().withCondition("LabelNames CONTAINS_ANY ['PlacementCleaner']").get();
}
function getReport(period, campaign) {
var periodString = " DURING " + period;
var query = "SELECT Domain, AdGroupName, Impressions, Clicks, Ctr, Conversions FROM AUTOMATIC_PLACEMENTS_PERFORMANCE_REPORT "
+ " WHERE CampaignName = \"" + campaign.getName() + '\" ' + periodString;
//Logger.log('Making query ' + query);
var report = AdWordsApp.report(query);
return report.rows();
}
function filterByImpressions(campaign, period, impressionsLimit, CTRLimit, conversionsLimit) {
var rows = getReport(period, campaign);
while (rows.hasNext()) {
var row = rows.next();
var placement = row['Domain'];
if ((row['Impressions'] > impressionsLimit) &&
(parseFloat(row['Ctr']) < CTRLimit) &&
(row['Conversions'] < conversionsLimit)
) {
var adGroup = getAdGroupByName(row['AdGroupName'], campaign.getName());
excludePlacementAdgroup(adGroup, placement.toString());
Logger.log('Excluded ' + placement.toString()
+ ' from ' + campaign.getName() + ' ' + adGroup
+ ' for bad performance (impressions) within ' + period
+ ' | impressions ' + row['Impressions']
+ ' CTR ' + row['Ctr']
+ ' Conversions ' + row['Conversions']
);
}
}
}
function massFilterByImpressions(campaigns, period, impressionsLimit, CTRLimit, conversionsLimit) {
while (campaigns.hasNext()) {
var campaign = campaigns.next();
Logger.log('Processing campaign ' + campaign);
filterByImpressions(campaign, period, impressionsLimit, CTRLimit, conversionsLimit)
}
}
function getAdGroupByName(adGroupName, campaignName) {
var adGroupIterator = AdWordsApp.adGroups().withCondition('Name = "' + adGroupName + '"')
.withCondition('CampaignName = "' + campaignName + '"').get();
if (adGroupIterator.hasNext()) {
return adGroupIterator.next();
}
}
function excludePlacementAdgroup(adGroup, Domain) {
var excludePlacement = adGroup.display().newPlacementBuilder();
excludePlacement.withUrl(Domain.toString()).exclude();
}
function excludePlacementCampaign(campaign, Domain) {
var excludePlacement = campaign.display().newPlacementBuilder();
excludePlacement.withUrl(Domain.toString()).exclude();
}
function main() {
massFilterByImpressions(getCampaigns(), 'LAST_30_DAYS', 1000, 0.05, 1);
}
How do I have to modify it for admob campaigns? To have a possibility to exclude not only websites, but mobile apps also?