Come fare scraping delle recensioni di Google Maps: Places API, Python o un'API per i dati
La Places API restituisce al massimo 5 recensioni per luogo. Abbiamo testato tre strade, ne abbiamo calcolato il prezzo per 1.000 recensioni e condividiamo un esportatore CSV in Python.

Una clinica dentistica di Austin, in Texas, mostra 4,6 stelle nella sua scheda di Google Maps. Le sue 200 recensioni più recenti hanno una media di 4,305 stelle e il 13% è da una stella. Con la Places API ufficiale non puoi vedere questa differenza, perché restituisce al massimo cinque recensioni per luogo, scelte per pertinenza. Il 2 novembre 2026 abbiamo testato tre modi per ottenere attività e recensioni di Google Maps: la Places API ufficiale, uno scraper Python fai da te e un'API per i dati con addebito per chiamata. Questa guida mostra cosa restituisce ogni approccio, quanto costa per 1.000 recensioni e quali sono i suoi limiti.

I dati delle recensioni contano di più ogni mese. L'8 ottobre 2026 Google ha pubblicato le sue prime Fan-Favorite Dining Lists, basate su recensioni, valutazioni e richieste di indicazioni stradali [18]. Il 21 ottobre 2026 Google Maps ha aggiunto le conversazioni con Gemini ad Apple CarPlay [19]. Search Engine Land cita i numeri di Google: Ask Maps può usare recensioni di oltre 500 milioni di contributori [20].
Sempre più persone lasciano che sia l'AI a leggere le recensioni e a dare una risposta. Quindi conta quali recensioni legge l'AI e cosa dicono quelle recenti. Per questo la guida tiene separate le recensioni più recenti da quelle ordinate per pertinenza.
Prima decidi cosa ti serve
Chi cerca come fare scraping di Google Maps vuole cose molto diverse. Un team commerciale vuole nome, telefono, sito web e valutazione di ogni dentista di un'area metropolitana. Il titolare di un franchising vuole tutte le recensioni di 40 sedi per rispondere velocemente ai reclami. Un team di prodotto vuole le recensioni a una stella di un concorrente nell'ultimo trimestre.
Un ricercatore vuole la distribuzione delle valutazioni di 500 ristoranti in un quartiere. Solo il primo caso è un elenco di attività. Gli altri tre richiedono recensioni, e la strada giusta dipende dal numero di recensioni, dall'intervallo di date e da chi possiede la scheda.
Quindi rispondi a tre domande prima di confrontare i prezzi. Primo: quante recensioni ti servono per luogo, e ne bastano cinque? Secondo: questi luoghi sono sedi verificate del tuo Google Business Profile? Terzo: qualcuno nel tuo team vuole mantenere per anni uno scraper basato su browser e un pool di proxy? Il diagramma di flusso qui sotto divide le strade in base a queste tre domande. Ogni sezione successiva verifica uno degli approcci con richieste reali oppure esamina riga per riga la documentazione ufficiale.
Il diagramma include la Business Profile API perché molti team se ne dimenticano. Google offre ai proprietari di sedi verificate un'API che elenca tutte le loro recensioni [11]. Ordina per valutazione o per data di aggiornamento, con fino a 50 recensioni per pagina [12]. Richiede il consenso OAuth e una sede verificata.
Non può leggere i dati di un concorrente. La tabella qui sotto mette a confronto i quattro approcci. Ogni cella è un fatto che testiamo o verifichiamo più avanti in questa guida.
| Approccio | Recensioni per luogo | Ordine e paginazione | Costo per 1.000 recensioni | Costo principale |
|---|---|---|---|---|
| Places API ufficiale (Place Details) | Fino a 5 | Solo per pertinenza, senza paginazione | $0 entro la soglia gratuita, poi circa $5,00 | Limite rigido, attribuzione all'autore obbligatoria |
| Business Profile API | Tutte, ma solo per le tue sedi | Valutazione o data di aggiornamento, 50 per pagina | $0 | Solo le tue sedi verificate |
| Scraper Python fai da te con browser | Ciò che mostra la pagina | Scorrimento simulato | Server e proxy a parte | Modifiche alla pagina, rischio legato ai termini |
| API per i dati di EveryInfra | 400 righe per ordinamento, 100 per chiamata | Per data più recente o pertinenza, con token di pagina | $0,01389 con 100 per chiamata | Pagamento per chiamata, asincrono oltre 200 righe |
Strada 1: cosa ti dà la Places API ufficiale
Parti da Google stesso. Nella Places API (New), la risorsa Place ha un campo reviews. La documentazione di riferimento lo descrive come un elenco di recensioni sul luogo, ordinate per pertinenza. Dice anche che possono essere restituite al massimo cinque recensioni [1]. Il limite non cambia con il livello di prezzo. Non esiste nemmeno un token di pagina per le recensioni. Abbiamo fatto uno screenshot di quella riga e l'abbiamo evidenziata con un riquadro verde acqua.

