Hace unos años nos llegó un cliente con una lista de 12.000 correos extraídos de directorios sectoriales. Estaba feliz. Tres semanas después de lanzar la campaña, su dominio principal había caído a un Sender Score de 38 y Gmail le rebotaba el 87% de los envíos. Tuvimos que comprar un dominio nuevo, montar infraestructura paralela y rezar para que Microsoft no lo metiera en la misma lista negra. Esa historia se repite cada mes en algún rincón del ecosistema B2B, y casi siempre por la misma razón: alguien aprendió cómo hacer email scraping leyendo cuatro tutoriales y pulsó «enviar» sin entender lo que tenía delante.
En esta guía vamos a desmontar el proceso entero, desde lo que legalmente puedes tocar hasta el ritmo de envío que evita que tu IP acabe en Spamhaus. No es la versión bonita que cuentan los vendedores de cursos. Es la que aplicamos nosotros cuando un cliente nos pide construir una base prospectiva desde cero.
¿La premisa? Que extraer direcciones públicas y enviarles un correo frío puede funcionar muy bien, pero la diferencia entre una campaña que convierte y otra que te quema la reputación está en cuatro o cinco decisiones técnicas que casi nadie documenta.
Qué estás extrayendo realmente (y qué no deberías tocar)
El email scraping es la extracción estructurada de direcciones de correo electrónico desde fuentes públicas (webs corporativas, directorios, SERPs) mediante scripts o herramientas especializadas, con fines de prospección comercial. Lo que separa una práctica defendible de una sancionable es el criterio aplicado en la fuente, el respeto al RGPD y la verificación posterior antes del envío.
Antes de configurar nada, conviene aclarar un punto que casi todo el mundo se salta: no todo lo que aparece publicado en internet es legalmente recopilable, y no todo lo recopilable es comercialmente útil. La confusión entre esos dos planos arruina más campañas que cualquier fallo técnico.
¿Es legal hacer email scraping bajo RGPD?
Sí, pero con matices importantes. El Reglamento Europeo 2016/679, que entró en vigor en mayo de 2018, considera dato personal cualquier información que identifique a una persona física. Y aquí viene la parte incómoda: un correo del tipo nombre.apellido@empresa.com es un dato personal aunque esté publicado en una web corporativa. Eso no significa que no puedas usarlo, pero sí que necesitas una base legal para hacerlo. En la mayoría de campañas B2B, esa base es el interés legítimo, y para sostenerlo tienes que documentar tres cosas: finalidad concreta, expectativa razonable del destinatario y proporcionalidad del tratamiento.
Una dirección genérica del estilo info@empresa.com o ventas@empresa.com está fuera del paraguas del RGPD porque no identifica a nadie. Esas se pueden trabajar con bastante más libertad, aunque la LSSI sigue exigiendo relación previa o que el envío encaje en la actividad profesional del destinatario.
¿La regla práctica que aplicamos? Si la dirección no aparece publicada por el propio interesado en un contexto profesional (su firma de blog, su perfil corporativo, su web), no la tocamos. Y si la fuente es un directorio agregador donde alguien recopiló esos datos sin consentimiento, tampoco. La AEPD ha sancionado más de una vez por este vector.
La diferencia entre scraping, harvesting y enriquecimiento
Tres palabras que se usan indistintamente y significan cosas distintas. Te las desambiguo:
- Scraping: extracción estructurada desde fuentes públicas con criterio temático y geográfico definido. Es la opción defendible.
- Harvesting: recolección masiva e indiscriminada, normalmente con bots que barren millones de URLs sin filtro. Es lo que el RGPD considera tratamiento desproporcionado.
- Enriquecimiento: partir de una lista propia (clientes, leads, registrados) y completarla con datos públicos. Suele ser la vía más limpia legalmente.
Cuando alguien nos pide «una campaña de extracción de correos», lo primero que hacemos es traducir esa petición al método correcto. En el 60% de los casos lo que realmente necesitan es enriquecimiento de su CRM, no extracción desde cero.
Antes de lanzar el primer bot: define la fuente
Aquí es donde el 80% de los proyectos se tuercen. La gente se obsesiona con la herramienta y olvida que la calidad de la fuente determina la calidad del resultado. Si la fuente es ruidosa, ninguna verificación posterior salvará la lista.
Webs corporativas, directorios y resultados de búsqueda
Las webs corporativas son la fuente más limpia y, paradójicamente, la menos explotada. Páginas de equipo, secciones de prensa, blogs con autoría: ahí encuentras direcciones reales, profesionales y contextualizadas. La pega es que el rendimiento por hora es bajo. Para sacar 500 contactos cualificados puedes necesitar barrer 2.000 dominios.
Los directorios sectoriales (cámaras de comercio, asociaciones profesionales, listados de eventos) están en un punto intermedio. Volumen decente, calidad variable. Lo que muchos no comprueban es la fecha de actualización: un directorio que no se ha revisado desde 2019 te va a generar tasas de rebote del 30% o más.
Y luego están las SERPs. Extraer direcciones de los resultados de búsqueda funciona si combinas operadores avanzados con criterios geográficos. Una búsqueda del tipo «director marketing» + «contacto» + site:.es filtra mejor que cualquier directorio comercial. El problema: Google empieza a bloquearte la IP a partir de cierto volumen, así que necesitas proxies rotativos o asumir lentitud.
LinkedIn y por qué requiere un enfoque distinto
LinkedIn merece su propio párrafo porque es el caso más espinoso. Sus términos de servicio prohíben explícitamente el scraping automatizado, y han ganado varias demandas contra empresas que lo hacían a escala. El caso hiQ Labs vs LinkedIn de 2022 acabó dándole la razón a LinkedIn en última instancia.
¿Qué hacemos nosotros? Trabajamos con herramientas que se conectan vía API legítima (las que tienen acuerdo comercial) o usamos navegación manual asistida cuando el volumen es bajo. Las direcciones no están publicadas en la red de Microsoft, así que cualquier herramienta que prometa extraerlas las está infiriendo con patrones (nombre.apellido@dominio) y verificándolas después.
Si tu campaña depende de LinkedIn, asume que necesitas un presupuesto distinto. Herramientas como Apollo o Lemlist con licencia profesional cuestan dinero, pero te ahorran problemas legales que pueden costar muchísimo más.
Montaje del flujo paso a paso
Vamos al núcleo técnico. El proceso completo tiene cuatro fases, y cada una determina la siguiente. Saltarse una se nota inmediatamente en la tasa de rebote.

