Skip to content

Instantly share code, notes, and snippets.

@dustinrecko
dustinrecko / shoppingWhitelist.js
Last active March 28, 2019 15:41
OMR | Shopping Whitelist
/*
* Specify the link to your spreadsheet and the name of the relevant sheet here. You can use sheets to manage multiple accounts.
*/
function getSpreadsheet() {
var spreadsheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1vBAiXAb38Fdhwz00B7-sE3HMQJvQnUtc3amgunsvQcM/");
var sheet = spreadsheet.getSheetByName( "AccountName" );
return sheet.getRange("A:Z").getValues();
}
function main() {
function main() {
var queryReport = AdWordsApp.report(
"SELECT CampaignName,AdGroupName, AdGroupId, Query, Clicks, Impressions " +
"FROM SEARCH_QUERY_PERFORMANCE_REPORT " +
"WHERE Clicks > 0 " +
"AND CampaignName DOES_NOT_CONTAIN_IGNORE_CASE 'Shopping' " +
"AND CampaignStatus = ENABLED " +
"AND AdGroupStatus = ENABLED " +
"DURING LAST_7_DAYS" ).rows();
@dustinrecko
dustinrecko / Code.gs
Created October 1, 2018 07:01
OMR | Performance Monitoring in Slack via Labels
/**
* AdWords Performance Monitoring in Slack via Labels
* @author: Dustin Recko
*
*/
// Config Section //>
var DB_URL = 'https://...'; // The Firebase Database URL
var DB_AUTH = 'xxx'; // The Firebase Database Secret
/**
* Analytics Segment Provision in Tag Manager
* @author: Dustin Recko
*
*/
var TAG_MANAGER_CONFIG = {
accountId: '',
containerId: '',
workspaceId: ''
<script>
(function(){
var xmlhttp = new XMLHttpRequest();
var db = "https://your-database.firebaseio.com/"+{{Client Id}}.replace(/\./g,"_")+".json";
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
window.gaIds = JSON.parse(this.responseText);
}
};
@dustinrecko
dustinrecko / worker.js
Created November 29, 2018 07:45
Cloudflare Worker Googlebot Tracking
const analyticsId = 'UA-xxxxxxxxx-x'
addEventListener('fetch', event => {
event.respondWith(handleRequest(event))
})
/**
* Check request object for Googlebot UA to send tracking data
* @param {Event} event
*/
@dustinrecko
dustinrecko / worker.js
Last active March 16, 2022 21:24
Tag Manager for Medium with Cloudflare Workers
/**
* Main worker entry point.
*
*/
addEventListener("fetch", event => {
// Fail-safe in case of an unhandled exception
event.passThroughOnException();
event.respondWith(processRequest(event.request, event));
});
@dustinrecko
dustinrecko / customModel.js
Last active February 17, 2019 08:15
Deduping Google Analytics Transaction Hits - customTask
function () {
return function (model) {
var proxyDomain = "https://<yourdomain.com>/collect";
var proxySendHitTask = function () {
function pixel(hitPayload) {
var result = false;
try {
document.createElement("img").src = proxyDomain + "?" + hitPayload, result = true
} catch (e) {}
return result
@dustinrecko
dustinrecko / worker.js
Created February 17, 2019 08:15
Deduping Google Analytics Transaction Hits - Cloudflare Worker
addEventListener('fetch', event => {
if(event.request.url.indexOf('/collect') > -1)
event.waitUntil(process(event.request))
event.respondWith(new Response('',{status:200}))
})
/**
* CONFIG SECTION
*/
const ANALYTICS_URL = 'https://www.google-analytics.com'
@dustinrecko
dustinrecko / worker-snippet.js
Created February 26, 2019 19:54
Set Google Analytics Client Id Cookie with Cloudflare Workers
response.headers.append('Set-Cookie', `_ga=${["GA1", trackingDomain.split('.').length, crypto.getRandomValues(new Uint32Array(1))[0] & 2147483647, Math.round((new Date).getTime() / 1E3)].join(".")}; Domain=.${trackingDomain}; Max-Age=63072000;`);