Daten aus Google Maps mit JavaScript extrahieren: Vollständiger Leitfaden
Google Maps enthält über 5 Millionen Geschäftseinträge. Jeder Eintrag = Adresse, Telefon, Bewertungen, Öffnungszeiten, Fotos, Webseite. Es ist eine Goldmine für die Akquise, Marktforschung und Wettbewerbsanalyse.
Aber wie extrahiert man diese Daten in großem Maßstab? Es gibt drei Ansätze: die offizielle Google Maps API, benutzerdefiniertes Web Scraping mit JavaScript oder ein dediziertes Tool. Dieser Artikel behandelt alle drei — mit ihren tatsächlichen Kosten, Grenzen und wann man welche verwenden sollte.
Warum Daten aus Google Maps extrahieren?
Bevor Sie in die Technik einsteigen, klären Sie Ihren Bedarf. Die Anwendungsfälle sind unterschiedlich.
Kommerzielle Akquise
Eine Reinigungsfirma möchte 500 Restaurants in einem Umkreis von 10 km finden. Sie exportiert: Name, Adresse, Telefon, E-Mail. Sie macht gezielte Kaltakquise.
Bedarf: Basisdaten (Name, Kontakt), Schnelligkeit, durchschnittliches Volumen.
Wettbewerbsanalyse
Ein Restaurantbesitzer analysiert 50 konkurrierende Restaurants: Google-Bewertungen, Anzahl der Bewertungen, Öffnungszeiten, Preise (über die Webseite), Fotos, verwendete Technologien (verwenden sie Uber Eats? Deliveroo? Ihre eigene Webseite?).
Bedarf: Angereicherte Daten (Bewertungen, Tech-Stack), Kontext, niedriges bis mittleres Volumen.
Marktforschung
Ein Franchisegeber analysiert über 1.000 Friseure in Frankreich, um unterversorgte Gebiete zu identifizieren. Er extrahiert: Standort, Google-Bewertung, Anzahl der Bewertungen, Öffnungszeiten, ob der Eintrag beansprucht ist oder nicht.
Bedarf: Strukturierte Daten, erweiterte Filterung, hohes Volumen, monatliche Aktualisierung.
Erkennung von qualifizierten Leads
Eine SEO-Agentur sucht nach Restaurants mit einer Bewertung von < 3 Sternen (unzufriedene potenzielle Kunden). Sie exportiert diejenigen mit über 50 Bewertungen (signifikante Größe) und einer Webseite ohne Google Analytics.
Bedarf: Google-Bewertungen (Text + Bewertung + Datum), Technologieerkennung, komplexe Filter, mittleres Volumen.
Jeder Anwendungsfall erfordert einen anderen Ansatz. Lassen Sie uns die Optionen ansehen.
Option 1: Die offizielle Google Maps JavaScript API
Google bietet eine kostenlose JavaScript-API (mit Quoten). Sie funktioniert im Browser oder in Node.js auf der Serverseite.
Grundfunktionen
Die Google Maps JavaScript API ermöglicht drei Hauptfunktionen:
- Geocoding: Eine Adresse in GPS-Koordinaten umwandeln
- Places API: Orte (Restaurants, Klempner usw.) in der Nähe einer Position suchen
- Place Details: Detaillierte Informationen zu einem Ort abrufen (Bewertungen, Öffnungszeiten, Fotos, URL usw.)
Schritt 1: API-Schlüssel besorgen
- Gehen Sie zur Google Cloud Console
- Erstellen Sie ein Projekt
- Aktivieren Sie diese APIs: - Maps JavaScript API - Places API - Geocoding API
- Erstellen Sie einen API-Schlüssel (Typ: Browser- oder Server-Schlüssel je nach Verwendung)
- Konfigurieren Sie die Einschränkungen (erlaubte Domains, Quoten)
Wichtig: Google berechnet über die kostenlosen Quoten hinaus. Standardmäßig: 25.000 Anfragen/Tag kostenlos für Places, danach €0,017 pro Anfrage.
Schritt 2: Geocoding implementieren
Eine Adresse in Breiten- und Längengrad umwandeln.
const geocoder = new google.maps.Geocoder();
geocoder.geocode(
{ address: '75 Rue de Rivoli, Paris' },
(results, status) => {
if (status === 'OK') {
const lat = results[0].geometry.location.lat();
const lng = results[0].geometry.location.lng();
console.log(`Koordinaten: ${lat}, ${lng}`);
} else {
console.error(`Fehler: ${status}`);
}
}
);
Schritt 3: Nahegelegene Orte suchen
Alle Restaurants in einem Umkreis von 5 km um Paris finden.
const map = new google.maps.Map(document.getElementById('map'), {
center: { lat: 48.8566, lng: 2.3522 }, // Paris
zoom: 15
});
const service = new google.maps.places.PlacesService(map);
const request = {
location: new google.maps.LatLng(48.8566, 2.3522),
radius: 5000, // 5 km
type: 'restaurant',
keyword: 'pizza' // Optional: nach Schlüsselwort filtern
};
service.nearbySearch(request, (results, status) => {
if (status === google.maps.places.PlacesServiceStatus.OK) {
results.forEach(place => {
console.log(`${place.name} - ${place.vicinity}`);
});
}
});
Wichtige Einschränkung: nearbySearch() gibt maximal 60 Ergebnisse pro Anfrage zurück, mit Paginierung. Um 500 Restaurants zu erhalten, müssen Sie 9 Anfragen stellen.
Schritt 4: Vollständige Details abrufen
Jeder Ort, der von nearbySearch() zurückgegeben wird, hat eine place_id. Verwenden Sie diese, um die vollständigen Details zu erhalten.
const request = {
placeId: 'ChIJIQBpAG2ahYAR_6128GltTXQ', // Beispiel: Eiffelturm
fields: [
'name',
'formatted_address',
'formatted_phone_number',
'website',
'opening_hours',
'reviews',
'rating',
'user_ratings_total',
'photos'
]
};
service.getDetails(request, (place, status) => {
if (status === google.maps.places.PlacesServiceStatus.OK) {
console.log(`Name: ${place.name}`);
console.log(`Adresse: ${place.formatted_address}`);
console.log(`Telefon: ${place.formatted_phone_number}`);
console.log(`Webseite: ${place.website}`);
console.log(`Bewertung: ${place.rating} (${place.user_ratings_total} Bewertungen)`);
console.log(`Öffnungszeiten:`, place.opening_hours.weekday_text);
// Google-Bewertungen
place.reviews.forEach(review => {
console.log(`${review.author_name} : ${review.rating}/5 - "${review.text}"`);
});
}
});
Tatsächliche Kosten der Google Maps API
| Operation | Kostenlose Quote | Preis darüber hinaus |
|---|---|---|
| Geocoding | 25.000/Tag | €0,005 pro Anfrage |
| Nearby Search | 25.000/Tag | €0,032 pro Anfrage |
| Place Details | 25.000/Tag | €0,017 pro Anfrage |
| Textsuche | 25.000/Tag | €0,032 pro Anfrage |
Reales Beispiel: 1.000 Restaurants mit vollständigen Details extrahieren.
- 1.000 Nearby Search = 17 Anfragen (max. 60 Ergebnisse/Anfrage) = €0,54
- 1.000 Place Details = €17
Gesamt: ~€17,50 für 1.000 Restaurants.
Das scheint wenig zu sein, aber: - Sie müssen es jeden Monat für die Aktualisierungen wiederholen. - Sie sind auf 60 Ergebnisse pro Anfrage beschränkt (schwierig zu paginieren). - Die zurückgegebenen Google-Bewertungen sind begrenzt (max. 5 pro Ort). - Sie erhalten keine erkannten Technologien (WordPress, Shopify usw.).
Einschränkungen der Google Maps JavaScript API
| Einschränkung | Auswirkung |
|---|---|
| Maximal 60 Ergebnisse pro Anfrage | Komplexe manuelle Paginierung |
| Maximal 5 Bewertungen pro Ort | Keine vollständige Analyse der Bewertungen |
| Kein Filtern nach Google-Bewertung | Sie erhalten alle Ergebnisse |
| Kein Filtern nach Anzahl der Bewertungen | Kein Targeting auf "reife" Einträge |
| Keine Technologieerkennung | Sie wissen nicht, ob die Webseite WordPress, Shopify usw. verwendet. |
| Keine SIRET-Daten (Frankreich) | Keine rechtliche/finanzielle Anreicherung |
| Begrenzte Quoten | Kosten, die schnell bei großem Umfang steigen |
Option 2: Web Scraping mit Puppeteer
Wenn Sie die Einschränkungen der offiziellen API umgehen möchten, können Sie direkt die Google Maps-Seite mit Puppeteer scrapen (eine Node.js-Bibliothek, die einen Chrome-Browser automatisiert).
Warum Puppeteer?
Puppeteer startet einen automatisierten Chrome-Browser, geht zu Google Maps, simuliert Klicks/Scrolls und extrahiert das HTML. So können Sie mehr als 60 Ergebnisse, vollständige Bewertungen, Fotos usw. abrufen.
Installation
npm install puppeteer
Beispiel: Restaurants in Paris scrapen
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Gehe zu Google Maps
await page.goto('https://www.google.com/maps/search/restaurants+paris', {
waitUntil: 'networkidle2'
});
// Warte auf das Laden der Ergebnisse
await page.waitForSelector('[role="listitem"]');
// Scrolle, um mehr Ergebnisse zu laden
const resultsContainer = await page.$('[role="main"]');
for (let i = 0; i < 5; i++) {
await resultsContainer.evaluate(el => {
el.scrollTop = el.scrollHeight;
});
await page.waitForTimeout(1000); // Warte auf das Laden
}
// Daten extrahieren
const restaurants = await page.evaluate(() => {
const items = document.querySelectorAll('[role="listitem"]');
return Array.from(items).map(item => {
const nameEl = item.querySelector('[role="heading"]');
const ratingEl = item.querySelector('[aria-label*="Stern"]');
const addressEl = item.querySelector('[data-item-id*="address"]');
return {
name: nameEl ? nameEl.textContent : 'N/A',
rating: ratingEl ? ratingEl.getAttribute('aria-label') : 'N/A',
address: addressEl ? addressEl.textContent : 'N/A'
};
});
});
console.log(restaurants);
await browser.close();
})();
Probleme mit diesem Ansatz
-
Google blockiert schnell: Nach 10-20 Anfragen erkennt Google das Scraping und fordert Sie auf, zu bestätigen, dass Sie kein Roboter sind (CAPTCHA).
-
Ständige Wartung: Google ändert regelmäßig sein HTML. Ihr Code bricht alle 2-3 Monate.
-
Langsam: Puppeteer muss einen vollständigen Browser für jede Suche starten. 10.000 Restaurants scrapen = 10.000 gestartete Browser = Stunden der Ausführung.
-
Ressourcenintensiv: Jeder Browser verbraucht 100-200 MB RAM. Parallel scrapen = leistungsstarker Server erforderlich.
-
Gegen die Nutzungsbedingungen: Google verbietet ausdrücklich das Scraping von Maps.
Urteil: Puppeteer funktioniert für einmalige Tests (50-100 Ergebnisse), nicht für großflächige Extraktionen.
Option 3: Ein dediziertes Tool nutzen (kein Code)
Dies ist die pragmatischste Lösung für 95% der Anwendungsfälle. Anstatt zu programmieren, verwenden Sie ein Tool, das:
- Die Extraktion in großem Maßstab verwaltet
- Google-Blockaden umgeht
- Strukturierte Daten zurückgibt (CSV, JSON, API)
- Vollständige Google-Bewertungen enthält
- Verwendete Technologien erkennt
- Die Daten monatlich aktualisiert
Warum ein dediziertes Tool?
| Kriterium | Google API | Puppeteer | Dediziertes Tool |
|---|---|---|---|
| Kosten für 10.000 Ergebnisse | €170+ | Kostenlos (aber langsam) | €44-99/Monat |
| Zeit für 10.000 Ergebnisse | 2-3 Tage (Quoten) | 4-6 Stunden | 5 Minuten |
| Vollständige Google-Bewertungen | Max. 5 pro Ort | Ja | Ja |
| Filtern nach Google-Bewertung | Nein | Nein | Ja |
| Technologieerkennung | Nein | Nein | Ja |
| Wartung | Hoch (API-Änderungen) | Hoch (HTML-Änderungen) | Null |
| Google-Blockierung | Selten | Häufig | Niemals |
Praktische Anwendungsfälle mit JavaScript
Hier sind 3 reale Szenarien und wie man sie implementiert.
Fall 1: 50 Klempner in Lyon mit der Google Maps API suchen
Bedarf: Name, Adresse, Telefon, Webseite, Bewertung. Niedriges Volumen. Begrenztes Budget.
Lösung: Offizielle Google Maps API.
async function findPlumbers(city, limit = 50) {
const geocoder = new google.maps.Geocoder();
// Geocodiere die Stadt
const cityCoords = await new Promise((resolve) => {
geocoder.geocode({ address: city }, (results) => {
resolve(results[0].geometry.location);
});
});
const map = new google.maps.Map(document.getElementById('map'), {
center: cityCoords,
zoom: 12
});
const service = new google.maps.places.PlacesService(map);
const allResults = [];
// Mehrere Anfragen stellen (max. 60 pro Anfrage)
for (let i = 0; i < Math.ceil(limit / 60); i++) {
const results = await new Promise((resolve) => {
service.nearbySearch(
{
location: cityCoords,
radius: 15000,
type: 'plumber',
pageToken: i === 0 ? null : nextPageToken
},
(results, status, pagination) => {
nextPageToken = pagination.nextPage ? pagination.nextPageToken : null;
resolve(results || []);
}
);
});
allResults.push(...results);
if (allResults.length >= limit) break;
}
// Details für jedes Ergebnis abrufen
const details = await Promise.all(
allResults.slice(0, limit).map(place => {
return new Promise((resolve) => {
service.getDetails(
{
placeId: place.place_id,
fields: ['name', 'formatted_address', 'formatted_phone_number', 'website', 'rating']
},
(place) => resolve(place)
);
});
})
);
return details.map(p => ({
name: p.name,
address: p.formatted_address,
phone: p.formatted_phone_number,
website: p.website,
rating: p.rating
}));
}
// Verwendung
findPlumbers('Lyon').then(plumbers => {
console.table(plumbers);
// In CSV exportieren
downloadCSV(plumbers);
});
Kosten: ~€0,50 (17 Nearby-Anfragen + 50 Place Details)
Zeit: 30 Sekunden
Einschränkung: Sie wissen nicht, welche Einträge beansprucht sind, wie viele Bewertungen sie haben oder ob sie eine benutzerdefinierte Webseite/Wix/Squarespace verwenden.
Fall 2: 200 Konkurrenzrestaurants analysieren (Bewertungen, Technologien)
Bedarf: Vollständige Bewertungen, Bewertung, Anzahl der Bewertungen, verwendete Technologien. Mittleres Volumen. Mittleres Budget.
Lösung: Dediziertes Tool (die Google Maps API gibt nur max. 5 Bewertungen zurück).
Mit einem Tool exportieren Sie in 5 Minuten:
Name,Adresse,Bewertung,Anzahl der Bewertungen,Bewertung (Text),Bewertung (Datum),Bewertung (Autor),Webseite,Erkannte Technologien
Le Jules Verne,5 Rue Eiffel,4.8,1250,"Ausgezeichnetes Preis-Leistungs-Verhältnis",2024-01-15,Pierre M.,lejulesverne.fr,"WordPress, WooCommerce, Google Analytics"
Septime,80 Rue Charonne,4.7,890,"Makelloser Service",2024-01-14,Marie D.,septimeparis.com,"Custom, Shopify"
Sie können dann: - Gut bewertete Restaurants (4,5+) mit über 500 Bewertungen (signifikante Größe) identifizieren. - Negative Bewertungen lesen, um die Schwächen der Konkurrenz zu erkennen. - Sehen, welche Restaurants Shopify verwenden (sie verkaufen online) vs. WordPress (benutzerdefinierte Webseite).
Fall 3: ABM-Prospektion — 500 Restaurants mit Webseite ohne Google Analytics finden
Bedarf: Mittelgroße Restaurants (50-200 Bewertungen), Bewertung 3,5+, Webseite ohne Google Analytics (potenzieller Lead für SEO-/Analytics-Agentur).
Lösung: Dediziertes Tool mit erweiterten Filtern und Technologieerkennung.
```javascript // Pseudo-Code (die Google Maps API kann das nicht) const restaurants = await tool.search({ location: 'Frankreich', category: 'restaurant', minRating: 3.5, minReviews: 50, maxReviews: 200, hasWebsite: true, missingTechnology: 'Google Analytics' // EXKLUSIV });
// Ergebnis: 500 qualifizierte Restaurants // Sie kontaktieren sie mit: "Wir haben gesehen, dass Ihre Webseite kein..."
Bereit loszulegen?
Zugriff auf jedes Google Maps Unternehmen, angereichert mit E-Mails und rechtlichen Daten.
IBLead kostenlos testenVerwandte Artikel
10 Bewährte Tipps, um Kunden zu mehr Google-Bewertungen auf Maps zu bewegen
Erfahren Sie 10 umsetzbare Strategien zur Steigerung von Google Maps-Bewertungen. Timing, Anreize, QR-Codes und Antworttaktiken, die wirklich funktionieren.
7 Kaltakquise-E-Mail-Fehler, die du vermeiden solltest: Beispiele & Vorlagen
Vermeide diese 7 Kaltakquise-E-Mail-Fehler, die die Antwortrate töten. Echte Beispiele, AIDA-Vorlagen und bewährte Lösungen für bessere Ansprache.
ABM Google Maps Daten: Der umfassende strategische Leitfaden
Erfahren Sie, wie ABC Account-Based Marketing Google Maps Daten 208% mehr Umsatz generiert.