# Google Places Leads — Directorio de Negocios de Cúcuta (`mndezdark/cucuta-business-directory`) Actor

Extrae leads B2B verificados de Cúcuta con Google Places + OpenStreetMap. Teléfonos reales, emails, ratings y leadScore. Ideal para agencias de marketing y ventas.

- **URL**: https://apify.com/mndezdark/cucuta-business-directory.md
- **Developed by:** [Joel Méndez](https://apify.com/mndezdark) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 resultado extraídos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🏢 Google Places Leads — Directorio de Negocios de Cúcuta

Extrae **leads B2B verificados** de cualquier ciudad de Colombia combinando **OpenStreetMap + Google Places**. Obtén teléfonos reales, emails validados, ratings, horarios y un sistema de puntuación automática que prioriza los mejores prospectos.

> **Ideal para**: agencias de marketing digital, equipos de ventas B2B, consultores de expansión comercial y analistas de mercado.

***

### ✨ ¿Por qué este Actor?

La mayoría de scrapers de directorios devuelven datos incompletos: nombres sin teléfono, direcciones sin coordenadas, listados desactualizados. **Este Actor resuelve ese problema con verificación cruzada multi-fuente**:

- **OpenStreetMap (Overpass)** → Descubrimiento masivo de negocios por ubicación y categoría
- **Nominatim Reverse** → Dirección completa (calle, barrio, ciudad) desde coordenadas
- **Google Places API** → Verificación oficial con teléfono, sitio web, rating y reseñas reales
- **Crawling de sitios web** → Extracción de emails y redes sociales desde la web del negocio
- **Verificación MX** → Confirmación de que los emails pueden recibir correos
- **LeadScore (0-100)** → Puntuación automática que clasifica cada negocio por calidad

***

### 📊 Resultados reales

Ejecución de prueba en **Cúcuta, Colombia (restaurantes, 50 negocios)**:

| Métrica | Resultado |
| :--- | :--- |
| Negocios extraídos de OpenStreetMap | **436** |
| Verificados en Google Places | **33 / 50 (66%)** |
| Direcciones completas | **50 / 50 (100%)** |
| Teléfonos reales | **26 / 50 (52%)** |
| Emails validados con MX | **2 / 50** |
| Leads calientes (score ≥ 75) | **3** |
| Leads tibios (score 55-74) | **20** |

***

### 🎯 Casos de uso

#### 1. Agencia de marketing digital buscando clientes locales

Ejecuta el Actor con `category: "restaurant"` en tu ciudad y obtén una lista de 500 restaurantes con teléfono, rating y web. Prioriza los que tienen **rating bajo (< 4.0)** pero **muchas reseñas (> 100)** — son negocios activos que necesitan mejorar su reputación online.

#### 2. Distribuidor farmacéutico expandiendo territorio

Ejecuta con `category: "pharmacy"` en varias ciudades y compara el número de farmacias por zona. Usa los datos de dirección para planificar rutas de visita comercial.

#### 3. Consultor de expansión inmobiliaria

Ejecuta con `category: "supermarket"` y `category: "bank"` para identificar zonas con alta densidad comercial. Cruza los datos con precios de arriendo locales para detectar oportunidades.

#### 4. Analista de mercado por sector

Ejecuta múltiples categorías (`dentist`, `gym`, `cafe`) en la misma ciudad y genera un mapa de competencia por barrio.

***

### 📥 Input

| Campo | Tipo | Descripción | Default |
| :--- | :--- | :--- | :--- |
| `searchMode` | string | `"city"` (por ciudad) o `"coords"` (por coordenadas) | `"city"` |
| `city` | string | Nombre de la ciudad (formato "Ciudad, País") | `"Cúcuta, Colombia"` |
| `category` | string | Tipo de negocio (48 categorías disponibles) | `"restaurant"` |
| `maxResults` | integer | Número máximo de resultados a extraer | `200` |
| `googleApiKey` | string | **Tu API key de Google Places** (obligatoria para enriquecimiento con Google) | — |
| `enrichAddress` | boolean | Completar direcciones con Nominatim | `true` |
| `enrichGooglePlaces` | boolean | Verificar en Google Places | `true` |
| `enrichWebsite` | boolean | Visitar sitios web para extraer emails | `true` |
| `onlyWithContact` | boolean | Filtrar solo negocios con teléfono/email/web | `false` |

#### Categorías disponibles (48)

**Comida**: `restaurant`, `cafe`, `bar`, `fast_food`, `pub`\
**Salud**: `pharmacy`, `hospital`, `clinic`, `dentist`, `doctors`, `veterinary`\
**Finanzas**: `bank`, `atm`, `insurance`, `accountant`, `notary`\
**Comercio**: `supermarket`, `convenience`, `bakery`, `butcher`, `optician`\
**Servicios**: `hairdresser`, `beauty`, `car_repair`, `car_wash`, `fuel`, `laundry`\
**Profesionales**: `lawyer`, `estate_agent`, `travel_agency`, `photographer`, `it_office`\
**Oficios**: `electrician`, `plumber`, `carpenter`, `painter`, `roofer`, `locksmith`

***

### 📤 Output — Ejemplo real

````json
{
  "name": "Restaurante El Lago",
  "category": "restaurant",
  "phone": "+57 350 6321235",
  "phoneMobile": true,
  "email": "contacto@ellago.com.co",
  "emailMx": true,
  "website": "https://ellago.com.co",
  "address": "Urbanización La Primera, Calle 8N 18e-35, Cúcuta, Norte de Santander",
  "latitude": 7.8939,
  "longitude": -72.5078,
  "rating": 4.3,
  "userRatingCount": 778,
  "googleBusinessStatus": "Operativo",
  "openingHoursGoogle": ["lunes: 11:00–22:00", "..."],
  "leadScore": 88,
  "oportunidad": "🔥 Caliente - Contactar ya",
  "dataQuality": "completo",
  "recommendedAction": "🔥 Contactar HOY: lead caliente con datos completos",
  "facebook": "https://facebook.com/restauranteellago",
  "scrapedAt": "2026-09-18T19:25:00.000Z"
}



# Actor input Schema

## `searchMode` (type: `string`):

Elige cómo quieres buscar los negocios.

- **Por ciudad**: Introduce el nombre de la ciudad.
- **Por coordenadas**: Introduce latitud, longitud y radio.
## `city` (type: `string`):

Nombre de la ciudad (ej. 'Cúcuta, Colombia'). Solo para modo 'Por ciudad'.
## `latitude` (type: `string`):

Latitud del centro de búsqueda. Solo para modo 'Por coordenadas'.
## `longitude` (type: `string`):

Longitud del centro de búsqueda. Solo para modo 'Por coordenadas'.
## `radius` (type: `integer`):

Radio en metros. Máximo 50,000. Solo para modo 'Por coordenadas'.
## `category` (type: `string`):

Tipo de negocio a extraer.
## `maxResults` (type: `integer`):

Número máximo de negocios a extraer.
## `onlyWithContact` (type: `boolean`):

Si se activa, solo se incluirán negocios con teléfono, web o email.
## `includeRawTags` (type: `boolean`):

Incluye un campo `rawTags` con todas las etiquetas de OSM.
## `googleApiKey` (type: `string`):

Clave de API de Google Places (empieza con AIza...). Si se deja vacío, se usará la variable de entorno GOOGLE_PLACES_API_KEY.
## `enrichAddress` (type: `boolean`):

Completa la dirección (calle, barrio, ciudad) usando Nominatim Reverse. Añade ~1 segundo por negocio.
## `enrichGooglePlaces` (type: `boolean`):

Busca cada negocio en Google Places para obtener teléfono, web, rating y reseñas. Añade ~0.2 segundos por negocio.
## `enrichWebsite` (type: `boolean`):

Visita el sitio web de cada negocio para extraer email y redes sociales.

## Actor input object example

```json
{
  "searchMode": "city",
  "city": "Cúcuta, Colombia",
  "latitude": "7.8939",
  "longitude": "-72.5078",
  "radius": 5000,
  "category": "restaurant",
  "maxResults": 200,
  "onlyWithContact": false,
  "includeRawTags": false,
  "enrichAddress": true,
  "enrichGooglePlaces": true,
  "enrichWebsite": true
}
````

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("mndezdark/cucuta-business-directory").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("mndezdark/cucuta-business-directory").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call mndezdark/cucuta-business-directory --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mndezdark/cucuta-business-directory"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Rw5NmfY0Xzto4Wb9C/builds/48L3z3LXKTwBYVkaB/openapi.json
