Extraer emails de un texto
Pegue cualquier texto y reciba todas sus direcciones de correo en una lista limpia: de una frase que menciona hello@example.com sale esa dirección, con un recuento de 1. Las repetidas se unen o se conservan, según elija. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- Contact us at hello@example.com today.
- Correos extraídos
- hello@example.com
- Cantidad de correos
- 1
- Modo de coincidencia
- Unique
Pegue cualquier texto plano y obtenga cada dirección con aspecto de email en una lista limpia. Elija unique para quitar duplicados sin distinguir mayúsculas conservando la primera forma, o all para guardar cada aparición. Sin red ni comprobación de buzón: solo extracción local.
Direcciones únicas o todas las coincidencias
Pegue notas, un hilo de correos o el texto de una página y la herramienta lo recorre de izquierda a derecha en busca de todo lo que tenga la forma nombre@dominio.terminación. Con la opción predeterminada, las direcciones que solo se diferencian en mayúsculas cuentan una vez: se conserva la primera forma escrita, en el orden en que apareció cada dirección. La otra opción mantiene cada aparición con sus mayúsculas originales, algo útil si después necesita saber cuántas veces aparece una dirección. Una frase como Contact us at hello@example.com today da una sola dirección y un recuento de 1.
Lo que no hace y dónde ayuda
Encuentra direcciones solo por su forma. No comprueba que el buzón exista, no hace llamadas de red y no corrige una dirección para que parezca más correcta, así que una rareza como dos puntos seguidos antes de la arroba aparece tal como está escrita. Por eso sirve para sacar contactos de unas notas pegadas y armar una lista de clientes potenciales, reunir a todas las personas mencionadas en una incidencia larga o preparar una lista de direcciones únicas antes de importarla a una hoja de cálculo.
Extractor laxo, no un validador RFC completo
Recorre el texto de izquierda a derecha con un patrón ASCII fijo local@dominio.tld. Captura las direcciones tal cual aparecen, incluidas rarezas como puntos dobles en el local. No demuestra que el buzón exista y no reescribe la cadena para hacerla más estricta.
Unicode y correo internacionalizado quedan fuera
Los caracteres no ASCII en el local no entran en el patrón, así que un local mixto puede dar un match parcial ASCII en lugar del token completo o un vacío. IDN y punycode no se soportan en v1.
Cuánto texto admite
El texto es obligatorio y tiene tope de cien mil caracteres. La respuesta no ecoa el texto fuente completo, solo emails, count y mode.
Qué puede hacer con ella
CRM y leads
Saque direcciones de notas o hilos pegados.
Soporte
Reúna contactos mencionados en un ticket largo.
Limpieza de datos
Construya una lista única antes de importar a una hoja.
Preguntas frecuentes
¿Comprueba que el buzón exista?
No. Solo extrae patrones del texto, sin DNS ni SMTP.
¿Qué es unique?
Dedup sin distinguir mayúsculas, conservando la primera forma y el orden.
¿Hay direcciones internacionalizadas?
No del todo en v1. Locales no ASCII pueden dar match parcial.
¿Cuánto texto puedo pegar de una vez?
Hasta 100.000 caracteres. Si su texto es más largo, divídalo en partes antes de pegarlo; además, el cuadro no puede quedar vacío, porque siempre hace falta un texto que revisar.
¿El resultado incluye mi texto original?
No. El resultado solo contiene las direcciones encontradas, cuántas son y la opción usada, de modo que el resto de lo que pegó, como nombres o notas alrededor de las direcciones, nunca se repite.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/text/extract-emails \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Contact us at hello@example.com today."}'const res = await fetch("https://api.kit.forhosting.com/text/extract-emails", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Contact us at hello@example.com today."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/extract-emails",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Contact us at hello@example.com today."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/extract-emails", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Contact us at hello@example.com today."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Contact us at hello@example.com today."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/extract-emails", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "Contact us at hello@example.com today."
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.extract_emails",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_text_chars | 100000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Unique frente a all
unique colapsa coincidencias que solo difieren en mayúsculas, guarda la primera forma y el orden de primera aparición. all conserva cada ocurrencia con su casing original, útil si más adelante quiere frecuencias en un pipeline.
Límites y errores tipados
Modes desconocidos y texto no string devuelven invalid_input tipado.
Casos de integración
CI
Fije arrays extraídos en fixtures golden.
Preguntas técnicas
¿Se devuelve el texto completo?
No. Solo emails, count y mode.
¿Cuál es el límite de tamaño?
100000 caracteres.
¿Es gratis en el navegador?
Sí. La app nativa usa el API a $0.002.