diff --git a/src/client_server.rs b/src/client_server.rs
index e521624bb516a97b50bbb06f5ecab2dcc98411f4..bc0af79f9626d72cf2724352bdab5d68d5ae4744 100644
--- a/src/client_server.rs
+++ b/src/client_server.rs
@@ -1203,7 +1203,11 @@ pub async fn get_public_rooms_route(
                     .map(|n| n.to_owned()),
                 num_joined_members: (db.rooms.room_members(&room_id).count() as u32).into(),
                 room_id,
-                topic: None,
+                topic: state
+                    .get(&(EventType::RoomTopic, "".to_owned()))
+                    .and_then(|s| s.content.get("topic"))
+                    .and_then(|n| n.as_str())
+                    .map(|n| n.to_owned()),
                 world_readable: false,
                 guest_can_join: true,
                 avatar_url: None,
@@ -1243,7 +1247,11 @@ pub async fn get_public_rooms_filtered_route(
                     .map(|n| n.to_owned()),
                 num_joined_members: (db.rooms.room_members(&room_id).count() as u32).into(),
                 room_id,
-                topic: None,
+                topic: state
+                    .get(&(EventType::RoomTopic, "".to_owned()))
+                    .and_then(|s| s.content.get("topic"))
+                    .and_then(|n| n.as_str())
+                    .map(|n| n.to_owned()),
                 world_readable: false,
                 guest_can_join: true,
                 avatar_url: None,