diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt
index f8e7eeca7..f71d0a098 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt
@@ -11,6 +11,7 @@ import kotlinx.serialization.json.Json
 import org.yuzu.yuzu_emu.NativeLibrary
 import org.yuzu.yuzu_emu.YuzuApplication
 import org.yuzu.yuzu_emu.model.Game
+import org.yuzu.yuzu_emu.model.MinimalDocumentFile
 
 object GameHelper {
     const val KEY_GAME_PATH = "game_path"
@@ -29,15 +30,7 @@ object GameHelper {
         // Ensure keys are loaded so that ROM metadata can be decrypted.
         NativeLibrary.reloadKeys()
 
-        val children = FileUtil.listFiles(context, gamesUri)
-        for (file in children) {
-            if (!file.isDirectory) {
-                // Check that the file has an extension we care about before trying to read out of it.
-                if (Game.extensions.contains(FileUtil.getExtension(file.uri))) {
-                    games.add(getGame(file.uri))
-                }
-            }
-        }
+        addGamesRecursive(games, FileUtil.listFiles(context, gamesUri), 3)
 
         // Cache list of games found on disk
         val serializedGames = mutableSetOf<String>()
@@ -52,6 +45,30 @@ object GameHelper {
         return games.toList()
     }
 
+    private fun addGamesRecursive(
+        games: MutableList<Game>,
+        files: Array<MinimalDocumentFile>,
+        depth: Int
+    ) {
+        if (depth <= 0) {
+            return
+        }
+
+        files.forEach {
+            if (it.isDirectory) {
+                addGamesRecursive(
+                    games,
+                    FileUtil.listFiles(YuzuApplication.appContext, it.uri),
+                    depth - 1
+                )
+            } else {
+                if (Game.extensions.contains(FileUtil.getExtension(it.uri))) {
+                    games.add(getGame(it.uri))
+                }
+            }
+        }
+    }
+
     private fun getGame(uri: Uri): Game {
         val filePath = uri.toString()
         var name = NativeLibrary.getTitle(filePath)