Ir al contenido

Investigación web (búsqueda, lectura y rastreo)

Cinco nodos para que un workflow, o un agente de IA, investigue en internet:

NodoQué hace
webSearch — Búsqueda webBusca en Google y otros buscadores por API y devuelve, de cada resultado, título, enlace, dominio y resumen.
webReadPage — Leer página webLee una página pública y devuelve su título, descripción, texto y los datos de contacto visibles (correos, teléfonos, redes y páginas de contacto).
mapsSearch — Google Maps: buscar negociosBusca negocios en Google Maps por API y devuelve nombre, dirección, teléfono, web, valoración, categoría y coordenadas.
webMetadata — Metadatos de una páginaLee el JSON-LD, Open Graph y microdatos de una página y devuelve una ficha de producto normalizada (precio, marca, SKU, GTIN, disponibilidad…). Pensado para tiendas online.
webCrawl — Rastrear sitio web (spider)Recibe la URL de un sitio y devuelve las URL internas que encuentra, para analizarlas después con Leer página web o un agente.

Se pueden poner en cualquier punto del flujo o conectarlos a un nodo Agente IA como herramientas (tipo de herramienta nodo): el agente decide qué buscar y qué páginas abrir. Las plantillas «Prospección con agente de IA» de la Biblioteca los usan.

Crea una credencial de tipo Búsqueda web y elige proveedor:

ProveedorQué devuelveNotas
Serper.devResultados de GoogleWeb y noticias. Capa gratuita limitada.
SerpApiResultados de GoogleWeb y noticias.
Brave SearchÍndice propio de BraveWeb y noticias.
TavilyÍndice propio, pensado para IAWeb y noticias.
Google Programmable SearchGoogle, sobre los sitios que configuresNecesita además el identificador del buscador (cx); máximo 10 resultados por llamada; no distingue noticias.

Para el nodo Google Maps vale también Google Maps (Places API): una clave de tu proyecto de Google Cloud con Places API (New) activada (solo sirve para ese nodo, no para la búsqueda web). Serper y SerpApi sirven para los dos.

El botón Probar hace una búsqueda de un resultado y gasta una consulta de tu plan. La clave no se muestra en los logs.

ParámetroRequeridoDescripción
credentials_idSíCredencial de Búsqueda web.
querySíLo que escribirías en Google. Admite "frase exacta" y -palabra.
siteNoUno o varios dominios separados por coma; añade site: a la búsqueda (varios se unen con OR).
numNoResultados, de 1 a 20 (por defecto 10).
country / languageNoCódigos de 2 letras (es, mx, ar, cl, us…). country sesga los resultados hacia un país. Solo admite uno por búsqueda: para varios países (por ejemplo, Latinoamérica) se hace una búsqueda por país.
search_typeNoweb o news.
time_rangeNoAntigüedad máxima: day, week, month o year.
exclude_domainsNoDominios que se descartan, separados por coma.
pageNoPágina de resultados, de 1 a 10.
output_keyNoDónde se guarda el resultado (por defecto search).

Salida en data.search, conservando el resto de data:

{
"search": {
"provider": "serper",
"query": "consultoría Madrid site:linkedin.com/company",
"count": 2,
"results": [
{ "position": 1, "title": "Alfa Consulting | LinkedIn", "url": "https://es.linkedin.com/company/alfa", "domain": "linkedin.com", "snippet": "Consultoría · Madrid · 51-200 empleados", "date": null }
]
}
}

Quita duplicados y los resultados de los dominios excluidos. Ante un error del proveedor reintenta hasta dos veces (límite de uso, fallos 5xx, red).

ParámetroRequeridoDescripción
urlSíPágina pública http o https.
max_charsNoMáximo de caracteres de texto, de 500 a 30000 (por defecto 6000). Menos texto gasta menos tokens de IA.
extract_contactsNoExtrae correos, teléfonos, redes y páginas de contacto (activado).
respect_robotsNoRespeta robots.txt (activado, recomendado).
blocked_domainsNoDominios que no se leen. Por defecto LinkedIn, Facebook, Instagram, X y TikTok.
timeout_msNoTiempo máximo de la petición.
output_keyNoDónde se guarda el resultado (por defecto page).

Salida en data.page: title, description, site_name, lang, text, truncated, final_url, domain y contacts (emails, phones, social, contact_pages).

Como el destino lo puede decidir un agente de IA, el nodo se protege:

  • Solo lee http y https en puertos normales; no lee localhost, IP privadas ni los metadatos de la nube, y comprueba cada redirección y cada conexión.
  • Máximo 2 MB por página y 4 redirecciones. Solo páginas web (no PDF ni ficheros).
  • Se identifica como FloogosBot y respeta robots.txt.

Busca negocios en Google Maps por API (nunca hace scraping de Maps) y devuelve los datos ya normalizados, sea cual sea el proveedor.

