URL context

You can use the URL context tool to provide Gemini with URLs as additional context for your prompt. The model can then retrieve content from the URLs and use that content to inform and shape its response.

This tool is useful for tasks like the following:

  • Extracting key data points or talking points from articles
  • Comparing information across multiple links
  • Synthesizing data from several sources
  • Answering questions based on the content of a specific page or pages
  • Analyzing content for specific purposes (like writing a job description or creating test questions)

Note that the index used to pull data may not necessarily be up to date, so some information may be stale.

This guide explains how to use the URL context tool in the Gemini API in Vertex AI.

Supported models

The following models provide support for URL Context:

Use URL context

You can use the URL context tool in two main ways, by itself or in conjunction with Grounding with Google Search .

URL context only

You can provide specific URLs that you want the model to analyze directly in your prompt:

 Summarize this document: YOUR_URLs 
Extract the key features from the product description on this page: YOUR_URLs 
 

Python

  from 
  
 google 
  
 import 
 genai 
 from 
  
 google.genai.types 
  
 import 
 Tool 
 , 
 GenerateContentConfig 
 , 
 HttpOptions 
 , 
 UrlContext 
 client 
 = 
 genai 
 . 
 Client 
 ( 
 http_options 
 = 
 HttpOptions 
 ( 
 api_version 
 = 
 "v1" 
 )) 
 model_id 
 = 
 "gemini-2.5-flash" 
 url_context_tool 
 = 
 Tool 
 ( 
 url_context 
 = 
 UrlContext 
 ) 
 response 
 = 
 client 
 . 
 models 
 . 
 generate_content 
 ( 
 model 
 = 
 model_id 
 , 
 contents 
 = 
 "Compare recipes from YOUR_URL1 
and YOUR_URL2 
" 
 , 
 config 
 = 
 GenerateContentConfig 
 ( 
 tools 
 = 
 [ 
 url_context_tool 
 ], 
 response_modalities 
 = 
 [ 
 "TEXT" 
 ], 
 ) 
 ) 
 for 
 each 
 in 
 response 
 . 
 candidates 
 [ 
 0 
 ] 
 . 
 content 
 . 
 parts 
 : 
 print 
 ( 
 each 
 . 
 text 
 ) 
 # get URLs retrieved for context 
 print 
 ( 
 response 
 . 
 candidates 
 [ 
 0 
 ] 
 . 
 url_context_metadata 
 ) 
 

Javascript

  # Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values 
 # with appropriate values for your project. 
 export 
  
 GOOGLE_CLOUD_PROJECT 
 = 
GOOGLE_CLOUD_PROJECT export 
  
 GOOGLE_CLOUD_LOCATION 
 = 
global export 
  
 GOOGLE_GENAI_USE_VERTEXAI 
 = 
True 
  import 
  
 { 
  
 GoogleGenAI 
  
 } 
  
 from 
  
 "@google/genai" 
 ; 
 const 
  
 ai 
  
 = 
  
 new 
  
 GoogleGenAI 
 ({ 
  
 vertexai 
 : 
  
 true 
 , 
  
 project 
 : 
  
 process 
 . 
 env 
 . 
 GOOGLE_CLOUD_PROJECT 
 , 
  
 location 
 : 
  
 process 
 . 
 env 
 . 
 GOOGLE_CLOUD_LOCATION 
 , 
  
 apiVersion 
 : 
  
 'v1' 
 , 
 }); 
 async 
  
 function 
  
 main 
 () 
  
 { 
  
 const 
  
 response 
  
 = 
  
 await 
  
 ai 
 . 
 models 
 . 
 generateContent 
 ({ 
  
 model 
 : 
  
 "gemini-2.5-flash" 
 , 
  
 contents 
 : 
  
 [ 
  
 "Compare recipes from YOUR_URL1 
and YOUR_URL2 
" 
 , 
  
 ], 
  
 config 
 : 
  
 { 
  
 tools 
 : 
  
 [{ 
 urlContext 
 : 
  
 {}}], 
  
 }, 
  
 }); 
  
 console 
 . 
 log 
 ( 
 response 
 . 
 text 
 ); 
  
 // To get URLs retrieved for context 
  
 console 
 . 
 log 
 ( 
 response 
 . 
 candidates 
 [ 
 0 
 ]. 
 urlContextMetadata 
 ) 
 } 
 await 
  
 main 
 (); 
 

REST

 curl  
-X  
POST  
 \ 
  
-H  
 "Authorization: Bearer 
 $( 
gcloud  
auth  
print-access-token ) 
 " 
  
 \ 
  
-H  
 "Content-Type: application/json" 
  
 \ 
  
https://aiplatform.googleapis.com/v1beta1/projects/ GOOGLE_CLOUD_PROJECT 
/locations/global/publishers/google/models/gemini-2.5-flash:generateContent  
 \ 
  
-d  
 '{ 
 "contents": [ 
 { 
 "role": "user", 
 "parts": [ 
 {"text": "Compare recipes from YOUR_URL1 
and YOUR_URL2 
"} 
 ] 
 } 
 ], 
 "tools": [ 
 { 
 "url_context": {} 
 } 
 ] 
 }' 
 > 
