Cómo hacer que Claude busque en internet
Activa la herramienta de búsqueda web en la API de Claude y obtén respuestas con datos actuales y fuentes.

- Cuenta en console.anthropic.com con una API key activa
- Python 3.9+ instalado (o Node.js si prefieres JavaScript)
- Saldo o créditos en tu cuenta de Anthropic
- Terminal y editor de código básicos
- Qué es la herramienta web_search y cuándo conviene activarla
- Cómo instalar el SDK de Anthropic y guardar tu API key de forma segura
- Cómo hacer una petición donde Claude decide buscar en internet
- Cómo leer las citas y fuentes que devuelve Claude
- Cómo limitar dominios y controlar el número de búsquedas
Instalar el SDK y configurar la API key
Antes de nada necesitas el SDK oficial de Anthropic y tu clave de API. Entra en console.anthropic.com, ve a la sección API Keys y crea una nueva clave. Cópiala una sola vez porque no se vuelve a mostrar. Nunca la escribas directamente en el código: guárdala como variable de entorno para no exponerla en Git ni en repositorios públicos. En este tutorial usamos Python, pero el SDK de JavaScript funciona igual. Instala la librería con pip y exporta la clave en tu terminal. Si estás en España o LATAM, la facturación se hace en dólares independientemente de tu ubicación, así que revisa tu saldo antes de empezar. Con esto ya tienes el entorno listo para hacer que Claude consulte información en tiempo real.
pip install anthropic
# En Linux/macOS
export ANTHROPIC_API_KEY='tu-api-key-aqui'
# En Windows (PowerShell)
setx ANTHROPIC_API_KEY "tu-api-key-aqui"Entender la herramienta web_search
Claude no navega por internet por defecto. Para que busque necesitas pasarle la herramienta web_search en el parámetro tools de tu petición. Cuando la activas, Claude decide por sí mismo si una pregunta requiere información actual y, en ese caso, ejecuta una o varias búsquedas, lee los resultados y responde citando las fuentes. Esto es ideal para preguntas sobre noticias, precios, versiones de software o cualquier dato posterior a su fecha de entrenamiento. La herramienta se identifica con el tipo web_search_20250305 y un nombre fijo, web_search. Puedes controlar cuántas búsquedas hace como máximo con max_uses, para evitar que gaste de más. Cada búsqueda tiene un coste adicional al de los tokens, así que conviene limitarla. La gran ventaja frente a copiar y pegar texto manualmente es que Claude escoge los términos de búsqueda y filtra lo relevante por ti.
# Estructura de la herramienta que pasaremos a Claude
tool = {
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 3
}Hacer tu primera búsqueda con Claude
Ahora juntamos todo en una petición real. Creamos el cliente, definimos el modelo y le hacemos una pregunta cuya respuesta cambia con el tiempo, como el resultado de un partido reciente o la última versión de una librería. Al incluir la herramienta en tools, Claude detecta que necesita datos frescos, lanza la búsqueda y te devuelve la respuesta ya redactada. No tienes que orquestar nada más: el ciclo de buscar, leer y responder ocurre dentro de la misma llamada. Fíjate en que el modelo por defecto aquí es claude-opus-4-8. Ejecuta el script y verás cómo el texto final incorpora información que el modelo no tenía en su entrenamiento.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 3
}],
messages=[{
"role": "user",
"content": "¿Cuál es la última versión estable de Python y qué novedades trae?"
}]
)
for block in response.content:
if block.type == "text":
print(block.text)Leer las fuentes y citas de la respuesta
Una respuesta con búsqueda no es solo texto: incluye bloques adicionales con los resultados encontrados y las citas que respaldan cada afirmación. Esto es clave para verificar la información y mostrar las fuentes a tus usuarios, algo muy valorado en aplicaciones profesionales. Al recorrer response.content encontrarás bloques de tipo server_tool_use (la búsqueda que hizo Claude) y web_search_tool_result (los enlaces que encontró). Dentro del texto, las citas apuntan a las URLs concretas. Recorrer estos bloques te permite construir una lista de fuentes al pie de la respuesta, tal como hace Perplexity o el propio Claude en su web. Guardar y mostrar estas URLs aumenta la confianza y te protege de las alucinaciones, porque puedes contrastar lo que dice el modelo.
for block in response.content:
if block.type == "web_search_tool_result":
for item in block.content:
if hasattr(item, "title"):
print(f"Fuente: {item.title}")
print(f"URL: {item.url}\n")
elif block.type == "text":
print(block.text)Limitar dominios para búsquedas fiables
En muchos proyectos no quieres que Claude busque en cualquier web, sino solo en fuentes de confianza (documentación oficial, medios concretos, tu propio dominio). La herramienta admite allowed_domains para restringir dónde busca, o blocked_domains para excluir sitios. Esto es muy útil en entornos empresariales de España y LATAM donde necesitas cumplir criterios editoriales o legales. También puedes usar user_location para orientar los resultados a un país o idioma, algo práctico si quieres respuestas centradas en fuentes en español. Combinando estos parámetros consigues un asistente que busca de forma acotada y predecible, en lugar de traer resultados aleatorios de toda la web.
tool = {
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 3,
"allowed_domains": ["docs.python.org", "python.org"],
"user_location": {
"type": "approximate",
"country": "ES",
"timezone": "Europe/Madrid"
}
}Controlar costes y errores comunes
Cada búsqueda web tiene un coste extra sobre los tokens habituales, así que en producción conviene vigilar el gasto. Revisa el bloque usage de la respuesta para saber cuántas búsquedas se hicieron. Un patrón recomendable es cachear resultados para preguntas repetidas y poner un max_uses razonable. También maneja errores: si la búsqueda falla o no encuentra nada, Claude lo indica en el resultado y tu código debe contemplarlo para no romperse. Por último, recuerda que la búsqueda no está disponible en todos los modelos ni regiones por igual; comprueba la documentación si recibes un error de herramienta no soportada. Con estas precauciones tendrás una integración estable y con costes bajo control.
print("Búsquedas realizadas:", response.usage)
# Detectar si alguna búsqueda falló
for block in response.content:
if block.type == "web_search_tool_result":
if hasattr(block.content, "error_code"):
print("Error en la búsqueda:", block.content.error_code)Has conseguido que Claude busque en internet a través de la API: instalaste el SDK, activaste la herramienta web_search, hiciste una petición con datos en tiempo real, leíste las fuentes citadas y aprendiste a acotar dominios y controlar costes. Con esta base puedes construir asistentes con información actualizada y verificable. Si quieres seguir avanzando, este es un punto de partida ideal para aprender a construir sobre la API de Claude y llevar tus prototipos a aplicaciones reales.