diff --git a/keyserver/src/database/migration-config.js b/keyserver/src/database/migration-config.js
--- a/keyserver/src/database/migration-config.js
+++ b/keyserver/src/database/migration-config.js
@@ -309,6 +309,15 @@
       `);
     },
   ],
+  [
+    28,
+    async () => {
+      await dbQuery(SQL`
+        ALTER TABLE threads
+          ADD COLUMN IF NOT EXISTS pinned_count int UNSIGNED NOT NULL DEFAULT 0;
+      `);
+    },
+  ],
 ]);
 const newDatabaseVersion: number = Math.max(...migrations.keys());
 
diff --git a/keyserver/src/database/setup-db.js b/keyserver/src/database/setup-db.js
--- a/keyserver/src/database/setup-db.js
+++ b/keyserver/src/database/setup-db.js
@@ -157,7 +157,8 @@
         color char(6) COLLATE utf8mb4_bin NOT NULL,
         source_message bigint(20) DEFAULT NULL UNIQUE,
         replies_count int UNSIGNED NOT NULL DEFAULT 0,
-        avatar varchar(191) COLLATE utf8mb4_bin DEFAULT NULL
+        avatar varchar(191) COLLATE utf8mb4_bin DEFAULT NULL,
+        pinned_count int UNSIGNED NOT NULL DEFAULT 0
       ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
 
       CREATE TABLE updates (