result.json

cat  
result.json 

Grounding with Google Search with URL context

You can also enable both URL context and Grounding with Google Search, using prompts with or without URLs. The model may first search for relevant information and then use the URL context tool to read the content of the search results for a more in-depth understanding.

This feature is experimental and available in API version v1beta1 .

Example prompts:

 Give me a three day event schedule based on YOUR_URL 
. Also let me know what needs to taken care of considering weather and commute.

Recommend 3 books for beginners to read to learn more about the latest YOUR_SUBJECT 
. 

Python

  from 
  
 google 
  
 import 
 genai 
 from 
  
 google.genai.types 
  
 import 
 Tool 
 , 
 GenerateContentConfig 
 , 
 HttpOptions 
 , 
 UrlContext 
 , 
 GoogleSearch 
 client 
 = 
 genai 
 . 
 Client 
 ( 
 http_options 
 = 
 HttpOptions 
 ( 
 api_version 
 = 
 "v1beta1" 
 )) 
 model_id 
 = 
 "gemini-2.5-flash" 
 tools 
 = 
 [] 
 tools 
 . 
 append 
 ( 
 Tool 
 ( 
 url_context 
 = 
 UrlContext 
 )) 
 tools 
 . 
 append 
 ( 
 Tool 
 ( 
 google_search 
 = 
 GoogleSearch 
 )) 
 response 
 = 
 client 
 . 
 models 
 . 
 generate_content 
 ( 
 model 
 = 
 model_id 
 , 
 contents 
 = 
 "Give me three day events schedule based on YOUR_URL 
. Also let me know what needs to taken care of considering weather and commute." 
 , 
 config 
 = 
 GenerateContentConfig 
 ( 
 tools 
 = 
 tools 
 , 
 response_modalities 
 = 
 [ 
 "TEXT" 
 ], 
 ) 
 ) 
 for 
 each 
 in 
 response 
 . 
 candidates 
 [ 
 0 
 ] 
 . 
 content 
 . 
 parts 
 : 
 print 
 ( 
 each 
 . 
 text 
 ) 
 # get URLs retrieved for context 
 print 
 ( 
 response 
 . 
 candidates 
 [ 
 0 
 ] 
 . 
 url_context_metadata 
 ) 
 

Javascript

  # Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values 
 # with appropriate values for your project. 
 export 
  
 GOOGLE_CLOUD_PROJECT 
 = 
GOOGLE_CLOUD_PROJECT export 
  
 GOOGLE_CLOUD_LOCATION 
 = 
global export 
  
 GOOGLE_GENAI_USE_VERTEXAI 
 = 
True 
  import 
  
 { 
  
 GoogleGenAI 
  
 } 
  
 from 
  
 "@google/genai" 
 ; 
 const 
  
 ai 
  
 = 
  
 new 
  
 GoogleGenAI 
 ({ 
  
 vertexai 
 : 
  
 true 
 , 
  
 project 
 : 
  
 process 
 . 
 env 
 . 
 GOOGLE_CLOUD_PROJECT 
 , 
  
 location 
 : 
  
 process 
 . 
 env 
 . 
 GOOGLE_CLOUD_LOCATION 
 , 
  
 apiVersion 
 : 
  
 'v1beta1' 
 , 
 }); 
 async 
  
 function 
  
 main 
 () 
  
 { 
  
 const 
  
 response 
  
 = 
  
 await 
  
 ai 
 . 
 models 
 . 
 generateContent 
 ({ 
  
 model 
 : 
  
 "gemini-2.5-flash" 
 , 
  
 contents 
 : 
  
 [ 
  
 "Give me a three day event schedule based on YOUR_URL 
. Also let me know what needs to taken care of considering weather and commute." 
 , 
  
 ], 
  
 config 
 : 
  
 { 
  
 tools 
 : 
  
 [{ 
 urlContext 
 : 
  
 {}}, 
  
 { 
 googleSearch 
 : 
  
 {}}], 
  
 }, 
  
 }); 
  
 console 
 . 
 log 
 ( 
 response 
 . 
 text 
 ); 
  
 // To get URLs retrieved for context 
  
 console 
 . 
 log 
 ( 
 response 
 . 
 candidates 
 [ 
 0 
 ]. 
 urlContextMetadata 
 ) 
 } 
 await 
  
 main 
 (); 
 

REST

 curl  
-X  
POST  
 \ 
  
-H  
 "Authorization: Bearer 
 $( 
gcloud  
auth  
print-access-token ) 
 " 
  
 \ 
  
-H  
 "Content-Type: application/json" 
  
 \ 
  
https://aiplatform.googleapis.com/v1beta1/projects/ GOOGLE_CLOUD_PROJECT 
/locations/global/publishers/google/models/gemini-2.5-flash:generateContent  
 \ 
  
