diff --git a/git_cl.py b/git_cl.py
index 3878b96..09496db 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -1273,7 +1273,7 @@
     return args
 
   def RunHook(self, committing, may_prompt, verbose, parallel, upstream,
-              description, all_files, resultdb=False):
+              description, all_files, resultdb=False, realm=None):
     """Calls sys.exit() if the hook fails; returns a HookResults otherwise."""
     args = self._GetCommonPresubmitArgs(verbose, upstream)
     args.append('--commit' if committing else '--upload')
@@ -1292,10 +1292,15 @@
         args.extend(['--description_file', description_file])
 
         start = time_time()
-
         cmd = ['vpython', PRESUBMIT_SUPPORT] + args
-        if resultdb:
-          cmd = ['rdb', 'stream', '-new'] + cmd
+        if resultdb and realm:
+          cmd = ['rdb', 'stream', '-new', '-realm', realm] + cmd
+        elif resultdb:
+          # TODO (crbug.com/1113463): store realm somewhere and look it up so
+          # it is not required to pass the realm flag
+          print('Note: ResultDB reporting will NOT be performed because --realm'
+                ' was not specified. To enable ResultDB, please run the command'
+                ' again with the --realm argument to specify the LUCI realm.')
 
         p = subprocess2.Popen(cmd)
         exit_code = p.wait()
@@ -1413,7 +1418,8 @@
           upstream=base_branch,
           description=change_desc.description,
           all_files=False,
-          resultdb=options.resultdb)
+          resultdb=options.resultdb,
+          realm=options.realm)
       self.ExtendCC(hook_results['more_cc'])
 
     print_stats(git_diff_args)
@@ -1864,7 +1870,7 @@
     detail = self._GetChangeDetail(['LABELS'])
     return u'Commit-Queue' in detail.get('labels', {})
 
-  def CMDLand(self, force, bypass_hooks, verbose, parallel):
+  def CMDLand(self, force, bypass_hooks, verbose, parallel, resultdb, realm):
     if git_common.is_dirty_git_tree('land'):
       return 1
 
@@ -1905,7 +1911,8 @@
           upstream=upstream,
           description=description,
           all_files=False,
-          resultdb=False)
+          resultdb=resultdb,
+          realm=realm)
 
     self.SubmitIssue(wait_for_merge=True)
     print('Issue %s has been submitted.' % self.GetIssueURL())
@@ -3831,6 +3838,7 @@
   parser.add_option('--resultdb', action='store_true',
                     help='Run presubmit checks in the ResultSink environment '
                          'and send results to the ResultDB database.')
+  parser.add_option('--realm', help='LUCI realm if reporting to ResultDB')
   options, args = parser.parse_args(args)
 
   if not options.force and git_common.is_dirty_git_tree('presubmit'):
@@ -3857,7 +3865,8 @@
       upstream=base_branch,
       description=description,
       all_files=options.all,
-      resultdb=options.resultdb)
+      resultdb=options.resultdb,
+      realm=options.realm)
   return 0
 
 
@@ -4071,6 +4080,7 @@
   parser.add_option('--resultdb', action='store_true',
                     help='Run presubmit checks in the ResultSink environment '
                          'and send results to the ResultDB database.')
+  parser.add_option('--realm', help='LUCI realm if reporting to ResultDB')
 
   orig_args = args
   (options, args) = parser.parse_args(args)
@@ -4217,6 +4227,10 @@
   parser.add_option('--parallel', action='store_true',
                     help='Run all tests specified by input_api.RunTests in all '
                          'PRESUBMIT files in parallel.')
+  parser.add_option('--resultdb', action='store_true',
+                     help='Run presubmit checks in the ResultSink environment '
+                          'and send results to the ResultDB database.')
+  parser.add_option('--realm', help='LUCI realm if reporting to ResultDB')
   (options, args) = parser.parse_args(args)
 
   cl = Changelist()
@@ -4225,8 +4239,8 @@
     DieWithError('You must upload the change first to Gerrit.\n'
                  '  If you would rather have `git cl land` upload '
                  'automatically for you, see http://crbug.com/642759')
-  return cl.CMDLand(options.force, options.bypass_hooks,
-                                     options.verbose, options.parallel)
+  return cl.CMDLand(options.force, options.bypass_hooks, options.verbose,
+                    options.parallel, options.resultdb, options.realm)
 
 
 @subcommand.usage('<patch url or issue id or issue url>')
