Cómo construir un flujo de trabajo de generación de leads B2B inteligente con n8n y Scrapeless.
Advanced Data Extraction Specialist
Transforma tu prospección de ventas con un flujo de trabajo automatizado que encuentra, califica y enriquece clientes potenciales B2B utilizando Google Search, Crawler y análisis de Claude AI. Este tutorial te muestra cómo crear un poderoso sistema de generación de leads utilizando n8n y Scrapeless.
Lo que construiremos
En este tutorial, crearemos un flujo de trabajo inteligente para la generación de leads B2B que:
- Se activa automáticamente según un horario o manualmente
- Busca en Google empresas en tu mercado objetivo utilizando Scrapeless
- Procesa cada URL de empresa individualmente con Listas de Ítems
- Rastrea los sitios web de las empresas para extraer información detallada
- Utiliza Claude AI para calificar y estructurar los datos de los leads
- Almacena leads calificados en Google Sheets
- Envía notificaciones a Discord (adaptable a Slack, correo electrónico, etc.)
Requisitos previos
- Una instancia de n8n (en la nube o autoalojada)
- Una clave de API de Scrapeless (consigue una en scrapeless.com)
Solo necesitas iniciar sesión en el Panel de Scrapeless y seguir la imagen de abajo para obtener tu CLAVE DE API. Scrapeless te dará una cuota de prueba gratuita.

- Clave de API de Claude de Anthropic
- Acceso a Google Sheets
- URL de webhook de Discord (o tu servicio de notificación preferido)
- Comprensión básica de los flujos de trabajo de n8n
Vista general del flujo de trabajo completo
Tu flujo de trabajo final de n8n se verá así:
Activador manual → Búsqueda de Google Scrapeless → Listas de ítems → Rastreador de Scrapeless → Código (Procesamiento de datos) → Claude AI → Código (Analizador de respuestas) → Filtro → Google Sheets o/ y Webhook de Discord

Paso 1: Configuración del activador manual
Comenzaremos con un activador manual para pruebas, luego añadiremos programación más adelante.
- Crea un nuevo flujo de trabajo en n8n
- Agrega un nodo de Activador Manual como tu punto de inicio
- Esto te permite probar el flujo de trabajo antes de automatizarlo

¿Por qué comenzar manualmente?
- Probar y depurar cada paso
- Verificar la calidad de los datos antes de la automatización
- Ajustar parámetros en función de los resultados iniciales
Paso 2: Añadiendo Búsqueda de Google Scrapeless
Ahora añadiremos el nodo de Búsqueda de Google Scrapeless para encontrar empresas objetivo.
- Haz clic en + para agregar un nuevo nodo después del activador
- Busca Scrapeless en la biblioteca de nodos
- Selecciona Scrapeless y elige la operación Buscar en Google
1. ¿Por qué usar Scrapeless con n8n?
Integrar Scrapeless con n8n te permite crear raspadores web avanzados y resilientes sin necesidad de escribir código.
Los beneficios incluyen:
- Acceso a Deep SerpApi para obtener y extraer datos de SERP de Google con una sola solicitud.
- Utiliza la API de Raspado Universal para eludir restricciones y acceder a cualquier sitio web.
- Utiliza Raspador Scrape para llevar a cabo raspados detallados de páginas individuales.
- Utiliza Raspador Crawl para el rastreo recursivo y la recuperación de datos de todas las páginas vinculadas.
Estas características te permiten construir flujos de datos de extremo a extremo que conectan Scrapeless con más de 350 servicios compatibles con n8n, incluidos Google Sheets, Airtable, Notion, Slack y más.


2. Configuración del Nodo de Búsqueda de Google
A continuación, necesitamos configurar el Nodo de Búsqueda de Google Scrapeless.

Configuración de Conexión:
- Crea una conexión con tu clave de API de Scrapeless
- Haz clic en "Agregar" e ingresa tus credenciales


