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.

Illustrazione isometrica di isolati cittadini con segnaposto della mappa. Dai negozi si sollevano schede di recensioni che scorrono su un nastro trasportatore verde acqua fino a un vassoio, che rappresenta un'unica tabella di recensioni pulita.

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.

Illustrazione di tre strade che portano allo stesso isolato. Un casello, una strada in riparazione e un nastro trasportatore verde acqua con schede di recensioni.
L'API ufficiale ha un limite, uno scraper fatto in casa richiede manutenzione e un'API a pagamento per chiamata addebita ogni richiesta.

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.

Diagramma di flusso. A sinistra, tre riquadri pongono domande sulle cinque recensioni per luogo, sulla proprietà della scheda e sulla manutenzione dello scraper. Ogni risposta sì punta a destra verso la Places API ufficiale, la Business Profile API o uno scraper Python fatto in casa. Tre risposte no portano, lungo una freccia verde acqua, a un'API per i dati a pagamento per chiamata.

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.

ApproccioRecensioni per luogoOrdine e paginazioneCosto per 1.000 recensioniCosto principale
Places API ufficiale (Place Details)Fino a 5Solo per pertinenza, senza paginazione$0 entro la soglia gratuita, poi circa $5,00Limite rigido, attribuzione all'autore obbligatoria
Business Profile APITutte, ma solo per le tue sediValutazione o data di aggiornamento, 50 per pagina$0Solo le tue sedi verificate
Scraper Python fai da te con browserCiò che mostra la paginaScorrimento simulatoServer e proxy a parteModifiche alla pagina, rischio legato ai termini
API per i dati di EveryInfra400 righe per ordinamento, 100 per chiamataPer data più recente o pertinenza, con token di pagina$0,01389 con 100 per chiamataPagamento 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.

Screenshot della pagina di riferimento della Places API di Google Maps Platform. Un riquadro verde acqua evidenzia la riga reviews nell'elenco dei campi della risorsa Place. Il testo dice che l'elenco è ordinato per pertinenza e che possono essere restituite al massimo 5 recensioni.
Screenshot della documentazione di riferimento della Places API, consultata il 2 novembre 2026. Il campo reviews indica che vengono restituite al massimo 5 recensioni, ordinate per pertinenza. Documentazione di Google Maps Platform

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.

bash
# 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 meseFino a 100KDa 100K a 500KDa 500K a 1MDa 1M a 5MOltre 5M
Place Details Pro5,000$17.00$13.60$10.20$5.10$1.28
Place Details Enterprise1,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 Pro5,000$32.00$25.60$19.20$9.60$2.40
Ricerca testuale Enterprise + Atmosphere1,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.

Grafico a barre orizzontali in scala logaritmica. Mostra il costo in dollari USA per 1.000 recensioni. Il primo livello a pagamento della Places API costa $5,00. Il livello della Places API oltre 5 milioni di chiamate costa $0,456. La chiamata reviews di EveryInfra con 100 recensioni per chiamata costa $0,01389 ed è evidenziata in verde acqua.

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.

python
# 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].

DataIssueCosa hanno segnalato gli utentiStato
2026-09-01#327L'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#331Molti errori del motore di scraping durante le esecuzioniChiusa
2026-10-05#337Dopo l'aggiornamento alla v1.18.0, l'elenco dei job web resta vuoto e il pulsante di avvio non fa nullaAperta
2026-10-06#338Tutti i job di scraping falliscono perché la pagina o il contesto del browser si sono chiusiAperta
2026-10-09#341Il titolo è «300 Reviews per place»Aperta
2026-10-22#346Un job web resta in stato di esecuzione perché un contesto del browser non si chiudeAperta

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.

bash
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.

Screenshot di una risposta API su una scheda di codice scura. L'intestazione riporta POST /api/v1/social, google_maps_reviews/reviews, 2026-11-02 00:15 SGT. Riquadri verde acqua evidenziano count 100 e charged_usd 0.001389 sopra due record di recensioni oscurati.
Estratto di una risposta reale con i nomi dei recensori oscurati. Una chiamata ha restituito 100 recensioni e ha addebitato $0,001389. Risposta reale dell'API di EveryInfra

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.

