En esta página
Tu equipo de ventas recibe 200 leads nuevos por semana. Cada lead llega como un nombre, un correo y quizá un nombre de empresa. Antes de que un comercial pueda hacer un contacto con sentido, necesita investigar el tamaño de la empresa, su stack tecnológico, sus noticias recientes y su posible encaje. Esa investigación lleva de 10 a 15 minutos por lead: más de 30 horas a la semana dedicadas a Google y LinkedIn en lugar de a vender.
El lead enrichment automatiza esta investigación. CrawlForge hace scraping de datos públicos de negocio desde sitios web de empresas, perfiles sociales y fuentes de noticias para construir un perfil completo del lead en segundos. Esta guía te muestra cómo construir un motor de lead enrichment que procesa más de 200 leads por hora.
Tabla de contenidos
- Qué es el lead enrichment
- Visión general de la arquitectura
- Paso 1: Análisis del sitio web de la empresa
- Paso 2: Detección del stack tecnológico
- Paso 3: Recopilación de inteligencia sobre la empresa
- Paso 4: Construir el pipeline de enriquecimiento
- Análisis del coste en credits
- Resultados y beneficios
- Preguntas frecuentes
Qué es el lead enrichment
El lead enrichment es el proceso de complementar los datos básicos de un lead (nombre, correo, empresa) con información adicional que ayuda a los equipos de ventas a cualificar y priorizar prospectos. Los datos enriquecidos suelen incluir:
| Dato | Fuente | Valor para ventas |
|---|---|---|
| Tamaño de la empresa | Página "Quiénes somos"/equipo | Cualificación |
| Sector | Contenido del sitio web | Segmentación |
| Stack tecnológico | Análisis del código fuente | Encaje de producto |
| Noticias recientes | Resultados de búsqueda | Temas para iniciar conversación |
| Estado de financiación | Notas de prensa | Señales de presupuesto |
| Temas de contenido | Análisis del blog | Mapeo de puntos de dolor |
¿Qué es el lead enrichment? Es el proceso automatizado de añadir datos de inteligencia de negocio a los registros de leads en bruto, transformando una simple dirección de correo en un perfil completo de prospecto sobre el que los equipos de ventas pueden actuar de inmediato.
CrawlForge es ideal para equipos de lead enrichment que necesitan datos en tiempo real de los sitios web de las empresas, porque, a diferencia de los proveedores de bases de datos (ZoomInfo, Clearbit) que pueden estar desactualizados por semanas, CrawlForge hace scraping de páginas en vivo para obtener información actual.
Visión general de la arquitectura
El motor de enriquecimiento usa cinco herramientas de CrawlForge:
| Componente | Herramienta | Credits | Propósito |
|---|---|---|---|
| Contenido del sitio web | extract_content | 2 | Descripción y posicionamiento de la empresa |
| Metadatos | extract_metadata | 1 | Título, descripción, perfiles sociales |
| Código fuente de la página | fetch_url | 1 | Detectar tecnologías a partir del HTML |
| Investigación de la empresa | search_web | 5 | Noticias recientes, financiación, redes sociales |
| Análisis | analyze_content | 3 | Clasificación de sector y temas |
Paso 1: Análisis del sitio web de la empresa
Empieza extrayendo la información principal de la empresa desde su sitio web.
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
const client = new Client({
name: 'lead-enrichment',
version: '1.0.0',
});
interface CompanyProfile {
domain: string;
name: string;
description: string;
industry: string;
topics: string[];
socialLinks: {
twitter?: string;
linkedin?: string;
github?: string;
};
estimatedSize: string;
}
async function analyzeCompanyWebsite(
domain: string
): Promise<CompanyProfile> {
// Extract main page content
const contentResult = await client.callTool({
name: 'extract_content',
arguments: { url: `https://${domain}` },
});
const content = JSON.parse(contentResult.content[0].text);
// Get metadata including social links
const metaResult = await client.callTool({
name: 'extract_metadata',
arguments: { url: `https://${domain}` },
});
const meta = JSON.parse(metaResult.content[0].text);
// Analyze content for industry and topics
const analysis = await client.callTool({
name: 'analyze_content',
arguments: { text: content.content },
});
const analyzed = JSON.parse(analysis.content[0].text);
// Try to get team page for company size estimation
let estimatedSize = 'Unknown';
try {
const teamPage = await client.callTool({
name: 'extract_content',
arguments: { url: `https://${domain}/about` },
});
const teamContent = JSON.parse(teamPage.content[0].text);
// Simple heuristic: count mentions of team-related terms
const teamMentions = (teamContent.content.match(/team|employee|people|staff/gi) || []).length;
if (teamMentions > 20) estimatedSize = '100+';
else if (teamMentions > 10) estimatedSize = '50-100';
else if (teamMentions > 5) estimatedSize = '10-50';
else estimatedSize = '1-10';
} catch {
// About page might not exist; that is fine
}
return {
domain,
name: meta.title?.split(/[|\-]/)[0]?.trim() || domain,
description: meta.description || analyzed.summary || '',
industry: analyzed.topics?.[0] || 'Unknown',
topics: analyzed.topics || [],
socialLinks: {
twitter: meta.twitterHandle,
linkedin: meta.linkedinUrl,
github: meta.githubUrl,
},
estimatedSize,
};
}Paso 2: Detección del stack tecnológico
Detecta las tecnologías que usa una empresa analizando el código fuente HTML y las cabeceras de su sitio web.
interface TechStack {
frontend: string[];
analytics: string[];
marketing: string[];
infrastructure: string[];
cms: string[];
}
async function detectTechStack(domain: string): Promise<TechStack> {
const result = await client.callTool({
name: 'fetch_url',
arguments: {
url: `https://${domain}`,
timeout: 10000,
},
});
const page = JSON.parse(result.content[0].text);
const html = page.body || '';
const headers = page.headers || {};
const stack: TechStack = {
frontend: [],
analytics: [],
marketing: [],
infrastructure: [],
cms: [],
};
// Frontend framework detection
if (html.includes('__next') || html.includes('_next/static')) {
stack.frontend.push('Next.js');
}
if (html.includes('__nuxt')) stack.frontend.push('Nuxt.js');
if (html.includes('react')) stack.frontend.push('React');
if (html.includes('vue')) stack.frontend.push('Vue.js');
if (html.includes('tailwindcss') || html.includes('tailwind')) {
stack.frontend.push('Tailwind CSS');
}
// Analytics detection
if (html.includes('gtag') || html.includes('google-analytics')) {
stack.analytics.push('Google Analytics');
}
if (html.includes('segment.com') || html.includes('analytics.js')) {
stack.analytics.push('Segment');
}
if (html.includes('mixpanel')) stack.analytics.push('Mixpanel');
if (html.includes('hotjar')) stack.analytics.push('Hotjar');
// Marketing tools
if (html.includes('hubspot')) stack.marketing.push('HubSpot');
if (html.includes('intercom')) stack.marketing.push('Intercom');
if (html.includes('drift')) stack.marketing.push('Drift');
if (html.includes('mailchimp')) stack.marketing.push('Mailchimp');
// Infrastructure
const server = headers['server'] || headers['x-powered-by'] || '';
if (server.includes('Vercel') || html.includes('vercel')) {
stack.infrastructure.push('Vercel');
}
if (server.includes('cloudflare') || headers['cf-ray']) {
stack.infrastructure.push('Cloudflare');
}
if (html.includes('amazonaws')) stack.infrastructure.push('AWS');
// CMS
if (html.includes('wp-content')) stack.cms.push('WordPress');
if (html.includes('shopify')) stack.cms.push('Shopify');
if (html.includes('webflow')) stack.cms.push('Webflow');
return stack;
}Esta detección se ejecuta con una sola llamada a fetch_url (1 credit), lo que la hace extremadamente rentable para el lead enrichment masivo.
Paso 3: Recopilación de inteligencia sobre la empresa
Usa search_web para encontrar noticias recientes, anuncios de financiación y contexto de mercado.
interface CompanyIntel {
recentNews: Array<{ title: string; url: string; snippet: string }>;
fundingInfo: string;
competitorMentions: string[];
}
async function gatherIntelligence(
companyName: string,
domain: string
): Promise<CompanyIntel> {
// Search for recent company news
const newsResult = await client.callTool({
name: 'search_web',
arguments: {
query: `"${companyName}" OR "${domain}" news funding`,
limit: 10,
time_range: 'month',
},
});
const news = JSON.parse(newsResult.content[0].text);
return {
recentNews: (news.results || []).slice(0, 5).map(
(r: { title: string; url: string; snippet: string }) => ({
title: r.title,
url: r.url,
snippet: r.snippet,
})
),
fundingInfo: news.results?.find(
(r: { title: string }) =>
r.title.toLowerCase().includes('funding') ||
r.title.toLowerCase().includes('raises') ||
r.title.toLowerCase().includes('series')
)?.snippet || 'No recent funding news found',
competitorMentions: news.results
?.filter((r: { title: string }) =>
r.title.toLowerCase().includes('vs') ||
r.title.toLowerCase().includes('alternative')
)
.map((r: { title: string }) => r.title) || [],
};
}Paso 4: Construir el pipeline de enriquecimiento
Combina todos los pasos de enriquecimiento en un único pipeline que procesa leads en masa.
interface Lead {
email: string;
name: string;
company?: string;
}
interface EnrichedLead extends Lead {
companyProfile: CompanyProfile;
techStack: TechStack;
intelligence: CompanyIntel;
enrichedAt: string;
qualityScore: number;
}
function extractDomain(email: string): string {
return email.split('@')[1];
}
function calculateLeadScore(enriched: Omit<EnrichedLead, 'qualityScore'>): number {
let score = 0;
// Company has a real website with content
if (enriched.companyProfile.description.length > 50) score += 20;
// Company uses modern tech stack (potential product fit)
if (enriched.techStack.frontend.length > 0) score += 15;
// Company uses analytics/marketing tools (signals budget)
if (enriched.techStack.analytics.length > 0) score += 10;
if (enriched.techStack.marketing.length > 0) score += 15;
// Recent news/activity
if (enriched.intelligence.recentNews.length > 0) score += 10;
// Funding signals
if (!enriched.intelligence.fundingInfo.includes('No recent')) score += 20;
// Company size signals
const size = enriched.companyProfile.estimatedSize;
if (size === '50-100' || size === '100+') score += 10;
return Math.min(score, 100);
}
async function enrichLeads(leads: Lead[]): Promise<EnrichedLead[]> {
const enriched: EnrichedLead[] = [];
for (const lead of leads) {
const domain = lead.company
? lead.company.toLowerCase().replace(/\s+/g, '') + '.com'
: extractDomain(lead.email);
// Skip free email providers
if (['gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com'].includes(domain)) {
continue;
}
try {
console.log(`Enriching ${lead.email} (${domain})...`);
const companyProfile = await analyzeCompanyWebsite(domain);
const techStack = await detectTechStack(domain);
const intelligence = await gatherIntelligence(
companyProfile.name,
domain
);
const partial = {
...lead,
companyProfile,
techStack,
intelligence,
enrichedAt: new Date().toISOString(),
};
enriched.push({
...partial,
qualityScore: calculateLeadScore(partial),
});
} catch (error) {
console.error(`Failed to enrich ${lead.email}:`, error);
}
}
// Sort by quality score (highest first)
return enriched.sort((a, b) => b.qualityScore - a.qualityScore);
}Análisis del coste en credits
Coste de enriquecimiento por lead:
| Operación | Herramienta | Credits |
|---|---|---|
| Contenido del sitio web | extract_content | 2 |
| Página "Quiénes somos" | extract_content | 2 |
| Metadatos | extract_metadata | 1 |
| Detección de tecnologías | fetch_url | 1 |
| Análisis de contenido | analyze_content | 3 |
| Búsqueda de noticias | search_web | 5 |
| Por lead | 14 credits |
Coste mensual a escala:
| Volumen | Credits/mes | Plan recomendado |
|---|---|---|
| 50 leads/mes | 700 | Plan gratuito (1.000 credits) |
| 200 leads/mes | 2.800 | Hobby ($19/mo, 5.000 credits) |
| 1.000 leads/mes | 14.000 | Professional ($99/mo, 50.000 credits) |
| 5.000+ leads/mes | 70.000 | Business ($399/mo, credits personalizados) |
Resultados y beneficios
Un motor de lead enrichment con CrawlForge ofrece:
- Velocidad: Enriquece un lead en 15-30 segundos en lugar de 10-15 minutos
- Consistencia: Cada lead recibe la misma profundidad de investigación
- Priorización: Las puntuaciones de calidad permiten a los comerciales centrarse primero en los leads de mayor valor
- Eficiencia de costes: $0.07-0.13 por lead frente a $0.50-2.00 de los proveedores de bases de datos
En comparación con proveedores de bases de datos de enriquecimiento como Clearbit ($99/mo por 1.000 búsquedas) o ZoomInfo ($15.000+/año), CrawlForge ofrece datos actuales a una fracción del coste. La contrapartida es que CrawlForge hace scraping de datos en vivo (siempre actuales), mientras que las bases de datos proporcionan campos preestructurados (menos procesamiento necesario).
Preguntas frecuentes
¿Qué precisión tiene la detección del stack tecnológico a partir del HTML?
La detección basada en HTML capta las herramientas más populares con alta precisión (90 %+) para tecnologías del lado del cliente. Las tecnologías del lado del servidor son más difíciles de detectar. Para una detección completa, combina CrawlForge con datos de BuiltWith o Wappalyzer.
¿Puedo enriquecer leads de dominios de correo personales?
Los leads de gmail.com u outlook.com no tienen dominios de empresa que analizar. Para estos, usa search_web para encontrar sus perfiles profesionales a partir del nombre. Esto cuesta 5 credits por búsqueda en lugar del pipeline completo de 14 credits.
¿Cómo manejo el límite de velocidad al enriquecer en masa?
La herramienta batch_scrape de CrawlForge maneja el límite de velocidad automáticamente. Para llamadas individuales, añade un retraso de 500 ms entre solicitudes al mismo dominio. Procesa diferentes dominios en paralelo para obtener el máximo rendimiento.
Enriquece tus primeros 50 leads gratis. Empieza con 1.000 credits, suficientes para enriquecer por completo más de 70 leads sin necesidad de tarjeta de crédito.
Recursos relacionados:
Pruébalo tú mismo — sin necesidad de registrarte
Ejecuta cualquiera de las 27 herramientas de scraping y extracción de CrawlForge en el playground y luego empieza gratis con 1,000 credits.
1,000 credits gratis • Se recargan cada mes • No se requiere tarjeta de crédito
Etiquetas
Sobre el autor
Mantente al día con los últimos artículos
Recibe tutoriales, novedades del producto y consejos de web scraping en tu bandeja de entrada.
Sin spam. Cancela tu suscripción cuando quieras.