ScavioScavio
ProductoPreciosDocumentación
Iniciar sesionComenzar
  1. Inicio
  2. Tutoriales
  3. Cómo enriquecer los contactos de CRM con la API de búsqueda
Tutorial

Cómo enriquecer los contactos de CRM con la API de búsqueda

Enriquezca los contactos de CRM con datos de búsqueda de la empresa, incluidas noticias recientes, señales de tecnología y rondas de financiación. Utiliza consultas de API de búsqueda y análisis estructurado.

Obtener clave API gratisDocumentacion API

Enriquecer los contactos de CRM con datos de la API de búsqueda agrega noticias recientes, señales de tecnología y contexto de financiación que las bases de datos estáticas pasan por alto. Los equipos de ventas cierran más rápido cuando saben que un cliente potencial acaba de iniciar una ronda, adoptó una nueva herramienta o apareció en noticias de la industria, pero la investigación manual por contacto no escala. La API de búsqueda de Scavio le permite consultar mediante programación información específica de la empresa y extraer señales estructuradas de los resultados. Este tutorial crea un canal de enriquecimiento de Python que toma un CSV de contactos, ejecuta búsquedas específicas para cada empresa, analiza los resultados en busca de señales clave y escribe los datos enriquecidos en un CSV listo para la importación de CRM.

Requisitos previos

  • Python 3.8 o superior instalado
  • solicitudes y csv (biblioteca estándar) disponibles
  • Una clave API de Scavio de scavio.dev
  • Un archivo CSV con datos de contacto, incluidos los nombres de las empresas

Guia paso a paso

Paso 1: Cargar contactos desde CSV

Lea el CSV de entrada que contenga como mínimo una columna de nombre de empresa. El script enriquecerá cada fila con columnas adicionales derivadas de los resultados de la búsqueda.

Python
import csv
from pathlib import Path