La richiesta è semplice. Place Details (New) è una richiesta GET con un ID del luogo nel percorso e una field mask obbligatoria in un header [2]. La field mask dice a Google quali campi vuoi. Ecco un esempio di configurazione basato sulla documentazione ufficiale. Non l'abbiamo eseguito con una chiave Google.
# Configuration example (not run): rating, review count and up to 5 reviews for one place
curl -s "https://places.googleapis.com/v1/places/ChIJl6T2cnbMRIYR7eD538S3oWU" \
-H "X-Goog-Api-Key: $GOOGLE_MAPS_API_KEY" \
-H "X-Goog-FieldMask: displayName,rating,userRatingCount,reviews"La field mask determina quanto paghi. Google addebita ogni richiesta alla tariffa dello SKU associato al campo più costoso nella field mask. Il campo reviews appartiene allo SKU Place Details Enterprise + Atmosphere, quindi ogni richiesta che include le recensioni paga quella tariffa [3][5]. Il 1° marzo 2025 Google ha sostituito il vecchio credito mensile di $200 con soglie di utilizzo gratuito per SKU.
Le soglie mensili sono di 10.000 chiamate per gli SKU Essentials, 5.000 per i Pro e 1.000 per gli Enterprise [4]. Abbiamo consultato il listino prezzi il 2 novembre 2026. La pagina di panoramica sulla fatturazione indica come ultimo aggiornamento il 2026-10-30 [4]. La tabella mostra le righe che contano per questa guida, in dollari USA per 1.000 richieste.
| SKU (Places API New) | Gratis al mese | Fino a 100K | Da 100K a 500K | Da 500K a 1M | Da 1M a 5M | Oltre 5M |
|---|---|---|---|---|---|---|
| Place Details Pro | 5,000 | $17.00 | $13.60 | $10.20 | $5.10 | $1.28 |
| Place Details Enterprise | 1,000 | $20.00 | $16.00 | $12.00 | $6.00 | $1.51 |
| Place Details Enterprise + Atmosphere (include le recensioni) | 1,000 | $25.00 | $20.00 | $15.00 | $7.50 | $2.28 |
| Text Search Pro | 5,000 | $32.00 | $25.60 | $19.20 | $9.60 | $2.40 |
| Ricerca testuale Enterprise + Atmosphere | 1,000 | $40.00 | $32.00 | $24.00 | $12.00 | $3.40 |
Con questa tabella, una chiamata Place Details costa $0,025 e dà al massimo cinque recensioni. Sono $5,00 per 1.000 recensioni al primo livello a pagamento. Oltre i cinque milioni di chiamate al mese, la tariffa scende a $2,28 per 1.000 chiamate, cioè comunque $0,456 per 1.000 recensioni. Conta anche la soglia gratuita. Se ti servono cinque recensioni per ciascuno di 1.000 luoghi al mese, l'API ufficiale non costa nulla. Torniamo su questo caso nella sezione su quando l'API ufficiale è la scelta migliore.
Tre regole d'uso determinano inoltre cosa puoi archiviare e mostrare. Primo, le policy della Places API dicono che devi mostrare l'attribuzione dell'autore con ogni recensione, che comprende la foto, il nome e il link al profilo [7]. Secondo, puoi conservare a lungo l'ID del luogo, ma la maggior parte degli altri contenuti non può essere memorizzata nella cache. Questo significa che non puoi costruire un tuo database di recensioni a lungo termine con i risultati dell'API ufficiale [7]. Google dice anche di aggiornare gli ID dei luoghi più vecchi di 12 mesi [8]. Terzo, le recensioni sono sempre ordinate per pertinenza.
Questa terza regola è la lamentela più comune nei forum per sviluppatori. Una domanda su Stack Overflow del 2016 chiede come ottenere più di cinque recensioni dalla Places API [39]. Una domanda del 2019 chiede come ottenere le recensioni più recenti [40]. Entrambe le discussioni si concludono con lo stesso limite di cinque recensioni. Una discussione su Reddit in r/learnpython pone la stessa domanda dal punto di vista di un principiante [41]. La risposta non è cambiata con la nuova versione dell'API.
Dall'8 maggio 2025 la Places API può anche restituire un riepilogo delle recensioni scritto da Gemini [9][10]. Un riepilogo non è un dato grezzo, quindi non puoi usarlo per contare le stelle.
Strada 2: uno scraper Python fatto in casa, e dove si ferma
Molti tutorial su come fare scraping di Google Maps con Python partono da requests e BeautifulSoup. Abbiamo provato questo primo passo il 2 novembre 2026 alle 00:19:50 SGT. Abbiamo inviato una semplice richiesta HTTP GET con la libreria standard di Python alla pagina Maps di un ristorante di Singapore. Lo stato era 200, e la pagina aveva 210.679 byte e 12 tag script.
Il titolo era solo «Google Maps». Il nome del ristorante compariva solo perché la pagina riportava il nostro stesso URL. Nella pagina non comparivano né il numero di recensioni, 8.226, né alcuno dei 20 estratti di recensioni ottenuti dall'API.
Quindi le recensioni si caricano solo dopo che la pagina ha eseguito JavaScript in un browser. Uno scraper fatto in casa deve usare l'automazione del browser, per esempio Playwright [37]. Lo schema qui sotto mostra la struttura tipica. Apre la pagina del luogo, fa clic sulla scheda Recensioni, scorre il pannello delle recensioni e legge il testo dagli elementi della pagina. Non l'abbiamo eseguito, perché lo scraping automatizzato massivo delle pagine di Google Maps viola i suoi termini di servizio. Lo mostriamo solo per rendere visibile il lavoro necessario.
# Configuration example (not run): the usual structure of a browser review scraper
from playwright.sync_api import sync_playwright
PLACE_URL = "https://www.google.com/maps/place/?q=place_id:ChIJl6T2cnbMRIYR7eD538S3oWU&hl=en"
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page(locale="en-US")
page.goto(PLACE_URL, wait_until="networkidle")
page.get_by_role("tab", name="Reviews").click() # breaks when the label changes
panel = page.locator("div[role='feed']") # a guessed selector that changes often
for _ in range(30): # about 10 more reviews per scroll
panel.evaluate("el => el.scrollBy(0, el.scrollHeight)")
page.wait_for_timeout(1200)
texts = page.locator("[data-review-id] span").all_inner_texts()
print(len(texts))
browser.close()Ogni riga di questo schema scommette che la pagina non cambierà. L'etichetta della scheda, il selettore del pannello, il numero di recensioni per scorrimento e la lingua della pagina possono cambiare. Basta un rilascio front-end di Google, o una pagina di verifica per il tuo indirizzo IP, per bloccare lo script. Per misurare questa manutenzione, abbiamo esaminato uno degli scraper open source per Google Maps con più stelle su GitHub [32]. Il 2 novembre 2026 aveva 7.148 stelle, 1.112 fork e una licenza MIT, e il suo ultimo push risaliva al 21 ottobre 2026.
Il progetto ha pubblicato otto release, dalla v1.16.3 alla v1.18.1, tra il 13 luglio e il 20 settembre 2026 [36]. Dopo il 1° agosto sono state aperte quindici issue. La tabella mostra le issue che riguardano le recensioni o bloccano i job. I titoli sono parafrasati e i link sono nei riferimenti [33][34][35].
| Data | Issue | Cosa hanno segnalato gli utenti | Stato |
|---|---|---|---|
| 2026-09-01 | #327 | L'opzione per le recensioni aggiuntive restituisce solo circa 10 recensioni, e un endpoint interno delle recensioni restituisce 403 (v1.17.4) | Aperta |
| 2026-09-23 | #331 | Molti errori del motore di scraping durante le esecuzioni | Chiusa |
| 2026-10-05 | #337 | Dopo l'aggiornamento alla v1.18.0, l'elenco dei job web resta vuoto e il pulsante di avvio non fa nulla | Aperta |
| 2026-10-06 | #338 | Tutti i job di scraping falliscono perché la pagina o il contesto del browser si sono chiusi | Aperta |
| 2026-10-09 | #341 | Il titolo è «300 Reviews per place» | Aperta |
| 2026-10-22 | #346 | Un job web resta in stato di esecuzione perché un contesto del browser non si chiude | Aperta |
Questo non è un giudizio sulla qualità del codice. Anche un progetto con 7.000 stelle e otto release in dieci settimane si imbatte ogni poche settimane in problemi come «solo 10 recensioni» e «tutti i job falliscono». La causa sono i cambiamenti introdotti da Google, non la scarsa qualità del codice. Le issue #337 e #346 [42][43] mostrano un costo diverso. Non dipendono da Google, ma dall'automazione del browser in sé.
Uno scraper di recensioni che gira per mesi è un piccolo servizio con una persona reperibile, non uno script da fine settimana. Devi gestire avvio e arresto del browser, memoria, richieste simultanee, timeout, proxy e indirizzi IP di uscita. Se scrivi il tuo, perdi anche la community che individua i problemi per prima. Metti in conto questo lavoro prima di confrontarlo con un prezzo per chiamata.
Gli scraper fatti in casa ignorano anche il file robots.txt. Abbiamo scaricato google.com/robots.txt nello stesso momento [16]. La riga 86 dice Disallow: /maps/ e la riga 74 dice Disallow: /maps?. Il file ha anche righe Allow per /maps/place/ e /maps/search/.
Secondo l'RFC 9309 prevale la regola corrispondente più lunga, quindi i normali percorsi delle pagine dei luoghi sono consentiti. Gli altri percorsi sotto /maps/ senza una riga allow ricadono nella regola disallow [17]. L'RFC 9309 dice anche che le regole robots non sono una forma di autorizzazione all'accesso [17]. Il vero limite sono i termini di servizio.
Termini di servizio, sentenze e dati personali
Parti dal contratto. Se sei cliente di Google Maps Platform, la sezione 3.2.3(a) dei termini della piattaforma si intitola «No Scraping». Stabilisce che i clienti non possono esportare, estrarre o altrimenti sottoporre a scraping i contenuti di Google Maps per utilizzarli al di fuori dei servizi [13]. Per gli utenti normali, i termini aggiuntivi di Google Maps vietano i download massivi e i feed di contenuti in grandi quantità [14]. Google ha modificato questi termini l'ultima volta il 27 gennaio 2026. Vietano inoltre di usare Google Maps per creare o arricchire altri dataset cartografici; l'elenco include anche i database di schede di attività [14].
Quindi né l'API ufficiale né uno scraper fatto in casa ti permettono di costruire una copia dei contenuti di Google. I tribunali statunitensi hanno esaminato la questione più ampia. Il 18 aprile 2022, nella causa hiQ Labs v. LinkedIn, il Nono Circuito ha stabilito che fare scraping di dati web pubblici probabilmente non costituisce un accesso «senza autorizzazione» ai sensi del Computer Fraud and Abuse Act [21].
Il 23 gennaio 2024 il Distretto Settentrionale della California ha emesso un summary judgment a favore di una società di raccolta dei dati citata in giudizio da Meta Platforms (causa 3:23-cv-00077). Il tribunale ha ritenuto che Meta non avesse dimostrato che i suoi termini vietassero lo scraping di dati pubblici effettuato senza aver eseguito l'accesso [22].
Queste due sentenze vengono spesso citate per sostenere che fare scraping di dati pubblici è legale. Rispondono a questioni giuridiche specifiche su testi contrattuali specifici. Non dicono che violare i termini non abbia conseguenze, e non si applicano al di fuori degli Stati Uniti. Questa guida non è una consulenza legale. Rivolgiti a un avvocato prima dell'uso commerciale.
Poi ci sono i dati personali. Nomi, foto e link al profilo di chi scrive le recensioni sono dati personali. In California, il California Consumer Privacy Act dà ai consumatori diritti sui dati che le aziende raccolgono. L'Attorney General ha aggiornato la sua pagina sul CCPA il 28 agosto 2026 [23]. Nell'Unione europea si applica il GDPR [24].
Singapore ha il Personal Data Protection Act [25][26], e il Messico ha pubblicato una nuova legge federale sulla protezione dei dati il 20 marzo 2025 [27]. La maggior parte delle analisi non ha bisogno dell'identità di chi scrive la recensione. Conserva valutazione, data, testo e risposta del proprietario, ed elimina nomi e foto. Il nostro esportatore CSV qui sotto fa proprio questo.
Se copi le recensioni di altre attività sulla tua pagina, si applica anche la policy di Google sui contributi relativa al coinvolgimento falso [15].
Strada 3: un'API per i dati a pagamento per chiamata
La terza strada è un'API per i dati a pagamento per chiamata. Invii una richiesta e il servizio restituisce dati strutturati su attività o recensioni. Si occupa di browser, proxy e modifiche alle pagine, e addebita per chiamata. In questo mercato esistono diversi modelli di fatturazione. I più comuni sono le piattaforme di scraping in cloud che addebitano per risultato, le API per i risultati di ricerca che addebitano per query e le API per i dati che addebitano per chiamata. EveryInfra usa l'ultimo modello.
Questa guida è un tutorial, non una tabella di prezzi dei fornitori. Si concentra su come fare le chiamate, come sono fatti i dati e dove falliscono. Il nostro prezzo unitario e la nostra unità di fatturazione sono nella pagina della Google Maps Reviews API.
La Google Maps Reviews API di EveryInfra ha quattro funzionalità. google_maps_reviews/search trova luoghi per parola chiave e posizione. google_maps_reviews/profile restituisce i dettagli di un luogo. google_maps_reviews/reviews restituisce le recensioni di un luogo. google_maps_reviews/contributor_reviews restituisce le recensioni scritte da un singolo recensore.
Abbiamo consultato il catalogo pubblico alle 00:14:03 SGT del 2 novembre 2026. Tutte e quattro le funzionalità costano $0,001389 per chiamata. La ricerca restituisce fino a 50 luoghi per chiamata e fino a 120 righe complessive su più pagine. La chiamata per le recensioni restituisce fino a 100 recensioni per chiamata e fino a 400 righe complessive su più pagine.
Una richiesta sincrona può arrivare fino alla riga 200, e le pagine successive richiedono un job asincrono. Le recensioni supportano due ordinamenti, newest e relevance. Il parametro since limita i risultati alle recensioni successive a una data, e lang imposta la lingua delle recensioni.
Ecco una richiesta di recensioni per la clinica di Austin. Un URL di Google Maps con l'ID del luogo è il modo più stabile per identificare un luogo.
curl -s https://api.everyinfra.com/api/v1/social \
-H "Authorization: Bearer $EVERYINFRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"platform":"google_maps_reviews","action":"reviews",
"params":{"url":"https://www.google.com/maps/search/?api=1&query=Swish%20Dental%20-%20Domain&query_place_id=ChIJl6T2cnbMRIYR7eD538S3oWU",
"sort":"newest","limit":100}}'Abbiamo inviato questa richiesta alle 00:20:36 SGT. Ha restituito 100 recensioni, e billing.charged_usd era 0.001389. La risposta aveva pagination.has_more impostato a true e un next_page_token. Per ottenere la pagina successiva, invia la stessa richiesta con quel token in page_token, esattamente come l'hai ricevuto. Lo screenshot qui sotto è una risposta reale per il ristorante di Singapore alle 00:15 SGT, con i nomi dei recensori oscurati.

