diff --git a/ui_automator/commission_reg_test.py b/ui_automator/commission_reg_test.py
index c210401..7e534db 100644
--- a/ui_automator/commission_reg_test.py
+++ b/ui_automator/commission_reg_test.py
@@ -6,9 +6,6 @@
 if TYPE_CHECKING:
   from ui_automator import ui_automator
 
-# TODO(b/318771536): Check if a device is commissioned on GHA.
-_commissioned: bool = False
-
 
 class CommissionRegTest(unittest.TestCase):
   """Test class for running commission regression test."""
@@ -28,16 +25,12 @@
     self.gha_room = gha_room
 
   def test_commission(self) -> None:
-    global _commissioned
-    _commissioned = False
     self.ui_automator.commission_device(
         self.device_name, self.pairing_code, self.gha_room
     )
-    # TODO(b/318771536): Check if a device is commissioned on GHA.
-    _commissioned = True
 
   def test_decommission(self) -> None:
-    if not _commissioned:
+    if not self.ui_automator.is_device_exist(self.device_name):
       self.skipTest('Device was not commissioned.')
 
     self.ui_automator.decommission_device(self.device_name)
diff --git a/ui_automator/ui_automator.py b/ui_automator/ui_automator.py
index 11e6924..154e3a1 100644
--- a/ui_automator/ui_automator.py
+++ b/ui_automator/ui_automator.py
@@ -352,6 +352,28 @@
           f' on device({self._connected_device.device_info["serial"]}).'
       ) from e
 
+  @get_android_device_ready
+  def is_device_exist(self, device_name: str) -> bool:
+    """Checks if the device exists on Google Home App.
+
+    Args:
+        device_name: Display name of commissioned device on GHA.
+
+    Raises:
+        MoblySnippetError: When running `isDeviceExist` method in snippet apk
+        encountered an error.
+
+    Returns:
+        True if the device exists on GHA.
+    """
+    try:
+      return self._connected_device.mbs.isDeviceExist(device_name)
+    except Exception as e:
+      raise errors.MoblySnippetError(
+          f'Unable to check if {device_name} exists on GHA'
+          f' on device({self._connected_device.device_info["serial"]}).'
+      ) from e
+
   def run_regression_tests(
       self,
       repeat: int | None,
diff --git a/ui_automator/ui_automator_test.py b/ui_automator/ui_automator_test.py
index 4a1f9ff..378577c 100644
--- a/ui_automator/ui_automator_test.py
+++ b/ui_automator/ui_automator_test.py
@@ -697,8 +697,12 @@
   @mock.patch.object(
       ui_automator.UIAutomator, 'decommission_device', autospec=True
   )
+  @mock.patch.object(
+      ui_automator.UIAutomator, 'is_device_exist', autospec=True
+  )
   def test_run_regression_tests_executes_for_given_number_of_times_with_failure(
       self,
+      mock_is_device_exist,
       mock_decommission_device,
       mock_commission_device,
       mock_get_all_instances,
@@ -713,6 +717,7 @@
         None,
         None,
     ]
+    mock_is_device_exist.side_effect = [True, True, False, True, True]
     mock_get_all_instances.return_value = [self.mock_android_device]
 
     with self.assertLogs() as cm:
@@ -725,6 +730,7 @@
       )
 
     self.assertEqual(mock_commission_device.call_count, 5)
