La automatización de la investigación de clientes potenciales en bienes raíces con una API de búsqueda le permite encontrar mediante programación listados de propiedades, información de contacto de agentes y comparaciones de mercado a escala en lugar de navegar manualmente en docenas de sitios. Este tutorial lo guiará a través de la creación de una canalización que consulta propiedades en un mercado objetivo, extrae detalles de listados y compila clientes potenciales de agentes en un conjunto de datos estructurados que puede incorporar a su CRM o herramienta de divulgación.
Requisitos previos
- Clave API de Scavio (250 créditos gratuitos al mes en scavio.dev)
- Python 3.9+ o Node.js 18+
- Familiaridad básica con las API REST y JSON
Guia paso a paso
Paso 1: Defina su mercado objetivo y consultas de búsqueda
Comience enumerando las áreas geográficas y los tipos de propiedades que desea investigar. Cree un conjunto de consultas de búsqueda que combinen ubicación, tipo de propiedad y palabras clave de intención, como "casas en venta", "listados de bienes raíces comerciales" o "nueva construcción". Esto le brinda una cobertura estructurada de un mercado en lugar de búsquedas únicas aleatorias.
queries = [
'homes for sale in Austin TX 2026',
'commercial real estate listings Austin TX',
'new construction homes Austin TX under 500k',
'Austin TX real estate agents top rated',
'Austin TX housing market data 2026',
]Paso 2: Búsqueda de listados y datos de agentes a través de API
Envíe cada consulta a la API de búsqueda de Scavio. La respuesta incluye resultados orgánicos con títulos, URL y fragmentos que contienen detalles del listado e información del agente. Utilice el parámetro num para controlar cuántos resultados obtiene por consulta.
import requests
API_KEY = 'your_scavio_api_key'
results = []
for query in queries:
resp = requests.post(
'https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': query, 'num': 20}
)
data = resp.json()
for item in data.get('organic', []):
results.append({
'query': query,
'title': item.get('title', ''),
'url': item.get('url', ''),
'snippet': item.get('snippet', ''),
})Paso 3: Extraer y deduplicar clientes potenciales
Analice los resultados para extraer nombres de agentes, información de corretaje y URL de listados. Deduplica por URL para no almacenar el mismo listado dos veces. Agrupe clientes potenciales por dominio de origen para identificar qué plataformas dominan su mercado objetivo.
from urllib.parse import urlparse
seen_urls = set()
leads = []
for r in results:
if r['url'] in seen_urls:
continue
seen_urls.add(r['url'])
domain = urlparse(r['url']).netloc
leads.append({
'title': r['title'],
'url': r['url'],
'snippet': r['snippet'],
'source_domain': domain,
'query': r['query'],
})
print(f'Found {len(leads)} unique leads from {len(set(l["source_domain"] for l in leads))} domains')Paso 4: Exportar clientes potenciales a CSV para importar CRM
Escriba los clientes potenciales deduplicados en un archivo CSV que pueda importar directamente a su CRM, herramienta de divulgación u hoja de cálculo. Incluya todos los campos para que su equipo de ventas tenga contexto sobre cada cliente potencial sin tener que hacer clic en cada URL.
import csv
with open('real_estate_leads.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['title', 'url', 'snippet', 'source_domain', 'query'])
writer.writeheader()
writer.writerows(leads)
print(f'Exported {len(leads)} leads to real_estate_leads.csv')Ejemplo en Python
import requests
import csv
from urllib.parse import urlparse
API_KEY = 'your_scavio_api_key'
queries = [
'homes for sale in Austin TX 2026',
'commercial real estate listings Austin TX',
'Austin TX real estate agents top rated',
]
results = []
for query in queries:
resp = requests.post(
'https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': query, 'num': 20}
)
data = resp.json()
for item in data.get('organic', []):
results.append({
'query': query,
'title': item.get('title', ''),
'url': item.get('url', ''),
'snippet': item.get('snippet', ''),
})
seen_urls = set()
leads = []
for r in results:
if r['url'] in seen_urls:
continue
seen_urls.add(r['url'])
domain = urlparse(r['url']).netloc
leads.append({
'title': r['title'],
'url': r['url'],
'snippet': r['snippet'],
'source_domain': domain,
'query': r['query'],
})
with open('real_estate_leads.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['title', 'url', 'snippet', 'source_domain', 'query'])
writer.writeheader()
writer.writerows(leads)
print(f'Found {len(leads)} unique leads across {len(set(l["source_domain"] for l in leads))} domains')
print(f'Exported to real_estate_leads.csv')Ejemplo en JavaScript
const fs = require('fs');
const API_KEY = 'your_scavio_api_key';
const queries = [
'homes for sale in Austin TX 2026',
'commercial real estate listings Austin TX',
'Austin TX real estate agents top rated',
];
async function main() {
const results = [];
for (const query of queries) {
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, num: 20 }),
});
const data = await resp.json();
for (const item of data.organic || []) {
results.push({
query,
title: item.title || '',
url: item.url || '',
snippet: item.snippet || '',
});
}
}
const seen = new Set();
const leads = [];
for (const r of results) {
if (seen.has(r.url)) continue;
seen.add(r.url);
const domain = new URL(r.url).hostname;
leads.push({ ...r, source_domain: domain });
}
const header = 'title,url,snippet,source_domain,query';
const rows = leads.map(l =>
[l.title, l.url, l.snippet, l.source_domain, l.query]
.map(v => `"${String(v).replace(/"/g, '""')}"`)
.join(',')
);
fs.writeFileSync('real_estate_leads.csv', [header, ...rows].join('\n'));
console.log(`Found ${leads.length} unique leads across ${new Set(leads.map(l => l.source_domain)).size} domains`);
console.log('Exported to real_estate_leads.csv');
}
main();Salida esperada
Found 47 unique leads across 12 domains
Exported to real_estate_leads.csv