Ogni record di recensione ha i campi elencati nel catalogo. La tabella mostra i campi più importanti per l'analisi, con i conteggi sulle 200 recensioni più recenti di Austin. Due di questi, detailed_rating e owner_response, non sono presenti nell'oggetto recensione della Places API ufficiale.
| Campo | Significato | Nelle 200 recensioni più recenti di Austin |
|---|---|---|
rating | Da 1 a 5 stelle | 200 su 200 |
posted_at | Data di pubblicazione in UTC | 200 su 200 |
text | Testo della recensione, può essere vuoto | 130 con testo (65%) |
owner_response e owner_response_at | Risposta del proprietario e data della risposta | 146 (73%) |
detailed_rating | Punteggi parziali, per esempio cibo o servizio | 0 per questa clinica |
image_urls | Foto allegate alla recensione | 3 |
is_local_guide e reviewer_review_count | Indicatore Local Guide e numero di recensioni del recensore | 58 scritte da Local Guide |
like_count | Voti «Utile» | 200 su 200 |
id, url e place_id | Identificatori della recensione e del luogo | 200 su 200 |
La chiamata profile google_maps_reviews/profile delle 00:20:02 SGT ha restituito i dettagli della clinica: 4,6 stelle, 1.659 recensioni, indirizzo, telefono, sito web, orari di apertura e coordinate. La chiamata search google_maps_reviews/search delle 00:17:10 SGT ha usato la parola chiave "dentist" e la posizione "Austin, TX". La pagina 1 ha restituito 50 luoghi.
La pagina 2 iniziava dalla riga 51, quindi la richiesta sincrona delle 00:23:59 SGT ha restituito un 422 che chiedeva la modalità asincrona. Il job asincrono delle 00:24:22 SGT ha restituito altri 50 luoghi. Dopo la deduplicazione per ID del luogo avevamo 100 cliniche diverse, e 99 avevano un indirizzo ad Austin. Per un elenco di lead commerciali, il lavoro finisce qui. La nostra guida sulla deduplicazione per ID del luogo ti aiuta quando unisci più ricerche.
Test 1: un dentista di Austin, le stelle della scheda a confronto con quelle recenti
Questo test risponde a una domanda per un acquirente statunitense. La valutazione in stelle di una scheda ti dice come va una clinica adesso? Abbiamo scaricato le 200 recensioni più recenti di Swish Dental nella zona del Domain di Austin, in due pagine alle 00:20:36 e alle 00:23:41 SGT. La scheda mostra 4,6 stelle su 1.659 recensioni.
Le 200 recensioni più recenti hanno una media di 4,305 stelle, circa 0,3 stelle in meno rispetto alla valutazione della scheda. Ci sono 156 recensioni da cinque stelle, 7 da quattro, 5 da tre, 6 da due e 26 da una. Le recensioni da una stella sono il 13% del campione. La clinica ha risposto a 146 recensioni su 200, quindi qualcuno gestisce chiaramente le sue recensioni.
Per un paziente, un investitore o un concorrente, le 200 recensioni più recenti dicono più della valutazione complessiva. La valutazione della scheda riassume recensioni raccolte nell'arco di molti anni. Un gruppo di nuove recensioni da una stella può indicare un cambiamento nel personale, nel servizio di reception o nella fatturazione. La Places API ufficiale non può mostrare quel gruppo, perché restituisce cinque recensioni scelte per pertinenza.
Il testo racconta una seconda storia. Delle 26 recensioni da una stella, 24 hanno un testo (92%), e la lunghezza mediana è di 361,5 caratteri. Delle 156 recensioni da cinque stelle, solo 89 hanno un testo (57%), con una mediana di 119 caratteri. I pazienti scontenti spiegano il perché.
I pazienti soddisfatti spesso lasciano solo le stelle. Se studi solo le recensioni con testo, dai più peso a quelle negative. Se studi solo le valutazioni in stelle, perdi i dettagli utili dei reclami.
Test 2: cinque recensioni pertinenti contro 300 recenti
Il secondo test mostra come il limite di cinque recensioni cambia l'immagine che ti fai di un luogo. Abbiamo usato Song Fa Bak Kut Teh, all'11 di New Bridge Road a Singapore. La sua scheda mostra 4,4 stelle, 8.226 recensioni e 18.685 foto. Abbiamo scaricato le prime 100 recensioni per pertinenza alle 00:16:10 SGT.
Abbiamo scaricato anche le 300 recensioni più recenti in tre pagine. Le pagine 1 e 2 sono state ottenute con chiamate sincrone alle 00:15:29 e alle 00:16:42 SGT, mentre la pagina 3 è stata ottenuta con un job asincrono alle 00:18:27 SGT. Le prime cinque per pertinenza rappresentano le cinque recensioni restituite dall'API ufficiale.
Le prime cinque hanno una media di 4,8 stelle. Tutte e cinque hanno testo e foto, e la lunghezza mediana del testo è di 517 caratteri. Tutti e cinque gli autori sono Local Guide, e le date vanno da aprile a luglio 2026. Le prime 100 per pertinenza hanno una media di 4,5 stelle, hanno tutte un testo e la lunghezza mediana è di 357 caratteri. Le loro date vanno dal 2016 a settembre 2026. Le 300 più recenti hanno una media di 4,65 stelle, solo il 63% ha un testo e la lunghezza mediana è di 67 caratteri.
Google non pubblica il suo metodo di pertinenza. I dati mostrano una netta preferenza per recensioni lunghe con foto di recensori attivi, e queste recensioni tendono a essere positive. Se giudichi un luogo dalle cinque recensioni dell'API ufficiale, vedi gli elogi più rappresentativi, non il cliente recente medio. Le prime 100 per pertinenza e le 300 più recenti hanno in comune solo 21 recensioni, quindi sono quasi due campioni diversi.
Le recensioni senza testo sono facili da trascurare. Tra le 300 più recenti, 111 recensioni hanno stelle e nessuna parola, cioè il 37%. Per l'analisi di parole chiave o del sentiment, quel 37% è vuoto. Per l'andamento delle stelle, quel 37% è la parte del campione non distorta da chi scrive recensioni lunghe. I due tipi di analisi richiedono dati diversi, quindi un'API per le recensioni dovrebbe restituire sia le stelle sia il testo, non solo un riepilogo.
Test 3: una taqueria di Città del Messico e un'insidia nel parametro della posizione
Il terzo luogo è Tacos Chupacabras a Coyoacán, Città del Messico. La scheda mostra 4,2 stelle, 18.361 recensioni e una fascia di prezzo da MXN 100 a 200. Abbiamo scaricato le 200 recensioni più recenti con lang: es419 alle 00:23:05 e alle 00:23:24 SGT. Hanno una media di 4,275 stelle, vicina a quella della scheda. Ci sono 121 recensioni da cinque stelle, 42 da quattro, 21 da tre, 3 da due e 13 da una. Solo il 55,5% ha un testo, la lunghezza mediana è di 69 caratteri e il proprietario non ha risposto a nessuna.
Se metti i tre luoghi uno accanto all'altro, le distribuzioni sono diverse. Il dentista ha molte recensioni da cinque stelle e da una stella e poche nel mezzo. La taqueria ha più recensioni da tre e quattro stelle, uno schema tipico da «cibo ottimo, coda lunga». Una media unica nasconde entrambe le distribuzioni.
Le ricerche su Città del Messico hanno mostrato anche un problema con il parametro della posizione. Alle 00:17:32 SGT abbiamo cercato "taquería" con la posizione "Ciudad de México". Tutti i 50 risultati erano in Messico, ma solo 1 a Città del Messico. Gli altri 49 erano in altri 11 stati. Zacatecas ne aveva 14, Nuevo León 7, Chihuahua 6 e Jalisco 6.
Alle 00:19:39 SGT abbiamo inserito il luogo nella parola chiave, come "taquería en Coyoacán, Ciudad de México". Tutti i 50 risultati erano a Città del Messico, e 47 a Coyoacán. La ricerca su Austin ha usato la posizione "Austin, TX". Lì 99 risultati su 100 erano ad Austin, e l'ultimo era a West Lake Hills, accanto ad Austin.
Non conosciamo ancora la causa. Le due richieste differiscono in più di un aspetto. La chiamata per Città del Messico inviava anche language: es, e la posizione di Austin includeva il codice dello stato. Una sola coppia di test non può mostrare quale differenza conti. Finché non lo sappiamo, inserisci la città, e anche il quartiere, nella parola chiave. Esegui prima una pagina di ricerca e conta quanti risultati sono nella città di destinazione.
L'ordinamento per più recenti non segue strettamente la data
I team che monitorano le recensioni scrivono spesso lo stesso ciclo. Ordinano per più recenti, leggono una pagina e si fermano alla prima recensione più vecchia dell'ultima salvata. Abbiamo controllato ogni riga dei nostri tre insiemi ordinati per più recenti. Una riga è fuori ordine quando la sua data di pubblicazione è successiva a quella della riga precedente. Singapore aveva 6 righe di questo tipo su 300, Città del Messico 18 su 200 e Austin 50 su 200, cioè il 25%. L'insieme di Singapore conteneva anche due recensioni del 2023 mescolate in pagine del 2026.
Questo dipende da Google Maps stesso, non dall'API. Le recensioni modificate e quelle con nuove risposte del proprietario possono comparire fuori ordine cronologico. L'effetto è reale: un ciclo che «si ferma alla prima recensione vecchia» può perdere dati. Ci sono due soluzioni. Leggi una pagina in più prima di fermarti, oppure usa since in modo che l'API restituisca solo le recensioni successive a una data. Poi ordina tu per posted_at. L'esportatore CSV qui sotto riordina i dati come ultimo passaggio.
Chiamate non riuscite e rimborsi: come si presentano gli errori reali
Il timore principale con la fatturazione per chiamata è pagare una chiamata non riuscita. Durante i test abbiamo provocato sei tipi di errore, alcuni di proposito e altri per sbaglio. La tabella li mostra così come li ha restituiti l'API. Tutti gli orari sono SGT del 2 novembre 2026.
| Orario (SGT) | Cosa abbiamo fatto | Risposta | Addebito | Passo successivo indicato nella risposta |
|---|---|---|---|---|
| 00:15:56 | Richiesta della pagina 2 subito dopo la pagina 1, oltre 10 al minuto | 429 rate_limited, retry_after 4 secondi | Nessuno | Attendi, poi fai un nuovo tentativo |
| 00:16:03 | Inviato un token di pagina vuoto | 422 invalid_page_token | Nessuno | Rinvia next_page_token così come ricevuto |
| 00:17:00 | Richiesta della pagina 3 delle recensioni in modalità sincrona (oltre la riga 200) | 422 async_required | Nessuno | Aggiungi "mode":"async" ed esegui il polling del job |
| 00:20:55 | since impostato al 2026-11-30, una data futura | 200, 0 recensioni, empty_result_refunded | Rimborsato, 0 $ | Nessuno |
| 00:21:38 | Inviato un URL che non è una pagina di Maps | 503, nuovo tentativo consentito, retry_after di 20 secondi | Rimborsato, 0 $ | Indica che si tratta dell'errore 1 di 3 |
| 00:22:07 | sort impostato su oldest | 422 invalid_value, valori consentiti newest e relevance | Nessuno | Cambia solo sort e invia di nuovo |
Uno di questi casi dovrebbe funzionare meglio. Un URL errato restituisce un 503 con nuovo tentativo consentito, non un 422 che indica il parametro sbagliato. Non paghi nulla, ma un client che ritenta ogni 503 tre volte aspetta circa un minuto senza ottenere risultati. Gli altri cinque errori corrispondono alla documentazione. Gli errori nei parametri e i limiti di frequenza delle richieste non costano nulla, i risultati vuoti vengono rimborsati e ogni messaggio di errore elenca i valori consentiti e il passo successivo.
Per il caso dell'URL basta un controllo nel tuo codice. Tutti i link ai luoghi di questa guida iniziano con https://www.google.com/maps/:
if not url.startswith("https://www.google.com/maps/"):
raise ValueError("not a Google Maps place link")Fai attenzione a quando vengono addebitati i job asincroni. L'addebito avviene all'invio, non quando raccogli il risultato. Abbiamo inviato il job asincrono per la pagina 3 di Singapore alle 00:18:27 SGT e la risposta all'invio mostrava già un charged_usd di 0.001389. Lo stato del job è passato da running a finalizing a succeeded, con 100 recensioni. Se un job asincrono non va a buon fine, l'addebito con lo stesso ID viene rimborsato.
Esportare le recensioni di Google Maps in CSV con Python
Il codice qui sotto è la risposta breve alla domanda su come fare scraping delle recensioni di Google Maps. Gli passi un link a un luogo di Google Maps: legge le recensioni più recenti pagina per pagina e le scrive in un CSV. Usa solo la libreria standard di Python. Gestisce i limiti di frequenza delle richieste, le pagine successive in modalità asincrona e i token di pagina, alla fine ordina per data di pubblicazione e lascia fuori dal file i nomi degli autori delle recensioni.
"""Export Google Maps reviews of one place to CSV via EveryInfra.
usage: EVERYINFRA_API_KEY=... python3 export_reviews_csv.py "<google maps place url>" reviews.csv [max_pages]
"""
import csv, json, os, sys, time, urllib.request, urllib.error
API = "https://api.everyinfra.com"
KEY = os.environ["EVERYINFRA_API_KEY"]
FIELDS = ["id", "place_name", "rating", "posted_at", "text", "owner_response",
"owner_response_at", "like_count", "is_local_guide", "reviewer_review_count", "url"]
def call(method, path, body=None):
req = urllib.request.Request(API + path, method=method,
data=json.dumps(body).encode() if body else None,
headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json",
"User-Agent": "reviews-csv/1.0"})
try:
with urllib.request.urlopen(req, timeout=120) as r:
return r.status, json.load(r)
except urllib.error.HTTPError as e:
return e.code, json.load(e)
def fetch_page(params):
body = {"platform": "google_maps_reviews", "action": "reviews", "params": params}
for attempt in range(4):
status, data = call("POST", "/api/v1/social", body)
err = (data.get("error") or {})
if status == 429 or (err.get("retryable") and status >= 500):
time.sleep(err.get("retry_after", 20)); continue
if err.get("code") == "async_required": # deep pages run as a job
body["mode"] = "async"; continue
if status == 202 and data.get("poll_url"):
billing, poll = data.get("billing"), data["poll_url"] # async jobs are charged at submit
while data.get("status") in ("queued", "running", "finalizing"):
time.sleep(5); status, data = call("GET", poll)
data["billing"] = data.get("billing") or billing
return data
if err:
raise SystemExit(f"stop: {err.get('code')} {err.get('message')}")
return data
raise SystemExit("stop: retries used up")
def main():
url, out = sys.argv[1], sys.argv[2]
max_pages = int(sys.argv[3]) if len(sys.argv) > 3 else 2
params = {"url": url, "sort": "newest", "limit": 100}
seen, rows, spent = set(), [], 0.0
for page in range(max_pages):
data = fetch_page(params)
spent += (data.get("billing") or {}).get("charged_usd") or 0
for r in data.get("results") or []:
if r["id"] in seen:
continue
seen.add(r["id"])
rows.append({k: r.get(k, "") for k in FIELDS})
token = data.get("next_page_token")
print(f"page {page + 1}: {data.get('count')} rows, total {len(rows)}")
if not token or not (data.get("pagination") or {}).get("has_more"):
break
params["page_token"] = token
rows.sort(key=lambda r: r["posted_at"] or "", reverse=True) # "newest" is not strictly ordered
with open(out, "w", newline="", encoding="utf-8-sig") as f:
w = csv.DictWriter(f, fieldnames=FIELDS)
w.writeheader(); w.writerows(rows)
print(f"wrote {len(rows)} reviews to {out}; charged: ${spent:.6f}")
if __name__ == "__main__":
main()L'abbiamo eseguito tre volte sulla taqueria di Città del Messico, tre pagine ciascuna. La prima esecuzione è partita alle 00:32:39 SGT. Le pagine 1 e 2 hanno funzionato e la pagina 3 è passata a un job asincrono. Poi il ciclo di polling è andato in crash, perché la risposta del polling non contiene poll_url e il codice lo leggeva a ogni iterazione. La seconda esecuzione, con questa correzione, è partita alle 00:33:18 SGT. La pagina 3 è tornata con zero righe, perché il job ha uno stato finalizing e il codice lo considerava concluso.
La terza esecuzione è partita alle 00:35:21 SGT e si è conclusa alle 00:36:21 SGT. Ha letto tre pagine da 100, ha scritto 300 recensioni con 300 ID univoci e ha addebitato 0,004167 $. Il CSV usa utf-8-sig, quindi Excel lo apre senza caratteri corrotti. Gli a capo nel testo delle recensioni restano all'interno delle celle, quindi il file ha 374 righe di testo per 300 righe di dati: è normale. La documentazione del modulo csv di Python spiega le opzioni di dialetto [38].
Entrambi i bug erano invisibili leggendo la documentazione ed evidenti in un'esecuzione reale. Abbiamo conservato i log di tutte e tre le esecuzioni. Testa ogni nuova API asincrona su un luogo con molte recensioni: arriva alla pagina 3 e stampa ogni valore di stato.
Dopo l'esportazione: cinque passaggi di pulizia
Ottenere i dati è metà del lavoro. La pulizia è l'altra metà. Nelle nostre 700 recensioni di tre luoghi, i problemi rientravano in cinque gruppi. Per ciascuno c'è una correzione semplice. Inserisci queste correzioni già nel primo script di analisi, senza aspettare che i numeri non tornino.
Il primo gruppo riguarda l'orario. posted_at e owner_response_at sono orari UTC con il suffisso del fuso orario. Austin è a UTC−6 in inverno e a UTC−5 in estate, quindi una recensione pubblicata alle 9 di sera ora locale cade già il giorno dopo in UTC.
Se conti le recensioni per giorno, converti prima gli orari nel fuso locale del luogo. Altrimenti i confini di ogni giornata si spostano di diverse ore e gli effetti del fine settimana scompaiono. Il nostro CSV conserva la stringa UTC grezza e l'analisi la converte in base alla città.
Il secondo gruppo è il testo vuoto. Nelle recensioni più recenti dei nostri tre luoghi, dal 35% al 45% delle righe non ha testo. Per l'analisi del sentiment o delle parole chiave, elimina le righe vuote e indica il denominatore nel report. Per l'andamento delle stelle, tienile. Applica entrambe le viste agli stessi dati e confrontale. I numeri di Austin visti sopra mostrano quanto possano divergere i due gruppi.
Il terzo gruppo è la lingua dei punteggi parziali. Le chiavi di detailed_rating seguono la lingua della recensione. Con lang: es419 a Città del Messico, le chiavi erano comida, servicio e ambiente. Nelle recensioni in inglese di Singapore, erano food, service e atmosphere.
Se unisci più paesi in un'unica tabella, prima mappa le chiavi su un unico set. Altrimenti lo stesso punteggio «service» diventa due colonne. L'elenco dei campi del catalogo non lo indica: ce ne siamo accorti mettendo due risposte una accanto all'altra.
Il quarto gruppo riguarda i duplicati. Una recensione può comparire in due pagine, soprattutto se ripeti l'esecuzione qualche ora dopo: le nuove recensioni spingono in basso quelle vecchie e le recensioni ai margini delle pagine si sovrappongono. Deduplica per id della recensione, come fa l'exporter. Deduplica i luoghi per place ID, perché lo stesso luogo può comparire con nomi diversi in ricerche diverse. Non usare l'url della recensione come chiave, perché contiene un parametro di lingua come hl=en.
Il quinto gruppo sono i campi del luogo. I valori state e city nei risultati di ricerca sono testo di visualizzazione, non codici puliti. Nella ricerca su Città del Messico con il parametro di località, uno stesso stato può avere due grafie. Zacatecas compare in 13 righe come «Zacatecas» e in 1 come «Zac.». Quintana Roo compare in 2 righe come «Quintana Roo» e in 2 come «Q.R.». Anche Nuevo León, Jalisco e Tabasco hanno forme abbreviate.
Le 49 righe fuori da Città del Messico mostrano 16 stringhe di stato ma solo 11 stati. Nella ricerca per parola chiave, state è «Cd. de México» in 42 righe e «CDMX» in 8. Nella ricerca su Singapore, 2 righe su 50 non hanno city. Se raggruppi per state grezzo, uno stato diventa due righe. Prima di raggruppare, mappa le forme abbreviate sui nomi completi, oppure usa latitudine e longitudine per individuare la zona.
| Problema | Cosa abbiamo osservato | Soluzione |
|---|---|---|
| Fusi orari | posted_at è in UTC | Converti gli orari nel fuso locale prima del conteggio giornaliero |
| Testo vuoto | Dal 35% al 45% delle righe più recenti | Eliminale per l'analisi del testo, tienile per l'andamento delle stelle |
| Chiavi dei punteggi parziali | food in inglese, comida in spagnolo | Mappa le chiavi su un unico set prima di unire |
| Duplicati | I bordi delle pagine si sovrappongono tra un'esecuzione e l'altra | Deduplica per id della recensione e per place ID |
| Campi del luogo | «Zac.» e «Zacatecas», «CDMX» e «Cd. de México» | Mappa le forme abbreviate su un unico nome prima di raggruppare |
Costi per caso d'uso
I prezzi unitari si valutano meglio all'interno di lavori reali. I numeri qui sotto usano i prezzi unitari dei nostri test e del listino di Google. Escludono server, tempo del personale e altri costi.
Il primo lavoro è una lista di lead commerciali: tutti gli studi dentistici di Austin, con nome, telefono, sito web, valutazione e numero di recensioni, senza testo delle recensioni. La ricerca di EveryInfra restituisce 50 luoghi per chiamata a 0,001389 $. Le nostre due pagine hanno dato 100 studi diversi per 0,002778 $. Una lista di 1.000 studi richiede circa 20 chiamate, ovvero 0,028 $.
Con la paginazione, una singola parola chiave arriva al massimo a 120 righe, quindi suddividi la città in zone o varia la parola chiave. Lo SKU ufficiale Text Search Pro include 5.000 chiamate gratuite al mese e poi costa 32 $ per 1.000 [3][6]. A queste dimensioni, la quota gratuita copre l'intero lavoro. La differenza sta nelle regole di caching e visualizzazione dei risultati ufficiali [7].
Il secondo lavoro è il monitoraggio delle recensioni. Una catena ha 50 sedi e controlla le nuove recensioni di ciascuna una volta alla settimana. Se le sedi sono tue, la Business Profile API è gratuita ed è la soluzione migliore [12]. Se sono sedi in franchising o di un'agenzia, oppure monitori per conto di un cliente, ti serve un'API per i dati.
Una chiamata per luogo alla settimana, per 52 settimane e 50 luoghi, equivale a 2.600 chiamate, ovvero circa 3,61 $ all'anno. La Places API ufficiale non può svolgere questo lavoro. Non restituisce le recensioni più recenti e le cinque recensioni che mostra possono rimanere le stesse per mesi.
Il terzo lavoro è la ricerca. Un quartiere ha 500 ristoranti e vuoi le 100 recensioni più recenti di ciascuno, quindi 50.000 recensioni in totale. Con un'API per i dati sono 500 chiamate per le recensioni più circa 15 chiamate di ricerca, circa 0,72 $. La Places API ufficiale fornisce al massimo 2.500 recensioni (500 luoghi per 5), e sono un campione selezionato.
Nel nostro test su Singapore, quel campione aveva in media 0,15 stelle in più rispetto alle recensioni recenti e un testo più di sette volte più lungo. In teoria, uno scraper fai da te può svolgere il lavoro. Lo storico delle issue del progetto open source suggerisce che potresti ritrovarti a metà lavoro con il problema delle «sole 10 recensioni» [33].
| Caso d'uso | Places API ufficiale | API per i dati di EveryInfra |
|---|---|---|
| 1.000 studi dentistici di Austin, solo lista | Entro la quota gratuita di Text Search | Circa 20 chiamate, 0,028 $ |
| 50 sedi, nuove recensioni ogni settimana, un anno | Impossibile: non è disponibile l'ordinamento per recensioni più recenti | 2.600 chiamate, circa 3,61 $ |
| 500 ristoranti, le 100 recensioni più recenti di ciascuno | Al massimo 2.500 recensioni selezionate | Circa 515 chiamate, circa 0,72 $ |
Come scegliere uno scraper per Google Maps: sei verifiche
Chi cerca il miglior scraper per Google Maps non ha bisogno dello strumento più famoso, ma di uno che restituisca i dati in modo affidabile a un costo sostenibile. Elenchiamo le verifiche per categoria, non per marchio. Puoi testare ciascuna verifica con una piccola prova che costa pochi centesimi.
| Verifica | Come testarla | Il nostro valore di riferimento |
|---|---|---|
| Recensioni per luogo e paginazione per data | Scegli un luogo con oltre 1.000 recensioni e arriva alla pagina 3 | API ufficiale: 5. EveryInfra: 400 righe per ordinamento |
| Unità di fatturazione e addebiti in caso di errore | Invia un parametro errato e una data since futura | 422 e 429 senza addebito. Chiamate con risultati vuoti e chiamate non riuscite rimborsate |
| Costo reale per 1.000 recensioni | Addebito diviso per le righe restituite, moltiplicato per 1.000 | $0,01389 con 100 per chiamata |
| Campi | Cerca risposte del titolare, punteggi parziali e foto | owner_response, detailed_rating, image_urls |
| Precisione della località | Cerca una città indicando la località in due modi diversi | Città del Messico: parametro 1 su 50, parola chiave 50 su 50 |
| Uso con strumenti di AI | Verifica il supporto per MCP o la presenza di definizioni di tool per il function calling | Sì, un server MCP remoto |
La seconda riga è quella che chi acquista trascura più spesso. Gli strumenti che fatturano per risultato di solito non addebitano i risultati vuoti, ma le regole per i lavori lasciati a metà variano. Per le API a chiamata, verifica se i risultati vuoti e gli errori vengono rimborsati. Basta un test da pochi centesimi per saperlo.
La terza riga è simile. Non fidarti del prezzo di listino: dividi l'addebito reale per il numero reale di righe. Molti prezzi per 1.000 presuppongono pagine piene, e il tuo luogo potrebbe avere solo qualche decina di recensioni.
Quando conviene l'API ufficiale o uno scraper fai da te
Un'API per i dati non è sempre la risposta migliore. In tre casi suggeriamo un'altra strada. Primo: se ti servono cinque recensioni rappresentative per luogo per meno di 1.000 luoghi al mese, la quota gratuita della Places API ufficiale ti basta. Inoltre puoi mostrare legalmente le recensioni nella tua app, a patto di indicare l'attribuzione dell'autore.
Secondo: se le recensioni riguardano le tue sedi, usa la Business Profile API. Restituisce tutte le recensioni, ti permette di rispondere e non costa nulla: nessun servizio di terze parti può eguagliarla.
Terzo: se ti serve solo un elenco di attività di una città, parti dagli open data pubblici. Singapore ha un dataset degli esercizi di ristorazione autorizzati con oltre 36.000 righe [28]. La Singapore Food Agency ha aggiornato la sua pagina dei track record il 1° novembre 2026 [29]. Il Messico ha la directory DENUE [30] e lo US Census Bureau ha i County Business Patterns [31]. Questi dataset non contengono valutazioni né recensioni. Una combinazione comune è una tabella di base governativa più le recensioni recenti dei luoghi che ti interessano.
Uno scraper fai da te ha senso in un solo caso: la tua esigenza è molto specifica, per esempio un elemento che solo un browser mostra, e il tuo team accetta un progetto di manutenzione a lungo termine. Devi anche accettare che possa rompersi in qualsiasi momento e che possa violare i termini di servizio. Se l'unico obiettivo è risparmiare, i numeri di questa guida dicono il contrario. A 0,001389 $ per 100 recensioni, il tempo di un ingegnere per sistemare lo script una sola volta costa più di un anno di chiamate.
Anche EveryInfra ha dei limiti, e li abbiamo visti in questi test. Un ordinamento si ferma a 400 righe. Per un luogo con 8.226 recensioni non puoi ottenere lo storico completo: ottieni le 400 più recenti più le prime 400 per pertinenza, e i due insiemi si sovrappongono.
Le righe oltre la 200 richiedono la modalità asincrona e un ciclo di polling. A Città del Messico, il parametro di località ha collocato in città solo 1 risultato su 50, e non ne conosciamo ancora la causa.
FAQ
Si può fare scraping di Google Maps gratis?
Ci sono due strade gratuite e legali. La Places API ufficiale offre ogni mese 1.000 chiamate gratuite a Place Details con recensioni; ogni chiamata può restituire fino a cinque recensioni [3][4]. Per le tue sedi, la Business Profile API legge tutte le recensioni gratuitamente [11]. Uno «scraper gratuito» di solito è un software open source, che si scarica gratis, ma server, proxy e manutenzione costano.
Come si fa lo scraping delle recensioni di Google Maps con Python?
Una semplice richiesta HTTP non restituisce le recensioni. Nel nostro test, nessuno dei 20 estratti di recensioni era presente nella pagina, quindi ti serve l'automazione del browser o un'API per i dati. Questa guida offre due esempi di codice. Uno è una bozza di automazione del browser che non abbiamo eseguito. L'altro è un exporter completo che chiama un'API per i dati e che abbiamo eseguito tre volte. Un utente di Reddit su r/learnpython ha posto la stessa domanda [41].
È legale fare scraping di Google Maps?
I termini di Google vietano il download massivo e lo scraping dei contenuti [13][14]. Negli Stati Uniti, le decisioni nei casi hiQ v. LinkedIn e Meta contro un'azienda di raccolta dei dati sono state favorevoli allo scraping di dati pubblici. Tuttavia, affrontano questioni giuridiche specifiche e la violazione dei termini può comunque comportare costi [21][22].
I dati degli autori delle recensioni rientrano anche in normative come il CCPA e il GDPR. Questa guida non costituisce una consulenza legale.
Perché la Places API restituisce solo cinque recensioni e come si ottengono le più recenti?
Il limite di cinque recensioni è una scelta progettuale. La documentazione di riferimento indica un massimo di cinque recensioni, ordinate per pertinenza, e non prevede token di pagina [1]. Per le tue sedi, ordina per data di aggiornamento nella Business Profile API [12]. Per gli altri luoghi, usa un'API per i dati o uno scraper. Le risposte alle domande 39223719 e 55235501 su Stack Overflow si fermano allo stesso limite [39][40].
Qual è il miglior scraper per Google Maps?
Non esiste una risposta unica. Dipende da quante recensioni ti servono, se ti serve la paginazione per data e quale modello di fatturazione accetti. Questa guida propone sei verifiche che puoi testare con pochi centesimi: recensioni per luogo, addebiti in caso di errore, costo reale per 1.000 recensioni, campi, precisione della località e uso da strumenti AI.
Quanto costa fare scraping delle recensioni di Google Maps?
Con EveryInfra una chiamata restituisce fino a 100 recensioni per 0,001389 $, quindi 1.000 recensioni costano circa 0,01389 $. Tutti i test di questa guida hanno usato 36 richieste e 26 chiamate addebitate, per un totale di 0,036113 $. Con la Places API ufficiale, oltre la quota gratuita, 1.000 recensioni costano circa 5,00 $.
Per iniziare
Apri la guida rapida per creare un account e una chiave API. I nuovi account ricevono un credito di prova; le condizioni attuali sono nella pagina dei prezzi. Leggi il catalogo gratuito su GET /api/v1/social/catalog e controlla parametri e prezzo di google_maps_reviews. Invia la richiesta curl di questa guida per un luogo che conosci e verifica che i campi siano quelli che ti servono. Salva l'exporter CSV, eseguilo su due pagine e aggiungi pagine secondo necessità.
Per confrontare le piattaforme di recensioni, vedi l'API per i dati di Yelp e l'API per i dati di Tripadvisor. Per una guida completa alla realizzazione, leggi il nostro tutorial sull'API per le recensioni di Google Maps.
Metodo e limiti
Abbiamo eseguito tutte le chiamate a EveryInfra il 2 novembre 2026, tra le 00:14 e le 00:36 SGT. La chiave di test aveva un limite di 10 richieste al minuto. Per ciascuna delle tre città abbiamo testato un solo luogo, quindi i campioni rappresentano le recensioni di quei luoghi in quel momento, non tutte le attività. I risultati ordinati per pertinenza e quelli più recenti cambiano nel tempo.
Prezzi e limiti della Places API provengono dalle pagine di Google al 2 novembre 2026. Non abbiamo chiamato la Places API con una chiave. Non abbiamo eseguito il codice di automazione del browser. Su una pagina di Maps è stata eseguita una sola richiesta HTTP semplice.
Abbiamo calcolato il valore «per 1.000 recensioni» così. Lato EveryInfra, abbiamo preso charged_usd da ogni risposta, l'abbiamo diviso per le recensioni di quella risposta e moltiplicato per 1.000. Tutte e nove le pagine di recensioni contenevano 100 recensioni, quindi ognuna ha dato 0,01389 $. Un luogo con meno di 100 recensioni, o un limit più basso, dà un prezzo per recensione più alto, perché la fatturazione è per chiamata.
Lato Places API, abbiamo diviso il prezzo della fascia per cinque, ipotizzando cinque recensioni per chiamata. Nessuno dei due calcoli include quote gratuite o credito di prova. I conteggi mensili delle recensioni mostravano oscillazioni che non sappiamo spiegare, quindi non abbiamo tracciato un grafico dell'andamento.
La tabella elenca tutte le chiamate addebitate di questa guida. Tutti gli orari sono espressi in SGT e si riferiscono al 2 novembre 2026.
| Orario (SGT) | Funzionalità | Target | Restituiti | Addebito |
|---|---|---|---|---|
| 00:14:43 | google_maps_reviews/search | Singapore, bak kut teh | 50 luoghi | $0.001389 |
| 00:15:07 | google_maps_reviews/profile | Song Fa Bak Kut Teh | 1 luogo | $0.001389 |
| 00:15:29, 00:16:42 | google_maps_reviews/reviews | Song Fa, più recenti, pagine 1 e 2 | 100 ciascuno | 0,001389 $ ciascuna |
| 00:16:10 | google_maps_reviews/reviews | Song Fa, pertinenza | 100 | $0.001389 |
| 00:18:27 | google_maps_reviews/reviews in modalità asincrona | Song Fa, più recenti, pagina 3 | 100 | $0.001389 |
| 00:17:10, 00:24:22 | google_maps_reviews/search | Dentista ad Austin, due pagine | 50 ciascuna | 0,001389 $ ciascuna |
| 00:20:02 | google_maps_reviews/profile | Swish Dental | 1 luogo | $0.001389 |
| 00:20:36, 00:23:41 | google_maps_reviews/reviews | Swish Dental, due pagine | 100 ciascuno | 0,001389 $ ciascuna |
| 00:17:32, 00:19:39 | google_maps_reviews/search | Città del Messico, due modi di indicare la località | 50 ciascuna | 0,001389 $ ciascuna |
| 00:22:35 | google_maps_reviews/profile | Tacos Chupacabras | 1 luogo | $0.001389 |
| 00:23:05, 00:23:24, 00:34:37 | google_maps_reviews/reviews | Chupacabras, tre pagine | 100 ciascuno | 0,001389 $ ciascuna |
| Dalle 00:32:39 alle 00:36:21 | google_maps_reviews/reviews | Tre esecuzioni dell'exporter CSV | 9 chiamate addebitate | $0.012501 |
Il totale è di 26 chiamate addebitate e 0,036113 $. Altre due chiamate sono state rimborsate (un risultato vuoto e un errore) e cinque errori di parametro o di limite di frequenza delle richieste non sono costati nulla.
Riferimenti
- Google Maps Platform, «Places API (New) REST reference, Place resource». https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places
- Google Maps Platform, «Place Details (New)». https://developers.google.com/maps/documentation/places/web-service/place-details
- Google Maps Platform, «core services pricing list». https://developers.google.com/maps/billing-and-pricing/pricing
- Google Maps Platform, «billing and pricing overview», aggiornato il 2026-10-30. https://developers.google.com/maps/billing-and-pricing/overview
- Google Maps Platform, «Places API usage and billing». https://developers.google.com/maps/documentation/places/web-service/usage-and-billing
- Google Maps Platform, «Text Search (New)». https://developers.google.com/maps/documentation/places/web-service/text-search
- Google Maps Platform, «Places API policies». https://developers.google.com/maps/documentation/places/web-service/policies
- Google Maps Platform, «Place IDs». https://developers.google.com/maps/documentation/places/web-service/place-id
- Google Maps Platform, «review summaries». https://developers.google.com/maps/documentation/places/web-service/review-summaries
- Google Maps Platform, «Places API release notes». https://developers.google.com/maps/documentation/places/web-service/release-notes
- Google Business Profile APIs, «work with review data». https://developers.google.com/my-business/content/review-data
- Google Business Profile APIs, «accounts.locations.reviews.list». https://developers.google.com/my-business/reference/rest/v4/accounts.locations.reviews/list
- «Google Maps Platform Terms of Service», sezione 3.2.3(a). https://cloud.google.com/maps-platform/terms
- «Google Maps and Google Earth Additional Terms of Service». https://www.google.com/help/terms_maps/
- «Google Maps user contributed content policy, prohibited content». https://support.google.com/contributionpolicy/answer/7400114
- robots.txt di google.com, scaricato il 2026-11-02. https://www.google.com/robots.txt
- IETF, «RFC 9309 Robots Exclusion Protocol». https://www.rfc-editor.org/rfc/rfc9309.html
- Blog di Google, «Fan-Favorite Dining List», 8 ottobre 2026. https://blog.google/products-and-platforms/products/maps/google-maps-fan-favorite-dining-list/
- 9to5Google, «Gemini in Google Maps on CarPlay», 21 ottobre 2026. https://9to5google.com/2026/10/21/google-maps-carplay-gemini/
- Search Engine Land, «Google Ask Maps and local businesses». https://searchengineland.com/google-ask-maps-make-your-business-easier-to-recommend-496672
- Corte d'appello degli Stati Uniti per il Nono circuito, «hiQ Labs v. LinkedIn», 18 aprile 2022. https://cdn.ca9.uscourts.gov/datastore/opinions/2022/04/18/17-16783.pdf
- Tribunale distrettuale degli Stati Uniti N.D. Cal., causa Meta Platforms 3:23-cv-00077, ordinanza del 23 gennaio 2024. https://www.govinfo.gov/app/details/USCOURTS-cand-3_23-cv-00077/USCOURTS-cand-3_23-cv-00077-7
- Procuratore generale della California, «California Consumer Privacy Act». https://oag.ca.gov/privacy/ccpa
- Unione europea, Regolamento (UE) 2016/679 (GDPR). https://eur-lex.europa.eu/eli/reg/2016/679/oj
- Singapore PDPC, «PDPA overview». https://www.pdpc.gov.sg/about/the-legislation/pdpa-overview
- Singapore PDPC, «Personal Data Protection Act». https://www.pdpc.gov.sg/overview-of-pdpa/the-legislation/personal-data-protection-act
- Messico, legge federale sulla protezione dei dati personali in possesso dei privati, DOF 2025-03-20. https://www.ordenjuridico.gob.mx/Documentos/Federal/html/wo125102.html
- data.gov.sg, «NEA licensed eating establishments». https://data.gov.sg/datasets/d_227473e811b09731e64725f140b77697/view
- Singapore Food Agency, «track records», aggiornato il 1° novembre 2026. https://www.sfa.gov.sg/tools-and-resources/track-records
- INEGI, DENUE, elenco nazionale delle unità economiche. https://www.inegi.org.mx/app/mapa/denue/default.aspx
- US Census Bureau, «County Business Patterns». https://www.census.gov/programs-surveys/cbp.html
- GitHub, progetto open source di scraper per Google Maps, 7.148 stelle. https://github.com/gosom/google-maps-scraper
- GitHub, issue 327, 1° settembre 2026. https://github.com/gosom/google-maps-scraper/issues/327
- GitHub, issue 338, 6 ottobre 2026. https://github.com/gosom/google-maps-scraper/issues/338
- GitHub, issue 341, 9 ottobre 2026. https://github.com/gosom/google-maps-scraper/issues/341
- GitHub, release da v1.16.3 a v1.18.1. https://github.com/gosom/google-maps-scraper/releases
- Playwright for Python, «Installation». https://playwright.dev/python/docs/intro
- Documentazione di Python, «csv module». https://docs.python.org/3/library/csv.html
- Stack Overflow, «more than 5 reviews from the Places API». https://stackoverflow.com/questions/39223719/to-get-more-than-5-reviews-from-google-places-api
- Stack Overflow, «latest reviews with the Places API». https://stackoverflow.com/questions/55235501/how-to-get-latest-reviews-using-google-places-api
- Reddit r/learnpython, «how to get place reviews». https://www.reddit.com/r/learnpython/comments/1c94ejb/how_can_i_get_places_reviews/
- GitHub, issue 337, 5 ottobre 2026. https://github.com/gosom/google-maps-scraper/issues/337
- GitHub, issue 346, 22 ottobre 2026. https://github.com/gosom/google-maps-scraper/issues/346
Riferimenti BL-70