diff --git a/config/config.example.yml b/config/config.example.yml
index 2f5228a6..219aa03f 100644
--- a/config/config.example.yml
+++ b/config/config.example.yml
@@ -186,6 +186,18 @@ https_only: false
 ##
 # use_innertube_for_captions: false
 
+##
+## Send Google session informations. This is useful when Invidious is blocked
+## by the message "This helps protect our community."
+## See https://github.com/iv-org/invidious/issues/4734.
+##
+## Warning: These strings gives much more identifiable information to Google!
+##
+## Accepted values: String
+## Default: <none>
+##
+# po_token: ""
+# visitor_data: ""
 
 # -----------------------------
 #  Logging
diff --git a/src/invidious/config.cr b/src/invidious/config.cr
index 29c39bd6..c4ddcdb3 100644
--- a/src/invidious/config.cr
+++ b/src/invidious/config.cr
@@ -132,6 +132,11 @@ class Config
   # Use Innertube's transcripts API instead of timedtext for closed captions
   property use_innertube_for_captions : Bool = false
 
+  # visitor data ID for Google session
+  property visitor_data : String? = nil
+  # poToken for passing bot attestation
+  property po_token : String? = nil
+
   # Saved cookies in "name1=value1; name2=value2..." format
   @[YAML::Field(converter: Preferences::StringToCookies)]
   property cookies : HTTP::Cookies = HTTP::Cookies.new
diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr
index c44a8f46..0d26b395 100644
--- a/src/invidious/videos.cr
+++ b/src/invidious/videos.cr
@@ -115,6 +115,7 @@ struct Video
 
     n = DECRYPT_FUNCTION.try &.decrypt_nsig(params["n"])
     params["n"] = n if n
+    params["pot"] = CONFIG.po_token if CONFIG.po_token
 
     params["host"] = url.host.not_nil!
     if region = self.info["region"]?.try &.as_s
diff --git a/src/invidious/videos/parser.cr b/src/invidious/videos/parser.cr
index 4bdb2512..95fa3d79 100644
--- a/src/invidious/videos/parser.cr
+++ b/src/invidious/videos/parser.cr
@@ -55,7 +55,7 @@ def extract_video_info(video_id : String)
   client_config = YoutubeAPI::ClientConfig.new
 
   # Fetch data from the player endpoint
-  player_response = YoutubeAPI.player(video_id: video_id, params: "", client_config: client_config)
+  player_response = YoutubeAPI.player(video_id: video_id, params: "2AMB", client_config: client_config)
 
   playability_status = player_response.dig?("playabilityStatus", "status").try &.as_s
 
@@ -102,7 +102,9 @@ def extract_video_info(video_id : String)
 
   new_player_response = nil
 
-  if reason.nil?
+  # Don't use Android client if po_token is passed because po_token doesn't
+  # work for Android client.
+  if reason.nil? && CONFIG.po_token.nil?
     # Fetch the video streams using an Android client in order to get the
     # decrypted URLs and maybe fix throttling issues (#2194). See the
     # following issue for an explanation about decrypted URLs:
@@ -112,7 +114,10 @@ def extract_video_info(video_id : String)
   end
 
   # Last hope
-  if new_player_response.nil?
+  # Only trigger if reason found and po_token or didn't work wth Android client.
+  # TvHtml5ScreenEmbed now requires sig helper for it to work but po_token is not required
+  # if the IP address is not blocked.
+  if CONFIG.po_token && reason || CONFIG.po_token.nil? && new_player_response.nil?
     client_config.client_type = YoutubeAPI::ClientType::TvHtml5ScreenEmbed
     new_player_response = try_fetch_streaming_data(video_id, client_config)
   end
diff --git a/src/invidious/yt_backend/youtube_api.cr b/src/invidious/yt_backend/youtube_api.cr
index 09a5e7f4..6d585bf2 100644
--- a/src/invidious/yt_backend/youtube_api.cr
+++ b/src/invidious/yt_backend/youtube_api.cr
@@ -320,6 +320,10 @@ module YoutubeAPI
       client_context["client"]["platform"] = platform
     end
 
+    if CONFIG.visitor_data.is_a?(String)
+      client_context["client"]["visitorData"] = CONFIG.visitor_data.as(String)
+    end
+
     return client_context
   end
 
@@ -477,6 +481,9 @@ module YoutubeAPI
       "playbackContext" => {
         "contentPlaybackContext" => playback_ctx,
       },
+      "serviceIntegrityDimensions" => {
+        "poToken" => CONFIG.po_token,
+      },
     }
 
     # Append the additional parameters if those were provided
@@ -609,6 +616,10 @@ module YoutubeAPI
       headers["User-Agent"] = user_agent
     end
 
+    if CONFIG.visitor_data.is_a?(String)
+      headers["X-Goog-Visitor-Id"] = CONFIG.visitor_data.as(String)
+    end
+
     # Logging
     LOGGER.debug("YoutubeAPI: Using endpoint: \"#{endpoint}\"")
     LOGGER.trace("YoutubeAPI: ClientConfig: #{client_config}")