+    self.assertEqual(mock_is_device_exist.call_count, 5)
     self.assertEqual(mock_decommission_device.call_count, 4)
     self.assertEqual(
         cm.output[0], 'INFO:root:Start running regression tests 5 times.'
@@ -752,8 +758,12 @@
   @mock.patch.object(
       ui_automator.UIAutomator, 'decommission_device', autospec=True
   )
+  @mock.patch.object(
+      ui_automator.UIAutomator, 'is_device_exist', autospec=True
+  )
   def test_run_regression_tests_runs_continuously_until_keyboard_interrupts(
       self,
+      mock_is_device_exist,
       mock_decommission_device,
       mock_commission_device,
       mock_get_all_instances,
@@ -769,7 +779,9 @@
         None,
         KeyboardInterrupt(),
     ]
+    mock_is_device_exist.side_effect = [True, False, True, False, True]
     mock_get_all_instances.return_value = [self.mock_android_device]
+
     with self.assertLogs() as cm:
       self.ui_automator.run_regression_tests(
           None,
@@ -781,6 +793,7 @@
 
     self.assertEqual(mock_commission_device.call_count, 6)
     self.assertEqual(mock_decommission_device.call_count, 3)
+    self.assertEqual(mock_is_device_exist.call_count, 5)
     self.assertEqual(
         cm.output[0], 'INFO:root:Start running regression tests continuously.'
     )
@@ -800,8 +813,12 @@
   @mock.patch.object(
       ui_automator.UIAutomator, 'decommission_device', autospec=True
   )
+  @mock.patch.object(
+      ui_automator.UIAutomator, 'is_device_exist', autospec=True
+  )
   def test_run_calls_run_regression_tests_and_produces_summary_in_txt(
       self,
+      mock_is_device_exist,
       mock_decommission_device,
       mock_commission_device,
       mock_get_all_instances,
@@ -822,6 +839,7 @@
         None,
         fake_error,
     ]
+    mock_is_device_exist.side_effect = [False, True, True]
     mock_get_all_instances.return_value = [self.mock_android_device]
     mock_open.side_effect = [io.StringIO(), txt_stream]
     # mock_time called by startTestRun, startTest, stopTest, and stopTestRun.
@@ -855,6 +873,7 @@
           ui_automator.run()
 
     self.assertEqual(mock_commission_device.call_count, 3)
+    self.assertEqual(mock_is_device_exist.call_count, 3)
     self.assertEqual(mock_decommission_device.call_count, 2)
     self.assertEqual(
         expected_summary + '\n\n' + expected_test_case_result,
@@ -876,8 +895,12 @@
   @mock.patch.object(
       ui_automator.UIAutomator, 'decommission_device', autospec=True
   )
+  @mock.patch.object(
+      ui_automator.UIAutomator, 'is_device_exist', autospec=True
+  )
   def test_run_calls_run_regression_tests_and_produces_summary_in_xml(
       self,
+      mock_is_device_exist,
       mock_decommission_device,
       mock_commission_device,
       mock_get_all_instances,
@@ -894,6 +917,7 @@
         None,
         None,
     ]
+    mock_is_device_exist.side_effect = [False, True, True]
     mock_decommission_device.side_effect = [
         None,
         fake_error,
@@ -986,6 +1010,7 @@
         ui_automator.run()
 
     self.assertEqual(mock_commission_device.call_count, 3)
+    self.assertEqual(mock_is_device_exist.call_count, 3)
     self.assertEqual(mock_decommission_device.call_count, 2)
     (testcases,) = re.search(
         expected_test_suite_re, xml_stream.getvalue()
@@ -1163,5 +1188,46 @@
     mock_load_snippet.assert_called_once()
     self.assertDictEqual(report_info, {})
 
+  @mock.patch.object(android_device, 'get_all_instances', autospec=True)
+  def test_is_device_exist_returns_true_when_device_exists(
+      self, mock_get_all_instances
+  ):
+    mock_get_all_instances.return_value = [self.mock_android_device]
+    self.mock_android_device.mbs.isDeviceExist.return_value = True
+
+    self.assertTrue(
+        self.ui_automator.is_device_exist(_FAKE_MATTER_DEVICE_NAME)
+    )
+
+  @mock.patch.object(android_device, 'get_all_instances', autospec=True)
+  def test_is_device_exist_returns_false_when_device_does_not_exist(
+      self, mock_get_all_instances
+  ):
+    mock_get_all_instances.return_value = [self.mock_android_device]
+    self.mock_android_device.mbs.isDeviceExist.return_value = False
+
+    self.assertFalse(
+        self.ui_automator.is_device_exist(_FAKE_MATTER_DEVICE_NAME)
+    )
+
+  @mock.patch.object(android_device, 'get_all_instances', autospec=True)
+  def test_is_device_exist_throws_an_error_when_snippet_method_throws_an_error(
+      self, mock_get_all_instances
+  ):
+    mock_get_all_instances.return_value = [self.mock_android_device]
+    self.mock_android_device.mbs.isDeviceExist.side_effect = Exception(
+        'fake-error'
+    )
+
+    with self.assertRaises(errors.MoblySnippetError) as exc:
+      self.ui_automator.is_device_exist(_FAKE_MATTER_DEVICE_NAME)
+
+    expected_error_message = (
+        f'Unable to check if {_FAKE_MATTER_DEVICE_NAME} exists on GHA'
+        f' on device({self.mock_android_device.device_info["serial"]}).'
+    )
+    self.assertEqual(expected_error_message, str(exc.exception))
+
+
 if __name__ == '__main__':
   unittest.main()
