diff --git a/changelog.d/4002.misc b/changelog.d/4002.misc
new file mode 100644
index 0000000000000000000000000000000000000000..545abe5d5835c204e9d8172baed848ffd643206d
--- /dev/null
+++ b/changelog.d/4002.misc
@@ -0,0 +1 @@
+Pin to prometheus_client<0.4 to avoid renaming all of our metrics
\ No newline at end of file
diff --git a/synapse/python_dependencies.py b/synapse/python_dependencies.py
index 0f339a03203ec4a5df93dee6fd4cb86cef944b70..d4d983b00a4c44e7cb34a74e498185775466d0fa 100644
--- a/synapse/python_dependencies.py
+++ b/synapse/python_dependencies.py
@@ -58,7 +58,10 @@ REQUIREMENTS = {
     "msgpack-python>=0.3.0": ["msgpack"],
     "phonenumbers>=8.2.0": ["phonenumbers"],
     "six>=1.10": ["six"],
-    "prometheus_client>=0.0.18": ["prometheus_client"],
+
+    # prometheus_client 0.4.0 changed the format of counter metrics
+    # (cf https://github.com/matrix-org/synapse/issues/4001)
+    "prometheus_client>=0.0.18,<0.4.0": ["prometheus_client"],
 
     # we use attr.s(slots), which arrived in 16.0.0
     "attrs>=16.0.0": ["attr>=16.0.0"],