Cómo construimos un dataset anti-emails desechables
Cuando hablamos de bloquear cuentas falsas, el primer paso suele ser el mismo: verificar el email. Pero para detectar un email desechable, primero hay que saber qué dominios son desechables. Las listas públicas en GitHub cubren los casos más obvios, pero rara vez están actualizadas. Cada semana aparecen nuevos servicios, con dominios que pasan desapercibidos.
Decidimos construir nuestro propio dataset en WebAPI. Así lo hicimos.
Por qué las cuentas falsas son un problema real de negocio
Las cuentas falsas no son solo un problema técnico. Tienen un coste directo en el negocio.
-
Ruido en el CRM : Cada cuenta falsa creada con un email desechable aterriza en el pipeline comercial. Los equipos de ventas pierden tiempo cualificando leads que no existen (Hubspot, Salesforce, etc.), las métricas de conversión se distorsionan y la relación señal/ruido del CRM se degrada. En un SaaS con miles de registros al mes, esto puede representar decenas de horas perdidas.
-
Abuso de pruebas gratuitas y recursos : Los emails desechables permiten que un mismo usuario cree cuentas en bucle para aprovechar indefinidamente un free trial, acumular créditos gratuitos o saltarse los límites de uso. Para un producto API como el nuestro, es consumo de recursos sin ninguna conversión detrás.
-
Métricas de producto contaminadas : Las cuentas falsas inflan artificialmente las cifras de registro y distorsionan las tasas de activación (por ejemplo, un dashboard de Mixpanel o Metabase), retención y conversión. Es imposible tomar decisiones de producto fiables con cohortes llenas de cuentas fantasma.
-
Riesgos de reputación y entregabilidad : Enviar emails de onboarding a direcciones desechables es enviar al vacío. Los rebotes se acumulan, la tasa de entregabilidad cae y la reputación de tu dominio de envío se resiente ante los proveedores de email.
El problema: proveedores que se mueven rápido
Los servicios de email temporal no funcionan todos de la misma forma. Algunos exponen una lista fija de dominios en un menú desplegable. Otros generan direcciones aleatorias en cada visita, rotando entre dominios. Algunos inyectan sus dominios dinámicamente mediante JavaScript, invisibles en el HTML sin procesar.
Construir un dataset fiable implica adaptarse a cada uno de estos comportamientos.
Paso 1: recolección multi-estrategia
Apuntamos a más de 20 proveedores de emails desechables. Para cada uno, desplegamos la estrategia de extracción más adecuada a su funcionamiento.
Peticiones HTTP clásicas : Para los sitios que exponen sus dominios directamente en el HTML (menús <select>, listas, campos <input> pre-rellenados), basta con una llamada HTTP. Parseamos el DOM y extraemos los dominios.
Navegadores controlados : Muchos proveedores modernos cargan su contenido mediante JavaScript. El HTML estático no contiene nada útil. Utilizamos navegadores headless que ejecutan el JS, esperan al renderizado completo y luego nos dan acceso al DOM final.
Capturas de pantalla + OCR : Algunos servicios van más allá en la protección: el dominio no existe en ninguna parte del DOM, se renderiza únicamente en un canvas o una imagen. En esos casos, tomamos una captura de pantalla y extraemos el texto por OCR.
Llamadas API directas : Cuando un servicio expone una API (pública o semi-pública) para generar direcciones, la usamos directamente.
Paso 2: extracción inteligente de dominios
Obtener el HTML o la captura no es suficiente. Hay que extraer los dominios de forma fiable. Aplicamos varias capas de extracción en cascada:
- Campos de entrada : escaneamos los
<input>para detectar direcciones email pre-rellenadas y extraer el dominio - Menús desplegables : los
<select>suelen contener la lista completa de dominios disponibles - Enlaces y texto plano : como último recurso, buscamos patrones
@dominio.tlden todo el texto visible
Paso 3: filtrado de falsos positivos
Esta es probablemente la etapa más crítica. La extracción agresiva produce ruido: dominios que en realidad no son desechables. Sin filtrado, corremos el riesgo de bloquear usuarios legítimos : algo que no nos podemos permitir.
Nuestro pipeline aplica varios filtros:
- Lista de exclusión : los grandes dominios legítimos (gmail.com, outlook.com, etc.) y los dominios de infraestructura (googleapis.com, cloudflare.com, etc.) se excluyen sistemáticamente
- Validación estructural : verificamos que el dominio tenga un formato válido, un TLD reconocido y que no parezca un archivo estático (.js, .css, .png)
- Verificación DNS : validamos la presencia de registros MX para confirmar que el dominio puede recibir emails
- Scoring de confianza : cada dominio se asocia a las fuentes que lo reportaron. Un dominio visto en varios proveedores independientes es casi seguro desechable
Este filtrado multicapa nos permite mantener una tasa de falsos positivos muy baja, incluso con una extracción agresiva.
Paso 4: deduplicación e indexación
Los mismos dominios aparecen a menudo en varios proveedores. Antes de enriquecer nuestra base, fusionamos los resultados: cada dominio se normaliza, se deduplica y se conserva la lista completa de sus fuentes.
El resultado se indexa en un motor de búsqueda optimizado para consultas en tiempo real. Cuando nuestra API recibe una petición de validación, la búsqueda en este dataset tarda menos de un milisegundo.
Paso 5: monitorización y actualizaciones continuas
El panorama de los emails desechables cambia constantemente. Unos dominios desaparecen, otros nuevos surgen. Ejecutamos este pipeline de forma automática y regular para captar estos cambios.
Cada ejecución produce un informe: número de proveedores procesados, dominios descubiertos, errores eventuales. Si un proveedor cambia su interfaz o bloquea nuestras peticiones, recibimos una alerta de inmediato y adaptamos nuestra estrategia.
Las cifras
Hoy, nuestro dataset contiene más de 380 000 dominios desechables verificados, procedentes de más de 20 proveedores distintos. Alimenta directamente el campo disposable de nuestra API Email Validation.
Qué significa esto para ti
Cuando llamas a GET /v1/intelligence/email con una dirección, el campo disposable se verifica contra este dataset en tiempo real. No una lista estática descargada hace seis meses : un dataset vivo, actualizado cada día por pipelines automatizados.
import requests
response = requests.get(
"https://api.veille.io/v1/intelligence/email",
params={"query": "user@guerrillamail.com"},
headers={"x-api-key": "YOUR_API_KEY"},
)
data = response.json()
if data["disposable"]:
print(f"Email desechable detectado (riesgo: {data['risk_score']})")
Bloquear los emails desechables corta la primera palanca que usan los atacantes para crear cuentas falsas a gran escala. Y todo empieza con un dataset que está a la altura.