Paso 1: construir la lista de URLs semilla
Todo empieza aquí. Una lista semilla bien construida ahorra horas en pasos posteriores. Mal hecha, multiplica el ruido por cinco. Nuestro criterio mínimo: 500-800 URLs iniciales para una campaña que aspire a generar 200-300 contactos cualificados.
¿Cómo se construye? Combinando tres fuentes: búsquedas avanzadas en Google con operadores filtrados por sector y geografía, exportaciones de directorios sectoriales y dorks específicos del estilo intext:»correo electrónico» filetype:pdf para localizar PDFs con datos de contacto publicados. Esa última fuente es oro y casi nadie la usa.
Antes de pasar al extractor, conviene revisar manualmente una muestra del 5%. Si entre 25 URLs hay tres que ya no funcionan, tu lista está desactualizada y vas a perder tiempo. Mejor refinarla antes.
Paso 2: configurar el extractor (regex, parser o herramienta)
Tres opciones según tu nivel y volumen:
La regex pura sigue siendo válida para casos sencillos. El patrón estándar [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} captura el 95% de direcciones bien formadas. Lo malo es que también captura ruido: imágenes con nombre que parece email, código JavaScript con strings tipo direcciones, falsos positivos generados por el propio HTML.
Un parser HTML estructurado (BeautifulSoup en Python, Cheerio en Node) es la opción intermedia. Te permite buscar dentro de etiquetas específicas (mailto: en atributos href, por ejemplo) y eliminar buena parte del ruido. Es lo que recomendamos para volúmenes medios.
Para volúmenes serios, Scrapy o herramientas no-code como Octoparse. Scrapy tiene curva de aprendizaje pero te da control absoluto sobre proxies, delays, lógica de paginación y manejo de errores. Octoparse acelera el setup inicial pero te limita cuando el sitio objetivo tiene defensas (Cloudflare, captchas, JavaScript pesado).
Paso 3: deduplicar y normalizar los registros
Aquí muere mucha gente. Una lista extraída en bruto suele tener entre un 15% y un 30% de duplicados, formatos inconsistentes y direcciones con espacios, mayúsculas dispares o caracteres invisibles pegados desde HTML mal formado.
Pasos mínimos de normalización: convertir todo a minúsculas, eliminar espacios y caracteres no imprimibles, separar la parte local del dominio para detectar variantes (juan.perez+contacto@empresa.com y juan.perez@empresa.com son la misma persona en Gmail). Después, deduplicación cruzada por dominio para detectar direcciones genéricas que repiten.
Un detalle que se pasa por alto: si vas a hacer envíos personalizados, conviene extraer también nombre y apellido cuando estén disponibles, y normalizarlos en columnas separadas. Una personalización rota (Hola NULL) es peor que no personalizar.
Paso 4: verificar la entregabilidad antes de exportar
Sin este paso, tu lista no vale nada. Da igual cuánto hayas filtrado: las direcciones envejecen, los dominios cambian, las cuentas se desactivan. Verificación obligatoria.
Hay tres niveles. El primero, sintaxis y MX records, lo puedes hacer tú mismo con un script de 30 líneas. Filtra direcciones mal formadas y dominios que no tienen servidor de correo configurado. Elimina entre el 5% y el 15% del ruido.
El segundo nivel es SMTP handshake: el verificador hace una conexión real al servidor del destinatario y comprueba si la dirección existe sin enviar nada. Aquí es donde entran NeverBounce, ZeroBounce, Hunter Verifier. Cuestan entre 0,007$ y 0,008$ por dirección, y filtran un 20-30% adicional. Para 5.000 contactos hablamos de 35-40 dólares. Es la mejor inversión del proceso.
El tercer nivel, que casi nadie aplica, es la detección de catch-all. Algunos dominios aceptan cualquier dirección en su servidor (devuelven «válida» para todo), lo cual hace inútil la verificación SMTP. Las herramientas serias marcan estos casos como risky y conviene apartarlos a un segmento separado con ritmo de envío más lento.
Métodos según presupuesto y volumen
No hay un método universal. Hay tres caminos según donde estés tú: presupuesto cero y volumen pequeño, presupuesto medio y volumen estable, o equipo técnico y volumen alto. Los repaso por orden.
Extracción manual asistida con extensiones de Chrome
Para volúmenes de hasta 500-800 contactos al mes, las extensiones tipo Hunter, Apollo Chrome Extension o RocketReach funcionan razonablemente bien. Te plantas en la web objetivo, pulsas el botón de la extensión y te saca las direcciones asociadas a ese dominio. La precisión está entre el 70% y el 85% según el sector.
Coste: planes gratuitos cubren 25-50 búsquedas/mes, los de pago empiezan en 35-50 euros mensuales. Para autónomos o microagencias es la entrada más sensata. Pero no escala: si necesitas más de 1.000 contactos al mes, te toca pasar al siguiente nivel.
Scrapers no-code tipo Octoparse o Outscraper
Octoparse permite definir reglas visuales para extraer datos estructurados de cualquier web. Curva de aprendizaje de unas 6-10 horas si nunca lo has tocado. Una vez configurada la plantilla, puedes lanzar extracciones programadas y exportar a CSV o conectarlas con Zapier.
Outscraper se especializa en Google Maps, lo cual lo hace especialmente útil para campañas geolocalizadas. Si vas a por restaurantes, clínicas o talleres en una zona concreta, este es el camino corto. Precio: entre 30 y 200 dólares al mes según volumen.
Ambas son legales en el sentido de que tú decides qué scrapear, pero te responsabilizas del cumplimiento legal de cada extracción. Las herramientas no firman por ti.
Scripts propios con Python (BeautifulSoup, Scrapy)
Aquí entras si tienes equipo técnico o estás dispuesto a aprender. Un crawler básico con BeautifulSoup se monta en 200-300 líneas de código. Scrapy es más industrial: maneja concurrencia, reintentos, proxies, exportación a JSON o bases de datos, y se integra con cualquier pipeline.
Ventajas frente al no-code: control absoluto sobre el flujo, coste marginal cero por extracción, capacidad de adaptarse a sitios complejos con autenticación o renderizado JavaScript (combinando Scrapy con Splash o Playwright). Inconveniente: necesitas mantenimiento. Cuando una web cambia su estructura, tu script deja de funcionar y toca repararlo.
En proyectos donde la extracción es continua y forma parte del modelo de negocio, los scripts propios salen rentables a partir del tercer mes. Para extracciones puntuales, las herramientas no-code ahorran tiempo.
Los errores que arruinan una campaña recién extraída
Has hecho todo bien, tienes una lista de 3.000 direcciones verificadas, y aun así la campaña fracasa. Te cuento los dos motivos que vemos repetidos.
Tasas de rebote que tiran la reputación del dominio
Gmail considera aceptable una tasa de rebote por debajo del 2%. Microsoft es más laxo, pero a partir del 5% empieza a filtrar agresivamente. Por encima del 10% entras en blacklists colaborativas como Spamhaus o Barracuda, y desde ahí salir cuesta semanas y, a veces, comprar dominio nuevo. Vinculado a esto, el Sender Score de Validity por debajo de 70 ya marca reputación pobre, y recuperarlo exige semanas de envíos cuidados.
El problema es que la verificación SMTP no es perfecta. Te dirá que el 95% de tu lista es válida, pero en la práctica, al enviar, puede rebotar entre un 3% y un 8% adicional por motivos que el verificador no detecta: buzones llenos, cuentas suspendidas temporalmente, filtros corporativos que rechazan al primer envío. Mi recomendación: enviar siempre primero a un sub-segmento del 5-10% de la lista para medir la tasa real antes de continuar.
Confundir email válido con email contactable
Una dirección puede ser técnicamente válida y absolutamente inútil. info@empresa.com de una multinacional acaba en una bandeja que nadie lee. noreply@servicio.com no acepta respuestas. antiguo.empleado@empresa.com sigue activo pero lo lee una secretaria que reenvía a HR cualquier cosa sospechosa.
Aquí nos ayudó muchísimo aplicar nuestra guía sobre qué es scraping y mailing aplicado a estrategia para distinguir entre dirección verificada y dirección útil. La regla práctica que aplicamos: si la dirección no contiene un nombre propio o un rol identificable (marketing@, ventas@, compras@), va a un segmento de menor prioridad con copy distinto.
Qué hacer con la lista una vez limpia
Aquí termina la fase técnica y empieza la fase de negocio. Una lista limpia mal trabajada es desperdicio. Una lista mediana bien segmentada y enviada con cabeza convierte.
Segmentación mínima antes del primer envío
Tres ejes de segmentación que aplicamos siempre, aunque la lista sea pequeña:
- Por rol: direcciones con nombre propio (lectura humana garantizada) vs. genéricas (lectura incierta). El copy es distinto.
- Por tamaño de empresa: autónomo, PYME, mediana, gran cuenta. La propuesta de valor y el tono cambian.
- Por sector: aunque tu producto sea horizontal, los ejemplos del email deben ser verticales.
Una segmentación mínima de cuatro o cinco grupos te permite probar variantes y aprender qué segmento responde. Sin segmentar, tu campaña es una lotería.
Calentamiento del buzón y ritmo de envío inicial
Si el dominio desde el que vas a enviar es nuevo, o si nunca ha enviado volumen comercial, tienes que calentarlo. El calentamiento consiste en aumentar gradualmente el volumen de envío para que los proveedores construyan una reputación positiva del dominio.
Pauta orientativa que seguimos: días 1-7, entre 20 y 30 envíos diarios. Días 8-14, 40-50 (manteniéndose dentro del rango recomendado de 20-50 envíos/día las dos primeras semanas). Días 15-30, hasta 100-150. A partir del día 30, si la tasa de respuesta y la de rebote están sanas, puedes escalar a 200-300. Saltarse este calendario equivale a marcar tu dominio como sospechoso desde el primer día.
Existen herramientas (Mailwarm, Warmup Inbox, Lemwarm) que automatizan este proceso simulando intercambios entre buzones reales para generar señales positivas de engagement. Cuestan entre 30 y 80 euros al mes y, sinceramente, en proyectos donde el dominio es activo crítico, son innegociables.
El último consejo, el que más nos costó aprender: nunca envíes desde tu dominio principal. Compra un dominio secundario, configúralo con SPF, DKIM y DMARC, caliéntalo durante un mes y úsalo solo para campañas frías. Si algo se tuerce, sacrificas el dominio secundario, no el que sostiene tu marca. Esa decisión nos ha ahorrado más de un disgusto.

