# Google Maps Lead Finder — Bisnis Lokal, Kontak, Email & Rating (`anyoneo/google-maps-lead-finder`) Actor

Ambil data bisnis lokal dari Google Maps: nama, alamat, telepon, email, situs web, rating, jumlah ulasan, kategori, dan koordinat. Untuk pencarian lead B2B, riset pasar, dan pemetaan kompetitor. Ekspor JSON/CSV/Excel atau pakai API.

- **URL**: https://apify.com/anyoneo/google-maps-lead-finder.md
- **Developed by:** [Muhammad Riszky Wibowo](https://apify.com/anyoneo) (community)
- **Categories:** Lead generation, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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 Maps Lead Finder — Bisnis Lokal, Kontak, Email & Rating

Ambil data bisnis lokal dari **Google Maps**: nama, alamat, telepon, **email**, situs web, rating, jumlah ulasan, kategori, dan koordinat. Untuk **pencarian lead**, riset pasar, dan pemetaan kompetitor.

**Harga satu event, semua termasuk.** Tidak ada biaya tambahan untuk telepon, situs, atau email — bandingkan dengan Actor lain yang menagih field kontak sebagai event terpisah.

**Sudah teruji:** 40 tempat dari satu kata kunci (3 halaman), kolom inti terisi 100%. Uji otomatis 19/19 lulus memakai payload nyata. Uji cloud: 20 tempat, email ditemukan untuk 25% baris.

### Hasil nyata (bukan contoh buatan)

Hasil apa adanya dari satu run:

```json
{
  "nama": "Toko Sepatu Putra Cahaya",
  "place_id": "ChIJ1UkakAjuaS4RFqpEIGbhDhI",
  "cid": "0x2e69ee08901a49d5:0x120ee1662044aa16",
  "kategori": "Toko Sepatu",
  "alamat": "Jl. Raya Cilandak KKO No.5 D 14, RT.14/RW.8, Ragunan, Ps. Minggu, Kota Jakarta Selatan, Daerah Khusus Ibukota Jakarta 12560",
  "kota": "Kota Jakarta Selatan, Daerah Khusus Ibukota Jakarta 12560",
  "kode_pos": "12560",
  "rating": 2.6,
  "jumlah_ulasan": 8,
  "telepon": "+628****3440",
  "email": "info@tokosepatu.co.id",
  "situs": "https://tokosepatu.co.id",
  "lintang": -6.3101723,
  "bujur": 106.8139824,
  "url": "https://www.google.com/maps/place/?q=place_id:ChIJ1UkakAjuaS4RFqpEIGbhDhI",
  "diambil_pada": "2026-10-12T09:08:40.778Z"
}
```

### Kolom

| Kolom | Isi | Tingkat terisi (40 tempat) |
|---|---|---|
| `nama` | Nama bisnis | 100% |
| `kategori` | Kategori usaha (mis. "Toko Sepatu") | 100% |
| `alamat` | Alamat lengkap satu baris | 100% |
| `kode_pos` | Kode pos | 100% |
| `lintang` / `bujur` | Koordinat | 100% |
| `place_id` / `cid` | ID Google — **stabil**, untuk mencocokkan data antar-waktu | 100% |
| `url` | Tautan ke halaman tempat | 100% |
| `rating` | Rating rata-rata | 92,5% |
| `jumlah_ulasan` | Jumlah ulasan | 92,5% |
| `telepon` | Telepon (format +62) | 92,5% |
| `situs` | Situs web | 72,5% |
| `kota` | Kota/kabupaten | 80% |
| `email` | Email utama bisnis (**opsional**, lihat di bawah) | ~25% dari seluruh baris |
| `email_semua` | Semua email yang ditemukan | ~25% dari seluruh baris |
| `email_sumber` | Halaman tempat email ditemukan | ~25% dari seluruh baris |

Kolom yang tidak ada di Google Maps bernilai `null` (tidak dikarang). Nomor telepon dinormalkan ke format `+62` agar langsung bisa dipakai untuk WhatsApp.

### Email (opsional)

Aktifkan **"Cari email dari situs web"**. Actor akan mengunjungi situs web setiap bisnis (halaman utama + halaman kontak) dan mengambil alamat emailnya.

- Hasil terukur: **~25% dari seluruh baris** mendapat email — yaitu sekitar **29% dari bisnis yang punya situs web**.
- Yang tidak punya situs web (atau hanya memakai Instagram/WhatsApp) tidak akan mendapat email — itu batas nyata, bukan cacat.
- Alamat penyedia situs (Wix, Squarespace, pelacak) dan `noreply@` otomatis dibuang.
- Waktu jalan bertambah (ada tenggat 25 detik per situs). Pakai `maxEmailSites` untuk membatasi.

### Cara pakai

Isi **queries** dengan pencarian seperti Anda mengetik di Google Maps — sertakan **jenis usaha + lokasi**:

```json
{
  "queries": ["toko sepatu jakarta", "klinik gigi bandung"],
  "maxItems": 200,
  "maxPages": 5,
  "fetchEmails": true,
  "maxEmailSites": 60
}
```

`maxPages` mengatur kedalaman: tiap halaman menambah sekitar **20 tempat**. Pakai 1 untuk uji cepat, 5+ untuk daftar besar.

### Untuk apa

- **Pencarian lead B2B** — kumpulkan kontak bisnis lokal (telepon **dan email**) untuk penawaran
- **Pemetaan kompetitor** — siapa saja yang berjualan di area tertentu, siapa yang paling banyak diulas
- **Riset pasar & lokasi** — sebaran usaha per kota, kepadatan per kategori
- **Pemantauan reputasi** — bandingkan rating dan jumlah ulasan antar waktu (pakai `place_id` sebagai kunci)
- **Verifikasi data** — cocokkan daftar pelanggan/toko dengan data Google Maps

### Catatan teknis

Pengambilan dilakukan dengan membuka halaman pencarian Google Maps lewat peramban sungguhan, lalu membaca respons JSON internal yang dipakai halaman itu sendiri (`/search?tbm=map`). Pendekatan ini jauh lebih tahan perubahan dibanding membaca markup HTML.

Halaman berikutnya diambil dengan menggeser parameter offset pada permintaan yang sama, sehingga puluhan hingga ratusan tempat bisa diambil dari satu kata kunci.

### Harga

Biaya dihitung **per hasil** — Anda hanya membayar baris yang benar-benar tersimpan di dataset. Lihat tab **Pricing** untuk tarif terkini.

### Dukungan

Ada kolom tambahan yang Anda butuhkan (mis. jam buka, foto, ulasan teks)? Kirim pesan lewat tab Issues — perbaikan diutamakan untuk pelanggan berbayar.

# Actor input Schema

## `queries` (type: `array`):

Cari seperti di Google Maps. Semakin spesifik semakin baik — sertakan jenis usaha dan lokasi. Contoh: "toko sepatu jakarta", "klinik gigi bandung", "restoran padang surabaya".

## `maxItems` (type: `integer`):

Total baris maksimum yang diambil. Biaya dihitung per hasil.

## `maxPages` (type: `integer`):

Berapa halaman hasil yang diambil per kata kunci. Tiap halaman menambah sekitar 20 tempat. Gunakan 1 untuk uji cepat, 5+ untuk daftar besar.

## `fetchEmails` (type: `boolean`):

Kunjungi situs web setiap bisnis dan cari alamat emailnya (halaman utama + halaman kontak). Menambah waktu jalan. Mengisi kolom email, email_semua, email_sumber.

## `maxEmailSites` (type: `integer`):

Batas jumlah situs web yang dirayap saat mencari email. Hanya berlaku bila 'Cari email' aktif.

## Actor input object example

```json
{
  "queries": [
    "toko sepatu jakarta"
  ],
  "maxItems": 100,
  "maxPages": 3,
  "fetchEmails": false,
  "maxEmailSites": 60
}
```

# Actor output Schema

## `dataset` (type: `string`):

Daftar bisnis lokal beserta kontak dan rating

# 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 = {
    "queries": [
        "toko sepatu jakarta"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyoneo/google-maps-lead-finder").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 = { "queries": ["toko sepatu jakarta"] }

# Run the Actor and wait for it to finish
run = client.actor("anyoneo/google-maps-lead-finder").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 '{
  "queries": [
    "toko sepatu jakarta"
  ]
}' |
apify call anyoneo/google-maps-lead-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,anyoneo/google-maps-lead-finder"
        }
    }
}
```

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/elZURdbISlalQyAQc/builds/TABjcLkooVqertvmF/openapi.json