-d  
 '{ 
 "contents": [ 
 { 
 "role": "user", 
 "parts": [ 
 {"text": "Give me a three day event schedule based on YOUR_URL 
. Also let me know what needs to taken care of considering weather and commute."} 
 ] 
 } 
 ], 
 "tools": [ 
 { 
 "url_context": {} 
 }, 
 { 
 "google_search": {} 
 } 
 ] 
 }' 
 > 
result.json

cat  
result.json 

For more details about Grounding with Google Search, see the overview page.

Web Grounding for Enterprise with URL context

You can enable both URL context and Web Grounding for Enterprise if you have specific compliance needs or are in a regulated industry like health, finance, or the public sector. The web index used in Web Grounding for Enterprise is more limited than the standard Grounding with Google Search index, as it uses a subset of what's available on Google Search.

For more details about Web Grounding for Enterprise, see the Web Grounding for Enterprise page.

Contextual response

The model's response is based on the content it retrieved from the URLs. If the model retrieved content from URLs, the response will include url_context_metadata . Such a response might look something like the following (parts of the response have been omitted for brevity):

  { 
  
 "candidates" 
 : 
  
 [ 
  
 { 
  
 "content" 
 : 
  
 { 
  
 "parts" 
 : 
  
 [ 
  
 { 
  
 "text" 
 : 
  
 "... \n" 
  
 } 
  
 ], 
  
 "role" 
 : 
  
 "model" 
  
 }, 
  
 ... 
  
 "url_context_metadata" 
 : 
  
 { 
  
 "url_metadata" 
 : 
  
 [ 
  
 { 
  
 "retrieved_url" 
 : 
  
 "https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/code-execution" 
 , 
  
 "url_retrieval_status" 
 : 
  
< UrlRe 
 tr 
 ievalS 
 tatus 
 .URL_RETRIEVAL_STATUS_SUCCESS 
 : 
  
 "URL_RETRIEVAL_STATUS_SUCCESS" 
>  
 }, 
  
 { 
  
 "retrieved_url" 
 : 
  
 "https://cloud.google.com/vertex-ai/generative-ai/docs/grounding/grounding-with-google-search" 
 , 
  
 "url_retrieval_status" 
 : 
  
< UrlRe 
 tr 
 ievalS 
 tatus 
 .URL_RETRIEVAL_STATUS_SUCCESS 
 : 
  
 "URL_RETRIEVAL_STATUS_SUCCESS" 
>  
 }, 
  
 ] 
  
 } 
  
 } 
  
 ] 
 } 
 

For more information about this object, see the UrlContextMetadata API reference.

Live fetch

The URL context tool fetches live versions of web pages to keep your information current.

To efficiently retrieve web page content, the URL context tool uses a two-stage process designed to balance speed, cost, and access to the most current information:

  1. Indexed content retrieval: This is the first stage. When you provide a URL, the tool first attempts to fetch the content from Google's extensive and highly optimized web index. This method provides fast access to a vast collection of crawled web pages.

  2. Live fetch fallback: This is the second stage. If the content for a given URL isn't available in the index (for example, if the page is very new and not yet indexed), the tool automatically performs a live fetch. This fallback mechanism can directly access the URL, and retrieve the latest version of the content in real-time.

Safety checks

The system performs a content moderation check on the URL to confirm that the URL meets safety standards. If the URL that you provided fails this check, you get a url_retrieval_status of URL_RETRIEVAL_STATUS_UNSAFE .

Token count

The input token count includes content retrieved from the URLs that you specify in your prompt. From the model output, you can see the token count for your prompt and tools usage in the usage_metadata object. The following is an example output:

  'usage_metadata' 
 : 
 { 
 'candidates_token_count' 
 : 
 45 
 , 
 'prompt_token_count' 
 : 
 27 
 , 
 'prompt_tokens_details' 
 : 
 [{ 
 'modality' 
 : 
< MediaModality 
 . 
 TEXT 
 : 
 'TEXT' 
> , 
 'token_count' 
 : 
 27 
 }], 
 'thoughts_token_count' 
 : 
 31 
 , 
 'tool_use_prompt_token_count' 
 : 
 10309 
 , 
 'tool_use_prompt_tokens_details' 
 : 
 [{ 
 'modality' 
 : 
< MediaModality 
 . 
 TEXT 
 : 
 'TEXT' 
> , 
 'token_count' 
 : 
 10309 
 }], 
 'total_token_count' 
 : 
 10412 
 } 
 

Price per token depends on the model that you use. For more information, see Cost of building and deploying AI models in Vertex AI .

Supported and unsupported content types

The URL context tool can extract content from URLs with the following content types:

Content Type
Text text/html
application/json
text/plain
text/xml
text/css
text/javascript
text/csv
text/rtf
Image image/png
image/jpeg
image/bmp
image/webp
PDF application/pdf

The URL context tool doesn't support the following content types:

  • Paywalled content
  • YouTube videos (For more information, see Video understanding .)
  • Google Workspace files like Google Docs or Google Sheets
  • Video and audio files

Limitations

  • The URL context tool consumes up to 20 URLs per request for analysis.
  • For best results during experimental phase, use the tool on standard web pages rather than multimedia content such as YouTube videos.
Design a Mobile Site
View Site in Mobile | Classic
Share by: