Los datos comerciales de Google Maps son esenciales para la generación de oportunidades de venta, auditorías de SEO locales e investigaciones de mercado. La extracción de Google Maps activa directamente protecciones agresivas contra robots, incluidos CAPTCHA, prohibiciones de IP y desafíos de JavaScript. La API de Scavio le permite buscar empresas locales por consulta y ubicación, devolviendo JSON estructurado con el nombre de la empresa, dirección, calificación, recuento de reseñas, número de teléfono y sitio web. Este tutorial muestra cómo consultar datos de Google Maps para cualquier categoría y ubicación empresarial y luego exportar los resultados para divulgación o análisis.
Requisitos previos
- Python 3.8 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Una categoría de negocio objetivo y una ubicación para buscar
Guia paso a paso
Paso 1: Buscar empresas locales
PUBLICAR en el punto final de Scavio con una consulta estilo Google Maps que incluya el tipo de negocio y la ubicación. El campo local_results contiene listados de empresas estructuradas.
import os
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def search_maps(query: str, location: str) -> list[dict]:
response = requests.post(
ENDPOINT,
headers={"x-api-key": API_KEY},
json={"query": f"{query} in {location}", "country_code": "us"}
)
response.raise_for_status()
return response.json().get("local_results", [])Paso 2: Extraer detalles comerciales
Analice cada resultado local en busca de nombre, dirección, teléfono, calificación, recuento de reseñas y URL del sitio web.
def extract_business(result: dict) -> dict:
return {
"name": result.get("title"),
"address": result.get("address"),
"phone": result.get("phone"),
"rating": result.get("rating"),
"reviews": result.get("reviews"),
"website": result.get("website"),
}Paso 3: Filtrar por calificación mínima
Mantenga solo las empresas por encima de un umbral de calificación para listas de clientes potenciales de calidad.
def filter_by_rating(businesses: list[dict], min_rating: float = 4.0) -> list[dict]:
return [
b for b in businesses
if b.get("rating") and float(b["rating"]) >= min_rating
]Paso 4: Exportar a CSV
Escriba la lista de empresas filtrada en un archivo CSV para usarla en importaciones de CRM o herramientas de divulgación.
import csv
def export_csv(businesses: list[dict], filename: str = "leads.csv") -> None:
with open(filename, "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["name", "address", "phone", "rating", "reviews", "website"])
writer.writeheader()
writer.writerows(businesses)
print(f"Exported {len(businesses)} businesses to {filename}")Ejemplo en Python
import os
import csv
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def search_maps(query: str, location: str) -> list[dict]:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": f"{query} in {location}", "country_code": "us"})
r.raise_for_status()
return r.json().get("local_results", [])
def extract(result: dict) -> dict:
return {
"name": result.get("title"),
"address": result.get("address"),
"phone": result.get("phone"),
"rating": result.get("rating"),
"reviews": result.get("reviews"),
"website": result.get("website"),
}
if __name__ == "__main__":
results = search_maps("dentists", "San Francisco, CA")
businesses = [extract(r) for r in results]
high_rated = [b for b in businesses if b["rating"] and float(b["rating"]) >= 4.5]
with open("leads.csv", "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=list(high_rated[0].keys()))
w.writeheader()
w.writerows(high_rated)
print(f"Exported {len(high_rated)} leads")Ejemplo en 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");
async function searchMaps(query, location) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: `${query} in ${location}`, country_code: "us" })
});
const data = await res.json();
return (data.local_results || []).map(r => ({
name: r.title, address: r.address, phone: r.phone,
rating: r.rating, reviews: r.reviews, website: r.website
}));
}
async function main() {
const businesses = await searchMaps("dentists", "San Francisco, CA");
const filtered = businesses.filter(b => b.rating && parseFloat(b.rating) >= 4.5);
const header = "name,address,phone,rating,reviews,website";
const rows = filtered.map(b => Object.values(b).join(","));
fs.writeFileSync("leads.csv", [header, ...rows].join("\n"));
console.log(`Exported ${filtered.length} leads`);
}
main().catch(console.error);Salida esperada
{
"local_results": [
{
"title": "Pacific Heights Dental",
"address": "2100 Webster St, San Francisco, CA 94115",
"phone": "(415) 555-0123",
"rating": "4.9",
"reviews": 342,
"website": "https://pacificheightsdental.com",
"hours": "Open until 5:00 PM"
}
]
}