Come estrarre i risultati di Google Maps con Python
Attività, valutazioni, numero di recensioni e contatti da Google Maps in JSON, perché la Places API ufficiale diventa costosa, e quanto costa davvero una ricerca Maps. Con un esempio testato, agosto 2026.

Vuoi le attività che Google Maps mostra per una query: nomi, valutazioni, numero di recensioni, indirizzi, telefoni, siti web. Questo post copre i tre modi per ottenerle, con i numeri reali di quanto costa ciascuno, e un esempio Python che abbiamo eseguito prima di pubblicare.
Perché non la Places API ufficiale?
La via ufficiale esiste ed è la risposta giusta per alcuni prodotti, ma tre sue proprietà sorprendono le persone nel momento in cui è troppo tardi per cambiare strada:
- Prezzo. La Text Search della Places API costa $32,00 per 1.000 richieste sul tier Pro, verificato sulla pagina prezzi di Google il 20 ottobre 2026, con 5.000 chiamate gratuite al mese. Il prezzo unitario inizia a scendere in modo significativo solo oltre le 100.000 richieste mensili.
- Tetto sui risultati. Una Text Search restituisce al massimo 60 luoghi su tre pagine. Per query tipo “ristoranti in una città” l’interfaccia della mappa conosce molte più attività di quante l’API ti darà mai.
- Licenza. I dati Places arrivano con restrizioni su archiviazione e visualizzazione. Se il tuo caso d’uso è costruire una lista di lead o un dataset, il vincolo vero sono i termini, non il codice.
L’alternativa fai-da-te, guidare un browser headless sull’interfaccia di Maps, si rompe per le stesse ragioni per cui si rompe lo scraping di Google Search: blocchi IP, markup offuscato che ruota, e un pannello risultati a scorrimento infinito che richiede una sessione browser reale per ogni query. È un progetto di manutenzione, non uno script.
La versione che funziona
Mandi la query a un’API che possiede i browser e il parsing, e ricevi JSON:
import requests
API_KEY = "faf_live_..." # la tua chiave FastAF
resp = requests.get(
"https://api.fastaf.co/v1/maps",
params={
"query": "best pizza in Naples Italy",
"page": 0,
},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
)
resp.raise_for_status()
for place in resp.json()["search_results"]:
print(f'{place["rating"]} ({place["reviews"]:>6}) {place["title"]}')
Abbiamo eseguito esattamente questa richiesta scrivendo questo post (agosto 2026). Ha restituito 20 luoghi per 5 crediti, il primo era L’Antica Pizzeria da Michele: valutazione 4,3, 54.724 recensioni, fascia di prezzo, indirizzo, telefono, sito web, stato di apertura e coordinate GPS, tutto come semplici campi JSON. Niente browser, niente proxy, niente parsing.
Quali campi ottieni per ogni luogo?
Ogni voce di search_results porta i dati che il pannello di Maps mostra:
| Campo | Esempio dal nostro test |
|---|---|
title |
L’Antica Pizzeria da Michele |
rating / reviews |
4.3 / 54724 |
type, types |
Pizza restaurant, Italian restaurant, … |
price |
€1–10 |
address |
Via Cesare Sersale, 1, 80139 Napoli NA, Italy |
phone |
+39 392 … |
website |
il sito dell’attività |
open_state |
Closed · Opens 10:30 AM |
gps_coordinates |
latitudine / longitudine |
place_id, data_id |
identificatori stabili per lookup successivi |
Due parametri da conoscere oltre a query: ll fissa la ricerca su coordinate e zoom (@40.85,14.26,14z), così controlli tu la porzione di mappa invece di lasciarla indovinare al testo della query, e page scorre le pagine di risultati, circa 20 luoghi alla volta, oltre il tetto dei 60 dell’API ufficiale.
Quanto costa una ricerca su Maps?
Una ricerca Google Maps su FastAF costa 5 crediti, come una ricerca Google Search. Sul pacchetto Scale ($99 per 300.000 crediti) sono 60.000 ricerche Maps, cioè $1,65 per 1.000. Le stesse 60.000 ricerche sulla Text Search ufficiale a $32,00 per 1.000 fanno $1.760 (55.000 a pagamento, dopo le 5.000 chiamate gratuite del mese), e restituiscono al massimo 60 luoghi ciascuna.
Il piano gratuito è di 500 crediti senza carta, cioè 100 ricerche Maps, abbastanza per verificare la copertura dei campi sulle tue query reali prima di decidere qualsiasi cosa. Le richieste fallite non vengono mai fatturate: i crediti vengono riservati quando la richiesta parte e restituiti se non torna con un risultato.
Liste di lead: il ciclo pratico
L’uso più comune di questo endpoint è la lead generation locale. Il ciclo è: cerchi una categoria in una città, filtri sui campi, e hai una lista qualificata in pochi minuti:
def places(query, pages=3):
for page in range(pages):
resp = requests.get(
"https://api.fastaf.co/v1/maps",
params={"query": query, "page": page},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
)
resp.raise_for_status()
yield from resp.json()["search_results"]
# Attività con trazione reale ma senza sito: i classici prospect per una web agency.
leads = [
p for p in places("dentist in Austin TX")
if p.get("reviews", 0) > 50 and not p.get("website")
]
Tre pagine di una query sono 15 crediti. Una scansione di 50 città della stessa categoria a tre pagine l’una sono 750 crediti, circa $0,29 sul pacchetto Growth: le mail di follow-up ti costeranno più dei dati.