Audita siempre robots.txt y términos de servicio — no hacerlo expone a responsabilidad legal; muchas páginas permiten scraping de datos públicos, pero la verificación previa es obligatoria antes de extraer nada
Define el esquema de datos antes de configurar el scraper — sin saber qué campos necesitas y en qué formato, el scraper recoge ruido que luego cuesta más limpiar que extraer manualmente
Elige la herramienta según la web, no según la preferencia — Browse AI funciona bien para páginas estáticas con estructura repetida; Playwright es necesario cuando la paginación depende de JavaScript o el contenido carga tras un clic
Resumen ejecutivo
Hacer scraping de webs para marketing accede a datos que las bases de datos comerciales no tienen: directorios de asociaciones sectoriales, listados de ponentes en eventos del sector, páginas de socios o clientes de competidores, y registros públicos de licitaciones. El proceso tiene tres fases diferenciadas.
Fase 1 — Auditoría: Identificas las páginas objetivo, compruebas el archivo robots.txt y los términos de servicio para confirmar que la extracción es lícita, y defines el esquema exacto de datos que necesitas recoger antes de tocar ninguna herramienta.
Fase 2 — Extracción: Configuras la herramienta adecuada al tipo de página: Browse AI para directorios con estructura HTML estática, Playwright con Python para páginas dinámicas con JavaScript o paginación compleja. El resultado es un archivo en bruto con ruido e inconsistencias que necesita limpieza.
Fase 3 — Estructuración con IA: Claude normaliza los datos, rellena campos ausentes cuando la fuente lo permite, detecta duplicados y genera el entregable final revisable.
El tiempo total varía según la complejidad de la web origen y la calidad de los datos en bruto, pero es un proceso que puede completarse en una o dos jornadas de trabajo. Si el objetivo final es captación, conecta estos datos con la guía para construir una lista de leads con IA y evita recopilar contactos sin un criterio comercial claro.
Criterios de aceptacion
- robots.txt y términos de servicio de cada fuente revisados y documentados antes de iniciar la extracción
- Esquema de datos definido con campos, tipos, formatos y reglas de normalización explícitos y aprobados
- CSV en bruto con cobertura evaluada y diagnóstico de problemas de extracción documentado
- CSV final normalizado con tipo societario eliminado de nombres de empresa y URLs en formato estándar con protocolo
- Duplicados detectados y gestionados; entregable sin filas duplicadas
- Revisión humana completada del subconjunto marcado como REVISIÓN o REVISAR
- Columna de fuente presente en el entregable final para trazabilidad de cada registro
- Número de registros en el entregable final igual o superior al mínimo acordado con el equipo de marketing
Intervencion 1
Fase 1: Auditoría de Fuentes, Revisión Legal y Esquema de Datos
El mayor error en scraping de marketing es comenzar a extraer antes de saber qué páginas son accesibles legalmente y qué datos exactos se necesitan. Configurar un scraper sobre una fuente errónea —porque el robots.txt lo prohíbe, porque los términos de servicio no permiten uso comercial, o porque la estructura de la página no devuelve los campos que necesitas— significa horas de trabajo perdidas. Esta fase define las reglas del juego antes de tocar ninguna herramienta de extracción.
Identifica y Cataloga las Páginas Candidatas
No todas las fuentes públicas son iguales. Un directorio de asociación sectorial tiene una estructura diferente a una página de ponentes de un evento, que a su vez difiere de una galería de clientes de un competidor. Antes de configurar cualquier herramienta, necesitas un inventario de páginas candidatas con una evaluación inicial de su utilidad y su complejidad técnica.
Para cada fuente candidata, anota: la URL raíz del listado, si el listado está en una sola página o paginado, si cada empresa tiene su propia subpágina con más detalle, qué datos aparecen visibles en la vista de listado y cuáles requieren entrar en cada ficha individual, y si el acceso requiere login o registro.
Esta información determina la herramienta y el esfuerzo de configuración. Un listado en una sola página con estructura estática es significativamente más rápido de configurar que el mismo volumen distribuido en fichas individuales con carga JavaScript, donde hay que navegar a cada ficha y esperar la respuesta antes de extraer los datos.
Rol: Eres especialista en análisis de fuentes web para extracción de datos de marketing B2B.
Tarea: Ayúdame a evaluar y catalogar las fuentes candidatas para mi proyecto de scraping.
Contexto: Necesito extraer datos de empresas de [DESCRIBE EL SECTOR]. Tengo estas fuentes candidatas: [LISTA LAS URLs]. Mi objetivo final es obtener: nombre de empresa, persona de contacto, email, web corporativa y especialización.
Formato de salida: Para cada URL, proporciona:
1) Tipo de fuente (directorio, listado de evento, galería de clientes, etc.)
2) Número estimado de registros
3) Datos visibles en la vista de listado sin entrar en cada ficha
4) Datos adicionales disponibles en ficha individual (si existe)
5) Complejidad técnica estimada (baja/media/alta) y razón
6) Prioridad recomendada (alta/media/baja) según calidad esperada de datos
Restricciones: No inventes datos sobre las webs. Si no tienes acceso a la URL, dímelo y describe qué información debería buscar manualmente. No incluyas fuentes que requieran login sin advertirlo. Revisa el Robots.txt y los Términos de Servicio de Cada Fuente
El archivo robots.txt no tiene fuerza legal por sí mismo, pero muchos términos de servicio lo referencian expresamente, y ignorarlo puede convertir una extracción en un incumplimiento documentado del contrato con la plataforma. Hay que revisar ambos documentos para cada fuente candidata antes de extraer nada.
Para cada fuente, accede a dominio/robots.txt y comprueba si la ruta del directorio está en la sección Disallow. Si está permitida o no se menciona, lee los términos de servicio buscando cláusulas sobre scraping automatizado, uso comercial de datos o prohibición de recopilación automática. La mayoría de directorios de asociaciones sectoriales permiten la consulta pública de sus miembros, porque ese es precisamente su propósito. Las páginas de eventos de terceros son más variables.
Cuando haya duda, la regla práctica es: si los datos son públicos y no están detrás de un muro de pago, si el sitio no prohíbe explícitamente la extracción automatizada, y si el ritmo de extracción no sobrecarga el servidor, la práctica generalmente se considera aceptable para datos de contacto profesional. Ante cualquier ambigüedad, consulta con asesoría legal antes de continuar.
Rol: Eres especialista en análisis de políticas de uso web y cumplimiento para extracción de datos.
Tarea: Ayúdame a revisar sistemáticamente el robots.txt y los términos de servicio de cada fuente candidata.
Contexto: Mis fuentes candidatas son: [LISTA DE URLs]. Necesito saber cuáles puedo usar para extracción automatizada de datos públicos con fines de marketing profesional.
Formato de salida: Para cada URL:
1) Contenido relevante del robots.txt (¿la ruta del directorio está permitida o bloqueada?)
2) Cláusulas relevantes de los términos de servicio (buscar: scraping, automated access, commercial use, data collection)
3) Veredicto: VERDE (extracción permitida o no mencionada), AMARILLO (ambiguo, requiere consulta legal), ROJO (explícitamente prohibida)
4) Si es AMARILLO o ROJO: qué alternativa existe (¿tiene API pública?, ¿se puede solicitar acceso por email?)
5) Nivel de riesgo estimado y razón
Restricciones: No interpretes las leyes ni des asesoramiento legal vinculante. Describe lo que dicen los documentos y recomienda consultar a un especialista legal cuando haya ambigüedad. Marca claramente las fuentes que deben descartarse. Define el Esquema de Datos con Tipos y Formatos Exactos
Un esquema de datos mal definido multiplica el trabajo de limpieza posterior. Si no especificas que el email debe estar en minúsculas, obtendrás valores mezclados que dificultan la deduplicación. Si no defines que el nombre de empresa debe estar sin el tipo societario, acabarás con inconsistencias que impiden detectar que dos registros son la misma empresa.
El esquema no es solo qué campos extraes, sino cómo deben estar formateados y qué hacer cuando faltan. Para marketing B2B, los campos habituales son: nombre_empresa (texto limpio sin tipo societario), web (URL completa con protocolo), email_contacto (formato estándar), nombre_persona (nombre y apellidos separados), cargo (texto libre normalizado), sector (categoría de tu taxonomía interna), fuente (URL de origen para trazabilidad) y fecha_extraccion (para gestionar la caducidad de los datos).
Especifica también los valores aceptables para campos con opciones limitadas. Si sector tiene categorías fijas, define cuáles son ahora, antes de que el scraper traiga numerosas variaciones distintas del mismo concepto. Esta decisión previa ahorra un tiempo considerable de limpieza posterior.
Rol: Eres especialista en diseño de esquemas de datos para pipelines de marketing B2B.
Tarea: Ayúdame a definir un esquema de datos completo para los registros que voy a extraer.
Contexto: Voy a extraer datos de empresas del sector [SECTOR] desde las fuentes que ya he auditado. Los campos que creo necesitar son: [LISTA TUS CAMPOS CANDIDATOS]. El destino final es un CSV para prospección comercial que se importará en [CRM O HERRAMIENTA DE EMAIL].
Formato de salida: Define para cada campo:
1) Nombre del campo (snake_case, sin caracteres especiales)
2) Tipo de dato (texto, URL, email, fecha, numérico, categoría fija)
3) Formato exacto (ej: email en minúsculas, URL con https://, fecha en YYYY-MM-DD)
4) Obligatorio u opcional
5) Valor por defecto si no está disponible en la fuente (ej: cadena vacía, null)
6) Regla de normalización si aplica (ej: eliminar S.L./S.A./S.L.U. del nombre de empresa)
7) Lista de valores permitidos si es categoría fija
Al final, genera la cabecera CSV con todos los campos en el orden recomendado.
Restricciones: Sé conservador con los campos obligatorios. Un campo con el 60 % de valores vacíos es mejor marcarlo como opcional desde el principio que forzar extracción de datos inexistentes. Inventario de Fuentes Auditadas y Esquema de Datos Aprobado
- Lista de fuentes con veredicto legal claro: VERDE, AMARILLO o ROJO
- Esquema CSV con campos, tipos, formatos y reglas de normalización documentados
- Estimación realista del volumen de datos esperado por fuente
- Identificación temprana de fuentes que deben descartarse, antes de invertir tiempo en scraping
Intervencion 2
Fase 2: Configuración del Scraper y Extracción de Datos en Bruto
Con las fuentes auditadas y el esquema definido, la fase de extracción consiste en configurar la herramienta adecuada para cada tipo de página y ejecutar la extracción respetando un ritmo que no sobrecargue el servidor origen. Los dos escenarios más frecuentes son: páginas con estructura HTML estática repetida (usando Browse AI sin código) y páginas con JavaScript dinámico o paginación compleja (usando Playwright con Python). Esta fase produce los datos en bruto que se limpiarán en la siguiente.
Configura Browse AI para Páginas con Estructura HTML Estática
Browse AI permite crear agentes de extracción sin código mediante un grabador visual: navegas a la página, señalas qué elementos quieres extraer, y el sistema aprende el patrón a partir de los primeros ejemplos que le muestras. Para páginas con estructura repetida —una tarjeta por empresa, siempre en el mismo lugar del DOM— este enfoque es muy eficiente y no requiere conocimientos de programación.
El proceso en Browse AI sigue estos pasos: crea un robot nuevo, indica la URL inicial, activa el grabador, selecciona manualmente los primeros ejemplos del campo que quieres extraer (por ejemplo, nombre de empresa), y el sistema propone automáticamente el selector CSS que captura ese campo para el resto de filas. Repite por cada campo del esquema.
Una vez configurados todos los campos, indica el elemento de paginación o el patrón de URL. El agente ejecuta la extracción de todas las páginas en modo no vigilado y devuelve los resultados en CSV o JSON descargable.
Revisa siempre una muestra de resultados manualmente antes de dar la extracción por válida, porque un selector mal aprendido puede producir un CSV donde todos los nombres son el mismo o donde un campo captura el elemento HTML adyacente en lugar del correcto.
Rol: Eres especialista en configuración de agentes de extracción web con herramientas no-code.
Tarea: Guíame paso a paso para configurar un agente de Browse AI que extraiga los campos de mi esquema desde una página con listado paginado.
Contexto: La página objetivo es [URL DEL DIRECTORIO]. Tiene [NÚMERO] registros en [NÚMERO] páginas con [NÚMERO] resultados por página. La paginación usa [DESCRIBE: botón 'Siguiente', URL con parámetro ?page=N, scroll infinito, etc.]. Los campos que necesito extraer son: [LISTA TUS CAMPOS DEL ESQUEMA CON SU NOMBRE EXACTO].
Formato de salida: Proporciona:
1) Qué tipo de robot configurar en Browse AI y por qué
2) Instrucciones paso a paso para el grabador: qué seleccionar, en qué orden, cuántos ejemplos marcar por campo
3) Configuración de paginación según el tipo detectado
4) Nombre de campo en Browse AI para que coincida con el esquema CSV
5) Cómo verificar que el selector es correcto antes de lanzar la extracción completa
6) Frecuencia de extracción recomendada y pausa entre peticiones sugerida
Restricciones: Si un campo requiere interacción JavaScript (clic en botón, hover), indícalo claramente como fuera del alcance de este paso y que necesitará Playwright. No inventes funcionalidades de Browse AI que no existan. Usa Playwright para Páginas con Contenido Dinámico o Paginación JavaScript
Cuando la paginación depende de JavaScript —un botón 'Cargar más' que añade resultados sin cambiar la URL, o un contenido que solo aparece después de un clic— las herramientas no-code tienen limitaciones importantes. Playwright es una biblioteca de automatización de navegadores para Python que controla un navegador real (Chromium, Firefox o WebKit) y puede interactuar con cualquier elemento de la página, incluyendo los que cargan contenido dinámicamente.
El script básico para un directorio paginado con JavaScript sigue esta estructura: lanzar el navegador, navegar a la URL inicial, esperar a que el listado esté visible usando wait_for_selector en lugar de un sleep fijo, extraer los datos de la página actual, buscar el botón de siguiente página, hacer clic, esperar la nueva carga, repetir hasta que el botón desaparezca. Para páginas que requieren ver una ficha individual por empresa, el script navega a cada URL, extrae los datos adicionales y vuelve al listado.
Mantén siempre una pausa entre peticiones para no sobrecargar el servidor origen. Un script que manda un volumen masivo de peticiones en muy poco tiempo puede ser bloqueado o detectado como tráfico no deseado. Esta cortesía técnica también significa que el scraping de un directorio grande puede tardar varias horas en ejecutarse.
Rol: Eres desarrollador Python especializado en automatización web con Playwright para extracción de datos.
Tarea: Escribe un script de Playwright que extraiga los datos del esquema definido desde una página con paginación JavaScript.
Contexto: La URL base es [URL]. La paginación es [DESCRIBE: botón 'Siguiente' con selector CSS, scroll infinito, parámetro de API, etc.]. Los campos a extraer en la vista de listado son: [CAMPOS]. Los campos adicionales que requieren entrar en cada ficha individual son: [CAMPOS ADICIONALES, si los hay]. El esquema de salida es un CSV con estas cabeceras: [CABECERAS].
Formato de salida: Script Python completo que:
1) Use playwright.sync_api
2) Implemente manejo de errores por timeout o elemento no encontrado
3) Incluya pausa configurable entre peticiones (mínimo 1 segundo)
4) Guarde resultados parciales cada 50 registros para no perder progreso en caso de error
5) Al terminar, guarde un CSV con la cabecera correcta y encoding UTF-8
6) Imprima progreso en consola (registro N de M extraído)
7) Maneje el caso en que un campo opcional no aparezca en alguna ficha
Restricciones: No uses time.sleep() fijo; usa wait_for_selector() y network idle donde corresponda. No incluyas User-Agent falso ni técnicas de evasión de detección. El script debe ser ejecutable con pip install playwright seguido de playwright install. Evalúa la Cobertura y Detecta Problemas de Extracción Antes de Limpiar
Una vez finalizada la extracción, antes de pasar a la fase de limpieza, hay que evaluar la calidad de los datos en bruto. Lanzarse a limpiar un CSV que proviene de una extracción rota significa trabajo perdido.
Cargar el CSV en una hoja de cálculo y revisar estos indicadores: número total de filas extraídas frente al número esperado de registros en la fuente, porcentaje de filas con el campo email vacío, porcentaje de filas con la web corporativa vacía, y presencia de valores que claramente no corresponden al campo esperado.
Un porcentaje elevado de emails vacíos puede significar que el selector no capturó correctamente el campo o que ese dato simplemente no está disponible públicamente en la fuente. Un número de filas inferior al esperado indica que la paginación no se recorrió completa. Valores erróneos en campos concretos señalan un selector que captura el elemento HTML adyacente en lugar del correcto.
Este diagnóstico es más rápido si lo haces con un prompt de Claude: pegas una muestra representativa del CSV y pides un análisis de cobertura y anomalías por campo. Obtienes en segundos una lista de problemas específicos que debes corregir, ya sea ajustando el selector en Browse AI o el script de Playwright, antes de invertir tiempo en limpiar datos que provienen de una extracción defectuosa.
Rol: Eres especialista en análisis de calidad de datos extraídos mediante scraping web.
Tarea: Analiza la cobertura y los problemas de calidad del CSV extraído antes de comenzar la limpieza.
Contexto: Acabo de completar la extracción de [FUENTE]. Esperaba aproximadamente [NÚMERO ESTIMADO] registros. El CSV extraído tiene [NÚMERO REAL] filas. Las primeras 50 filas son:
[PEGA LAS PRIMERAS 50 FILAS DEL CSV]
Formato de salida:
1) COBERTURA: ¿El número de filas extraídas es razonable frente al esperado? ¿Qué puede explicar la diferencia si existe?
2) ANÁLISIS POR CAMPO: Para cada columna, indica el porcentaje de valores vacíos, el porcentaje de valores con formato incorrecto, y si hay valores que claramente no corresponden a ese campo
3) ANOMALÍAS DETECTADAS: Lista específica de filas o patrones problemáticos con ejemplos concretos
4) VEREDICTO: REEXTRACCIÓN NECESARIA (problema estructural en el scraper) / CONTINUAR CON LIMPIEZA (problemas menores que se resuelven en limpieza)
5) Si el veredicto es REEXTRACCIÓN: qué ajuste concreto hacer al scraper
Restricciones: Basa el análisis únicamente en los datos que te proporciono. No inventes registros ni valores. Si un campo tiene el 80 % de valores vacíos, dilo claramente aunque incomode. CSV en Bruto con Datos Extraídos y Diagnóstico de Cobertura Documentado
- CSV con todos los registros extraídos de las fuentes auditadas
- Diagnóstico de cobertura: porcentaje de campos completos por columna
- Lista de problemas de extracción que deben corregirse antes de la limpieza
- Decisión documentada de si la extracción es suficiente para continuar o requiere reconfiguración del scraper
Intervencion 3
Fase 3: Limpieza, Normalización y Entrega del Resultado
Los datos en bruto de un scraper siempre contienen inconsistencias: mayúsculas mezcladas, tipos societarios en el nombre de empresa, emails con espacios en blanco, webs sin protocolo, campos que capturaron el HTML circundante en lugar del valor puro. Esta fase usa IA para aplicar las reglas de normalización definidas en el esquema, detectar duplicados y generar un CSV final que cumple los criterios de aceptación. Es la fase que produce el entregable revisable que el equipo de marketing puede usar directamente.
Normaliza Nombres, URLs y Emails con un Único Procesamiento de IA
La normalización en un único paso —en lugar de ir campo por campo en peticiones separadas— reduce el número de peticiones a la IA y asegura que las reglas se aplican de forma consistente sobre el mismo registro.
El prompt de normalización debe incluir todas las reglas del esquema que definiste en la Fase 1: eliminación del tipo societario del nombre de empresa, normalización de URLs al formato con protocolo y sin barra final, validación de formato de email con patrón básico, y eliminación de espacios en blanco al inicio y final de cada campo.
Para volúmenes pequeños, Claude puede procesar el contenido en una sola petición. Para volúmenes mayores, la estrategia más eficiente es procesar en bloques y unir los resultados al final. El output no debe ser solo el CSV limpio, sino también una columna adicional de estado que indique para cada fila si pasó la normalización sin problemas, si se aplicaron correcciones pero el registro es válido, o si algún campo no pudo normalizarse y requiere revisión manual.
Esta columna de estado es la que permite hacer una revisión humana eficiente: en lugar de revisar todas las filas una por una, revisas solo las marcadas como REVISIÓN y das por válidas las marcadas como OK o CORREGIDO.
Rol: Eres especialista en limpieza y normalización de datos para pipelines de marketing B2B.
Tarea: Limpia y normaliza este CSV de datos extraídos aplicando las reglas del esquema de datos.
Contexto: El CSV tiene estos campos: [LISTA LOS CAMPOS CON SU TIPO]. Las reglas de normalización son:
- nombre_empresa: eliminar tipo societario (S.L., S.A., S.L.U., S.A.U., S.C., Coop.), quitar espacios extra, aplicar Title Case
- web: si no tiene protocolo, añadir https://; si termina en barra, eliminarla; convertir a minúsculas
- email_contacto: convertir a minúsculas, eliminar espacios; si no cumple el patrón usuario@dominio.extension, marcar como INVÁLIDO
- nombre_persona: eliminar títulos (Dr., Dra., Lic.), aplicar Title Case
- Todos los campos: eliminar espacios al inicio y final
Datos a limpiar:
[PEGA AQUÍ EL CSV EN BRUTO, EN BLOQUES DE 100 FILAS]
Formato de salida: CSV con los mismos campos más una columna adicional 'estado_limpieza' con estos valores posibles: OK (todos los campos normalizados sin problema), CORREGIDO (se aplicaron correcciones pero el registro es válido), REVISIÓN (algún campo no pudo normalizarse o quedó vacío en un campo obligatorio). Devuelve únicamente el CSV, sin explicaciones adicionales.
Restricciones: No inventes valores para campos vacíos. Si un campo obligatorio está vacío, marca el estado como REVISIÓN pero mantén el campo vacío. No corrijas datos de negocio que no son errores de formato. Detecta y Gestiona Duplicados con Clave de Unión por Web Corporativa
Los duplicados en scraping aparecen por varias razones: la misma empresa listada en dos secciones del directorio, una empresa que aparece tanto como ponente en el evento como como patrocinadora, o un mismo contacto con dos variaciones del nombre. La deduplicación manual de un CSV de tamaño medio toma tiempo; la deduplicación automática basada únicamente en texto exacto pierde duplicados con variaciones menores.
La estrategia más efectiva es usar la web corporativa normalizada como clave de deduplicación primaria, porque es el campo que varía menos entre registros duplicados de la misma empresa. Si dos filas tienen la misma URL de web normalizada, son casi con certeza la misma empresa. Claude puede aplicar esta regla y además detectar duplicados probables donde la web es ligeramente diferente pero el nombre de empresa es casi idéntico.
Para el manejo de duplicados, la práctica más útil para marketing no es eliminar la fila duplicada directamente, sino marcarla e indicar cuál es el registro principal. Así, si un duplicado tiene datos que el registro principal no tiene —por ejemplo, uno tiene el email y el otro no— el equipo puede unir los datos complementarios manualmente antes de borrar. Esta decisión final la toma siempre una persona.
Rol: Eres especialista en deduplicación de bases de datos de contactos B2B.
Tarea: Detecta y marca duplicados en el CSV normalizado usando la web corporativa como clave primaria.
Contexto: El CSV normalizado tiene [NÚMERO] filas. Los campos son: [LISTA DE CAMPOS]. Quiero detectar:
1) Duplicados exactos: misma web normalizada en dos o más filas
2) Duplicados probables: misma web con pequeñas variaciones (con/sin www, con/sin barra final, http vs https)
3) Duplicados por nombre: si no hay web, nombre de empresa muy similar en dos filas (similitud alta)
Datos CSV:
[PEGA EL CSV NORMALIZADO]
Formato de salida: El mismo CSV con dos columnas adicionales:
- 'es_duplicado': SI / NO / REVISAR
- 'duplicado_de': si es SI, el número de fila del registro principal (la fila con más campos completos); si es NO o REVISAR, vacío
Al final del CSV, añade un resumen: total de filas, filas únicas, filas duplicadas detectadas, criterio que activó cada grupo de duplicados.
Restricciones: Cuando detectes un duplicado probable pero no seguro, marca 'es_duplicado' como REVISAR, no como SI. No elimines filas; solo marca. La decisión de borrar la hace un humano. Revisa el Subconjunto Marcado como REVISIÓN y Genera el Entregable Final
Con el CSV normalizado y deduplicado, el último paso antes del entregable es la revisión humana del subconjunto marcado como REVISIÓN o REVISAR. Este subconjunto representa los casos que la IA no pudo resolver automáticamente: campos obligatorios vacíos, duplicados probables pero no seguros, valores anómalos que el normalizador marcó pero no corrigió. Este subconjunto suele ser considerablemente menor que el total del CSV, y puede revisarse en un tiempo razonable.
Para cada fila en revisión, la decisión es una de estas tres: completar el campo manualmente si es posible encontrar el dato en la web de la empresa, marcar la fila como DESCARTAR si el dato es inaccesible o la empresa no cumple el perfil deseado, o confirmar el duplicado y unir campos complementarios si es ese el caso.
Al terminar la revisión, el entregable final es un CSV limpio con solo las filas en estado OK o CORREGIDO, con los duplicados eliminados y los descartados fuera, con todos los campos del esquema, y con la columna de fuente que indica el origen de cada registro para trazabilidad. Este CSV es el resultado revisable que el proceso exige: puedes volver a la fuente de cualquier registro y verificar que el dato era correcto en el momento de la extracción.
Rol: Eres especialista en control de calidad de bases de datos de contactos y revisión final de extracción web.
Tarea: Ayúdame a revisar eficientemente las filas marcadas como REVISIÓN y a generar el entregable final.
Contexto: Tengo [NÚMERO] filas marcadas como REVISIÓN en el CSV normalizado. Los motivos son:
- [X] filas con email_contacto vacío
- [X] filas con nombre_empresa anómalo
- [X] filas marcadas como duplicado probable (REVISAR)
Los criterios de aceptación del proyecto son: mínimo [NÚMERO] registros en el entregable final, con al menos el [PORCENTAJE] de webs completas.
Datos de las filas en revisión:
[PEGA LAS FILAS MARCADAS COMO REVISIÓN]
Formato de salida: Para cada fila, indica:
1) DECISIÓN: COMPLETAR_MANUALMENTE / DESCARTAR / CONFIRMAR_DUPLICADO / OK_SIN_CAMBIOS
2) RAZÓN: por qué tomas esa decisión
3) Si COMPLETAR_MANUALMENTE: qué campo completar y dónde buscarlo (en la web de la empresa, en LinkedIn, etc.)
Al final, genera un resumen del entregable final: N filas OK, N CORREGIDO, N descartadas, porcentaje de webs completas, porcentaje de emails completos. Indica si se cumplen los criterios de aceptación del proyecto.
Restricciones: No inventes datos de contacto. Si el email no está disponible públicamente, el campo debe quedarse vacío. No marques como OK una fila con campos obligatorios vacíos si esos campos son necesarios para el uso final. CSV Final Limpio, Deduplicado y con Revisión Humana Completada
- CSV con registros únicos y normalizados, con columna de fuente para trazabilidad de cada registro
- Porcentaje de completitud por campo documentado para conocer las limitaciones del entregable
- Registro de decisiones de revisión humana para auditoría posterior
- Entregable listo para importar en el CRM o usar directamente en herramienta de email marketing
Aprendizaje principal
El error más frecuente en scraping de marketing es invertir el orden: configurar el scraper primero y definir qué datos se necesitan después. El resultado es un CSV con campos que nadie pidió, sin los campos que sí hacen falta, y con un esquema que no coincide con el CRM de destino.
El segundo error es no evaluar la cobertura antes de pasar a la limpieza. Un selector mal configurado puede producir filas con el mismo valor repetido o con campos completamente vacíos, y si no lo detectas al principio, la IA de limpieza te devuelve un resultado limpio pero vacío de contenido útil.
La elección entre Browse AI y Playwright importa, pero menos de lo que parece. Lo que más condiciona el resultado es la calidad de la fuente: un directorio bien mantenido con estructura clara produce datos útiles con cualquier herramienta; una web desestructurada con información dispersa produce ruido con cualquier herramienta. Elegir bien la fuente en la Fase 1 es la decisión con mayor impacto en el resultado final, y es también la que requiere menos tiempo técnico y más criterio editorial.
Preguntas frecuentes
¿Cuánto tiempo tarda el proceso completo para un directorio de tamaño medio?
El tiempo varía mucho según la complejidad técnica de la fuente y la calidad de sus datos, pero el proceso suele distribuirse en una o dos jornadas de trabajo.
Fase 1 (auditoría y esquema) es la más corta: revisar robots.txt, términos de servicio y definir el esquema de datos son tareas que se pueden completar en una mañana.
Fase 2 (configuración y extracción) es donde más varía el esfuerzo: configurar Browse AI para una página estática es significativamente más rápido que escribir un script de Playwright para paginación JavaScript con fichas individuales. La ejecución del scraper puede correr de forma no vigilada mientras haces otra cosa.
Fase 3 (limpieza y revisión) combina procesamiento automático con IA —rápido— y revisión humana del subconjunto marcado como REVISIÓN, que requiere atención directa.
Las variables que más alargan el proceso son las páginas con JavaScript complejo que requieren iterar el script de Playwright, las fuentes con alta tasa de registros sin email público, y los directorios mal estructurados donde cada empresa tiene un formato de presentación diferente.
¿Puedo extraer emails de contacto directamente de las webs de las empresas?
Técnicamente sí, pero con limitaciones importantes que debes conocer antes de intentarlo. Extraer emails de páginas públicas de contacto es posible con un script de Playwright que navegue a la sección de contacto de cada empresa.
Hay tres consideraciones relevantes. Primera: el RGPD en el ámbito europeo regula el uso de datos personales, incluyendo emails profesionales extraídos de webs. El uso para marketing directo sin consentimiento explícito puede estar sujeto a restricciones según el tipo de comunicación que envíes; consulta con asesoría legal si tienes dudas. Segunda: muchas empresas protegen sus emails mostrándolos como imagen, ocultándolos detrás de formularios de contacto, o escribiendo la dirección de forma que dificulta la extracción automatizada. La tasa de éxito varía mucho según el sector y el tamaño de empresa.
Tercera: para el uso final de marketing, lo más habitual es usar los emails que la propia empresa ha publicado directamente en sus páginas públicas, asegurándote de que tus comunicaciones incluyen identificación del remitente y posibilidad de baja clara. En muchos casos, el email de contacto general está disponible en la propia web de la empresa sin necesidad de scraping avanzado.
¿Qué hago cuando el directorio requiere login o registro para ver los datos?
Si los datos que necesitas están únicamente disponibles para usuarios registrados, tienes tres opciones ordenadas de menor a mayor fricción.
La primera es registrarse en el directorio con una cuenta legítima y verificar si los términos de servicio permiten exportar o consultar los datos de forma sistemática. Algunos directorios de asociaciones permiten esto expresamente a sus miembros.
La segunda opción es buscar si el directorio tiene una alternativa pública parcial: a veces el listado general no está disponible sin login, pero sí se puede consultar empresa por empresa en la versión pública, lo que hace el scraping posible aunque más lento.
La tercera opción es descartar esa fuente y buscar alternativas públicas que cubran el mismo segmento: la web de la propia asociación a menudo tiene secciones públicas, los eventos sectoriales publican listados de ponentes sin login, y LinkedIn permite consultar empresas del sector con búsquedas específicas.
Lo que no debes hacer nunca es usar credenciales ajenas ni técnicas para eludir el sistema de login; además de ser éticamente incorrecto, el riesgo legal es significativo y documentable.
¿Cuál es la diferencia práctica entre scraping y usar una base de datos como Apollo o Clearbit?
Son enfoques complementarios, no sustitutos. Las bases de datos comerciales como Apollo, Clearbit o Hunter ofrecen acceso a datos estructurados y verificados a través de una API: el dato ya viene limpio, normalizado y con un nivel de confianza indicado.
El precio de esa comodidad es que solo tienen cobertura de lo que sus sistemas han rastreado y mantenido actualizado. Suele ser buena para empresas de cierto tamaño en mercados con alta presencia digital, pero puede ser escasa en nichos sectoriales muy específicos, empresas pequeñas de mercados locales, o sectores con baja presencia en bases de datos internacionales.
El scraping llega donde esas bases no tienen cobertura: el directorio de miembros de una asociación sectorial española, la lista de ponentes de un congreso especializado, los distribuidores de un fabricante industrial que aparecen en su web pero no en ninguna base de datos comercial. El proceso es más laborioso, los datos en bruto requieren limpieza, y los emails obtenidos necesitan validación independiente antes de usarlos en campañas.
Para un equipo de marketing, la estrategia más eficiente es combinar ambos enfoques: usar bases de datos comerciales para segmentos con buena cobertura, y recurrir al scraping cuando esas bases no tienen los datos específicos que necesitas.
¿Cómo mantengo la lista actualizada cuando los directorios cambian con frecuencia?
La caducidad de los datos es uno de los problemas estructurales del scraping para marketing: los emails cambian cuando las personas cambian de empresa, las webs se redirigen o desaparecen, y las empresas entran y salen de los directorios.
La estrategia de mantenimiento depende de la frecuencia con la que necesitas datos frescos. Para directorios de asociaciones que actualizan su membresía anualmente, una re-extracción anual completa suele ser suficiente. Para fuentes más dinámicas como páginas de eventos, la extracción es puntual por naturaleza: el listado de ponentes de un evento es relevante antes y durante el evento, y caduca una vez finalizado.
Para gestionar la caducidad en el CRM, la práctica más eficiente es mantener la columna de fuente y la fecha de extracción en cada registro. Cuando un email empieza a producir rebotes, puedes identificar qué fuente y qué fecha de extracción tienen los registros problemáticos y planificar una re-extracción selectiva de esas fuentes concretas. Browse AI permite configurar extracciones periódicas automáticas, lo que facilita el mantenimiento sin intervención manual para fuentes que se actualizan con regularidad.
Fuentes y referencias
Playwright for Python — Documentación oficial
Guía completa para automatización de navegadores con Playwright en Python: instalación, API de sincronización y asincronía, selectores CSS y XPath, manejo de eventos de red, wait_for_selector, ejecución de JavaScript en la página. Referencia de todos los métodos de Page, Locator y BrowserContext.
Abrir fuente: Playwright for Python — Documentación oficialScrapy — Documentación oficial
Framework Python para scraping a escala: spiders, pipelines, middleware de descarga, manejo de paginación, throttling automático para no sobrecargar servidores, exportación a CSV, JSON y XML. Guía de inicio rápido y referencia completa de la API.
Abrir fuente: Scrapy — Documentación oficialBeautiful Soup 4 — Documentación
Biblioteca Python para parsear HTML y XML: búsqueda por selector CSS y XPath, navegación del árbol DOM, extracción de texto y atributos. Complementa a Playwright y Scrapy para el procesamiento del HTML descargado cuando no se necesita automatización del navegador completa.
Abrir fuente: Beautiful Soup 4 — DocumentaciónBrowse AI — Plataforma de scraping sin código
Plataforma no-code para crear robots de extracción web mediante grabación visual: configura selectores señalando elementos en la página, gestiona paginación, exporta a CSV o JSON, permite programar extracciones periódicas. Adecuada para páginas con estructura HTML estática repetida.
Abrir fuente: Browse AI — Plataforma de scraping sin códigoAnthropic Claude — Referencia de API
Documentación oficial de la API de Claude para procesar texto estructurado: modelos disponibles, token counting, prompts de sistema, respuestas en formato estructurado, procesamiento de CSVs en contexto. Relevante para la fase de limpieza y normalización de datos extraídos mediante scraping.
Abrir fuente: Anthropic Claude — Referencia de APIThe Web Robots Pages — Estándar robots.txt
Referencia del estándar robots.txt: sintaxis de las directivas User-agent, Disallow, Allow, Crawl-delay y Sitemap, interpretación de comodines, y comportamiento esperado de crawlers bien comportados. Base para la auditoría legal de fuentes en la Fase 1.
Abrir fuente: The Web Robots Pages — Estándar robots.txt