ParámetroRequeridoDescripción
credentials_idSíCredencial de Búsqueda web con proveedor Google Maps (Places API), Serper o SerpApi.
querySíQué buscar: clínica dental, ferretería, restaurante vegano…
locationNoDónde: en Valencia, España. Se añade a la búsqueda.
country / languageNoCódigos de 2 letras (es, ar, cl, mx…). Un país por búsqueda: para varios países, una búsqueda por país.
lat / lng / radius_mNoAcota a una zona con un punto y un radio (100 a 50000 m).
max_resultsNoDe 1 a 60 (20 por defecto). Cada 20 es una llamada más a tu cuota.
detailNocontacto (teléfono, web y valoración; con Google Places usa su tarifa más alta) o basico (nombre, dirección y ubicación).
min_rating / min_reviewsNoFiltra por valoración y número mínimo de opiniones.
require_websiteNoSolo los negocios que tienen web.
exclude_closedNoExcluye los cerrados definitivamente (activado).
output_keyNoDónde se guarda el resultado (por defecto maps).

Salida en data.maps, conservando el resto de data:

{
"maps": {
"provider": "google_places", "query": "clínica dental en Valencia", "count": 2, "pages": 1,
"filtered": { "valoracion": 0, "opiniones": 0, "sin_web": 1, "cerrados": 0, "duplicados": 0 },
"places": [
{ "position": 1, "place_id": "ChIJ…", "name": "Clínica Sonrisa", "address": "Calle Mayor 1, Valencia", "phone": "963 123 456",
"website": "https://www.sonrisa.es", "domain": "sonrisa.es", "rating": 4.7, "reviews": 210, "category": "Clínica dental",
"categories": ["dentist"], "lat": 39.47, "lng": -0.37, "maps_url": "https://maps.google.com/?cid=…", "status": "OPERATIONAL", "source": "google_places" }
]
}
}

No devuelve el texto de las reseñas. Con domain puedes encadenar directamente Leer página web o Metadatos de una página para enriquecer cada negocio.

Lee los metadatos que una página publica para máquinas —JSON-LD de schema.org, Open Graph, Twitter Cards y microdatos— y los devuelve ordenados. Es lo que leen Google o WhatsApp para mostrar un producto, así que suele ser la forma más fiable y ligera de sacar datos de una tienda online. No ejecuta JavaScript: si la tienda pinta los datos en el navegador, no aparecerán.

ParámetroRequeridoDescripción
urlSíUna ficha de producto, una categoría o cualquier página pública.
urlsNoLista de varias páginas (hasta 30): una por línea, separadas por coma o una lista JSON. Si la rellenas, url se ignora. Se leen una a una, con pausa, y un fallo no corta el lote.
delay_ms / max_secondsNoSolo con urls: pausa entre páginas, de 500 a 10000 ms (1000), y tiempo máximo del lote, de 5 a 240 s (120).
include_json_ldNoDevuelve también el JSON-LD en bruto (activado; en lote, desactivado).
max_json_ld_charsNoTope del JSON-LD en bruto, de 1000 a 100000 (20000). La ficha normalizada no depende de él.
respect_robots / blocked_domains / timeout_msNoComo en Leer página web.
output_keyNoDónde se guarda el resultado (por defecto metadata).

Salida en data.metadata: title, description, canonical, lang, platform (Shopify, WooCommerce, PrestaShop, Magento, VTEX, Tiendanube, BigCommerce, Wix…), types (los @type encontrados), is_product_page, breadcrumbs, organization, open_graph, twitter, hreflang, json_ld y, la parte más útil, product:

{
"metadata": {
"platform": "shopify", "is_product_page": true, "breadcrumbs": ["Inicio", "Zapatillas"],
"product": {
"name": "Zapatillas Aire", "brand": "Marca X", "sku": "ZA-001", "gtin": "8412345678905", "description": "Ligeras y cómodas",
"image": ["https://cdn.shopify.com/a.jpg"], "price": 79.9, "currency": "EUR", "availability": "InStock", "in_stock": true,
"rating": 4.6, "rating_count": 128, "variants": null, "source": "json-ld",
"offers": [ { "price": 89.9, "currency": "EUR", "availability": "InStock", "in_stock": true } ]
}
}
}

Con lista de URL el resultado es data.metadata = { count, ok, failed, with_product, items: [...] }: cada elemento trae sus metadatos (con ok: true) o ok: false y un error con type y message. Es la base de la plantilla de seguimiento de precios.

product.source indica de dónde salen los datos (json-ld, microdata u open-graph, por ese orden de preferencia). El precio es el más bajo de las ofertas y in_stock es true si alguna oferta tiene stock. Para muchos productos combínalo con Rastrear sitio web (sitemap) y un iterador, con pausa entre páginas.

Dada la URL de un sitio, devuelve las URL internas (del mismo sitio) para que decidas cuáles analizar. Es un rastreador cortés y limitado: solo páginas públicas, una petición cada vez y con pausa.