Preguntas frecuentes sobre extracción de correos B2B
¿Qué es exactamente el email scraping?
Es el proceso de extraer de forma estructurada direcciones de correo electrónico publicadas en fuentes accesibles (webs, directorios, SERPs, PDFs) mediante scripts, parsers o herramientas no-code, para construir bases de prospección comercial. Se diferencia del harvesting (recolección masiva indiscriminada) y del enriquecimiento (completar listas propias con datos públicos).
¿Cuál es la mejor herramienta para hacer scraping de correos?
Depende del volumen y presupuesto. Para hasta 500 contactos/mes, extensiones tipo Hunter o Apollo bastan. Para volúmenes medios (1.000-5.000), no-code como Octoparse u Outscraper. Para flujos continuos o sitios complejos, scripts propios con BeautifulSoup o Scrapy en Python.
¿Cómo evito que mi dominio acabe en blacklist?
Verificar la lista con SMTP handshake antes de enviar, calentar el dominio gradualmente (20-50 envíos/día las dos primeras semanas), nunca usar el dominio principal para campañas frías, configurar SPF/DKIM/DMARC y mantener la tasa de rebote por debajo del 2-3%.
En resumen: hacer extracción de correos no es difícil técnicamente, pero exige criterio en cada fase. Define la fuente, respeta el marco legal, verifica antes de enviar, segmenta y calienta. Si te saltas alguno de esos cinco controles, no estás construyendo una base prospectiva: estás regando gasolina sobre tu propio dominio. Y eso, cuando arde, arde de verdad.