CampoSignificatoNelle 200 recensioni più recenti di Austin
ratingDa 1 a 5 stelle200 su 200
posted_atData di pubblicazione in UTC200 su 200
textTesto della recensione, può essere vuoto130 con testo (65%)
owner_response e owner_response_atRisposta del proprietario e data della risposta146 (73%)
detailed_ratingPunteggi parziali, per esempio cibo o servizio0 per questa clinica
image_urlsFoto allegate alla recensione3
is_local_guide e reviewer_review_countIndicatore Local Guide e numero di recensioni del recensore58 scritte da Local Guide
like_countVoti «Utile»200 su 200
id, url e place_idIdentificatori della recensione e del luogo200 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.

Grafico a barre raggruppate. Confronta la valutazione della scheda con la media delle recensioni più recenti per tre luoghi. Ristorante di Singapore: 4,4 in scheda e 4,65 sulle 300 più recenti; dentista di Austin: 4,6 e 4,305 sulle 200 più recenti; taqueria di Città del Messico: 4,2 e 4,275 sulle 200 più recenti. Le barre delle recensioni più recenti sono verde acqua.

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.

Grafico a punti delle stelle medie di quattro insiemi di recensioni di un ristorante di Singapore. Scheda 4,4 su 8.226 recensioni, prime 5 per pertinenza 4,8, prime 100 per pertinenza 4,5 e 300 più recenti 4,65. L'asse va da 4,0 a 5,0, e il punto delle prime 5 è verde acqua.

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.

Grafico a barre della lunghezza mediana del testo delle recensioni che hanno un testo. Prime 5 per pertinenza: 517 caratteri. Prime 100 per pertinenza: 357 caratteri. 300 più recenti: 67 caratteri. Le etichette mostrano la quota con testo: 100%, 100% e 63%.

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.

Grafico a barre impilate al 100% della distribuzione delle stelle nelle recensioni più recenti. Singapore, 300 recensioni: 228 da cinque, 52 da quattro, 13 da tre, 1 da due, 6 da una. Austin, 200 recensioni: 156 da cinque, 7 da quattro, 5 da tre, 6 da due, 26 da una. Città del Messico, 200 recensioni: 121 da cinque, 42 da quattro, 21 da tre, 3 da due, 13 da una.

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.

Grafico a barre della quota di risultati di ricerca all'interno della città di destinazione. Città del Messico con il parametro della posizione: 1 su 50. Città del Messico con il luogo nella parola chiave: 50 su 50. Austin con il parametro della posizione: 99 su 100. La barra della parola chiave è verde acqua.

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.

Grafico a barre delle righe fuori ordine cronologico nelle recensioni ordinate per più recenti. Singapore 6 su 300. Città del Messico 18 su 200. Austin 50 su 200, cioè il 25%.

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 fattoRispostaAddebitoPasso successivo indicato nella risposta
00:15:56Richiesta della pagina 2 subito dopo la pagina 1, oltre 10 al minuto429 rate_limited, retry_after 4 secondiNessunoAttendi, poi fai un nuovo tentativo
00:16:03Inviato un token di pagina vuoto422 invalid_page_tokenNessunoRinvia next_page_token così come ricevuto
00:17:00Richiesta della pagina 3 delle recensioni in modalità sincrona (oltre la riga 200)422 async_requiredNessunoAggiungi "mode":"async" ed esegui il polling del job
00:20:55since impostato al 2026-11-30, una data futura200, 0 recensioni, empty_result_refundedRimborsato, 0 $Nessuno
00:21:38Inviato un URL che non è una pagina di Maps503, nuovo tentativo consentito, retry_after di 20 secondiRimborsato, 0 $Indica che si tratta dell'errore 1 di 3
00:22:07sort impostato su oldest422 invalid_value, valori consentiti newest e relevanceNessunoCambia 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/:

python
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.

