Investigación web (búsqueda, lectura y rastreo)
Descripción
Sección titulada «Descripción»Cinco nodos para que un workflow, o un agente de IA, investigue en internet:
| Nodo | Qué hace |
|---|---|
webSearch — Búsqueda web | Busca en Google y otros buscadores por API y devuelve, de cada resultado, título, enlace, dominio y resumen. |
webReadPage — Leer página web | Lee 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 negocios | Busca 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ágina | Lee 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.
Credencial
Sección titulada «Credencial»Crea una credencial de tipo Búsqueda web y elige proveedor:
| Proveedor | Qué devuelve | Notas |
|---|---|---|
| Serper.dev | Resultados de Google | Web y noticias. Capa gratuita limitada. |
| SerpApi | Resultados de Google | Web y noticias. |
| Brave Search | Índice propio de Brave | Web y noticias. |
| Tavily | Índice propio, pensado para IA | Web y noticias. |
| Google Programmable Search | Google, sobre los sitios que configures | Necesita 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.
webSearch
Sección titulada «webSearch»| Parámetro | Requerido | Descripción |
|---|---|---|
| credentials_id | Sí | Credencial de Búsqueda web. |
| query | Sí | Lo que escribirías en Google. Admite "frase exacta" y -palabra. |
| site | No | Uno o varios dominios separados por coma; añade site: a la búsqueda (varios se unen con OR). |
| num | No | Resultados, de 1 a 20 (por defecto 10). |
| country / language | No | Có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_type | No | web o news. |
| time_range | No | Antigüedad máxima: day, week, month o year. |
| exclude_domains | No | Dominios que se descartan, separados por coma. |
| page | No | Página de resultados, de 1 a 10. |
| output_key | No | Dó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).
webReadPage
Sección titulada «webReadPage»| Parámetro | Requerido | Descripción |
|---|---|---|
| url | Sí | Página pública http o https. |
| max_chars | No | Máximo de caracteres de texto, de 500 a 30000 (por defecto 6000). Menos texto gasta menos tokens de IA. |
| extract_contacts | No | Extrae correos, teléfonos, redes y páginas de contacto (activado). |
| respect_robots | No | Respeta robots.txt (activado, recomendado). |
| blocked_domains | No | Dominios que no se leen. Por defecto LinkedIn, Facebook, Instagram, X y TikTok. |
| timeout_ms | No | Tiempo máximo de la petición. |
| output_key | No | Dó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).
Seguridad
Sección titulada «Seguridad»Como el destino lo puede decidir un agente de IA, el nodo se protege:
- Solo lee
httpyhttpsen puertos normales; no leelocalhost, 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
FloogosBoty respetarobots.txt.
mapsSearch
Sección titulada «mapsSearch»Busca negocios en Google Maps por API (nunca hace scraping de Maps) y devuelve los datos ya normalizados, sea cual sea el proveedor.
| Parámetro | Requerido | Descripción |
|---|---|---|
| credentials_id | Sí | Credencial de Búsqueda web con proveedor Google Maps (Places API), Serper o SerpApi. |
| query | Sí | Qué buscar: clínica dental, ferretería, restaurante vegano… |
| location | No | Dónde: en Valencia, España. Se añade a la búsqueda. |
| country / language | No | Có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_m | No | Acota a una zona con un punto y un radio (100 a 50000 m). |
| max_results | No | De 1 a 60 (20 por defecto). Cada 20 es una llamada más a tu cuota. |
| detail | No | contacto (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_reviews | No | Filtra por valoración y número mínimo de opiniones. |
| require_website | No | Solo los negocios que tienen web. |
| exclude_closed | No | Excluye los cerrados definitivamente (activado). |
| output_key | No | Dó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.
webMetadata
Sección titulada «webMetadata»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ámetro | Requerido | Descripción |
|---|---|---|
| url | Sí | Una ficha de producto, una categoría o cualquier página pública. |
| urls | No | Lista 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_seconds | No | Solo 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_ld | No | Devuelve también el JSON-LD en bruto (activado; en lote, desactivado). |
| max_json_ld_chars | No | Tope del JSON-LD en bruto, de 1000 a 100000 (20000). La ficha normalizada no depende de él. |
| respect_robots / blocked_domains / timeout_ms | No | Como en Leer página web. |
| output_key | No | Dó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.
webCrawl
Sección titulada «webCrawl»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ámetro | Requerido | Descripción |
|---|---|---|
| url | Sí | Página de inicio o sección desde la que empezar. |
| mode | No | auto (por defecto: usa el sitemap si existe y, si no, sigue enlaces), sitemap o links. |
| max_pages | No | Máximo de URL devueltas, de 1 a 500 (por defecto 50). |
| max_depth | No | Clics desde la página de inicio, de 0 a 5 (por defecto 2). Solo al seguir enlaces. |
| include_subdomains | No | Incluye blog.empresa.com además de empresa.com (desactivado). www cuenta como el mismo sitio. |
| exclude_paths / include_paths | No | Textos que deben (o no) contener las rutas. Por defecto se evitan login, carrito, cuenta, buscador interno y feeds. |
| keep_query | No | Conserva 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_titles | No | Con sitemap, descarga cada URL para saber su título y su estado (desactivado). |
| delay_ms | No | Pausa entre peticiones, de 500 a 10000 ms (1000). Si el sitio pide un Crawl-delay mayor, se usa ese. |
| max_seconds | No | Tiempo máximo, de 5 a 240 s (60). Al llegar, devuelve lo encontrado. |
| respect_robots | No | Respeta robots.txt (activado, recomendado). |
| blocked_domains | No | Dominios que no se rastrean (por defecto, las redes sociales). |
| output_key | No | Dó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.
Cómo se comporta (y por qué)
Sección titulada «Cómo se comporta (y por qué)»- Respeta
robots.txt(rutas prohibidas yCrawl-delay),rel="nofollow",<meta name="robots" content="nofollow">yX-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.
Ejemplos en la Biblioteca
Sección titulada «Ejemplos en la Biblioteca»- 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.
Un patrón típico
Sección titulada «Un patrón típico»webCrawlcon la web de una empresa (mode: sitemap).- Un nodo que se queda con las URL de
/blogo/productos(include_paths). webReadPagesobre cada una (con un iterador) y un nodo de IA que las analiza.
Errores
Sección titulada «Errores»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.
Como herramienta de un agente
Sección titulada «Como herramienta de un agente»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.
Privacidad y uso responsable
Sección titulada «Privacidad y uso responsable»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.