diff --git a/native/account/restore.js b/native/account/restore.js
--- a/native/account/restore.js
+++ b/native/account/restore.js
@@ -57,8 +57,12 @@
       await olmAPI.initializeCryptoAccount();
 
       //2. Retrieve User Keys Backup and `userID`
-      const { userID, backupID } =
-        await retrieveLatestBackupInfo(userIdentifier);
+      const latestBackupInfo = await retrieveLatestBackupInfo(userIdentifier);
+      if (!latestBackupInfo) {
+        throw new Error('Backup not found');
+      }
+      const { userID, backupID } = latestBackupInfo;
+
       const { pickledAccount, pickleKey } = await getBackupUserKeys(
         userIdentifier,
         secret,
diff --git a/native/backup/backup-handler.js b/native/backup/backup-handler.js
--- a/native/backup/backup-handler.js
+++ b/native/backup/backup-handler.js
@@ -140,7 +140,12 @@
     if (!userIdentifier) {
       throw new Error('Missing userIdentifier');
     }
-    const { backupID } = await retrieveLatestBackupInfo(userIdentifier);
+
+    const retrievedBackupInfo = await retrieveLatestBackupInfo(userIdentifier);
+    if (!retrievedBackupInfo) {
+      throw new Error('latestBackupInfo not retrieved');
+    }
+    const { backupID } = retrievedBackupInfo;
 
     const backupSecret = await getBackupSecret();
     const [
@@ -296,7 +301,7 @@
             let fetchedBackupInfo =
               await retrieveLatestBackupInfo(userIdentifier);
 
-            while (fetchedBackupInfo.backupID !== backupID) {
+            while (fetchedBackupInfo?.backupID !== backupID) {
               retryCount++;
               if (retryCount >= 3) {
                 throw new Error(`Backup ID mismatched ${retryCount} times`);
diff --git a/native/backup/use-client-backup.js b/native/backup/use-client-backup.js
--- a/native/backup/use-client-backup.js
+++ b/native/backup/use-client-backup.js
@@ -22,7 +22,7 @@
   +createUserKeysBackup: () => Promise<string>,
   +retrieveLatestBackupInfo: (
     userIdentifier: string,
-  ) => Promise<LatestBackupInfo>,
+  ) => Promise<?LatestBackupInfo>,
   +getBackupUserKeys: (
     userIdentifier: string,
     backupSecret: string,
@@ -48,12 +48,17 @@
 
 async function retrieveLatestBackupInfo(
   userIdentifier: string,
-): Promise<LatestBackupInfo> {
+): Promise<?LatestBackupInfo> {
   const response =
     await commCoreModule.retrieveLatestBackupInfo(userIdentifier);
 
+  const parsedResponse = JSON.parse(response);
+  if (!parsedResponse) {
+    return null;
+  }
+
   return assertWithValidator<LatestBackupInfo>(
-    JSON.parse(response),
+    parsedResponse,
     latestBackupInfoResponseValidator,
   );
 }
diff --git a/native/profile/backup-menu.react.js b/native/profile/backup-menu.react.js
--- a/native/profile/backup-menu.react.js
+++ b/native/profile/backup-menu.react.js
@@ -79,8 +79,11 @@
   const testLatestBackupInfo = React.useCallback(async () => {
     let message;
     try {
-      const { backupID, userID } =
-        await retrieveLatestBackupInfo(userIdentifier);
+      const retrievedInfo = await retrieveLatestBackupInfo(userIdentifier);
+      if (!retrievedInfo) {
+        throw new Error('No backup found for user');
+      }
+      const { backupID, userID } = retrievedInfo;
       message =
         `Success!\n` +
         `Backup ID: ${backupID},\n` +
@@ -104,8 +107,11 @@
     // 5. Perform this test
     let message;
     try {
-      const { userID, backupID } =
-        await retrieveLatestBackupInfo(userIdentifier);
+      const retrievedInfo = await retrieveLatestBackupInfo(userIdentifier);
+      if (!retrievedInfo) {
+        throw new Error('No backup found for user');
+      }
+      const { userID, backupID } = retrievedInfo;
 
       if (currentUserInfo?.id !== userID) {
         throw new Error('Backup returned different userID');