ParámetroRequeridoDescripción
urlSíPágina de inicio o sección desde la que empezar.
modeNoauto (por defecto: usa el sitemap si existe y, si no, sigue enlaces), sitemap o links.
max_pagesNoMáximo de URL devueltas, de 1 a 500 (por defecto 50).
max_depthNoClics desde la página de inicio, de 0 a 5 (por defecto 2). Solo al seguir enlaces.
include_subdomainsNoIncluye blog.empresa.com además de empresa.com (desactivado). www cuenta como el mismo sitio.
exclude_paths / include_pathsNoTextos que deben (o no) contener las rutas. Por defecto se evitan login, carrito, cuenta, buscador interno y feeds.
keep_queryNoConserva los parámetros ?a=b (desactivado: se quitan, lo que evita duplicados y datos personales en la URL). Los de seguimiento (utm_, fbclid…) se quitan siempre.
fetch_titlesNoCon sitemap, descarga cada URL para saber su título y su estado (desactivado).
delay_msNoPausa entre peticiones, de 500 a 10000 ms (1000). Si el sitio pide un Crawl-delay mayor, se usa ese.
max_secondsNoTiempo máximo, de 5 a 240 s (60). Al llegar, devuelve lo encontrado.
respect_robotsNoRespeta robots.txt (activado, recomendado).
blocked_domainsNoDominios que no se rastrean (por defecto, las redes sociales).
output_keyNoDónde se guarda el resultado (por defecto crawl).

Salida en data.crawl, conservando el resto de data:

{
"crawl": {
"host": "empresa.com", "mode": "auto", "used_sitemap": true, "count": 48, "pages_fetched": 0,
"stopped_reason": "completado", "truncated": false, "pending": 0,
"sections": { "productos": 30, "blog": 12, "(inicio)": 1 },
"urls": [ { "url": "https://empresa.com/productos/a", "depth": null, "status": null, "title": null, "source": "sitemap", "lastmod": "2026-10-01" } ],
"documents": [ "https://empresa.com/catalogo.pdf" ],
"external_domains": { "otra.com": 2 },
"skipped": { "robots": 1, "externas": 3, "excluidas": 2, "duplicadas": 5, "errores": 0, "sin_seguir": 0 }
}
}

stopped_reason indica por qué terminó: completado, limite_de_paginas, tiempo, limite_del_sitio (el sitio respondió 429) o acceso_denegado (403 al empezar). Si es distinto de completado, el resultado es parcial.

  • Respeta robots.txt (rutas prohibidas y Crawl-delay), rel="nofollow", <meta name="robots" content="nofollow"> y X-Robots-Tag. Si el sitio prohíbe rastrear la ruta de inicio, no rastrea.
  • No sale del sitio ni sigue destinos privados; no inicia sesión, no rellena formularios, no resuelve captchas.
  • No rastrea LinkedIn, Facebook, Instagram, X ni TikTok, ni los dominios que Floogos tenga bloqueados a petición de sus titulares.
  • No guarda el contenido de las páginas: solo URL y títulos.
  • Se identifica como FloogosBot.
  • Auditoría semanal de tu web (sitio-mapa-y-auditoria-de-urls-con-informe): rastrea tu sitio, revisa estado y títulos de cada URL y te envía un informe con las páginas rotas, sin título o con títulos repetidos.
  • Vigilar las novedades de la web de un competidor (sitio-novedades-de-la-web-de-un-competidor-con-ia): rastrea su sitemap, detecta las páginas nuevas y un agente de IA las lee, las clasifica y puntúa su relevancia.
  • Seguimiento diario de precios de tus proveedores (sitio-seguimiento-de-precios-de-productos): lee precio y stock de hasta 30 productos con Metadatos de una página (lista de URL), guarda el historial y avisa de bajadas, subidas, precio objetivo y vuelta de stock.
  • Prospección con agente de IA (seis plantillas): un agente busca empresas con Búsqueda web y las lee con Leer página web.
  1. webCrawl con la web de una empresa (mode: sitemap).
  2. Un nodo que se queda con las URL de /blog o /productos (include_paths).
  3. webReadPage sobre cada una (con un iterador) y un nodo de IA que las analiza.

El nodo no continúa y devuelve error.type: auth_error (clave incorrecta), quota_exceeded, rate_limited, timeout, validation, domain_blocked, robots_disallowed, blocked_destination, not_found, forbidden, unsupported_type, host_not_found o connection_error. Dentro de un agente, el error se le devuelve como resultado de la herramienta y puede probar otra cosa.

En el nodo Herramienta de agente elige tipo nodo, pon webSearch o webReadPage en Tipo de nodo, la credencial en Credencial del nodo y, en Config base, lo que quieras fijar (por ejemplo {"site":"linkedin.com/company","country":"es","num":8}). Lo que decida el agente (query, url) se suma a esa configuración. Mira las plantillas de la Biblioteca para ver ejemplos completos.

Las consultas salen de Floogos hacia el proveedor de búsqueda que elijas y las páginas se leen desde el servidor de Floogos. Usa solo datos profesionales y públicos de empresas, revisa los resultados antes de contactar y respeta la normativa de protección de datos y de comunicaciones comerciales de tu país.