maps-lead-scorer
Searches Google Maps and scrapes the business listing cards shown on the results page to build a lead list. For each place it reads name, category, address, phone, website, rating, review count, and open/closed status, then scores it 0–100 as a sales lead (e.g. bonus for having no website or social-media-only presence, for a phone number, and for review volume/rating). Supports queries like "dental clinic Surabaya", scrolling the result list, opening each place's detail panel to enrich missing website/phone data, filtering by minimum score / minimum reviews / no-website-only, sorting, recomputing scores with custom weights offline, and exporting the filtered list to CSV. Also exposes a tool to fetch and score a single place from a Google Maps URL.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Maps Lead Scorer
Extension Chrome (Manifest V3) untuk pemakaian pribadi. Di halaman hasil pencarian Google Maps, extension ini membaca kartu bisnis yang sedang tampil, memberi skor 0–100 sebagai calon pelanggan, lalu menampilkannya di panel yang bisa difilter, diurutkan, dan diekspor ke CSV.
Tidak terikat niche: cari "klinik kecantikan Bandung", "klinik gigi Surabaya", "bengkel Bekasi", atau apa pun.
Pasang
Buka
chrome://extensionsdi Chrome.Nyalakan Developer mode (kanan atas).
Klik Load unpacked, pilih folder hasil clone repo ini (folder yang berisi
manifest.json).Buka
https://www.google.com/mapsdan cari sesuatu. Panel "Maps Lead Scorer" muncul di kanan.
Setelah mengubah file, klik ikon reload pada kartu extension di chrome://extensions, lalu muat ulang tab Maps.
Related MCP server: Google Maps MCP Server
Cara pakai
Cari kategori bisnis + kota di Google Maps.
Panel otomatis memindai kartu yang tampil. Scroll daftar hasil untuk memuat kartu baru; kartu baru ikut dipindai. Tombol Scan hasil memindai ulang secara manual.
Kartu di daftar hasil biasanya tidak menampilkan website dan telepon. Lead seperti itu ditandai data belum lengkap dan kolomnya berisi
?. Klik baris di panel (atau kartu di Maps) untuk membuka detail tempat. Website, telepon, dan alamat lengkap terbaca dari panel detail, lalu skor dihitung ulang.Filter: skor minimum, ulasan minimum, "Tanpa website saja", cari nama/kategori. Klik judul kolom untuk mengurutkan.
Export CSV mengekspor daftar yang sedang terfilter (UTF-8 dengan BOM, langsung terbuka di Excel).
Daftar terkumpul lintas scroll dan pencarian, disimpan di
chrome.storage.local. Hapus daftar mengosongkannya.
Skor
Sinyal | Poin default |
Belum punya website | +40 |
Website hanya media sosial / link-in-bio | +25 |
Ada nomor telepon | +15 |
Ulasan ≥ 30 | +20 |
Ulasan 10–29 | +10 |
Rating 3,5–4,4 | +10 |
Rating ≥ 4,5 | +5 |
Tutup permanen atau sementara | skor dipaksa 0 |
Maksimal 100. Label: ≥70 Potensial, 40–69 Lumayan, <40 Rendah.
Field yang tidak ditampilkan halaman dicatat sebagai "belum diketahui", bukan "tidak ada", dan bernilai 0 poin. "Belum punya website" baru dihitung setelah panel detail tempat itu dibuka dan memang tidak ada tautan website.
Bobot dan daftar host media sosial bisa diubah di halaman pengaturan: chrome://extensions → Maps Lead Scorer → Details → Extension options.
Pakai sebagai MCP
Repo ini juga server MCP, jadi agen AI mana pun yang mendukung MCP bisa mencari dan menilai lead sendiri. Server membuka browser sungguhan lewat Playwright, mencari di Google Maps, membuka tiap tempat untuk membaca website dan telepon, lalu memberi skor memakai modul yang sama dengan extension (src/selectors.js, src/extract.js, src/score.js, src/csv.js).
Dua transport: stdio (default, server dijalankan oleh klien) dan Streamable HTTP (--http, untuk server jarak jauh atau VPS).
Baca bagian "Batasan" di bawah dulu. Mode ini adalah pengumpulan data otomatis, dan ketentuan Google membatasinya.
Pasang: stdio
Perlu Node.js 20+. Tambahkan ke konfigurasi mcpServers klien MCP Anda:
{
"mcpServers": {
"maps-lead-scorer": {
"command": "npx",
"args": ["-y", "github:karuqii9704/maps-lead-scorer"]
}
}
}Dari hasil clone: npm install, lalu pakai "command": "node", "args": ["/path/ke/maps-lead-scorer/mcp/server.js"].
Browser: server memakai Google Chrome yang terpasang. Kalau tidak ada (misalnya di Linux server), server memakai Chromium bawaan Playwright. Unduh sekali:
npx playwright install --with-deps chromiumPasang: Streamable HTTP
MLS_AUTH_TOKEN=ganti-dengan-token-acak-minimal-16-karakter \
MLS_HOST=0.0.0.0 MLS_PORT=3333 \
node mcp/server.js --httpEndpoint:
http://HOST:3333/mcp(hanyaPOST, tanpa sesi).GET /healthzuntuk cek hidup.Klien mengirim header
Authorization: Bearer <token>. Contoh konfigurasi klien:
{
"mcpServers": {
"maps-lead-scorer": {
"url": "https://host-anda.example/mcp",
"headers": { "Authorization": "Bearer ganti-dengan-token-acak-minimal-16-karakter" }
}
}
}Default bind
127.0.0.1:3333tanpa token. JikaMLS_HOSTbukan loopback,MLS_AUTH_TOKENwajib (minimal 16 karakter); tanpa itu server menolak start. Token dibandingkan dengan waktu konstan.Server tidak membuat TLS. Letakkan di belakang reverse proxy HTTPS (nginx, Caddy) atau jaringan privat; jangan buka token lewat HTTP polos di internet.
Di mode HTTP,
export_csvhanya boleh menulis di dalamMLS_OUTPUT_DIR(atau folder kerja server).
Pasang: VPS Linux
Node.js 20+ dan dependency sistem browser:
git clone https://github.com/karuqii9704/maps-lead-scorer.git /opt/maps-lead-scorer cd /opt/maps-lead-scorer npm ci --omit=dev npx playwright install --with-deps chromium sudo apt-get install -y xvfb xauthJalankan di bawah
xvfb-run -a. Chrome headless mendapat tampilan Maps yang lebih ringkas tanpa jumlah ulasan (diamati 2026-11-13), sehingga skor kehilangan poin ulasan. Dengan layar virtual, server mendeteksiDISPLAYdan memakai mode berlayar (headful) otomatis, tanpa memalsukan user agent.xvfb-run -a -s "-screen 0 1280x960x24" node mcp/server.js --httpContoh unit systemd
/etc/systemd/system/maps-lead-scorer.service(buat usermls, simpan token di/etc/maps-lead-scorer.envdengan izin600, isiMLS_AUTH_TOKEN=...):[Unit] Description=Maps Lead Scorer MCP After=network.target [Service] User=mls WorkingDirectory=/opt/maps-lead-scorer EnvironmentFile=/etc/maps-lead-scorer.env Environment=MLS_HOST=127.0.0.1 MLS_PORT=3333 MLS_OUTPUT_DIR=/var/lib/maps-lead-scorer StateDirectory=maps-lead-scorer ExecStart=/usr/bin/xvfb-run -a -s "-screen 0 1280x960x24" /usr/bin/node mcp/server.js --http Restart=on-failure [Install] WantedBy=multi-user.targetContoh ini bind ke loopback; arahkan reverse proxy HTTPS ke
127.0.0.1:3333. Untuk bind ke antarmuka lain, ubahMLS_HOST(token tetap wajib).
Pasang: Docker
Dockerfile memakai image resmi Playwright (versi di-pin sama dengan playwright di package.json), menambah xvfb, dan menjalankan mode HTTP sebagai user non-root. Tidak ada rahasia di dalam image; token diberikan saat docker run.
docker build -t maps-lead-scorer .
docker run --rm -e MLS_AUTH_TOKEN=ganti-dengan-token-acak-minimal-16-karakter \
-p 127.0.0.1:3333:3333 -v mls-data:/data maps-lead-scorerJika versi playwright di package.json diubah, ubah juga tag image di baris FROM.
Tools
Tool | Fungsi |
|
|
|
|
|
|
|
|
Nama bobot untuk weights sama dengan tabel skor di atas: noWebsite, socialOnly, phone, reviewsHigh, reviewsMid, ratingMid, ratingHigh.
Variabel lingkungan
Variabel | Default | Arti |
| kosong | Bearer token untuk mode HTTP. Wajib (min. 16 karakter) jika |
|
| Alamat bind mode HTTP. |
|
| Port mode HTTP. |
| otomatis |
|
|
| Bahasa antarmuka Maps ( |
| folder kerja server | Basis untuk path relatif di |
Perilaku dan batas
Jeda acak 1,5–3 detik antar scroll dan antar pembukaan tempat. Tidak bisa dikecilkan. Satu tempat memakan sekitar 5–8 detik, jadi 20 hasil dengan detail butuh sekitar 2–3 menit. Atur timeout klien sesuai, atau kecilkan
maxResults. Server mengirim notifikasi progress jika klien meminta.Maksimal 60 hasil per panggilan. Panggilan paralel diantrekan satu per satu.
Satu browser dipakai ulang selama server hidup, lalu ditutup saat server berhenti.
Di mode berlayar, jendela Chrome terbuka selama pencarian. Biarkan terbuka.
Kalau Google menampilkan CAPTCHA atau halaman "lalu lintas tidak biasa", server berhenti dan mengembalikan error. Server tidak menyelesaikan atau melewati CAPTCHA, tidak memakai plugin stealth, proxy, atau pemalsuan fingerprint. Tunggu, kurangi volume, atau cari manual di browser Anda. IP datacenter (VPS) lebih sering diminta CAPTCHA daripada IP rumahan.
Halaman persetujuan Google (jika muncul) dijawab dengan menolak yang tidak esensial.
Hanya data listing bisnis. Nama pengulas dan isi ulasan tidak dibaca.
Jika berjalan headless, jumlah ulasan hilang. Skor tetap dihitung tanpa poin ulasan, dan hasil memuat peringatan.
Batasan
Markup Google Maps bisa berubah kapan saja. Semua selector ada di
src/selectors.js; kalau panel berhenti membaca data, perbaiki file itu. Selector diverifikasi pada Maps berbahasa Indonesia (hl=id) tanggal 2026-11-11. Pola teks mendukung Indonesia dan Inggris.Data hanya apa yang ditampilkan halaman. Extension membaca halaman Maps di browser Anda; ia tidak mengirim request ke Google atau server mana pun, tidak membuka halaman di latar belakang, dan tidak mengunjungi website bisnis. Server MCP berbeda: ia membuka browser sendiri dan memuat halaman Maps atas nama Anda. Keduanya hanya menyimpan data listing bisnis (nama, kategori, rating, jumlah ulasan, telepon, alamat, website). Nama pengulas dan isi ulasan tidak diambil, dan website bisnis tidak dikunjungi.
Ketentuan Google membatasi pengumpulan data otomatis dari Maps. Extension dimaksudkan untuk prospecting manual dan pribadi dengan kecepatan manusia: Anda sendiri yang mencari, scroll, dan membuka tempat. Mode MCP adalah pengumpulan otomatis, jadi melanggar batasan itu secara langsung; risikonya ada pada Anda. Jaga volume tetap kecil, jangan dijadwalkan atau dijalankan massal, dan jangan menjual ulang data. Google bisa menampilkan CAPTCHA atau memblokir IP Anda kapan saja, dan server ini tidak akan menghindarinya.
Pembacaan website dan telepon langsung dari kartu daftar hasil belum terverifikasi di Maps live, karena layout yang diperiksa tidak menampilkannya di kartu. Jalur yang terverifikasi adalah lewat panel detail.
Tempat yang panel detailnya tidak punya alamat, telepon, atau website sama sekali akan tetap berstatus "data belum lengkap".
Hanya berjalan di
https://www.google.com/maps/*. Kalau Maps Anda terbuka di domain lain (misalnyagoogle.co.id), tambahkan polanya kematchesdimanifest.json.Skor adalah heuristik awal, bukan penilaian kualitas bisnis.
Pengembangan
Extension tidak punya build step dan tidak butuh dependency. Dependency (@modelcontextprotocol/sdk, playwright, zod) hanya untuk server MCP.
npm install
npm testTest mencakup modul murni dan smoke test MCP offline (tanpa browser, tanpa jaringan). search_leads dan get_place hanya bisa dicoba langsung ke Maps.
src/selectors.js— selector dan pola teks Maps.src/extract.js— kartu / panel detail → data lead (murni, diuji).src/score.js— lead + bobot → skor dan alasan (murni, diuji).src/csv.js— daftar lead → CSV (murni, diuji).src/content.js,src/panel.css— panel di halaman Maps.options.html,src/options.js— pengaturan bobot dan host media sosial.mcp/server.js— entry server MCP (stdio atau--http).mcp/tools.js— definisi tools.mcp/http.js— transport Streamable HTTP dan auth.mcp/browser.js— Playwright: buka Maps, scroll, suntiksrc/selectors.js+src/extract.jske halaman.test/— fixture HTML, DOM mini untuk Node, dan test.
Lisensi
MIT. Lihat LICENSE.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Local business leads from Google Maps in any country: phone, website, email and socials, website audit, lead score and AI-written outreach, with a businesses-without-a-website filter. Runs on Apify, $0.03 per lead.
B2B lead generation from Google Maps: search, dedupe and email-enrich businesses. Needs API key.
Find local businesses, enrich them with emails and socials, and run lead pipelines from your AI.
Turn Maps queries into lead lists: businesses, phones, websites, and reviews with async job control.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to search and scrape Google Maps places data (name, rating, address, etc.) directly without an API key.1-
- AlicenseAqualityCmaintenanceProvides AI agents with structured search results, place details, ratings, and contact info from Google Maps without requiring any API keys.22MIT
- AlicenseNot gradedqualityBmaintenanceEnables an AI agent to scout local businesses, instantly re-rank cached leads under new scoring weights, explain each score variable by variable, run one-off website audits, and generate ready-to-send outreach pitches or WhatsApp openers from natural language. It exposes the same discovery/scoring engine as the CLI, so results can be listed, scored and opened in a dashboard without leaving the chat.1MIT
- FlicenseNot gradedqualityBmaintenanceEnables turning Google Maps queries into structured lead lists, extracting business names, phone numbers, websites, and reviews with asynchronous job control.-