python
"""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.

ProblemaCosa abbiamo osservatoSoluzione
Fusi orariposted_at è in UTCConverti gli orari nel fuso locale prima del conteggio giornaliero
Testo vuotoDal 35% al 45% delle righe più recentiEliminale per l'analisi del testo, tienile per l'andamento delle stelle
Chiavi dei punteggi parzialifood in inglese, comida in spagnoloMappa le chiavi su un unico set prima di unire
DuplicatiI bordi delle pagine si sovrappongono tra un'esecuzione e l'altraDeduplica 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'usoPlaces API ufficialeAPI per i dati di EveryInfra
1.000 studi dentistici di Austin, solo listaEntro la quota gratuita di Text SearchCirca 20 chiamate, 0,028 $
50 sedi, nuove recensioni ogni settimana, un annoImpossibile: non è disponibile l'ordinamento per recensioni più recenti2.600 chiamate, circa 3,61 $
500 ristoranti, le 100 recensioni più recenti di ciascunoAl massimo 2.500 recensioni selezionateCirca 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.

VerificaCome testarlaIl nostro valore di riferimento
Recensioni per luogo e paginazione per dataScegli un luogo con oltre 1.000 recensioni e arriva alla pagina 3API ufficiale: 5. EveryInfra: 400 righe per ordinamento
Unità di fatturazione e addebiti in caso di erroreInvia un parametro errato e una data since futura422 e 429 senza addebito. Chiamate con risultati vuoti e chiamate non riuscite rimborsate
Costo reale per 1.000 recensioniAddebito diviso per le righe restituite, moltiplicato per 1.000$0,01389 con 100 per chiamata
CampiCerca risposte del titolare, punteggi parziali e fotoowner_response, detailed_rating, image_urls
Precisione della localitàCerca una città indicando la località in due modi diversiCittà del Messico: parametro 1 su 50, parola chiave 50 su 50
Uso con strumenti di AIVerifica il supporto per MCP o la presenza di definizioni di tool per il function callingSì, 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àTargetRestituitiAddebito
00:14:43google_maps_reviews/searchSingapore, bak kut teh50 luoghi$0.001389
00:15:07google_maps_reviews/profileSong Fa Bak Kut Teh1 luogo$0.001389
00:15:29, 00:16:42google_maps_reviews/reviewsSong Fa, più recenti, pagine 1 e 2100 ciascuno0,001389 $ ciascuna
00:16:10google_maps_reviews/reviewsSong Fa, pertinenza100$0.001389
00:18:27google_maps_reviews/reviews in modalità asincronaSong Fa, più recenti, pagina 3100$0.001389
00:17:10, 00:24:22google_maps_reviews/searchDentista ad Austin, due pagine50 ciascuna0,001389 $ ciascuna
00:20:02google_maps_reviews/profileSwish Dental1 luogo$0.001389
00:20:36, 00:23:41google_maps_reviews/reviewsSwish Dental, due pagine100 ciascuno0,001389 $ ciascuna
00:17:32, 00:19:39google_maps_reviews/searchCittà del Messico, due modi di indicare la località50 ciascuna0,001389 $ ciascuna
00:22:35google_maps_reviews/profileTacos Chupacabras1 luogo$0.001389
00:23:05, 00:23:24, 00:34:37google_maps_reviews/reviewsChupacabras, tre pagine100 ciascuno0,001389 $ ciascuna
Dalle 00:32:39 alle 00:36:21google_maps_reviews/reviewsTre esecuzioni dell'exporter CSV9 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

  1. Google Maps Platform, «Places API (New) REST reference, Place resource». https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places
  2. Google Maps Platform, «Place Details (New)». https://developers.google.com/maps/documentation/places/web-service/place-details
  3. Google Maps Platform, «core services pricing list». https://developers.google.com/maps/billing-and-pricing/pricing
  4. Google Maps Platform, «billing and pricing overview», aggiornato il 2026-10-30. https://developers.google.com/maps/billing-and-pricing/overview
  5. Google Maps Platform, «Places API usage and billing». https://developers.google.com/maps/documentation/places/web-service/usage-and-billing
  6. Google Maps Platform, «Text Search (New)». https://developers.google.com/maps/documentation/places/web-service/text-search
  7. Google Maps Platform, «Places API policies». https://developers.google.com/maps/documentation/places/web-service/policies
  8. Google Maps Platform, «Place IDs». https://developers.google.com/maps/documentation/places/web-service/place-id
  9. Google Maps Platform, «review summaries». https://developers.google.com/maps/documentation/places/web-service/review-summaries
  10. Google Maps Platform, «Places API release notes». https://developers.google.com/maps/documentation/places/web-service/release-notes
  11. Google Business Profile APIs, «work with review data». https://developers.google.com/my-business/content/review-data
  12. Google Business Profile APIs, «accounts.locations.reviews.list». https://developers.google.com/my-business/reference/rest/v4/accounts.locations.reviews/list
  13. «Google Maps Platform Terms of Service», sezione 3.2.3(a). https://cloud.google.com/maps-platform/terms
  14. «Google Maps and Google Earth Additional Terms of Service». https://www.google.com/help/terms_maps/
  15. «Google Maps user contributed content policy, prohibited content». https://support.google.com/contributionpolicy/answer/7400114
  16. robots.txt di google.com, scaricato il 2026-11-02. https://www.google.com/robots.txt
  17. IETF, «RFC 9309 Robots Exclusion Protocol». https://www.rfc-editor.org/rfc/rfc9309.html
  18. Blog di Google, «Fan-Favorite Dining List», 8 ottobre 2026. https://blog.google/products-and-platforms/products/maps/google-maps-fan-favorite-dining-list/
  19. 9to5Google, «Gemini in Google Maps on CarPlay», 21 ottobre 2026. https://9to5google.com/2026/10/21/google-maps-carplay-gemini/
  20. Search Engine Land, «Google Ask Maps and local businesses». https://searchengineland.com/google-ask-maps-make-your-business-easier-to-recommend-496672
  21. 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
  22. 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
  23. Procuratore generale della California, «California Consumer Privacy Act». https://oag.ca.gov/privacy/ccpa
  24. Unione europea, Regolamento (UE) 2016/679 (GDPR). https://eur-lex.europa.eu/eli/reg/2016/679/oj
  25. Singapore PDPC, «PDPA overview». https://www.pdpc.gov.sg/about/the-legislation/pdpa-overview
  26. Singapore PDPC, «Personal Data Protection Act». https://www.pdpc.gov.sg/overview-of-pdpa/the-legislation/personal-data-protection-act
  27. 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
  28. data.gov.sg, «NEA licensed eating establishments». https://data.gov.sg/datasets/d_227473e811b09731e64725f140b77697/view
  29. Singapore Food Agency, «track records», aggiornato il 1° novembre 2026. https://www.sfa.gov.sg/tools-and-resources/track-records
  30. INEGI, DENUE, elenco nazionale delle unità economiche. https://www.inegi.org.mx/app/mapa/denue/default.aspx
  31. US Census Bureau, «County Business Patterns». https://www.census.gov/programs-surveys/cbp.html
  32. GitHub, progetto open source di scraper per Google Maps, 7.148 stelle. https://github.com/gosom/google-maps-scraper
  33. GitHub, issue 327, 1° settembre 2026. https://github.com/gosom/google-maps-scraper/issues/327
  34. GitHub, issue 338, 6 ottobre 2026. https://github.com/gosom/google-maps-scraper/issues/338
  35. GitHub, issue 341, 9 ottobre 2026. https://github.com/gosom/google-maps-scraper/issues/341
  36. GitHub, release da v1.16.3 a v1.18.1. https://github.com/gosom/google-maps-scraper/releases
  37. Playwright for Python, «Installation». https://playwright.dev/python/docs/intro
  38. Documentazione di Python, «csv module». https://docs.python.org/3/library/csv.html
  39. 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
  40. Stack Overflow, «latest reviews with the Places API». https://stackoverflow.com/questions/55235501/how-to-get-latest-reviews-using-google-places-api
  41. Reddit r/learnpython, «how to get place reviews». https://www.reddit.com/r/learnpython/comments/1c94ejb/how_can_i_get_places_reviews/
  42. GitHub, issue 337, 5 ottobre 2026. https://github.com/gosom/google-maps-scraper/issues/337
  43. GitHub, issue 346, 22 ottobre 2026. https://github.com/gosom/google-maps-scraper/issues/346

Riferimenti BL-70

Le nostre statistiche di visita interne sono sempre attive. Google Analytics viene caricato solo se scegli «Consenti analisi». Informativa sulla privacy