diff --git a/static/js/app.js b/static/js/app.js
index 11c8da0c5..59d80e715 100644
--- a/static/js/app.js
+++ b/static/js/app.js
@@ -102,7 +102,17 @@ function getMarkedDown(string) {
   return Markdown.getSanitizingConverter().makeHtml(string || '');
 }
 
-quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angular-tour', 'restangular', 'angularMoment', 'angulartics', /*'angulartics.google.analytics',*/ 'angulartics.mixpanel', 'mgcrea.ngStrap', 'ngCookies', 'ngSanitize', 'angular-md5', 'pasvaz.bindonce', 'ansiToHtml', 'ngAnimate'], function($provide, cfpLoadingBarProvider) {
+
+quayDependencies = ['ngRoute', 'chieffancypants.loadingBar', 'angular-tour', 'restangular', 'angularMoment',
+                    'mgcrea.ngStrap', 'ngCookies', 'ngSanitize', 'angular-md5', 'pasvaz.bindonce', 'ansiToHtml',
+                    'ngAnimate'];
+
+if (window.__config && window.__config.MIXPANEL_KEY) {
+  quayDependencies.push('angulartics');
+  quayDependencies.push('angulartics.mixpanel');
+}
+
+quayApp = angular.module('quay', quayDependencies, function($provide, cfpLoadingBarProvider) {
     cfpLoadingBarProvider.includeSpinner = false;
 
     /**
@@ -674,8 +684,8 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
       return cookieService;
     }]);
 
-    $provide.factory('UserService', ['ApiService', 'CookieService', '$rootScope',
-      function(ApiService, CookieService, $rootScope) {
+    $provide.factory('UserService', ['ApiService', 'CookieService', '$rootScope', 'Config',
+                                     function(ApiService, CookieService, $rootScope, Config) {
       var userResponse = {
         verified: false,
         anonymous: true,
@@ -705,15 +715,17 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
           userResponse = loadedUser;
 
           if (!userResponse.anonymous) {
-            mixpanel.identify(userResponse.username);
-            mixpanel.people.set({
-              '$email': userResponse.email,
-              '$username': userResponse.username,
-              'verified': userResponse.verified
-            });
-            mixpanel.people.set_once({
-              '$created': new Date()
-            })
+            if (Config.MIXPANEL_KEY) {
+              mixpanel.identify(userResponse.username);
+              mixpanel.people.set({
+                '$email': userResponse.email,
+                '$username': userResponse.username,
+                'verified': userResponse.verified
+              });
+              mixpanel.people.set_once({
+                '$created': new Date()
+              })
+            }
 
             if (window.olark !== undefined) {
               olark('api.visitor.getDetails', function(details) {
@@ -891,9 +903,9 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
       keyService['githubRedirectUri'] = Config.getUrl('/oauth2/github/callback');
       return keyService;
     }]);
-
-    $provide.factory('PlanService', ['KeyService', 'UserService', 'CookieService', 'ApiService', 'Features',
-        function(KeyService, UserService, CookieService, ApiService, Features) {
+  
+    $provide.factory('PlanService', ['KeyService', 'UserService', 'CookieService', 'ApiService', 'Features', 'Config',
+                                     function(KeyService, UserService, CookieService, ApiService, Features, Config) {
       var plans = null;
       var planDict = {};
       var planService = {};
@@ -1186,7 +1198,9 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
           if (submitted) { return; }
           submitted = true;
 
-          mixpanel.track('plan_subscribe');
+          if (Config.MIXPANEL_KEY) {
+            mixpanel.track('plan_subscribe');
+          }
 
           $scope.$apply(function() {
             if (callbacks['started']) {
@@ -1247,10 +1261,8 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
       });
     };
   }).
-  config(['$routeProvider', '$locationProvider', '$analyticsProvider',
-    function($routeProvider, $locationProvider, $analyticsProvider) {
-
-    $analyticsProvider.virtualPageviews(true);
+  config(['$routeProvider', '$locationProvider', 
+    function($routeProvider, $locationProvider) {
 
     $locationProvider.html5Mode(true);
 
@@ -1303,6 +1315,12 @@ quayApp = angular.module('quay', ['ngRoute', 'chieffancypants.loadingBar', 'angu
     RestangularProvider.setBaseUrl('/api/v1/');
   });
 
+  if (window.__config && window.__config.MIXPANEL_KEY) {
+    quayApp.config(['$analyticsProvider', function($analyticsProvider) {
+      $analyticsProvider.virtualPageviews(true);      
+    }]);
+  }
+
 
 function buildConditionalLinker($animate, name, evaluator) {
   // Based off of a solution found here: http://stackoverflow.com/questions/20325480/angularjs-whats-the-best-practice-to-add-ngif-to-a-directive-programmatically
@@ -1740,14 +1758,14 @@ quayApp.directive('signinForm', function () {
       'signInStarted': '&signInStarted',
       'signedIn': '&signedIn'
     },
-    controller: function($scope, $location, $timeout, ApiService, KeyService, UserService, CookieService, Features) {
+    controller: function($scope, $location, $timeout, ApiService, KeyService, UserService, CookieService, Features, Config) {
       $scope.showGithub = function() {
         if (!Features.GITHUB_LOGIN) { return; }
 
         $scope.markStarted();
 
         var mixpanelDistinctIdClause = '';
-        if (mixpanel.get_distinct_id !== undefined) {
+        if (Config.MIXPANEL_KEY && mixpanel.get_distinct_id !== undefined) {
           $scope.mixpanelDistinctIdClause = "&state=" + encodeURIComponent(mixpanel.get_distinct_id());
         }
 
@@ -1813,13 +1831,15 @@ quayApp.directive('signupForm', function () {
     scope: {
 
     },
-    controller: function($scope, $location, $timeout, ApiService, KeyService, UserService) {      
+    controller: function($scope, $location, $timeout, ApiService, KeyService, UserService, Config) {      
       $('.form-signup').popover();
 
-      angulartics.waitForVendorApi(mixpanel, 500, function(loadedMixpanel) {
-        var mixpanelId = loadedMixpanel.get_distinct_id();
-        $scope.github_state_clause = '&state=' + mixpanelId;    
-      });
+      if (Config.MIXPANEL_KEY) {
+        angulartics.waitForVendorApi(mixpanel, 500, function(loadedMixpanel) {
+          var mixpanelId = loadedMixpanel.get_distinct_id();
+          $scope.github_state_clause = '&state=' + mixpanelId;    
+        });
+      }
 
       $scope.githubClientId = KeyService.githubClientId;
 
@@ -1833,8 +1853,10 @@ quayApp.directive('signupForm', function () {
         ApiService.createNewUser($scope.newUser).then(function() {
           $scope.awaitingConfirmation = true;
           $scope.registering  = false;
-
-          mixpanel.alias($scope.newUser.username);
+          
+          if (Config.MIXPANEL_KEY) {
+            mixpanel.alias($scope.newUser.username);
+          }
         }, function(result) {
           $scope.registering  = false;
           $scope.registerError = result.data.message;
diff --git a/static/js/tour.js b/static/js/tour.js
index a6c5da0c0..d908346f1 100644
--- a/static/js/tour.js
+++ b/static/js/tour.js
@@ -135,7 +135,7 @@ angular.module("angular-tour", [])
         };
 
         var fireMixpanelEvent = function() {
-          if (!$scope.step || !mixpanel) { return; }
+          if (!$scope.step || !window['mixpanel']) { return; }
 
           var eventName = $scope.step['mixpanelEvent'];
           if (eventName) {
diff --git a/templates/base.html b/templates/base.html
index ae787e699..de435f460 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -38,6 +38,13 @@
 
     {% endblock %}
 
+    <script type="text/javascript">
+      window.__endpoints = {{ route_data|safe }}.apis;
+      window.__features = {{ feature_set|safe }};
+      window.__config = {{ config_set|safe }};
+      window.__token = '{{ csrf_token() }}';
+    </script>
+
     <script src="//code.jquery.com/jquery.js"></script>
     <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
 
@@ -52,9 +59,12 @@
     <script src="/static/lib/loading-bar.js"></script>
     <script src="/static/lib/angular-strap.min.js"></script>
     <script src="/static/lib/angular-strap.tpl.min.js"></script>
+
+    {% if mixpanel_key %}
     <script src="/static/lib/angulartics.js"></script>
     <script src="/static/lib/angulartics-mixpanel.js"></script>
-    <script src="/static/lib/angulartics-google-analytics.js"></script>
+    {% endif %}
+
     <script src="/static/lib/angular-md5.js"></script>
     <script src="/static/lib/bindonce.min.js"></script>
     <script src="/static/lib/ansi2html.js"></script>
@@ -71,23 +81,18 @@
 
     {% endblock %}
 
-    <script type="text/javascript">
-      window.__endpoints = {{ route_data|safe }}.apis;
-      window.__features = {{ feature_set|safe }};
-      window.__config = {{ config_set|safe }};
-      window.__token = '{{ csrf_token() }}';
-    </script>
-
     <script src="/static/js/tour.js?v={{ cache_buster }}"></script>
     <script src="/static/js/app.js?v={{ cache_buster }}"></script>
     <script src="/static/js/controllers.js?v={{ cache_buster }}"></script>
     <script src="/static/js/graphing.js?v={{ cache_buster }}"></script>
 
+{% if mixpanel_key %}
 <!-- start Mixpanel --><script type="text/javascript">
 (function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src=("https:"===e.location.protocol?"https:":"http:")+'//cdn.mxpnl.com/libs/mixpanel-2.2.min.js';f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f);b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==
 typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.track_charge people.clear_charges people.delete_user".split(" ");for(g=0;g<i.length;g++)f(c,i[g]);
 b._i.push([a,e,d])};b.__SV=1.2}})(document,window.mixpanel||[]);
 mixpanel.init("{{ mixpanel_key }}", { track_pageview : false, debug: {{ is_debug }} });</script><!-- end Mixpanel -->
+{% endif %}
   </head>
   <body>
     <div ng-class="!fixFooter ? 'wrapper' : ''">