diff --git a/scripts/buildprbody.py b/scripts/buildprbody.py
new file mode 100644
index 0000000..10733b4
--- /dev/null
+++ b/scripts/buildprbody.py
@@ -0,0 +1,104 @@
+# Copyright 2021 Google LLC
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+#     https://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from enum import IntEnum
+import numpy as np
+import pandas as pd
+import pathlib
+
+class ChangeType(IntEnum):
+    UNKNOWN = 0
+    DELETED = 1
+    ADDED = 2
+    CHANGED = 3
+
+
+def get_commit_link(name):
+    """Return a string with a link to the last commit for the given
+        API Name.
+    args:
+        name (str): The name of the api.
+    """
+
+    url = "https://github.com/googleapis/google-api-python-client/commit/"
+    sha = None
+    api_link = ""
+
+    file_path = pathlib.Path(directory).joinpath("{0}.sha".format(name))
+    if file_path.is_file():
+        with open(file_path, "r") as f:
+            sha = f.readline().rstrip()
+            if sha:
+                api_link = "[{0}]({1}{2})".format(" [More details]", url, sha)
+
+    return api_link
+
+
+if __name__ == "__main__":
+    directory = pathlib.Path("temp")
+    dataframe = pd.read_csv("temp/allapis.dataframe")
+    dataframe["Version"] = dataframe["Version"].astype(str)
+
+    dataframe["Commit"] = np.vectorize(get_commit_link)(dataframe["Name"])
+
+    stable_and_breaking = (
+        dataframe[
+            dataframe["IsStable"]
+            & (dataframe["ChangeType"] == ChangeType.DELETED)
+        ][["Name", "Version", "Commit"]]
+        .drop_duplicates()
+        .agg("".join, axis=1)
+        .values
+    )
+
+    prestable_and_breaking = (
+        dataframe[
+            (dataframe["IsStable"] == False)
+            & (dataframe["ChangeType"] == ChangeType.DELETED)
+        ][["Name", "Version", "Commit"]]
+        .drop_duplicates()
+        .agg("".join, axis=1)
+        .values
+    )
+
+    all_apis = (
+        dataframe[["Name", "Version", "Commit"]]
+        .drop_duplicates()
+        .agg("".join, axis=1)
+        .values
+    )
+
+    with open(directory / "allapis.summary", "w") as f:
+        if len(stable_and_breaking) > 0:
+            f.writelines(
+                [
+                    "## Deleted keys were detected in the following stable discovery artifacts:\n",
+                    "\n".join(stable_and_breaking),
+                    "\n\n",
+                ]
+            )
+
+        if len(prestable_and_breaking) > 0:
+            f.writelines(
+                [
+                    "## Deleted keys were detected in the following pre-stable discovery artifacts:\n",
+                    "\n".join(prestable_and_breaking),
+                    "\n\n",
+                ]
+            )
+
+        if len(all_apis) > 0:
+            f.writelines(
+                ["## Discovery Artifact Change Summary:\n", "\n".join(all_apis), "\n"]
+            )
