diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb
index 1f97daa3052cf5813b93c64b078c43e2a4ee6e64..7255d9e799341a3d0a9b5fa35b87ef5e9e0214c4 100644
--- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb
+++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb
@@ -491,20 +491,8 @@ module Homebrew
     end
   end
 
-  def fetch_pull_requests(query, tap_full_name, state: nil)
-    GitHub.issues_for_formula(query, tap_full_name: tap_full_name, state: state).select do |pr|
-      pr["html_url"].include?("/pull/") &&
-        /(^|\s)#{Regexp.quote(query)}(:|\s|$)/i =~ pr["title"]
-    end
-  rescue GitHub::RateLimitExceededError => e
-    opoo e.message
-    []
-  end
-
   def check_open_pull_requests(formula, tap_full_name, args:)
-    # check for open requests
-    pull_requests = fetch_pull_requests(formula.name, tap_full_name, state: "open")
-    check_for_duplicate_pull_requests(pull_requests, args: args)
+    GitHub.check_for_duplicate_pull_requests(formula.name, tap_full_name, state: "open", args: args)
   end
 
   def check_closed_pull_requests(formula, tap_full_name, version: nil, url: nil, tag: nil, args:)
@@ -514,28 +502,7 @@ module Homebrew
       version = Version.detect(url, specs)
     end
     # if we haven't already found open requests, try for an exact match across closed requests
-    pull_requests = fetch_pull_requests("#{formula.name} #{version}", tap_full_name, state: "closed")
-    check_for_duplicate_pull_requests(pull_requests, args: args)
-  end
-
-  def check_for_duplicate_pull_requests(pull_requests, args:)
-    return if pull_requests.blank?
-
-    duplicates_message = <<~EOS
-      These pull requests may be duplicates:
-      #{pull_requests.map { |pr| "#{pr["title"]} #{pr["html_url"]}" }.join("\n")}
-    EOS
-    error_message = "Duplicate PRs should not be opened. Use --force to override this error."
-    if args.force? && !args.quiet?
-      opoo duplicates_message
-    elsif !args.force? && args.quiet?
-      odie error_message
-    elsif !args.force?
-      odie <<~EOS
-        #{duplicates_message.chomp}
-        #{error_message}
-      EOS
-    end
+    GitHub.check_for_duplicate_pull_requests("#{formula.name} #{version}", tap_full_name, state: "closed", args: args)
   end
 
   def alias_update_pair(formula, new_formula_version)
diff --git a/Library/Homebrew/utils/github.rb b/Library/Homebrew/utils/github.rb
index 7b38f33ce8b5eae50e8033c701334304599bd751..6d2c5340d5283ddbdd056ec9a10852b1b7448650 100644
--- a/Library/Homebrew/utils/github.rb
+++ b/Library/Homebrew/utils/github.rb
@@ -572,4 +572,35 @@ module GitHub
     [GitHub::AuthenticationFailedError, GitHub::HTTPNotFoundError,
      GitHub::RateLimitExceededError, GitHub::Error, JSON::ParserError].freeze
   end
+
+  def fetch_pull_requests(query, tap_full_name, state: nil)
+    GitHub.issues_for_formula(query, tap_full_name: tap_full_name, state: state).select do |pr|
+      pr["html_url"].include?("/pull/") &&
+        /(^|\s)#{Regexp.quote(query)}(:|\s|$)/i =~ pr["title"]
+    end
+  rescue GitHub::RateLimitExceededError => e
+    opoo e.message
+    []
+  end
+
+  def check_for_duplicate_pull_requests(query, tap_full_name, state:, args:)
+    pull_requests = fetch_pull_requests(query, tap_full_name, state: state)
+    return if pull_requests.blank?
+
+    duplicates_message = <<~EOS
+      These pull requests may be duplicates:
+      #{pull_requests.map { |pr| "#{pr["title"]} #{pr["html_url"]}" }.join("\n")}
+    EOS
+    error_message = "Duplicate PRs should not be opened. Use --force to override this error."
+    if args.force? && !args.quiet?
+      opoo duplicates_message
+    elsif !args.force? && args.quiet?
+      odie error_message
+    elsif !args.force?
+      odie <<~EOS
+        #{duplicates_message.chomp}
+        #{error_message}
+      EOS
+    end
+  end
 end