diff --git a/doc/source/irc.rst b/doc/source/irc.rst
index 60218985d6..00984f992a 100644
--- a/doc/source/irc.rst
+++ b/doc/source/irc.rst
@@ -15,10 +15,12 @@ At a Glance
   * http://eavesdrop.openstack.org/
   * http://review.openstack.org/
   * https://wiki.openstack.org/wiki/Infrastructure_Status
+  * http://ptg.openstack.org/
 :Puppet:
   * https://git.openstack.org/cgit/openstack-infra/puppet-meetbot/tree/
   * https://git.openstack.org/cgit/openstack-infra/puppet-statusbot/tree/
   * https://git.openstack.org/cgit/openstack-infra/puppet-gerritbot/tree/
+  * https://git.openstack.org/cgit/openstack-infra/puppet-ptgbot/tree/
   * :file:`modules/openstack_project/manifests/eavesdrop.pp`
   * :file:`modules/openstack_project/manifests/review.pp`
 :Configuration:
@@ -30,6 +32,7 @@ At a Glance
   * https://git.openstack.org/cgit/openstack-infra/meetbot
   * https://git.openstack.org/cgit/openstack-infra/gerritbot
   * https://git.openstack.org/cgit/openstack-infra/statusbot
+  * https://git.openstack.org/cgit/openstack/ptgbot
 :Bugs:
   * https://storyboard.openstack.org/#!/project/748
 
@@ -250,6 +253,21 @@ Example:
   - name: openstack-third-party-ci
     mask: full_mask
 
+PTG Bot
+=======
+
+Bot that `Project Teams Gathering <https://www.openstack.org/ptg>`_
+room moderators use to surface what's currently happening at the
+event. Usage instructions are provided in its `README.rst file
+<https://git.openstack.org/cgit/openstack/ptgbot/tree/README.rst>`_.
+It writes some static content into ``/var/lib/ptgbot/www`` on the
+eavesdrop.openstack.org server and then serves that from a
+http://ptg.openstack.org/ Apache vhost. It also updates a
+spreadsheet on https://ethercalc.openstack.org/ but the name of the
+sheet varies from one PTG to the next (naming format is
+``$CYCLE-PTG-Discussion-Rooms`` with ``$CYCLE`` being something like
+``Pike`` or ``Queens``).
+
 Basic Channel Operator Commands
 ===============================
 
diff --git a/manifests/site.pp b/manifests/site.pp
index 74d278b6fc..03eb2cdbd9 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -338,6 +338,8 @@ node 'eavesdrop.openstack.org' {
     accessbot_nick          => hiera('accessbot_nick', 'username'),
     accessbot_password      => hiera('accessbot_nick_password'),
     meetbot_channels        => hiera('meetbot_channels', ['openstack-infra']),
+    ptgbot_nick             => hiera('ptgbot_nick', 'username'),
+    ptgbot_password         => hiera('ptgbot_password'),
   }
 }
 
diff --git a/modules.env b/modules.env
index bffad19525..aed537a199 100644
--- a/modules.env
+++ b/modules.env
@@ -144,6 +144,7 @@ INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-phabricator"]="o
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-pip"]="origin/master"
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-planet"]="origin/master"
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-project_config"]="origin/master"
+INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-ptgbot"]="origin/master"
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-redis"]="origin/master"
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-refstack"]="origin/master"
 INTEGRATION_MODULES["$OPENSTACK_GIT_ROOT/openstack-infra/puppet-reviewday"]="origin/master"
diff --git a/modules/openstack_project/manifests/eavesdrop.pp b/modules/openstack_project/manifests/eavesdrop.pp
index 73b09c52b8..e2f9e2ad59 100644
--- a/modules/openstack_project/manifests/eavesdrop.pp
+++ b/modules/openstack_project/manifests/eavesdrop.pp
@@ -22,6 +22,8 @@ class openstack_project::eavesdrop (
   $accessbot_password = '',
   $project_config_repo = '',
   $meetbot_channels = [],
+  $ptgbot_nick = '',
+  $ptgbot_password = '',
 ) {
   include ::httpd
   include meetbot
@@ -124,4 +126,12 @@ class openstack_project::eavesdrop (
     target  => '/srv/yaml2ical/calendars/',
     require => File['/srv/yaml2ical'],
   }
+
+  class { 'ptgbot':
+    nick       => $ptgbot_nick,
+    password   => $ptgbot_password,
+    channel    => '#openstack-ptg',
+    vhost_name => 'ptg.openstack.org',
+  }
+
 }