La mayoría de las herramientas OSINT envejecen rápido: la web cambia, los sitios mueven rutas, los captchas evolucionan y muchas herramientas dejan de funcionar en pocos años. Maigret es una excepción: lleva años funcionando, soporta más de 3.000 sitios, ofrece paquete de Python, bot de Telegram e interfaz web. Más importante aún: su arquitectura muestra cómo construir un escáner basado en firmas que resiste cambios constantes en sitios externos.
Esta guía está pensada para ingenieros. Verás qué hace Maigret, cuándo tiene sentido usarlo de forma legítima, cómo escala a miles de sitios y cómo aplicar sus patrones —firmas, aserciones multi-señal, detección de deriva y verificación recurrente— a pruebas de API con Apidog.
Si aún no lo has leído, nuestra publicación Pruebas de API sin Postman en 2026 cubre ideas similares de coincidencia de patrones y detección de desviación en un ámbito más amigable.
En resumen
- Maigret busca cuentas públicas asociadas a un nombre de usuario en más de 3.000 sitios.
- Su arquitectura se basa en una base de datos de firmas versionada, búsqueda recursiva, detección de deriva y manejo parcial de captchas.
- Sus usos legítimos incluyen OSINT autorizado, recuperación de cuentas propias, auditorías de seguridad, protección de marca y apoyo a investigaciones formales.
- Usarlo contra personas privadas sin consentimiento puede constituir acoso o acecho según la jurisdicción.
- Los mismos patrones técnicos se aplican directamente a pruebas de API: contratos, fixtures, aserciones multi-señal y monitoreo programado.
- Puedes implementar estos patrones en Apidog para validar APIs de forma más robusta.
Qué es y qué no es Maigret
Maigret es una herramienta de Python con licencia MIT mantenida por soxoj. Su objetivo, según el README, es recopilar un expediente público sobre una persona a partir de un nombre de usuario en más de 3.000 sitios.
Instalación básica:
pip install maigret
Ejecución mínima:
maigret nombre_usuario
Esto consulta los sitios definidos en su base de datos, detecta posibles perfiles públicos y genera un informe con los datos encontrados.
Tres puntos importantes:
Solo usa datos públicos.
No inicia sesión, no reutiliza credenciales y no usa claves privadas. Si un perfil es visible para visitantes anónimos, Maigret puede leerlo. Si no, devuelve un resultado negativo, desconocido o bloqueado.Se usa en contextos legítimos.
Periodistas, equipos antifraude, equipos de protección de marca, investigadores OSINT y equipos de red-team autorizados lo utilizan como parte de flujos de trabajo formales.Puede ser mal utilizado.
Ejecutarlo contra una persona privada sin consentimiento puede cruzar límites éticos y legales. Antes de usarlo, valida autorización, jurisdicción y alcance.
Este artículo se centra en la ingeniería detrás de Maigret y en cómo reutilizar sus patrones en pruebas de API.
La base de datos de firmas de sitios
La parte más interesante de Maigret es su base de datos de firmas. Cada entrada describe cómo validar un sitio:
- URL base del perfil.
- Patrón de URL del usuario.
- Cadenas que indican que el perfil existe.
- Cadenas que indican que el perfil no existe.
- Reglas de extracción de datos.
- Cabeceras opcionales.
- Etiquetas de país, categoría o comportamiento.
- Señales de captcha o limitación de tasa.
La base de datos está en JSON, versionada en GitHub y se actualiza automáticamente cada 24 horas cuando se ejecuta la herramienta. Si un sitio cambia y los mantenedores corrigen la firma, las instalaciones activas reciben la actualización sin reinstalar.
El patrón es aplicable directamente a APIs.
En vez de codificar pruebas aisladas por endpoint, define firmas de comportamiento:
{
"endpoint": "GET /users/{id}",
"expectedStatus": 200,
"requiredHeaders": ["content-type"],
"bodyMustContain": ["id", "email", "createdAt"],
"bodyMustNotContain": ["password", "internalToken"]
}
Para un proyecto con decenas o cientos de endpoints, este enfoque permite:
- Validar contratos como datos.
- Versionar expectativas.
- Compartir reglas entre equipos.
- Detectar cambios de forma más rápido.
También es la base del desarrollo de API contract-first y del libro de jugadas de pruebas de servidor MCP.
Cómo Maigret detecta “usuario encontrado” vs. “usuario no encontrado”
Un escáner simple haría esto:
GET https://example.com/user/<username>
Y después comprobaría el código de estado.
Eso falla con frecuencia porque muchos sitios devuelven 200 OK incluso cuando el usuario no existe. Otros devuelven páginas genéricas, páginas cacheadas o desafíos de captcha.
Maigret usa reglas más específicas por sitio:
urlMainurlpresenseStrsabsenceStrs- expresiones regulares de extracción
- cabeceras personalizadas
- etiquetas
Un resultado “encontrado” requiere que las cadenas de presencia aparezcan y que las cadenas de ausencia no aparezcan. Un resultado “no encontrado” requiere lo contrario. Si las señales no son concluyentes, el resultado queda como desconocido.
Ejemplo conceptual:
{
"name": "ExampleSite",
"url": "https://example.com/{username}",
"presenseStrs": ["Profile", "Followers"],
"absenceStrs": ["User not found", "This account does not exist"]
}
El equivalente en pruebas de API es no confiar solo en el status code.
Una prueba más robusta debe validar:
- código HTTP;
- estructura del cuerpo;
- campos obligatorios;
- ausencia de campos sensibles;
- cabeceras esperadas;
- valores de error.
Ejemplo:
{
"status": 200,
"body": {
"id": "usr_123",
"email": "dev@example.com"
}
}
Aserciones recomendadas:
status == 200
body.id exists
body.email matches email format
body.password does not exist
headers.content-type contains application/json
Apidog permite combinar aserciones de estado, cuerpo y cabeceras en una misma solicitud, equivalente a las señales de presencia y ausencia que usa Maigret.
Búsqueda recursiva y extracción de información
Cuando Maigret encuentra una cuenta, no se detiene ahí. También intenta extraer identificadores públicos adicionales:
- correos electrónicos;
- teléfonos;
- nombres reales;
- otros nombres de usuario;
- enlaces a perfiles externos.
Después puede reutilizar esos identificadores como nuevas entradas de búsqueda. Ese flujo convierte una coincidencia inicial en una exploración recursiva de perfiles relacionados.
En APIs ocurre algo similar.
Si un endpoint devuelve un campo no documentado:
{
"id": "ord_123",
"customerId": "cus_456",
"paymentIntentId": "pi_789"
}
Ese campo puede indicar:
- un endpoint relacionado;
- una dependencia descendente;
- una entidad no documentada;
- un caso de prueba faltante.
Flujo práctico:
- Ejecuta una solicitud base.
- Detecta campos nuevos o no documentados.
- Busca endpoints que consumen esos campos.
- Añade casos de prueba para esos endpoints.
- Actualiza el contrato.
Este patrón convierte las respuestas reales en entradas para ampliar la cobertura de pruebas.
Manejo de captcha y límite de tasa
Maigret no intenta romper defensas agresivas. Detecta señales de captcha o rate limiting y actúa de forma conservadora.
Sus estrategias incluyen:
- rotar user agents;
- respetar cabeceras de reintento;
- usar dominios móviles o simplificados cuando existen;
- enrutar mediante Tor o I2P cuando el sitio lo permite;
- marcar resultados como “captcha detectado” cuando no puede continuar.
La lección para APIs es clara: tus pruebas no deben forzar sistemas externos.
Implementa clientes de prueba que detecten:
HTTP/1.1 429 Too Many Requests
Retry-After: 60
Y respondan con backoff:
async function requestWithBackoff(fn, retries = 3) {
for (let attempt = 0; attempt < retries; attempt++) {
const response = await fn();
if (response.status !== 429) {
return response;
}
const retryAfter = Number(response.headers.get("retry-after") || 2);
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
}
throw new Error("Rate limit exceeded after retries");
}
Esto evita falsos negativos, bloqueos de IP y ruido en proveedores externos.
El problema de la deriva de firmas
Una base de datos de 3.000 sitios solo sirve si se mantiene actualizada. Los sitios cambian:
- rutas de perfil;
- HTML;
- textos de error;
- reglas anti-bot;
- nombres de marca;
- dominios.
Una firma obsoleta produce:
- falsos negativos;
- falsos positivos;
- resultados desconocidos;
- pérdida de confianza en la herramienta.
Maigret mitiga esto con varias capas:
- actualización automática desde GitHub cada 24 horas;
- contribuciones de la comunidad;
- bandera manual
--update; - pruebas de firmas contra usuarios conocidos y autorizados.
Ejemplo:
maigret --update nombre_usuario
El punto más importante es el arnés de pruebas: para cada sitio, Maigret puede validar una firma contra un usuario existente conocido. Si esa validación falla, la firma probablemente derivó.
En pruebas de API, el equivalente es guardar una respuesta buena conocida como fixture y compararla periódicamente contra el endpoint real.
Flujo recomendado:
- Define el contrato esperado.
- Guarda una respuesta válida conocida.
- Ejecuta la prueba de forma programada.
- Compara estructura, tipos y campos.
- Alerta si aparece deriva.
Apidog soporta este patrón: puedes guardar respuestas, ejecutar pruebas programadas y detectar cambios en endpoints. Nuestra guía de la API DeepSeek V4 muestra el lado manual para un proveedor específico.
El modo de resumen opcional con IA
Maigret incluye la bandera --ai, que usa un endpoint LLM compatible con OpenAI para resumir los hallazgos.
maigret nombre_usuario --ai
La arquitectura es correcta porque separa responsabilidades:
- las reglas deterministas deciden si una cuenta coincide;
- el LLM solo resume resultados;
- la entrada al modelo está restringida;
- el modelo no decide el veredicto.
Ese patrón también funciona para reportes de pruebas de API.
Arquitectura recomendada:
Pruebas deterministas → Resultado estructurado → Resumen LLM → Slack / email / reporte
No uses el LLM para decidir si una prueba pasa o falla. Usa reglas explícitas para eso. El modelo puede ayudar a convertir una salida técnica en un resumen legible para equipos no técnicos.
Nuestra publicación sobre uso de computadoras vs APIs estructuradas explica por qué la capa estructurada debe ir primero.
Casos de uso legítimos
Estos son escenarios donde Maigret puede usarse de forma apropiada si existe autorización y alcance claro.
1. Recuperación de cuentas propias
Puedes buscar cuentas antiguas asociadas a un nombre de usuario que usabas años atrás.
Útil para:
- auditorías de privacidad;
- cierre de cuentas abandonadas;
- reducción de huella digital;
- limpieza antes de cambios laborales.
2. Monitoreo de abuso de marca
Empresas pueden buscar nombres de marca, productos o dominios para detectar cuentas falsas o suplantación.
Ejemplos:
maigret nombre_marca
maigret producto_empresa
3. Búsqueda de personas desaparecidas
Organizaciones autorizadas pueden usar OSINT con consentimiento familiar y coordinación con autoridades. El trabajo independiente sin coordinación puede perjudicar una investigación.
4. Red-team autorizado
Equipos de pentesting pueden usar Maigret para mapear exposición pública de una organización dentro del alcance definido por contrato.
Regla práctica: si no está en el alcance, no se prueba.
5. Periodismo de investigación
Reporteros pueden usar herramientas OSINT en investigaciones de fraude, crimen organizado o figuras públicas, bajo revisión editorial y legal.
Lo que no entra en esta lista:
- buscar a una persona por curiosidad;
- vigilar a una expareja;
- perfilar a desconocidos;
- crear datasets de personas sin consentimiento.
Patrones de Maigret aplicables a pruebas de API
Estos patrones son transferibles a cualquier suite de pruebas de API.
1. Firmas como datos, no como código
Evita codificar todas las expectativas dentro de scripts. Modela el comportamiento esperado como datos versionados.
Ejemplo:
{
"name": "Get user by ID",
"method": "GET",
"path": "/users/{id}",
"expected": {
"status": 200,
"requiredFields": ["id", "email", "createdAt"],
"forbiddenFields": ["passwordHash", "internalNotes"]
}
}
2. Aserciones multi-señal
No aceptes una respuesta como válida solo porque devuelve 200.
Valida:
- status code;
- esquema;
- campos obligatorios;
- campos prohibidos;
- cabeceras;
- tipos;
- valores de negocio.
3. Firmas sincronizadas
Maigret actualiza firmas desde un repositorio central. En APIs, el equivalente es sincronizar documentación, contratos y pruebas desde una fuente compartida.
Los proyectos de Apidog soportan sincronización en la nube. El flujo completo se cubre en Pruebas de API sin Postman.
4. Detección de desviaciones
Programa ejecuciones periódicas contra endpoints críticos. Compara la respuesta actual contra una respuesta conocida buena.
Ejemplo de diferencia que debería alertar:
{
"id": "usr_123",
- "email": "dev@example.com",
+ "contactEmail": "dev@example.com",
"createdAt": "2026-05-01T10:00:00Z"
}
Ese cambio puede parecer pequeño, pero rompe clientes que esperan email.
5. LLM como postprocesador
Usa reglas deterministas para aprobar o fallar. Usa IA solo para explicar.
Ejemplo de salida estructurada:
{
"failedTests": 3,
"breakingChanges": [
"Field email renamed to contactEmail",
"Endpoint /users/{id} no longer returns createdAt"
]
}
Después, un LLM puede convertirlo en:
La API de usuarios introdujo dos cambios incompatibles: el campo email fue renombrado y createdAt ya no aparece en la respuesta. Revisa clientes que consumen GET /users/{id}.
Errores comunes al ejecutar Maigret
Si vas a experimentar con Maigret en entornos autorizados, evita estos errores.
Ejecutar sin -a y asumir que el escaneo fue completo
Por defecto, Maigret puede escanear un subconjunto de sitios principales. Para consultar la base completa:
maigret nombre_usuario -a
Esto tarda más, pero cubre la cola larga.
Ignorar etiquetas
Puedes filtrar por país o categoría:
maigret nombre_usuario --tags jp
maigret nombre_usuario --tags social
Esto ayuda cuando el objetivo autorizado tiene contexto regional específico.
No actualizar firmas
Antes de una investigación seria:
maigret --update nombre_usuario
Las firmas antiguas aumentan falsos positivos y falsos negativos.
Usar Tor sin interpretar bloqueos correctamente
Algunos sitios bloquean nodos de salida Tor. Un bloqueo no significa que el usuario exista o no exista. Solo significa que el sitio bloqueó esa ruta.
Tratar los hallazgos como prueba final
Maigret extrae datos públicos. Las páginas pueden contener información falsa, abandonada o fabricada. Trata los resultados como pistas que requieren verificación.
Casos de uso en el mundo real
Una consultora de seguridad puede usar Maigret como primer paso en un ejercicio de red-team autorizado. El resultado ayuda al cliente a visualizar su superficie pública antes de pruebas más profundas.
Un investigador antifraude puede usar --ai para convertir un escaneo amplio en un resumen breve para clientes no técnicos. La búsqueda sigue siendo determinista; el LLM solo redacta.
Un equipo de ingeniería puede aplicar los mismos principios —firmas, fixtures, ejecución programada y detección de deriva— para mantener una suite de pruebas de API en cientos de microservicios usando Apidog.
Conclusión
Maigret es un buen ejemplo de cómo diseñar una herramienta que escala a miles de reglas sin romperse cada vez que cambia una superficie externa. Incluso si nunca haces OSINT, su arquitectura es útil para pruebas de API.
Ideas clave:
- Maigret usa una base de datos de firmas versionada y autoactualizable.
- La detección multi-señal es más fiable que validar solo códigos de estado.
- La deriva rompe herramientas y suites de pruebas si no se monitorea.
- Los fixtures conocidos permiten detectar cambios temprano.
- Los LLM funcionan mejor como capa de resumen, no como juez.
- Los mismos patrones se pueden aplicar en Apidog.
Siguiente paso práctico: revisa el formato de firmas de Maigret y luego modela un endpoint de tu proyecto de la misma forma en Apidog: firma explícita, aserciones multi-señal, fixture guardado y ejecución programada. La primera vez que un proveedor cambie un campo a las 2 a.m., tu suite lo detectará antes que tus usuarios.
Preguntas frecuentes
¿Es legal usar Maigret?
Depende de la jurisdicción y del objetivo. Usarlo en ti mismo, en cuentas que posees, en una empresa para la que tienes autorización escrita o como parte de periodismo autorizado suele ser aceptable. Usarlo contra una persona sin consentimiento puede cruzar leyes de acoso o acecho en la UE, EE. UU., Reino Unido y otras regiones.
¿Funciona Maigret sin Python?
El paquete oficial requiere Python 3.10+. El autor también mantiene un bot de Telegram y una configuración de Cloud Shell para quienes no quieren instalarlo localmente.
¿Qué tan precisa es la cifra de más de 3.000 sitios?
La base de datos lista más de 3.000 entradas, aunque no todas están activas o funcionales en todo momento. La actualización automática y las contribuciones de la comunidad mantienen un subconjunto útil y actualizado.
¿Qué añade el modo IA?
La bandera --ai usa un LLM compatible con OpenAI para resumir hallazgos deterministas. No cambia la búsqueda ni decide coincidencias. Debes proporcionar tu propia clave API.
¿Puedo usar Maigret en CI?
Para investigaciones OSINT, normalmente no: es trabajo interactivo y dependiente de contexto. Lo que sí pertenece a CI son sus patrones arquitectónicos: firmas, fixtures, detección de deriva y reproducción programada. Apidog implementa esos flujos para pruebas de API.
¿En qué se diferencia de Sherlock?
Sherlock es más antiguo y simple. Maigret lo extiende con extracción de información, búsqueda recursiva, manejo parcial de captchas, modo de resumen con IA y una base de datos de sitios más rica. Ambos tienen licencia MIT.
¿Dónde reporto una firma obsoleta?
En los issues o pull requests del repositorio de Maigret en GitHub. La base de datos se mantiene gracias a contribuciones de la comunidad; lo normal es enviar una corrección por sitio obsoleto.


Top comments (0)