def load_contacts(filepath: str) -> list[dict]:
    with open(filepath, 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        return list(reader)

contacts = load_contacts('contacts.csv')
print(f'Loaded {len(contacts)} contacts')

Paso 2: Ejecute consultas de búsqueda específicas por empresa

Para cada empresa, ejecute múltiples consultas específicas para encontrar noticias recientes, información de financiación y señales de tecnología. Cada consulta se adapta para mostrar una señal de enriquecimiento específica.

Python
import requests
import os

API_KEY = os.environ.get('SCAVIO_API_KEY', 'your_scavio_api_key')
ENDPOINT = 'https://api.scavio.dev/api/v1/search'

def search_company(company: str, query_suffix: str) -> dict:
    response = requests.post(
        ENDPOINT,
        headers={'x-api-key': API_KEY},
        json={'query': f'{company} {query_suffix}', 'country_code': 'us'}
    )
    response.raise_for_status()
    return response.json()

SIGNAL_QUERIES = {
    'recent_news': 'news 2026',
    'funding': 'funding round raised',
    'tech_stack': 'tech stack tools uses',
    'hiring': 'hiring jobs open positions'
}

Paso 3: Analizar los resultados de la búsqueda en señales estructuradas

Extraiga los principales fragmentos de resultados orgánicos para cada consulta de señal y condenselos en un campo de enriquecimiento de una sola línea. Esto evita HTML sin formato y proporciona texto limpio para notas de CRM.

Python
def extract_signal(data: dict, max_snippets: int = 3) -> str:
    results = data.get('organic_results', [])[:max_snippets]
    snippets = []
    for r in results:
        snippet = r.get('snippet', '')
        if snippet:
            snippets.append(snippet.strip())
    return ' | '.join(snippets) if snippets else 'No data found'

def enrich_contact(contact: dict) -> dict:
    company = contact.get('company_name', '')
    if not company:
        return contact
    for signal_name, query_suffix in SIGNAL_QUERIES.items():
        data = search_company(company, query_suffix)
        contact[signal_name] = extract_signal(data)
    return contact

Paso 4: Ejecute el enriquecimiento y escriba los resultados en CSV

Repita todos los contactos, enriquezca cada uno y escriba los resultados en un nuevo archivo CSV con las columnas de señales adicionales. Agregue un límite de tasa para mantenerse dentro del presupuesto de crédito API.

Python
import time

def run_enrichment(input_file: str, output_file: str):
    contacts = load_contacts(input_file)
    enriched = []
    for i, contact in enumerate(contacts):
        print(f'Enriching {i + 1}/{len(contacts)}: {contact.get("company_name", "unknown")}')
        enriched.append(enrich_contact(contact))
        time.sleep(1)  # rate limit: 4 queries per contact
    fieldnames = list(enriched[0].keys())
    with open(output_file, 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(enriched)
    print(f'Wrote {len(enriched)} enriched contacts to {output_file}')

run_enrichment('contacts.csv', 'contacts_enriched.csv')

Ejemplo en Python

Python
import os
import csv
import time
import requests

API_KEY = os.environ.get('SCAVIO_API_KEY', 'your_scavio_api_key')
ENDPOINT = 'https://api.scavio.dev/api/v1/search'

SIGNAL_QUERIES = {
    'recent_news': 'news 2026',
    'funding': 'funding round raised',
    'tech_stack': 'tech stack tools uses',
    'hiring': 'hiring jobs open positions'
}

def search_company(company: str, query_suffix: str) -> dict:
    response = requests.post(
        ENDPOINT,
        headers={'x-api-key': API_KEY},
        json={'query': f'{company} {query_suffix}', 'country_code': 'us'}
    )
    response.raise_for_status()
    return response.json()

def extract_signal(data: dict, max_snippets: int = 3) -> str:
    results = data.get('organic_results', [])[:max_snippets]
    snippets = [r.get('snippet', '').strip() for r in results if r.get('snippet')]
    return ' | '.join(snippets) if snippets else 'No data found'

def load_contacts(filepath: str) -> list[dict]:
    with open(filepath, 'r', encoding='utf-8') as f:
        return list(csv.DictReader(f))

def enrich_contact(contact: dict) -> dict:
    company = contact.get('company_name', '')
    if not company:
        return contact
    for signal_name, query_suffix in SIGNAL_QUERIES.items():
        data = search_company(company, query_suffix)
        contact[signal_name] = extract_signal(data)
    return contact

def run_enrichment(input_file: str, output_file: str):
    contacts = load_contacts(input_file)
    enriched = []
    for i, contact in enumerate(contacts):
        print(f'Enriching {i + 1}/{len(contacts)}: {contact.get("company_name", "unknown")}')
        enriched.append(enrich_contact(contact))
        time.sleep(1)
    fieldnames = list(enriched[0].keys())
    with open(output_file, 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(enriched)
    print(f'Wrote {len(enriched)} enriched contacts to {output_file}')

if __name__ == '__main__':
    run_enrichment('contacts.csv', 'contacts_enriched.csv')

Ejemplo en JavaScript

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || 'your_scavio_api_key';
const ENDPOINT = 'https://api.scavio.dev/api/v1/search';
const fs = require('fs');

const SIGNAL_QUERIES = {
  recent_news: 'news 2026',
  funding: 'funding round raised',
  tech_stack: 'tech stack tools uses',
  hiring: 'hiring jobs open positions'
};

async function searchCompany(company, querySuffix) {
  const response = await fetch(ENDPOINT, {
    method: 'POST',
    headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: company + ' ' + querySuffix, country_code: 'us' })
  });
  if (!response.ok) throw new Error('HTTP ' + response.status);
  return response.json();
}

function extractSignal(data) {
  const results = (data.organic_results || []).slice(0, 3);
  const snippets = results.map(r => (r.snippet || '').trim()).filter(Boolean);
  return snippets.length ? snippets.join(' | ') : 'No data found';
}

function parseCSV(text) {
  const lines = text.trim().split('\n');
  const headers = lines[0].split(',').map(h => h.trim());
  return lines.slice(1).map(line => {
    const values = line.split(',');
    return Object.fromEntries(headers.map((h, i) => [h, (values[i] || '').trim()]));
  });
}

async function main() {
  const contacts = parseCSV(fs.readFileSync('contacts.csv', 'utf-8'));
  const enriched = [];
  for (let i = 0; i < contacts.length; i++) {
    const contact = contacts[i];
    const company = contact.company_name || '';
    console.log('Enriching ' + (i + 1) + '/' + contacts.length + ': ' + company);
    if (company) {
      for (const [signal, suffix] of Object.entries(SIGNAL_QUERIES)) {
        const data = await searchCompany(company, suffix);
        contact[signal] = extractSignal(data);
      }
    }
    enriched.push(contact);
    await new Promise(r => setTimeout(r, 1000));
  }
  const headers = Object.keys(enriched[0]);
  const csv = [headers.join(','), ...enriched.map(r => headers.map(h => '"' + (r[h] || '') + '"').join(','))].join('\n');
  fs.writeFileSync('contacts_enriched.csv', csv);
  console.log('Wrote ' + enriched.length + ' enriched contacts');
}

main().catch(console.error);

Salida esperada

JSON
Enriching 1/3: Acme Corp
Enriching 2/3: TechStart Inc
Enriching 3/3: DataFlow Labs
Wrote 3 enriched contacts to contacts_enriched.csv

-- contacts_enriched.csv sample row --
company_name,email,recent_news,funding,tech_stack,hiring
Acme Corp,john@acme.com,"Acme Corp announces Q1 revenue growth...","Acme Corp raises $45M Series B...","Acme Corp uses React, PostgreSQL, and AWS...","Acme Corp hiring 15 engineers..."

Tutoriales relacionados

  • Cómo crear una canalización de generación de leads con la API de búsqueda
  • Cómo crear un panel de operaciones con datos de búsqueda
  • Cómo fundamentar un LLM local con búsqueda estructurada

Preguntas frecuentes

La mayoria de los desarrolladores completan este tutorial en 15 a 30 minutos. Necesitaras una clave API de Scavio (el plan gratuito funciona) y un entorno de Python o JavaScript.

Python 3.8 o superior instalado. solicitudes y csv (biblioteca estándar) disponibles. Una clave API de Scavio de scavio.dev. Un archivo CSV con datos de contacto, incluidos los nombres de las empresas. Una clave API de Scavio te da 50 creditos gratuitos al registrarte.

Si. El plan gratuito incluye 50 creditos al registrarte, mas que suficiente para completar este tutorial y crear un prototipo funcional.

Scavio tiene un paquete nativo de LangChain (langchain-scavio), un servidor MCP y una API REST simple que funciona con cualquier cliente HTTP. Este tutorial usa the raw REST API, pero puedes adaptarlo al framework que prefieras.

Recursos relacionados

Best Of

Las mejores API de búsqueda después de los cambios en el modo AI de Google I/O 2026

Read more
Glossary

Panorama de proveedores de API de búsqueda (2026)

Read more
Best Of

Los mejores proveedores de API SERP clasificados por precio en 2026

Read more
Glossary

Comparación gratuita de niveles de API de búsqueda

Read more
Comparison

Search APIs (Scavio, Tavily, SerpAPI) vs Headless Browser (Playwright, Puppeteer, Browserbase)

Read more
Comparison

Google Places API vs SERP Local Pack API

Read more

Empieza a construir

Enriquezca los contactos de CRM con datos de búsqueda de la empresa, incluidas noticias recientes, señales de tecnología y rondas de financiación. Utiliza consultas de API de búsqueda y análisis estructurado.

Obtener clave API gratuitaLeer la documentacion
ScavioScavio

API de busqueda en tiempo real para agentes de IA. Busca en todas las plataformas, no solo en Google.

Producto

  • Funciones
  • Precios
  • Panel
  • Afiliados

Desarrolladores

  • Documentacion
  • Referencia de API
  • Inicio rapido
  • Integracion MCP
  • Python SDK

Alternativas

  • Alternativa a Tavily
  • Alternativa a SerpAPI
  • Alternativa a Firecrawl
  • Alternativa a Exa

Herramientas

  • Formateador JSON
  • cURL a codigo
  • Contador de tokens
  • Todas las herramientas

© 2026 Scavio. Todos los derechos reservados.

Featured on TAAFT
Terminos de servicioPolitica de privacidad