Parámetros de búsqueda:
Consulta de búsqueda: utiliza términos de búsqueda enfocados en B2B:
"empresas de software" "clientes empresariales" empleados:50-200
"agencias de marketing" "servicios B2B" "transformación digital"
"startups de SaaS" "Serie A" "respaldadas por capital de riesgo"
"empresas manufactureras" "soluciones digitales" ISO
País: EE. UU. (o tu mercado objetivo)
Idioma: en
Estrategias de búsqueda B2B Pro:
- Segmentación por tamaño de la empresa: empleados:50-200, "mediano mercado"
- Etapa de financiación: "Serie A", "respaldadas por capital de riesgo", "financiadas por sus propios medios"
- Específico de la industria: "fintech", "healthtech", "edtech"
- Geográfico: "Nueva York", "San Francisco", "Londres"
javascript
if (!markdownContent || markdownContent.length < 100) {
return {
url: sourceURL,
company_name: companyName,
content: "",
error: "Contenido insuficiente del rastreador",
processing_failed: true,
raw_content_length: markdownContent.length,
skip_reason: "Contenido demasiado corto o vacío"
};
}
// Limpieza y estructuración del contenido markdown
let cleanedContent = cleanMarkdownContent(markdownContent);
// Extracción de información de contacto
const contactInfo = extractContactInformation(cleanedContent);
// Extracción de secciones comerciales importantes
const businessSections = extractBusinessSections(cleanedContent);
// Construcción de contenido para Claude AI
const contentForAI = buildContentForAI({
companyName,
sourceURL,
description,
businessSections,
contactInfo,
cleanedContent
});
// Métricas de calidad del contenido
const contentQuality = assessContentQuality(cleanedContent, contactInfo);
const result = {
url: sourceURL,
company_name: companyName,
content: contentForAI,
raw_content_length: markdownContent.length,
processed_content_length: contentForAI.length,
extracted_emails: contactInfo.emails,
extracted_phones: contactInfo.phones,
content_quality: contentQuality,
metadata_info: {
has_title: !!metadata.title,
has_description: !!metadata.description,
site_name: metadata.ogSiteName || "",
page_title: metadata.title || ""
},
processing_timestamp: new Date().toISOString(),
processing_status: "ÉXITO"
};
console.log(`✅ Procesado exitosamente ${companyName}`);
return result;
} catch (error) {
console.error("❌ Error procesando datos del rastreador:", error);
return {
url: "desconocido",
company_name: "Error de Procesamiento",
content: "",
error: error.message,
processing_failed: true,
processing_timestamp: new Date().toISOString()
};
}
// ========== FUNCIONES UTILITARIAS ==========
function extractURLFromContent(content) {
// Intentar extraer URL del contenido markdown
const urlMatch = content.match(/https?:\/\/[^\s\)]+/);
return urlMatch ? urlMatch[0] : "desconocido";
}
function extractCompanyFromContent(content) {
// Intentar extraer el nombre de la empresa del contenido
const titleMatch = content.match(/^#\s+(.+)$/m);
if (titleMatch) return titleMatch[1];
// Buscar correos electrónicos para extraer el dominio
const emailMatch = content.match(/@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/);
if (emailMatch) {
const domain = emailMatch[1].replace('www.', '');
return domain.split('.')[0].charAt(0).toUpperCase() + domain.split('.')[0].slice(1);
}
return "Empresa Desconocida";
}
function cleanMarkdownContent(markdown) {
return markdown
// Eliminar elementos de navegación
.replace(/^\[Saltar al contenido\].*$/gmi, '')
.replace(/^\[.*\]\(#.*\)$/gmi, '')
// Eliminar enlaces markdown pero mantener el texto
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
// Eliminar imágenes y base64
.replace(/!\[([^\]]*)\]\([^)]*\)/g, '')
.replace(/<Imagen-Base64-Removida>/g, '')
// Eliminar menciones de cookies/privacidad
.replace(/.*?(cookie|política de privacidad|términos de servicio).*?\n/gi, '')
// Limpiar espacios múltiples
.replace(/\s+/g, ' ')
// Eliminar líneas vacías múltiples
.replace(/\n\s*\n\s*\n/g, '\n\n')
.trim();
}
function extractContactInformation(content) {
// Expresión regular para correos electrónicos
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
// Expresión regular para teléfonos (con soporte internacional)
const phoneRegex = /(?:\+\d{1,3}\s?)?\d{3}\s?\d{3}\s?\d{3,4}|\(\d{3}\)\s?\d{3}-?\d{4}/g;
const emails = [...new Set((content.match(emailRegex) || [])
.filter(email => !email.includes('example.com'))
.slice(0, 3))];
const phones = [...new Set((content.match(phoneRegex) || [])
.filter(phone => phone.replace(/\D/g, '').length >= 9)
.slice(0, 2))];
return { emails, phones };
}
function extractBusinessSections(content) {
const sections = {};
// Buscar secciones importantes
const lines = content.split('\n');
let currentSection = '';
let currentContent = '';
for (let i = 0; i < lines.length; i++) {
const line = lines[i].trim();
// Detección de encabezados
if (line.startsWith('#')) {
// Guardar sección anterior
if (currentSection && currentContent) {
sections[currentSection] = currentContent.trim().substring(0, 500);
}
// Nueva sección
const title = line.replace(/^#+\s*/, '').toLowerCase();
if (title.includes('acerca') || title.includes('servicio') ||
title.includes('contacto') || title.includes('empresa')) {
currentSection = title.includes('acerca') ? 'acerca' :
title.includes('servicio') ? 'servicios' :
title.includes('contacto') ? 'contacto' : 'empresa';
currentContent = '';
} else {
currentSection = '';
}
} else if (currentSection && line) {
currentContent += line + '\n';
}
json
}
// Guardar la última sección
if (currentSection && currentContent) {
sections[currentSection] = currentContent.trim().substring(0, 500);
}
return sections;
}
function buildContentForAI({ companyName, sourceURL, description, businessSections, contactInfo, cleanedContent }) {
let aiContent = `SOLICITUD DE ANÁLISIS DE LA EMPRESA\n\n`;
aiContent += `Empresa: ${companyName}\n`;
aiContent += `Sitio web: ${sourceURL}\n`;
if (description) {
aiContent += `Descripción: ${description}\n`;
}
aiContent += `\nINFORMACIÓN DE CONTACTO:\n`;
if (contactInfo.emails.length > 0) {
aiContent += `Correos electrónicos: ${contactInfo.emails.join(', ')}\n`;
}
if (contactInfo.phones.length > 0) {
aiContent += `Teléfonos: ${contactInfo.phones.join(', ')}\n`;
}
aiContent += `\nSECCIONES DEL NEGOCIO:\n`;
for (const [section, content] of Object.entries(businessSections)) {
if (content) {
aiContent += `\n${section.toUpperCase()}:\n${content}\n`;
}
}
// Agregar contenido principal (limitado)
aiContent += `\nVISIÓN GENERAL DEL CONTENIDO COMPLETO:\n`;
aiContent += cleanedContent.substring(0, 2000);
// Limitación final para la API de Claude
return aiContent.substring(0, 6000);
}
function assessContentQuality(content, contactInfo) {
const wordCount = content.split(/\s+/).length;
return {
word_count: wordCount,
has_contact_info: contactInfo.emails.length > 0 || contactInfo.phones.length > 0,
has_about_section: /acerca de|empresa|quiénes somos/gi.test(content),
has_services_section: /servicios|productos|soluciones/gi.test(content),
has_team_section: /equipo|liderazgo|personal/gi.test(content),
content_richness_score: Math.min(10, Math.floor(wordCount / 50)),
email_count: contactInfo.emails.length,
phone_count: contactInfo.phones.length,
estimated_quality: wordCount > 200 && contactInfo.emails.length > 0 ? "ALTA" :
wordCount > 100 ? "MEDIA" : "BAJA"
};
}
### 3. ¿Por qué agregar un paso de procesamiento de código?
- Adaptación de la estructura de datos: Convierte el formato de arreglo de Scrapeless a una estructura amigable para Claude
- Optimización del contenido: Extrae y prioriza secciones relevantes para el negocio
- Descubrimiento de contactos: Identifica automáticamente correos electrónicos y números de teléfono
- Evaluación de calidad: Evalúa la riqueza y completitud del contenido
- Eficiencia de tokens: Reduce el tamaño del contenido mientras preserva información importante
- Manejo de errores: Gestiona fallos en rastreos y contenido insuficiente de manera elegante
- Soporte para depuración: Registro completo para resolución de problemas
### 4. Estructura de salida esperada
Después del procesamiento, cada cliente potencial tendrá este formato estructurado:
{
"url": "https://empresa.com",
"company_name": "Nombre de la Empresa",
"content": "SOLICITUD DE ANÁLISIS DE LA EMPRESA\n\nEmpresa: ...",
"raw_content_length": 50000,
"processed_content_length": 2500,
"extracted_emails": ["contacto@empresa.com"],
"extracted_phones": ["+1-555-123-4567"],
"content_quality": {
"word_count": 5000,
"has_contact_info": true,
"estimated_quality": "ALTA",
"content_richness_score": 10
},
"processing_status": "ÉXITO"
}

Esto ayuda a verificar el formato de los datos y resolver cualquier problema de procesamiento.
### 5. Beneficios del nodo de código
- Ahorro de costos: Contenido más pequeño y limpio = menos tokens para la API de Claude
- Mejores resultados: Contenido enfocado mejora la precisión del análisis de IA
- Recuperación de errores: Maneja respuestas vacías y fallos de rastreo
- Flexibilidad: Fácil de ajustar la lógica de análisis según los resultados
- Métricas de calidad: Evaluación incorporada de la completitud de los datos de los leads
## Paso 6: Calificación de leads impulsada por IA con Claude
Utiliza la IA de Claude para extraer y calificar la información de leads de contenido rastreado que ha sido procesado y estructurado por nuestro nodo de código.
1. Agrega un nodo de agente de IA después del nodo de código

2. Agrega un nodo Anthropic Claude y configúralo para el análisis de leads

3. Configura los mensajes para extraer datos de leads B2B estructurados
Haz clic en el agente de IA -> agrega una opción -> Mensaje del sistema y copia y pega el mensaje a continuación

**Mensaje del sistema para extracción de leads:**
Analiza este contenido procesado del sitio web de la empresa y extrae la información del lead B2B. Devuelve SOLAMENTE JSON válido:
URL de la empresa: {{ $json.url }}
Nombre de la empresa: {{ $json.company_name }}
Contenido procesado del sitio web: {{ $json.content }}
Evaluación de calidad del contenido: {{ $json.content_quality }}
Información de contacto pre-extraída:
Correos electrónicos: {{ $json.extracted_emails }}
Teléfonos: {{ $json.extracted_phones }}
Información de metadatos: {{ $json.metadata_info }}
Detalles de procesamiento:
Longitud del contenido sin procesar: {{ $json.raw_content_length }} caracteres
Longitud del contenido procesado: {{ $json.processed_content_length }} caracteres
Estado del procesamiento: {{ $json.processing_status }}
Basado en estos datos estructurados, extraiga y califique este lead B2B. Regrese SOLO JSON válido:
{
"nombre_empresa": "Nombre oficial de la empresa extraído del contenido",
"industria": "Industria/sector principal identificado",
"tamaño_empresa": "Número de empleados o categoría de tamaño (startup/SMB/mediana/empresa)",
"ubicación": "Ubicación de la sede o mercado principal",
"correo_contacto": "Mejor correo general o de ventas extraído",
"teléfono": "Número de teléfono principal extraído",
"servicios_clave": ["Servicios/productos principales ofrecidos según el contenido"],
"mercado_objetivo": "A quién sirven (B2B/B2C, SMB/empresa, industrias específicas)",
"tecnologías": ["Tecnologías, plataformas o herramientas mencionadas"],
"etapa_financiamiento": "Etapa de financiamiento si se menciona (semilla/serie A/B/C/pública/privada)",
"modelo_negocio": "Modelo de ingresos (SaaS/consultoría/producto/mercado)",
"presencia_social": {
"linkedin": "URL de la empresa en LinkedIn si se encuentra en el contenido",
"twitter": "Manejador de Twitter si se encuentra"
},
"puntuación_lead": 8.5,
"razones_calificación": ["Razones específicas por las que este lead está calificado o no"],
"tomadores_decisión": ["Nombres y títulos de contactos clave encontrados"],
"próximas_acciones": ["Estrategias de seguimiento recomendadas según el perfil de la empresa"],
"insights_contenido": {
"calidad_sitio": "Profesional/Básico/Pobre según la riqueza del contenido",
"actividad_reciente": "Cualquier noticia reciente, financiamiento o actualizaciones mencionadas",
"posicionamiento_competitivo": "Cómo se posicionan frente a los competidores"
}
}
Criterios de puntuación mejorados (1-10):
9-10: Ajuste perfecto de ICP + información de contacto completa + señales de alto crecimiento + contenido profesional
7-8: Buen ajuste de ICP + algo de información de contacto + empresa estable + contenido de calidad
5-6: Ajuste moderado + información de contacto limitada + contenido básico + necesita investigación
3-4: Mal ajuste + información mínima + contenido de baja calidad + mercado objetivo incorrecto
1-2: No calificado + sin información de contacto + procesamiento fallido + irrelevante
Factores de puntuación a considerar:
Puntuación de calidad de contenido: {{ $json.content_quality.content_richness_score }}/10
Información de contacto: {{ $json.content_quality.email_count }} correos, {{ $json.content_quality.phone_count }} teléfonos
Integridad del contenido: {{ $json.content_quality.has_about_section }}, {{ $json.content_quality.has_services_section }}
Éxito del procesamiento: {{ $json.processing_status }}
Volumen de contenido: {{ $json.content_quality.word_count }} palabras
Instrucciones:
Use SOLO la información de contacto pre-extraída de extracted_emails y extracted_phones
Base el nombre de la empresa en el campo processed company_name, no en el contenido sin procesar
Considere las métricas de calidad del contenido al determinar la puntuación del lead
Si el estado de procesamiento no es "SUCCESS", baje significativamente la puntuación
Use null para cualquier información faltante - no alucine datos
Sea conservador con la puntuación - es mejor subestimar que sobreestimar
Enfoque en la relevancia B2B y el ajuste de ICP basado en el contenido estructurado proporcionado
La estructura del prompt hace que el filtrado sea más confiable, ya que Claude ahora recibe una entrada consistente y estructurada. Esto conduce a puntuaciones de leads más precisas y mejores decisiones de calificación en el siguiente paso de su flujo de trabajo.
Paso 7: Análisis de la respuesta de Claude AI
Antes de filtrar leads, necesitamos analizar adecuadamente la respuesta JSON de Claude que puede llegar envuelta en un formato de markdown.
- Agregue un nodo de código después del Agente AI (Claude)
- Configure para analizar y limpiar la respuesta JSON de Claude

1. Configuración del nodo de código
// Código para analizar la respuesta JSON de Claude AI
console.log("=== ANALIZANDO RESPUESTA DE CLAUDE AI ===");
try {
// La respuesta de Claude llega en el campo "output"
const claudeOutput = $json.output || "";
console.log("Longitud de la salida de Claude:", claudeOutput.length);
console.log("Vista previa de la salida de Claude:", claudeOutput.substring(0, 200));
// Extraer JSON de la respuesta en markdown de Claude
let jsonString = claudeOutput;
// Remove los backticks de markdown si están presentes
if (jsonString.includes('json')) { const jsonMatch = jsonString.match(/json\s*([\s\S]*?)\s*/); if (jsonMatch && jsonMatch[1]) { jsonString = jsonMatch[1].trim(); } } else if (jsonString.includes('')) {
// Fallback para casos con solo const jsonMatch = jsonString.match(/\s*([\s\S]*?)\s*```/);
if (jsonMatch && jsonMatch[1]) {
jsonString = jsonMatch[1].trim();
}
}
// Limpieza adicional
jsonString = jsonString.trim();
console.log("Cadena JSON extraída:", jsonString.substring(0, 300));
// Analizar el JSON
const leadData = JSON.parse(jsonString);
console.log("Datos de lead analizados con éxito para:", leadData.nombre_empresa);
console.log("Puntuación del lead:", leadData.puntuación_lead);
javascript
console.log("Email de contacto:", leadData.contact_email);
// Validación y limpieza de datos
const cleanedLead = {
company_name: leadData.company_name || "Desconocido",
industry: leadData.industry || null,
company_size: leadData.company_size || null,
location: leadData.location || null,
contact_email: leadData.contact_email || null,
phone: leadData.phone || null,
key_services: Array.isArray(leadData.key_services) ? leadData.key_services : [],
target_market: leadData.target_market || null,
technologies: Array.isArray(leadData.technologies) ? leadData.technologies : [],
funding_stage: leadData.funding_stage || null,
business_model: leadData.business_model || null,
social_presence: leadData.social_presence || { linkedin: null, twitter: null },
lead_score: typeof leadData.lead_score === 'number' ? leadData.lead_score : 0,
qualification_reasons: Array.isArray(leadData.qualification_reasons) ? leadData.qualification_reasons : [],
decision_makers: Array.isArray(leadData.decision_makers) ? leadData.decision_makers : [],
next_actions: Array.isArray(leadData.next_actions) ? leadData.next_actions : [],
content_insights: leadData.content_insights || {},
// Meta-información para filtro
is_qualified: leadData.lead_score >= 6 && leadData.contact_email !== null,
has_contact_info: !!(leadData.contact_email || leadData.phone),
processing_timestamp: new Date().toISOString(),
claude_processing_status: "ÉXITO"
};
console.log(✅ Lead procesado: ${cleanedLead.company_name} (Puntuación: ${cleanedLead.lead_score}, Calificado: ${cleanedLead.is_qualified}));
return cleanedLead;
} catch (error) {
console.error("❌ Error al analizar la respuesta de Claude:", error);
console.error("Salida en bruto:", $json.output);
// Respuesta de error estructurada
return {
company_name: "Error de análisis de Claude",
industry: null,
company_size: null,
location: null,
contact_email: null,
phone: null,
key_services: [],
target_market: null,
technologies: [],
funding_stage: null,
business_model: null,
social_presence: { linkedin: null, twitter: null },
lead_score: 0,
qualification_reasons: [Error de análisis de Claude: ${error.message}],
decision_makers: [],
next_actions: ["Corregir análisis de respuesta de Claude", "Verificar formato JSON"],
content_insights: {},
is_qualified: false,
has_contact_info: false,
processing_timestamp: new Date().toISOString(),
claude_processing_status: "FALLIDO",
parsing_error: error.message,
raw_claude_output: $json.output || "No se recibió salida"
};
}
// ¿Por qué agregar el análisis de respuesta de Claude?
- Manejo de Markdown: Elimina el formato json de las respuestas de Claude
- Validación de datos: Asegura que todos los campos tengan tipos y valores predeterminados correctos
- Recuperación de errores: Maneja los fallos de análisis JSON de manera adecuada
- Preparación para filtrado: Agrega campos computados para un filtrado más fácil
- Soporte de depuración: Registro integral para resolución de problemas

## Paso 8: Filtrado de Leads y Control de Calidad
Filtrar los leads en función de las puntuaciones de calificación y la integridad de los datos utilizando los datos analizados y validados.
1. Agregar un nodo IF después del Analizador de Respuesta de Claude
2. Configurar criterios de calificación mejorados

### 1. Nueva Configuración del Nodo IF
Ahora que los datos están correctamente analizados, usa estas condiciones en el nodo IF:
**1: Agregar Múltiples Condiciones**
**Condición 1:**
- Campo: {{ $json.lead_score }}
- Operador: es igual o mayor que
- Valor: 6
**Condición 2:**
- Campo: {{ $json.claude_processing_status }}
- Operador: es igual a
- Valor: ÉXITO
Opción: Convertir tipos donde sea necesario
- VERDADERO

### 2. Beneficios del Filtrado
- Aseguramiento de Calidad: Solo los leads calificados avanzan al almacenamiento
- Optimización de Costos: Previene el procesamiento de leads de baja calidad
- Integridad de Datos: Asegura que los datos analizados sean válidos antes del almacenamiento
- Capacidad de Depuración: Las fallas en el análisis se detectan y registran
## Paso 9: Almacenamiento de Leads en Google Sheets
Almacenar los leads calificados en una base de datos de Google Sheets para fácil acceso y gestión.
1. Agregar un nodo de Google Sheets después del filtrado
2. Configurar para agregar nuevos leads
Sin embargo, puedes elegir gestionar los datos como desees.


**Configuración de Google Sheets:**
- Crea una hoja de cálculo llamada "Base de Datos de Leads B2B"
- Configura las columnas:
- Nombre de la Empresa
- Industria
- Tamaño de la Empresa
- Ubicación
- Correo Electrónico de Contacto
- Teléfono
- Sitio Web
- Puntuación del Lead
- Fecha de Adición
- Notas de Cualificación
- Próximas Acciones
Por mi parte, elijo usar directamente un webhook de Discord
Paso 9-2: Notificaciones de Discord (Adaptable a Otros Servicios)
Envía notificaciones en tiempo real para nuevos leads calificados.
- Agrega un nodo de Solicitud HTTP para el webhook de Discord.

- Configura el formato de carga útil específico de Discord.

Configuración del Webhook de Discord:
- Método: POST
- URL: Tu URL de webhook de Discord
- Encabezados: Content-Type: application/json
Carga Útil del Mensaje de Discord:
{
"embeds": [
{
"title": "🎯 ¡Nuevo Lead Calificado Encontrado!",
"description": "**{{ $json.company_name || 'Empresa Desconocida' }}** (Puntuación: {{ $json.lead_score || 0 }}/10)",
"color": 3066993,
"fields": [
{
"name": "Industria",
"value": "{{ $json.industry || 'No especificada' }}",
"inline": true
},
{
"name": "Tamaño",
"value": "{{ $json.company_size || 'No especificado' }}",
"inline": true
},
{
"name": "Ubicación",
"value": "{{ $json.location || 'No especificada' }}",
"inline": true
},
{
"name": "Contacto",
"value": "{{ $json.contact_email || 'No se encontró correo' }}",
"inline": false
},
{
"name": "Teléfono",
"value": "{{ $json.phone || 'No se encontró teléfono' }}",
"inline": false
},
{
"name": "Servicios",
"value": "{{ $json.key_services && $json.key_services.length > 0 ? $json.key_services.slice(0, 3).join(', ') : 'No especificados' }}",
"inline": false
},
{
"name": "Sitio Web",
"value": "[Visitar Sitio Web]({{ $node['Code2'].json.url || '#' }})",
"inline": false
},
{
"name": "Por qué Calificado",
"value": "{{ $json.qualification_reasons && $json.qualification_reasons.length > 0 ? $json.qualification_reasons.slice(0, 2).join(' • ') : 'Criterios de cualificación estándar cumplidos' }}",
"inline": false
}
],
"footer": {
"text": "Generado por el flujo de trabajo de Generación de Leads n8n"
},
"timestamp": ""
}
]
}
Resultados

Configuraciones Específicas por Industria
Empresas de SaaS/Software
Consultas de Búsqueda:
"empresas SaaS" "software B2B" "software empresarial"
"software en la nube" "API" "desarrolladores" "modelo de suscripción"
"software como servicio" "plataforma" "integración"
Criterios de Cualificación:
- Número de empleados: 20-500
- Usa tecnología moderna
- Tiene documentación de API
- Activo en GitHub/contenido técnico
Agencias de Marketing
Consultas de Búsqueda:
"agencia de marketing digital" "marketing B2B" "clientes empresariales"
"automatización de marketing" "generación de demanda" "generación de leads"
"agencia de marketing de contenidos" "marketing de crecimiento" "marketing de rendimiento"
Criterios de Cualificación:
- Estudios de caso de clientes disponibles
- Tamaño del equipo: 10-100
- Se especializa en B2B
- Marketing de contenidos activo
E-commerce/Minorista
Consultas de Búsqueda:
"empresas de ecommerce" "venta minorista en línea" "marcas D2C"
"tiendas Shopify" "WooCommerce" "plataforma de ecommerce"
"mercado en línea" "comercio digital" "tecnología minorista"
Criterios de Cualificación:
- Indicadores de ingresos
- Presencia multicanal
- Plataforma tecnológica mencionada
- Señales de trayectoria de crecimiento
Gestión y Análisis de Datos
Esquema de Base de Datos de Leads
Estructura tus Hojas de Google para máxima utilidad:
Información Básica del Lead:
- Nombre de la Empresa, Industria, Tamaño, Ubicación
- Correo Electrónico de Contacto, Teléfono, Sitio Web
- Puntuación del Lead, Fecha de Adición, Consulta de Origen
Datos de Cualificación:
- Razones de Cualificación, Tomadores de Decisiones
- Próximas Acciones, Fecha de Seguimiento
- Representante de Ventas Asignado, Estado del Lead
Campos de Enriquecimiento:
- URL de LinkedIn, Presencia en Redes Sociales
- Tecnologías Utilizadas, Etapa de Financiamiento
- Competidores, Noticias Recientes
Análisis e Informes
Sigue el rendimiento del flujo de trabajo con hojas adicionales:
Hoja de Resumen Diario:
- Leads Generados por Día
- Puntuación Media de Leads
- Principales Industrias Encontradas
- Tasas de Conversión
Rendimiento de Búsqueda:
- Consultas con Mejor Desempeño
- Distribución Geográfica
- Desglose del Tamaño de la Empresa
- Tasa de Éxito por Industria
Seguimiento de ROI:
- Costo por Lead (costos de API)
- Tiempo para el Contacto
- Conversión a Oportunidad
- Atribución de Ingresos
Conclusión
Este flujo de trabajo inteligente de generación de leads B2B transforma su prospección de ventas al automatizar el descubrimiento, la calificación y la organización de clientes potenciales. Al combinar la búsqueda de Google con rastreo inteligente y análisis de IA, crea un enfoque sistemático para construir su embudo de ventas.
El flujo de trabajo se adapta a su industria específica, objetivos de tamaño de empresa y criterios de calificación, manteniendo al mismo tiempo una alta calidad de datos a través de análisis impulsados por IA. Con una configuración y monitoreo adecuados, este sistema se convierte en una fuente constante de leads calificados para su equipo de ventas.
La integración con Google Sheets proporciona una base de datos accesible para los equipos de ventas, mientras que las notificaciones de Discord garantizan una conciencia inmediata de los prospectos de alto valor. El diseño modular permite una fácil adaptación a diferentes servicios de notificación, sistemas CRM y soluciones de almacenamiento de datos.
Scrapeless cumple estrictamente con las leyes y regulaciones aplicables, accediendo únicamente a datos disponibles públicamente de acuerdo con los términos de servicio y las políticas de privacidad del sitio web. Esta solución está diseñada para fines legítimos de inteligencia empresarial y optimización de marketing.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.



