Los directorios B2B como Clutch, G2 y listados específicos de la industria son fuentes ricas de datos de la empresa para las ventas salientes. En lugar de crear raspadores de navegador frágiles que se rompen cuando cambia el diseño de los directorios, puede buscar listados de directorios a través de una API de búsqueda y extraer datos estructurados de los fragmentos de SERP. Este enfoque es más rápido, más barato y más fácil de mantener. Este tutorial crea una canalización n8n que consulta directorios, extrae información de la empresa y genera una lista de clientes potenciales limpia. Cada búsqueda cuesta $0.005 a través de Scavio.
Requisitos previos
- Instancia n8n en ejecución (autohospedada o en la nube)
- Una clave API de Scavio de scavio.dev
- Industria o nicho objetivo para prospectar
- Google Sheets o CRM para resultados
Guia paso a paso
Paso 1: Definir consultas de búsqueda de directorio
Cree consultas de búsqueda dirigidas a listados de directorios B2B. El patrón es: sitio:directorio.com + nicho + ubicación. Esto recupera sólo páginas de directorio, no sitios web aleatorios.
// n8n Code node to generate targeted queries:
const directories = [
{ name: 'clutch', query: 'site:clutch.co' },
{ name: 'g2', query: 'site:g2.com' },
{ name: 'goodfirms', query: 'site:goodfirms.co' }
];
const niches = ['marketing agency', 'web development company', 'IT consulting'];
const queries = [];
for (const dir of directories) {
for (const niche of niches) {
queries.push({
json: {
directory: dir.name,
searchQuery: `${dir.query} ${niche}`,
niche
}
});
}
}
return queries; // 9 targeted directory queriesPaso 2: Ejecutar consultas de búsqueda mediante solicitud HTTP
Para cada consulta, llame a la API de Scavio para obtener resultados del listado del directorio. Los resultados orgánicos contienen nombres de empresas, descripciones y calificaciones en los fragmentos.
// n8n HTTP Request node:
// Method: POST
// URL: https://api.scavio.dev/api/v1/search
// Headers: x-api-key: {{ $env.SCAVIO_API_KEY }}
// Body:
{
"query": "{{ $json.searchQuery }}",
"country_code": "us"
}Paso 3: Analizar datos de la empresa a partir de los resultados SERP
Extraiga nombres de empresas, URL y descripciones de los resultados orgánicos. Las páginas del directorio tienen formatos de títulos predecibles que se pueden analizar.
// n8n Code node to parse directory listings:
const data = $input.first().json;
const companies = (data.organic_results || []).map(r => {
// Clutch titles: "Company Name - Reviews, Cost & More"
// G2 titles: "Company Name Reviews 2026"
const name = r.title.split(' - ')[0].split(' Reviews')[0].trim();
return {
name,
url: r.link,
description: r.snippet || '',
directory: $('Code').first().json.directory,
niche: $('Code').first().json.niche
};
}).filter(c => c.name.length > 2 && c.name.length < 100);
return companies.map(c => ({ json: c }));Paso 4: Deduplicar y enriquecer con la búsqueda en sitios web
Elimine empresas duplicadas en los directorios y, opcionalmente, enriquezca con una búsqueda directa de cada empresa para encontrar su sitio web real y su información de contacto.
// Dedup in a Code node:
const seen = new Set();
const unique = [];
for (const item of $input.all()) {
const key = item.json.name.toLowerCase();
if (!seen.has(key)) {
seen.add(key);
unique.push(item);
}
}
return unique;
// Then enrich each with a second search:
// HTTP Request node:
// Body:
{
"query": "{{ $json.name }} company website contact",
"country_code": "us"
}Paso 5: Exportar a Google Sheets con seguimiento de costos
Escriba los clientes potenciales limpios en una hoja de Google. Agregue una columna de costo para saber exactamente cuánto costó la ejecución de extracción.
// Final Code node before Google Sheets:
const leads = $input.all().map((item, i) => ({
json: {
...item.json,
extractedAt: new Date().toISOString(),
estimatedCost: ((i + 1) * 0.005).toFixed(3)
}
}));
const totalCost = (leads.length * 0.005).toFixed(2);
console.log(`Extracted ${leads.length} leads, cost: $${totalCost}`);
return leads;
// Google Sheets node: Append to "B2B Leads" sheet
// Total cost: 9 directory queries + ~50 enrichment queries = ~$0.30Ejemplo en Python
import os, requests, time
API_KEY = os.environ['SCAVIO_API_KEY']
def search(query: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us'})
return resp.json()
def scrape_directory(directory_site: str, niche: str) -> list:
data = search(f'site:{directory_site} {niche}')
companies = []
for r in data.get('organic_results', []):
name = r['title'].split(' - ')[0].split(' Reviews')[0].strip()
companies.append({'name': name, 'url': r['link'],
'snippet': r.get('snippet', ''), 'directory': directory_site})
return companies
def main():
directories = ['clutch.co', 'g2.com', 'goodfirms.co']
all_leads = []
seen = set()
for d in directories:
companies = scrape_directory(d, 'marketing agency')
for c in companies:
if c['name'].lower() not in seen:
seen.add(c['name'].lower())
all_leads.append(c)
time.sleep(0.3)
print(f'Found {len(all_leads)} unique companies')
for lead in all_leads[:5]:
print(f' {lead["name"]} ({lead["directory"]})')
if __name__ == '__main__':
main()Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
async function search(query) {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query, country_code: 'us' })
});
return resp.json();
}
async function main() {
const directories = ['clutch.co', 'g2.com', 'goodfirms.co'];
const seen = new Set();
const leads = [];
for (const dir of directories) {
const data = await search(`site:${dir} marketing agency`);
for (const r of data.organic_results || []) {
const name = r.title.split(' - ')[0].split(' Reviews')[0].trim();
if (!seen.has(name.toLowerCase())) {
seen.add(name.toLowerCase());
leads.push({ name, url: r.link, directory: dir });
}
}
}
console.log(`Found ${leads.length} unique companies`);
leads.slice(0, 5).forEach(l => console.log(` ${l.name} (${l.directory})`));
}
main().catch(console.error);Salida esperada
Found 27 unique companies across 3 directories
WebFX (clutch.co)
Ignite Digital (clutch.co)
SmartSites (g2.com)
Thrive Internet Marketing (goodfirms.co)
Disruptive Advertising (g2.com)
Cost: 3 directory queries = $0.015
With enrichment: ~$0.15 total