Google Maps scraper API en MCP

Een Google Maps scraper API voert een begrensde bedrijfszoekopdracht uit vanuit uw app of een agent. Eén werkruimtesleutel met beperkt bereik, een expliciet taakbudget en een stabiele idempotentiesleutel dekken elke nieuwe poging. De resultaten zijn JSON en een ontbrekend veld blijft leeg.

Voor je start · Live onderzoek vereist een ingestelde gegevensbron. Voorbeelden zijn gemarkeerd. Betaalde abonnementen zijn nog niet beschikbaar.

Een beperkte taak maken

Verbind een sleutel met beperkte rechten met REST of een HTTP MCP-client. Raam taken, stel budgetten in en haal gestructureerde resultaten op.

curl -X POST https://mapsscraper.dev/api/v1/jobs \
  -H "Authorization: Bearer $MAPSSCRAPER_API_KEY" \
  -H "Idempotency-Key: dentists-austin-tx-001" \
  -H "X-Max-Units: 1" \
  -H "Content-Type: application/json" \
  -d '{"kind":"search","query":"Dentists in Austin, TX","limit":20,"region":"us"}'

HTTP/1.1 202 Accepted
{"id":"6f1c2b3a-0000-4000-8000-000000000000","status":"queued","reserved":1}

Probeer dezelfde bewerking opnieuw met dezelfde idempotentiesleutel. Een gewijzigd verzoek met die sleutel geeft 409. Taken doorlopen in wachtrij, actief, voltooid, gedeeltelijk, mislukt, geannuleerd of onzeker. Een onzeker verzoek aan de gegevensbron vereist afstemming in plaats van een automatische betaalde herhaling.

Wat is een Google Maps scraper API?

Een Google Maps scraper API accepteert een categorie en een gebied, levert openbare vermeldingen als JSON en toont het maximale taakbudget vóór het verzoek. Elke taak gebruikt een beperkte sleutel en een idempotentiesleutel. Reviews zijn een apart verzoek.

Lees de resultaten

Voltooide en gedeeltelijke jobs bewaren hun resultaten gedurende de bewaartermijn van uw werkruimte. Lees ze pagina voor pagina met offset en limit; het lezen van opgeslagen resultaten start nooit nieuw onderzoek.

Voorbeeldrespons, ingekort. De waarden zijn ter illustratie en geen echte bedrijfsgegevens.

{
  "items": [
    {
      "business_id": "sample-business-id",
      "name": "Sample Dental Studio",
      "full_address": "100 Example Ave, Austin, TX 78701",
      "phone_number": "+1 512-555-0100",
      "website": "https://dental.example",
      "type": "Dentist",
      "rating": 4.8,
      "review_count": 214,
      "latitude": 30.2672,
      "longitude": -97.7431,
      "_source": {
        "provider": "live_maps",
        "fetched_at": "2026-11-01T12:00:00Z",
        "website_status": "provided_unverified"
      }
    }
  ],
  "count": 1,
  "offset": 0,
  "next_offset": null,
  "provider": "live_maps",
  "coverage": "bounded_sample",
  "fetched_at": "2026-11-01T12:00:00Z"
}

Google Maps reviews-API

Vraag per taak reviews op voor één bedrijfs-ID, tot 100 per pagina, gesorteerd op relevantie, nieuwste, hoogste of laagste beoordeling. Elke review bevat de tekst, beoordeling, datum, auteur en eventuele reactie van de eigenaar, indien beschikbaar. Voor een volgende pagina zijn een eigen taak en budget nodig.

Reviews-scraper
POST /api/v1/jobs
Idempotency-Key: reviews-sample-business-001
X-Max-Units: 1

{"kind":"reviews","business_id":"sample-business-id","limit":50,"review_options":{"sort_by":"newest"}}

Python-voorbeeld

Vraag met de Google Maps scraper API een raming voor een zoekopdracht op, maak de job aan, wacht op een eindstatus en lees de resultaten met de requests-bibliotheek.

import os
import time
import uuid

import requests

API = "https://mapsscraper.dev/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['MAPSSCRAPER_API_KEY']}"}
task = {"kind": "search", "query": "Dentists in Austin, TX", "limit": 20, "region": "us"}

# An estimate reserves nothing.
units = requests.post(f"{API}/estimate", json=task, headers=HEADERS, timeout=30).json()["units"]

# Keep the key: a retry of the same task must send it again.
key = str(uuid.uuid4())
job = requests.post(
    f"{API}/jobs",
    json=task,
    headers={**HEADERS, "Idempotency-Key": key, "X-Max-Units": str(units)},
    timeout=30,
)
job.raise_for_status()
job_id = job.json()["id"]

while True:
    status = requests.get(f"{API}/jobs/{job_id}", headers=HEADERS, timeout=30).json()["status"]
    if status not in ("queued", "running"):
        break
    time.sleep(5)

if status in ("completed", "partial"):
    page = requests.get(
        f"{API}/jobs/{job_id}/results",
        params={"offset": 0, "limit": 100},
        headers=HEADERS,
        timeout=30,
    ).json()
    for business in page["items"]:  # follow page["next_offset"] for more
        print(business.get("name"), business.get("phone_number"), business.get("website"))

Vragen over de Google Maps scraper API

Documentatie
Is dit de Google Places API?

Nee. MapsScraper.dev is een onafhankelijke dienst en is niet gelieerd aan Google. De resultaten komen van een externe bron van bedrijfsgegevens en gebruiken ons eigen JSON-formaat.

Hoe worden verzoeken in rekening gebracht?

De meeste taken gebruiken één eenheid. Contactverrijking bij een zoekopdracht of rangschikkingsmomentopname reserveert één extra eenheid per gevraagd record en rekent alleen geleverde records af. Bedrijfsgegevens gebruiken één eenheid, of twee met contacten; verrijking gebruikt er twee. Stel X-Max-Units minstens in op de raming.

Zijn e-mailadressen en telefoonnummers gegarandeerd?

Nee. Dekking hangt af van bron en bedrijf. Optionele verrijking kan openbare contactgegevens opleveren. Controleer ontbrekende of verouderde informatie vóór gebruik.

Bronnen

Uw volgende lijst begint met een plek.

Probeer het proces met gemarkeerde voorbeelden en verbind uw werkruimte voor live onderzoek.

Voorbeeld bekijken