diff --git a/doc/source/stackalytics.rst b/doc/source/stackalytics.rst
new file mode 100644
index 0000000000..acbb45f019
--- /dev/null
+++ b/doc/source/stackalytics.rst
@@ -0,0 +1,39 @@
+:title: Stackalytics
+
+.. _stackalytics:
+
+Stackalytics
+############
+
+Stackalytics is a service that collects and processes development activity
+data such as commits, lines of code changed, code reviews and blueprints then
+makes it possible to visualize it in a convenient web dashboard. The
+Stackalytics dashboard makes it possible to view data by project, company,
+contributor, and other factors.
+
+The primary data sources for Stackalytics are the OpenStack Git repositories
+and the Gerrit review history.
+
+At a Glance
+===========
+
+:Hosts:
+  * http://stackalytics.openstack.org
+:Puppet:
+  * https://git.openstack.org/cgit/openstack-infra/puppet-stackalytics/tree/
+  * :file:`modules/openstack_project/manifests/stackalytics.pp`
+:Projects:
+  * https://git.openstack.org/cgit/openstack/stackalytics
+:Documentation:
+  * https://wiki.openstack.org/wiki/Stackalytics
+:Bugs:
+  * https://bugs.launchpad.net/stackalytics
+
+Installation
+============
+
+Gerrit Events
+-------------
+
+Create a dedicated service account, described in :ref:`request-account-label`,
+in order to properly stream events from :ref:`gerrit`.
diff --git a/doc/source/systems.rst b/doc/source/systems.rst
index 8d4e5f85ec..9441c0c859 100644
--- a/doc/source/systems.rst
+++ b/doc/source/systems.rst
@@ -23,6 +23,7 @@ Major Systems
    paste
    planet
    puppet
+   stackalytics
    static
    bandersnatch
    lists
diff --git a/manifests/site.pp b/manifests/site.pp
index 95ee507e05..f92cf695f6 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -145,6 +145,18 @@ node 'health.openstack.org' {
   }
 }
 
+# Node-OS: trusty
+node 'stackalytics.openstack.org' {
+  class { 'openstack_project::server':
+    iptables_public_tcp_ports => [80],
+    sysadmins                 => hiera('sysadmins', []),
+  }
+
+  class { 'openstack_project::stackalytics':
+    gerrit_ssh_user              => hiera('stackalytics_gerrit_ssh_user'),
+    stackalytics_ssh_private_key => hiera('stackalytics_ssh_private_key_contents'),
+  }
+}
 
 # Node-OS: precise
 node 'jenkins.openstack.org' {
diff --git a/modules.env b/modules.env
index 27331b468f..9fea6f6a48 100644
--- a/modules.env
+++ b/modules.env
@@ -123,6 +123,7 @@ INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-simpleproxy"]="o
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-snmpd"]="origin/master"
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-ssh"]="origin/master"
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-ssl_cert_check"]="origin/master"
+INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-stackalytics"]="origin/master"
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-statusbot"]="origin/master"
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-storyboard"]="origin/master"
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-subunit2sql"]="origin/master"
diff --git a/modules/openstack_project/manifests/cacti.pp b/modules/openstack_project/manifests/cacti.pp
index 4616e83e18..c0997c0c55 100644
--- a/modules/openstack_project/manifests/cacti.pp
+++ b/modules/openstack_project/manifests/cacti.pp
@@ -152,6 +152,7 @@ class openstack_project::cacti (
     'release.slave.openstack.org',
     'review-dev.openstack.org',
     'review.openstack.org',
+    'stackalytics.openstack.org',
     'static.openstack.org',
     'status.openstack.org',
     'subunit-worker01.openstack.org',
diff --git a/modules/openstack_project/manifests/stackalytics.pp b/modules/openstack_project/manifests/stackalytics.pp
new file mode 100644
index 0000000000..1a678b7acc
--- /dev/null
+++ b/modules/openstack_project/manifests/stackalytics.pp
@@ -0,0 +1,17 @@
+# == Class: openstack_project::stackalytics
+#
+class openstack_project::stackalytics (
+  $gerrit_ssh_user,
+  $stackalytics_ssh_private_key,
+  $vhost_name = $::fqdn,
+) {
+  class { '::stackalytics':
+    gerrit_ssh_user              => $gerrit_ssh_user,
+    stackalytics_ssh_private_key => $stackalytics_ssh_private_key,
+    vhost_name                   => $vhost_name,
+  }
+
+  realize (
+    User::Virtual::Localuser['pabelanger'],
+  )
+}