diff --git a/tools/plugins.md.template b/tools/plugins.md.template
index 3774933..4215de1 100644
--- a/tools/plugins.md.template
+++ b/tools/plugins.md.template
@@ -23,7 +23,7 @@
 
 There is a [parent] component for plugin-specific components/issues in Monorail.
 
-Community members are welcome to propose themselves as plugin maintainers. This can be
+Community members are welcome to propose themselves as [plugin maintainers]. This can be
 done through the support [mailing] list:
 
 1. Volunteering can be done for either plugins with no maintainers or plugins with just
@@ -90,4 +90,5 @@
 [ownership]: https://gerrit-review.googlesource.com/Documentation/config-plugins.html#development
 [parent]: https://bugs.chromium.org/p/gerrit/issues/list?q=component%3Aplugins
 [plugins]: https://gerrit-review.googlesource.com/admin/repos/q/filter:plugins%252F
+[plugin maintainers]: #plugin-maintainers
 [supported]: https://www.gerritcodereview.com/support.html#supported-versions
diff --git a/tools/plugins.py b/tools/plugins.py
index 1b1fefe..f75d978 100644
--- a/tools/plugins.py
+++ b/tools/plugins.py
@@ -6,6 +6,7 @@
 import requests
 import sys
 import time
+from collections import defaultdict
 from dataclasses import dataclass
 from enum import Enum, IntEnum
 from operator import attrgetter
@@ -167,6 +168,7 @@
         auth = self._authenticate(self._parse_options())
         self.api = GerritRestAPI(url=GERRIT, auth=auth)
         self.plugins = list()
+        self.maintainers = defaultdict(list)
         self._fetch_plugin_data()
         self.plugins = sorted(self.plugins, key=attrgetter("state", "empty"))
 
@@ -199,13 +201,16 @@
             )
 
             parent, owner_group_ids = self._get_meta_data(name)
+            maintainers, maintainers_csv = self._get_owner_names(
+                parent, owner_group_ids
+            )
             self.plugins.append(
                 Plugin(
                     name=name,
                     parent=parent,
                     state=state,
                     owner_group_ids=owner_group_ids,
-                    owner_names=self._get_owner_names(parent, owner_group_ids),
+                    owner_names=maintainers_csv,
                     empty=self._is_project_empty(p),
                     description=description,
                     all_changes_count=self._get_all_changes_count(p),
@@ -213,6 +218,8 @@
                     branches=branches,
                 )
             )
+            for m in maintainers:
+                self.maintainers[m].append(name)
 
     def _authenticate(self, options):
         if options.netrc:
@@ -294,8 +301,8 @@
         names = sorted(list(names))
         if parent == "Public-Plugins":
             names.insert(0, "Core maintainers")
-        names = ", ".join(names)
-        return names
+        csv = ", ".join(names)
+        return names, csv
 
     def _is_project_empty(self, pluginName):
         gitiles_uri = f"{GITILES}/{pluginName}"
@@ -308,6 +315,21 @@
             print(f"Failed to browse {pluginName} in gitiles:\n{e}", file=sys.stderr)
         return False
 
+    @staticmethod
+    def _name_sorter(word):
+        pattern = re.compile(r"[\W]+")
+        return word != "Core maintainers", pattern.sub("", word)
+
+    def _render_maintainers(self, output):
+        header = "|Maintainer|Plugins|"
+        dashes = "|----------|-------|"
+        output.write("\n\n## Plugin Maintainers")
+        output.write(f"\n\n{header}|\n{dashes}|\n")
+        for m in sorted(self.maintainers, key=Plugins._name_sorter):
+            output.write(
+                f"|{m}|{', '.join(sorted(self.maintainers[m], key=Plugins._name_sorter))}|\n"
+            )
+
     def render_page(self, output):
         output.writelines(self._render_template())
         (header, dashes, spacer, links) = self._render_header()
@@ -334,6 +356,7 @@
             links += f"[{p.name}]: {GITILES}/plugins/{p.name}\n"
 
         output.write(links)
+        self._render_maintainers(output)
 
 
 def main():
