diff --git a/src/api/client_server/push.rs b/src/api/client_server/push.rs
index b97e0d96696ad06e81dd16cfb8aecb68b55379da..71d937a6a91245039595367011e7b93ed7563061 100644
--- a/src/api/client_server/push.rs
+++ b/src/api/client_server/push.rs
@@ -7,12 +7,12 @@
 		},
 	},
 	events::{push_rules::PushRulesEvent, GlobalAccountDataEventType},
-	push::{InsertPushRuleError, RemovePushRuleError},
+	push::{InsertPushRuleError, RemovePushRuleError, Ruleset},
 };
 
 use crate::{services, Error, Result, Ruma};
 
-/// # `GET /_matrix/client/r0/pushrules`
+/// # `GET /_matrix/client/r0/pushrules/`
 ///
 /// Retrieves the push rules event for this user.
 pub async fn get_pushrules_all_route(
@@ -20,18 +20,36 @@ pub async fn get_pushrules_all_route(
 ) -> Result<get_pushrules_all::v3::Response> {
 	let sender_user = body.sender_user.as_ref().expect("user is authenticated");
 
-	let event = services()
-		.account_data
-		.get(None, sender_user, GlobalAccountDataEventType::PushRules.to_string().into())?
-		.ok_or(Error::BadRequest(ErrorKind::NotFound, "PushRules event not found."))?;
+	let event =
+		services()
+			.account_data
+			.get(None, sender_user, GlobalAccountDataEventType::PushRules.to_string().into())?;
 
-	let account_data = serde_json::from_str::<PushRulesEvent>(event.get())
-		.map_err(|_| Error::bad_database("Invalid account data event in db."))?
-		.content;
+	if let Some(event) = event {
+		let account_data = serde_json::from_str::<PushRulesEvent>(event.get())
+			.map_err(|_| Error::bad_database("Invalid account data event in db."))?
+			.content;
 
-	Ok(get_pushrules_all::v3::Response {
-		global: account_data.global,
-	})
+		Ok(get_pushrules_all::v3::Response {
+			global: account_data.global,
+		})
+	} else {
+		services().account_data.update(
+			None,
+			sender_user,
+			GlobalAccountDataEventType::PushRules.to_string().into(),
+			&serde_json::to_value(PushRulesEvent {
+				content: ruma::events::push_rules::PushRulesEventContent {
+					global: Ruleset::server_default(sender_user),
+				},
+			})
+			.expect("to json always works"),
+		)?;
+
+		Ok(get_pushrules_all::v3::Response {
+			global: Ruleset::server_default(sender_user),
+		})
+	}
 }
 
 /// # `GET /_matrix/client/r0/pushrules/{scope}/{kind}/{ruleId}`