Pymes en España: leads de Google Maps con email (dominio MX) avatar

Pymes en España: leads de Google Maps con email (dominio MX)

Pricing

from $2.00 / 1,000 lugar emitidos

Go to Apify Store
Pymes en España: leads de Google Maps con email (dominio MX)

Pymes en España: leads de Google Maps con email (dominio MX)

Busca pymes españolas en Google Maps por tipo de negocio y ciudad y devuelve un lead por lugar: nombre, categoría, dirección, teléfono, web, rating, reseñas y email de contacto público con dominio MX (no valida el buzón individual). Solo mercado español; sin navegador, rápido y barato.

Pricing

from $2.00 / 1,000 lugar emitidos

Rating

0.0

(0)

Developer

Riccardo Pongetti

Riccardo Pongetti

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Categories

Share

Actor Apify que convierte una lista de búsquedas ("tipo de negocio + ciudad española") en una lista de leads de pymes españolas con su email de contacto público y el estado del dominio de ese email (registros MX).

Un item por lugar:

nombre, categoria, direccion, ciudad, pais, telefono, web, rating, numeroResenas,
email, emailDominioMx, emailDominioMxDetalle, emailAlternativos,
emailMetodoVerificacion, placeId, url, latitud, longitud

Solo mercado español (country = ES). No usa navegador, así que es rápido y barato.

Por qué es barato (diseño)

No usa navegador. Dos peticiones HTTP por búsqueda:

  1. GET /maps/search/<búsqueda>?hl=es&gl=ES — el HTML incluye un <link> de prefetch a /search?tbm=map&...&pb=... con la búsqueda ya serializada.
  2. GET de ese link — devuelve )]}' + JSON con los 20 lugares de la primera página (nombre, dirección, teléfono, web, rating, reseñas, Place ID, país, coordenadas).

Navegar con Playwright costaba ~2,9 s por lugar (página de listado + página de detalle); este enfoque cuesta ~0,065 s por lugar de crawl y no necesita instalar Chromium (imagen Docker pequeña, 1 GB de memoria suficiente).

Después, para cada negocio con web, se piden (best-effort) la home y 1 página de contacto típica y se extraen los correos publicados por el propio negocio. Cada petición (y cada salto de redirect) pasa por la política anti-SSRF de src/url_safety.py: solo http/https, DNS resuelto y rechazo de loopback, rangos privados, link-local (169.254.x.x), multicast, reservadas y CGNAT, y TLS verificado.

Qué comprueba emailDominioMx (y qué NO)

MétodoQué compruebaCoste¿Funciona en Apify?
mx (por defecto)El dominio del email tiene registros MX (ese dominio puede recibir correo)~10 msSí
smtpRCPT TO sin enviar mensaje, además del MX~1-6 sNo: la plataforma bloquea el puerto 25 → estado desconocido
ninguna—0—

Importante: el actor no comprueba que el buzón individual exista o sea entregable. Por eso el campo se llama emailDominioMx y el evento email-dominio-mx, no "email verificado". Valores del campo:

  • mx_presente — el dominio tiene registros MX (puede recibir correo).
  • sin_mx — el dominio no tiene registros MX (no puede recibir correo).
  • null / vacío — no se pudo determinar (timeout DNS) o no se pidió verificación.

Con el método smtp se añaden emailSmtpEstado (smtp_aceptado, smtp_rechazado, smtp_temporal, desconocido) y emailMetodoVerificacion = mx+smtp. Las respuestas 4xx de SMTP (450, 452…) son temporales: no se etiquetan como rechazo permanente; solo los 5xx (550, 551, 553, 554…) son smtp_rechazado.

Entrada

  • searchTerms (obligatorio): p. ej. ["clínica dental Madrid", "panadería Sevilla"]. Google Maps devuelve hasta ~20 resultados por búsqueda; para más leads, añade búsquedas por ciudad/barrio (50 búsquedas ≈ 1.000 leads).
  • maxResults (0 = sin límite), country (solo ES), extraerEmail, metodoVerificacion, maxEmailsPorNegocio, maxPaginasWeb, emailConcurrencia, timeoutWebSegundos, usarProxy, proxyGrupo, exportFiles, exportLanguage.

Salida

  • Dataset: un item por lugar.
  • Key-value store: RESULT-sintesis.json (resumen del run), leads-es.csv (RFC-4180) y leads-es.xlsx (cabecera congelada, autofiltro, números reales).

Precio (pay-per-event, precios ACTIVOS)

  • lugar — 0,002 $ por lugar emitido.
  • email-dominio-mx — 0,003 $ por lugar con email cuyo dominio tiene MX.
  • informe — 0,01 $ por run.

Local (sin token)

uv venv .venv --python 3.13
uv pip install --python .venv/bin/python -r requirements.txt
.venv/bin/python -m pytest tests -q # 59 tests, sin red
.venv/bin/python -m src.main --local examples/input.json

Coste medido (run real en plataforma, plan free)

Run 9BA8vn8qnTWFE2z6Z (22-09-2026, proxy datacenter, 1 GB RAM): 5 búsquedas → 99 lugares, 54 con email de dominio con MX, 81,4 s, 0,0226 CU = 0,00539 $.

medidopor 1.000 lugares
Coste total (CU + storage + transferencia)0,00539 $ / 990,0545 $
Coste CU0,0226 CU / 990,228 CU = 0,0457 $
Emails con dominio MX54 (55 % de lugares)~545
Coste por email con MX—0,0001 $

Proxy datacenter incluido en el plan (0 $ de proxy residencial). Detalle completo en ./INFORME-COSTE.md.

Estimación de cobro PPE (aritmética, no ingreso observado): un volumen como el del run de medida (99 lugares, 54 emails, 1 run) serían 99×0,002 + 54×0,003 + 0,01 = 0,37 $. Para 1.000 lugares en 50 runs (≈545 emails con MX): 2,00 + 1,635 + 0,50 = 4,135 $. El coste de producción de esos 1.000 lugares es ~0,055 $.

Roadmap

  1. Más de 20 lugares por búsqueda: rejilla de viewports (el pb de Google admite centro/zoom) para multiplicar resultados por término y bajar el coste por 1.000.
  2. Verificación del buzón individual: integración con un verificador de dirección real (API externa) como campo aparte, sin renombrar el actual.
  3. Filtros de calidad: descartar negocios sin web, o sin teléfono, o con rating bajo.
  4. Enriquecimiento: redes sociales, horarios, "cerrado permanentemente" (Google lo informa en el payload: p[203]).
  5. Verticales: plantillas de búsquedas por sector (clínicas, talleres, hostelería).

Limitaciones

  • Los selectores/estructura del payload de Google cambian sin aviso: el parser está aislado en src/maps_http.py y hay un fixture real en tests/fixtures/ para detectarlo en tests.
  • emailDominioMx valida el dominio, no el buzón: un mx_presente no garantiza que la dirección concreta reciba correo.
  • Queda un TOCTOU mínimo entre la resolución DNS y la conexión (DNS rebinding); cerrarlo del todo exige fijar la IP resuelta en la conexión.
  • La extracción de email es best-effort: muchas pymes no publican correo (usan formulario).
  • Uso responsable: datos públicos de Google Maps; respeta los ToS y el RGPD al usar los leads.