diff --git a/README.rst b/README.rst
index ad339411b7239aa459187b73719c29a55166119f..4998af717ac171cddad74729b8de6027b50fe0c5 100644
--- a/README.rst
+++ b/README.rst
@@ -54,6 +54,10 @@ tools:
   <https://www.reviewboard.org/docs/reviewbot/latest/tools/pycodestyle/>`_
   – A code style checker for Python code
 
+* `pydocstyle
+  <https://www.reviewboard.org/docs/reviewbot/latest/tools/pydocstyle/>`_
+  – A static analysis tool for Python docstring conventions
+
 * `pyflakes <https://www.reviewboard.org/docs/reviewbot/latest/tools/pyflakes/>`_
   – A static analysis tool for Python code
 
diff --git a/bot/README.rst b/bot/README.rst
index c5b19d6da87c74e51b9fe88228282fa3cde305a4..1e61dd39a3cb59038e0fbc7d745b5178f990cf61 100644
--- a/bot/README.rst
+++ b/bot/README.rst
@@ -48,6 +48,10 @@ following tools:
   <https://www.reviewboard.org/docs/reviewbot/latest/tools/pycodestyle/>`_
   – A code style checker for Python code
 
+* `pydocstyle
+  <https://www.reviewboard.org/docs/reviewbot/latest/tools/pydocstyle/>`_
+  – A static analysis tool for Python docstring conventions
+
 * `pyflakes <https://www.reviewboard.org/docs/reviewbot/latest/tools/pyflakes/>`_
   – A static analysis tool for Python code
 
diff --git a/bot/reviewbot/tools/pydocstyle.py b/bot/reviewbot/tools/pydocstyle.py
new file mode 100644
index 0000000000000000000000000000000000000000..6537a3882f871a43e9651ef59fe5e458d2ca0d07
--- /dev/null
+++ b/bot/reviewbot/tools/pydocstyle.py
@@ -0,0 +1,79 @@
+"""Review Bot tool to run pydocstyle."""
+
+from __future__ import unicode_literals
+
+from reviewbot.tools import Tool
+from reviewbot.utils.process import execute, is_exe_in_path
+
+
+class PydocstyleTool(Tool):
+    """Review Bot tool to run pydocstyle."""
+
+    name = 'pydocstyle'
+    version = '1.0'
+    description = 'Checks Python code for docstring conventions.'
+    timeout = 30
+    options = [
+        {
+            'name': 'ignore',
+            'field_type': 'django.forms.CharField',
+            'default': '',
+            'field_options': {
+                'label': 'Ignore',
+                'help_text': ('A comma-separated list of errors or prefixes '
+                              'to ignore. For example, passing D1 will '
+                              'ignore all error codes beginning with "D1" '
+                              '(i.e. D1, D10). The list will be passed '
+                              'to the --ignore command line argument. '
+                              'If no arguments are specified, pydocstyle '
+                              'will default to PEP 257 convention.'),
+                'required': False,
+            },
+        },
+    ]
+
+    def check_dependencies(self):
+        """Verify that the tool's dependencies are installed.
+
+        Returns:
+            bool:
+            True if all dependencies for the tool are satisfied. If this
+            returns False, the worker will not be listed for this Tool's queue,
+            and a warning will be logged.
+        """
+        return is_exe_in_path('pydocstyle')
+
+    def handle_file(self, f, settings):
+        """Perform a review of a single file.
+
+        Args:
+            f (reviewbot.processing.review.File):
+                The file to process.
+
+            settings (dict):
+                Tool-specific settings.
+        """
+        if not f.dest_file.lower().endswith('.py'):
+            # Ignore the file.
+            return
+
+        path = f.get_patched_file_path()
+
+        if not path:
+            return
+
+        self.output = execute(
+            [
+                'pydocstyle',
+                '--ignore=%s' % settings['ignore'],
+                path,
+            ],
+            ignore_errors=True)
+
+        for line in filter(None, self.output.split(path + ':')):
+            try:
+                line_num, message = line.split(':', 1)
+                line_num = line_num.split()
+                f.comment(message.strip(), int(line_num[0]))
+            except Exception:
+                pass
diff --git a/bot/setup.py b/bot/setup.py
index 5c3203ba11d0ddfe04216a0c3e0330b1816009d7..8f4f52c812b986a48f68a37fb0c514f8eb8d2d20 100755
--- a/bot/setup.py
+++ b/bot/setup.py
@@ -34,6 +34,7 @@ setup(
             'jshint = reviewbot.tools.jshint:JSHintTool',
             'pmd = reviewbot.tools.pmd:PMDTool',
             'pycodestyle = reviewbot.tools.pycodestyle:PycodestyleTool',
+            'pydocstyle = reviewbot.tools.pydocstyle:PydocstyleTool',
             'pyflakes = reviewbot.tools.pyflakes:PyflakesTool',
         ],
     },
@@ -48,6 +49,7 @@ setup(
             'cpplint>=0.0.3',
             'flake8>=3.3.0',
             'pycodestyle',
+            'pydocstyle',
             'pyflakes',
         ],
     },
diff --git a/docs/reviewbot/tools/index.rst b/docs/reviewbot/tools/index.rst
index aba9e78c15ff0cf7bcb087029e1756c7cbeb7a60..2e77da0699f8ce3327b94fedd641346e32f0d9fc 100644
--- a/docs/reviewbot/tools/index.rst
+++ b/docs/reviewbot/tools/index.rst
@@ -16,4 +16,5 @@ Review Bot Tools
    jshint
    pmd
    pycodestyle
+   pydocstyle
    pyflakes
diff --git a/docs/reviewbot/tools/pydocstyle.rst b/docs/reviewbot/tools/pydocstyle.rst
new file mode 100644
index 0000000000000000000000000000000000000000..ae8f310dc5f8e687853444f2c093a13c5bc312d9
--- /dev/null
+++ b/docs/reviewbot/tools/pydocstyle.rst
@@ -0,0 +1,20 @@
+.. _tool-pydocstyle:
+
+===========
+pydocstyle
+===========
+
+pydocstyle_ is a static analysis tool to check your Python code against
+docstring conventions.
+
+.. _pydocstyle: http://www.pydocstyle.org/en/3.0.0/
+
+
+Installation
+============
+
+:command:`pydocstyle` can be installed on most systems by running::
+
+    $ pip install pydocstyle
+
+It may also be available in your system's package manager.
\ No newline at end of file
diff --git a/extension/README.rst b/extension/README.rst
index 78c70a5997c33c68451d66f36fa20d314f69f1a4..76743049673d0e491f14fb7fda451bd1bfaa633f 100644
--- a/extension/README.rst
+++ b/extension/README.rst
@@ -47,6 +47,10 @@ following tools:
   <https://www.reviewboard.org/docs/reviewbot/latest/tools/pycodestyle/>`_
   – A code style checker for Python code
 
+* `pydocstyle
+  <https://www.reviewboard.org/docs/reviewbot/latest/tools/pydocstyle/>`_
+  – A static analysis tool for Python docstring conventions
+
 * `pyflakes <https://www.reviewboard.org/docs/reviewbot/latest/tools/pyflakes/>`_
   – A static analysis tool for Python code
 
