La generazione di lead convenzionale da azienda ad azienda spesso si basa sull'acquisto di directory statiche o elenchi di settore per definire il potenziale del territorio. Tuttavia, questi set di dati di punti di interesse (POI) statici diventano obsoleti quasi immediatamente. Poiché spesso mancano di uno stato di attività aggiornato o di una categorizzazione granulare del tipo di luogo, i team di vendita sul campo rischiano di perdere tempo prezioso a cercare attività chiuse definitivamente, classificate in modo errato o irrilevanti per il loro profilo cliente ideale.
Questa guida fornisce un flusso di lavoro per colmare questa lacuna utilizzando Places Insights e la Places API. Mappando il tuo attuale portafoglio clienti con gli ID luogo, puoi utilizzare BigQuery per isolare ogni attività operativa in un territorio che non è già presente nel database del tuo sistema di gestione delle relazioni con i clienti (CRM) . Questa guida ti mostra come creare questo motore di esclusione per fornire ai tuoi rappresentanti sul campo un elenco di lead verificati e con targeting specifico.

Esempio di applicazione
Supponiamo che un fornitore di point of sale (POS) stia pianificando un'espansione delle vendite sul campo a New York City. In genere, l'organizzazione estrarrebbe un report sul numero totale di esercizi di ristorazione per codice postale. Questo approccio comporta il rischio che i rappresentanti vendite si affidino a dati inattivi, come le sedi chiuse definitivamente, o a lead irrilevanti, come una cucina di catering privata senza negozio fisico.
Immagina invece un approccio modernizzato che utilizza Places Insights, che sfrutta la scalabilità globale di Google Maps e i dati aggiornati convalidati da più fonti.
Places Insights supporta quasi 500 categorie di luoghi e oltre 70 attributi, il che ti consente di perfezionare i tuoi potenziali clienti con elevata precisione in base a tipi di attività specifici (ad es. scandinavian_restaurant), orari di apertura e offerte di servizi (ad es. accepts_credit_cards). Incrociando Places Insights con il tuo CRM interno, puoi fornire al tuo team di vendita un elenco di potenziali clienti non contattati e con targeting specifico.
Flusso di lavoro della soluzione
Questa guida fornisce un framework tecnico per creare una "mappa dei lead" dinamica che filtra automaticamente il tuo attuale portafoglio clienti, lasciando solo i nuovi lead operativi che il tuo team di vendita può perseguire.
L'architettura in quattro passaggi
- Definisci i tipi di luoghi target: mappa i profili cliente ideali con i tipi di luoghi.
- Identifica le aree con un elevato potenziale: esegui le funzioni di conteggio dei luoghi in BigQuery per generare mappe termiche di densità delle attività target operative.
- Normalizza i dati CRM con gli ID luogo: elabora i record CRM non strutturati tramite una pipeline di pulizia dei dati, utilizzando le API Address Validation, Geocoding e Places, per trovare gli ID luogo dei tuoi clienti esistenti.
- Esegui l'esclusione dello spazio bianco: unisci gli ID luogo del CRM ai dati di Places Insights in BigQuery per filtrare dinamicamente i clienti esistenti e generare un elenco di nuovi lead.
Prerequisiti
Prima di iniziare, assicurati di avere quanto segue:
Progetto Google Cloud:
- Un progetto Google Cloud con la fatturazione abilitata.
Accesso ai dati:
- Abbonamento a Places Insights in BigQuery.
- Il tuo set di dati CRM (ad es. una tabella BigQuery) contenente i nomi e gli indirizzi delle attività dei clienti esistenti da utilizzare come elenco di esclusione.
Google Maps Platform:
- Una chiave API.
- Le seguenti API abilitate per la tua chiave:
Autorizzazioni IAM:
- Assicurati che l'utente o il service account disponga dei seguenti IAM
ruoli per eseguire
query e gestire il set di dati:
Ruolo ID BigQuery Data Editor roles/bigquery.dataEditorUtente BigQuery roles/bigquery.user
- Assicurati che l'utente o il service account disponga dei seguenti IAM
ruoli per eseguire
query e gestire il set di dati:
Consapevolezza dei costi:
- Questo tutorial utilizza i componenti fatturabili di Google Cloud. Tieni presente i potenziali costi relativi a:
- BigQuery: addebito per gli slot di calcolo utilizzati o i dati elaborati durante l'esecuzione delle query.
- Places Insights: addebito in base all'utilizzo delle query.
- Google Maps Platform: addebito per richiesta per le API Address Validation, Geocoding e Ricerca testuale.
- Questo tutorial utilizza i componenti fatturabili di Google Cloud. Tieni presente i potenziali costi relativi a:
Passaggio 1: definisci i tipi di luoghi target
Places Insights supporta quasi 500 categorie di luoghi e oltre 70 attributi (ad es. orari di apertura, tipi di pagamento e stato operativo). Eseguire query sull'intero set di dati in modo indiscriminato è inefficiente e costoso.
Come passaggio fondamentale, utilizza un LLM come Gemini per tradurre i profili cliente interni in tipi di luoghi, utilizzati durante la creazione di una query per Places Insights. Questa definizione della tassonomia a livello macro garantisce che le successive ricerche BigQuery siano altamente mirate, riducendo il sovraccarico di elaborazione del calcolo.
Ad esempio, se stai progettando un flusso di lavoro per un sistema point of sale, puoi fornire a Gemini l'elenco dei tipi di luoghi e utilizzare il seguente prompt:
"Sei un analista di mercato. Tra i tipi di luoghi di Google Maps supportati, quali sono i target principali per un fornitore di sistemi point of sale? Giustifica la tua decisione."
In base a questo prompt, Gemini analizzerà la tassonomia e restituirà un sottoinsieme mirato di tipi di luoghi pertinenti da utilizzare nel filtro types di BigQuery:
| Categoria principale | Giustificazione | Tipi di luoghi chiave |
|---|---|---|
| Cibo e bevande | Richiede l'elaborazione rapida delle transazioni, la gestione dei tavoli, l'emissione di biglietti per gli ordini e la gestione delle mance. | restaurant, bar, cafe, coffee_shop |
| Shopping | Necessita di un monitoraggio robusto dell'inventario, della scansione dei codici a barre, dell'elaborazione dei resi e delle integrazioni di fidelizzazione. | clothing_store, grocery_store, supermarket, convenience_store |
| Servizi e salute e benessere | Richiede la prenotazione, la pianificazione, i profili cliente e il monitoraggio delle commissioni integrati degli appuntamenti. | hair_salon, beauty_salon, spa, massage |
| Intrattenimento, svago e sport | Richiede una gestione rapida delle corse dei clienti, la scansione dei biglietti digitali e la vendita rapida di concessioni. | movie_theater, amusement_park, bowling_alley, stadium |
Ai fini di questa guida, ci concentreremo sui tipi di luoghi suggeriti per la categoria Cibo e bevande.
Passaggio 2: estrai i conteggi delle attività per identificare le aree con un elevato potenziale
Per individuare le aree di opportunità, devi prima avere una visione macro della densità delle attività. Puoi farlo eseguendo le funzioni di conteggio dei luoghi
(ad es.
PLACES_COUNT_PER_H3
o
PLACES_COUNT_PER_GEO)
in BigQuery.
Sebbene tu possa eseguire query direttamente sul set di dati, le funzioni di conteggio dei luoghi sono query SQL predefinite e ottimizzate che non applicano la soglia di aggregazione standard di un minimo di 5 luoghi (le query dirette standard ometteranno le righe con 1-4 attività; tuttavia, queste funzioni ti consentono di vedere esattamente dove esiste anche un singolo potenziale cliente). Fondamentalmente, queste funzioni restituiscono un array di un massimo di 250 ID luogo per area geografica utilizzando la colonna sample_place_ids. In questo modo, i pianificatori del territorio dispongono sia della mappa termica statistica sia degli identificatori di base necessari per la generazione di lead.
La query seguente mostra come recuperare dinamicamente un poligono complesso (l'intero confine di New York City) utilizzando un set di dati pubblico e quindi passare la geografia alla funzione di conteggio dei luoghi. Utilizzando l'indice spaziale H3 con una risoluzione più ampia (8) in tutta la città, puoi generare una mappa di densità a livello macro.
Inoltre, selezionando tutte le colonne (SELECT *), la funzione restituisce la colonna geography, un poligono che rappresenta la cella H3. In questo modo, puoi importare immediatamente i risultati di BigQuery negli strumenti di business intelligence (ad es.
Looker Studio) per creare visualizzazioni di mappe riempite che rivelano visivamente gli hotspot di mercato.
-- Illustrative logic: Extracting target business counts per H3 cell across New York City
DECLARE geo GEOGRAPHY;
-- Get the geography for New York City using the Overture Maps public dataset
SET geo = (SELECT geometry FROM `bigquery-public-data.overture_maps.division_area`
WHERE country = 'US' AND subtype = 'locality' AND names.primary = 'New York' LIMIT 1);
SELECT *
FROM `YOUR_PROJECT_NAME.places_insights___us.PLACES_COUNT_PER_H3`(
JSON_OBJECT(
'geography', geo,
'h3_resolution', 8,
'types',['restaurant', 'bar', 'cafe', 'coffee_shop'],
'business_status', ['OPERATIONAL']
)
)
ORDER BY count DESC;

Come si vede nella visualizzazione risultante, ci sono aree di attività target con una densità nettamente elevata in tutta Manhattan. Per il resto di questo documento, ci concentreremo su una di queste zone con un elevato potenziale: l'area vicino a Union Square.
Passaggio 3: normalizza i dati CRM con gli ID luogo
Per eseguire un'analisi di esclusione, devi prima tradurre i record CRM in ID luogo. Poiché i dati CRM sono spesso non strutturati, il passaggio di testo non elaborato alle API di ricerca produce tassi di corrispondenza bassi. Utilizza questa pipeline in due passaggi per pulire gli indirizzi, tenere conto della copertura API regionale e assicurarti di estrarre gli ID luogo degli esercizi corretti per BigQuery.
Supponiamo di avere i seguenti 5 clienti di ristoranti nel tuo CRM con sede a New York City:
| Nome luogo | Indirizzo |
|---|---|
| Boucherie Union Square | 225 Park Ave S, New York, NY 10003, Stati Uniti |
| Gramercy Tavern | 42 E 20th St, New York, NY 10003, Stati Uniti |
| Barn Joo Union Square | 35 Union Square W, New York, NY 10003, Stati Uniti |
| LOS TACOS No.1 | 200 Park Ave S, New York, NY 10003, Stati Uniti |
| Union Square Cafe | 101 E 19th St, New York, NY 10003, Stati Uniti |
Poiché questi record sono costituiti da testo non strutturato, non puoi unirli direttamente ai dati di Places Insights in BigQuery. Elabora invece ogni riga tramite la seguente pipeline per standardizzare il testo ed estrarre l'ID luogo.
Passaggio 3a: pulizia degli indirizzi e corrispondenza diretta
Standardizza prima i dati degli indirizzi. Scegli l'API in base al paese target:
Opzione 1: API Address Validation
Per le regioni
supportate,
passa il nome dell'attività e l'indirizzo CRM concatenati all'API. Esamina l'array result.geocode.placeTypes della risposta:
- Corrispondenza con l'esercizio: se contiene
establishmentopoint_of_interest, l'API ha risolto correttamente l'attività. Aggiungi questoplaceIdal set di dati e passa al record CRM successivo. Non sono necessarie ulteriori chiamate API per questa voce. - Corrispondenza non con l'esercizio: se non contiene questi tipi di attività, l'API non è riuscita a confermare in modo definitivo l'organizzazione aziendale. L'ID luogo restituito rappresenta un elemento geografico (ad es. un edificio, una strada o una città). Non utilizzare questo ID luogo per BigQuery, perché le unioni di esclusione non andranno a buon fine. Salva invece
result.address.formattedAddresse procedi al passaggio 3b.
Opzione 2: Geocoding API
Per le regioni non supportate da Address Validation, passa solo l'indirizzo CRM all'API Geocoding. Non includere il nome dell'attività, perché l'API Geocoding potrebbe restituire risultati imprevedibili. Estrai il formattedAddress risultante e procedi al passaggio 3b.
Architettura avanzata: gestione dei dati non strutturati con LLM
Se i dati CRM sono di qualità estremamente scarsa, ad esempio nomi e indirizzi delle attività mescolati in un unico campo di note di testo libero, pre-elabora i record con un LLM come Gemini. Puoi chiedere a Gemini di analizzare in modo pulito il nome dell'attività dalla località prima di inserirli in questa pipeline.
Passaggio 3b: risolvi l'entità dell'attività
Se il passaggio 3a restituisce solo un indirizzo pulito, concatenalo con il nome dell'attività CRM originale e passalo a API di ricerca testuale. La standardizzazione dell'indirizzo migliora notevolmente il tasso di corrispondenza.
Per ottimizzare le prestazioni e i costi, utilizza una maschera di campo (X-Goog-FieldMask:
places.id) e imposta "pageSize": 1 per assicurarti che venga restituito solo l'ID luogo della corrispondenza principale.
Esempio di richiesta di ricerca testuale:
curl -X POST -d '{
"textQuery" : "Gramercy Tavern 42 E 20th St, New York, NY 10003-1324, USA",
"pageSize": 1
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: places.id' \
'https://places.googleapis.com/v1/places:searchText'
Output della pipeline
Dopo aver elaborato i record CRM tramite questa pipeline in due passaggi, indipendentemente dal fatto che l'ID sia stato estratto correttamente nel passaggio 3a o risolto utilizzando la Ricerca testuale nel passaggio 3b, l'obiettivo finale è aggiungere una nuova colonna place_id al set di dati. La tabella risultante è ora pronta per essere caricata in BigQuery come elenco di esclusione.
| Nome luogo | Indirizzo | ID luogo |
|---|---|---|
| Boucherie Union Square | 225 Park Ave S, New York, NY 10003, Stati Uniti | ChIJc1Vf7KFZwokR1YL2Rn9oxi8 |
| Gramercy Tavern | 42 E 20th St, New York, NY 10003, Stati Uniti | ChIJvSQIgqFZwokRFYQbJdzceSs |
| Barn Joo Union Square | 35 Union Square W, New York, NY 10003, Stati Uniti | ChIJQ7XpyqNZwokRQpVfvGEViWM |
| LOS TACOS No.1 | 200 Park Ave S, New York, NY 10003, Stati Uniti | ChIJFZh0PABZwokRVzoJu0o-mLY |
| Union Square Cafe | 101 E 19th St, New York, NY 10003, Stati Uniti | ChIJxTHke6JZwokRCLWVd99eDBw |
Passaggio 4: esegui l'analisi di esclusione dello spazio bianco in BigQuery
Con i clienti esistenti mappati con gli ID luogo, utilizza le funzioni di conteggio dei luoghi per trovare i nuovi lead.
In questo esempio, cercheremo le attività target operative (ristoranti, bar, caffè e caffetterie) in un raggio di 850 metri da Union Square (40.73595, -73.99043). Per ottenere una visualizzazione più granulare per il routing a livello di strada, aumenteremo la funzione PLACES_COUNT_PER_H3 alla risoluzione 10.
Poiché la funzione restituisce gli ID luogo come array nella colonna sample_place_ids, dobbiamo UNNEST l'array per inserire ogni potenziale attività nella propria riga. Quindi, eseguiamo un LEFT JOIN con gli ID luogo dei clienti noti.
Per dimostrare che la logica di esclusione funziona per questa dimostrazione, la query seguente utilizza un'istruzione CASE per contrassegnare i risultati anziché filtrarli completamente.
Ordina anche in modo esplicito i clienti esistenti nella parte superiore della tabella dei risultati in modo da poter verificare che siano stati abbinati correttamente.
La query SQL
WITH existing_customers AS (
-- 1. Simulate the uploaded CRM table
SELECT * FROM UNNEST([
'ChIJc1Vf7KFZwokR1YL2Rn9oxi8', -- Boucherie Union Square
'ChIJvSQIgqFZwokRFYQbJdzceSs', -- Gramercy Tavern
'ChIJQ7XpyqNZwokRQpVfvGEViWM', -- Barn Joo Union Square
'ChIJFZh0PABZwokRVzoJu0o-mLY', -- LOS TACOS No.1
'ChIJxTHke6JZwokRCLWVd99eDBw' -- Union Square Cafe
]) AS place_id
),
target_area_businesses AS (
-- 2. Query Places Insights for target businesses in the radius
SELECT
h3_cell_index,
place_id
FROM `places_insights___us.PLACES_COUNT_PER_H3`(
JSON_OBJECT(
'geography', ST_GEOGPOINT(-73.99043, 40.73595),
'geography_radius', 850,
'h3_resolution', 10,
'types',['restaurant', 'bar', 'cafe', 'coffee_shop'],
'business_status', ['OPERATIONAL']
)
),
UNNEST(sample_place_ids) AS place_id
)
-- 3. The "Proof" Output: Flag them instead of filtering them out
SELECT
t.h3_cell_index,
t.place_id,
-- Flag whether the LEFT JOIN found a match in the CRM table
CASE
WHEN e.place_id IS NOT NULL THEN 'Existing Customer (To Be Excluded)'
ELSE 'Net-New Lead'
END AS lead_status,
CONCAT('https://www.google.com/maps/search/?api=1&query=Place&query_place_id=', t.place_id) AS actionable_maps_url
FROM target_area_businesses t
LEFT JOIN existing_customers e
ON t.place_id = e.place_id
ORDER BY
-- Explicitly sort the existing customers to the top (0 comes before 1)
CASE WHEN e.place_id IS NOT NULL THEN 0 ELSE 1 END ASC;
Risultati query
Ecco un estratto dell'output della query, che mostra come i clienti esistenti vengono identificati e separati correttamente dai nuovi lead all'interno delle stesse celle H3 granulari.
Nota come la query utilizza un'istruzione CONCAT per creare un
URL di Maps multipiattaforma, utilizzando
place_id. In questo modo viene generata automaticamente la colonna actionable_maps_url, che fornisce al tuo team di vendita un link immediato su cui fare clic per caricare l'attività esatta nell'app mobile Google Maps o in un browser.
h3_cell_index |
place_id |
lead_status |
actionable_maps_url |
|---|---|---|---|
| 8a2a100d2767fff | ChIJQ7XpyqNZwokRQpVfvGEViWM | Cliente esistente (da escludere) | https://www.google.com/maps/search/?api=1&query=Place&query_place_id=ChIJQ7XpyqNZwokRQpVfvGEViWM |
| 8a2a100d20effff | ChIJvSQIgqFZwokRFYQbJdzceSs | Cliente esistente (da escludere) | https://www.google.com/maps/search/?api=1&query=Place&query_place_id=ChIJvSQIgqFZwokRFYQbJdzceSs |
| 8a2a100d2397fff | ChIJc1Vf7KFZwokR1YL2Rn9oxi8 | Cliente esistente (da escludere) | https://www.google.com/maps/search/?api=1&query=Place&query_place_id=ChIJc1Vf7KFZwokR1YL2Rn9oxi8 |
| 8a2a100d2397fff | ChIJFZh0PABZwokRVzoJu0o-mLY | Cliente esistente (da escludere) | https://www.google.com/maps/search/?api=1&query=Place&query_place_id=ChIJFZh0PABZwokRVzoJu0o-mLY |
| 8a2a100d23b7fff | ChIJxTHke6JZwokRCLWVd99eDBw | Cliente esistente (da escludere) | https://www.google.com/maps/search/?api=1&query=Place&query_place_id=ChIJxTHke6JZwokRCLWVd99eDBw |
| 8a2a1072c96ffff | ChIJ6atD-WRZwokRULgcZ4TWin8 | Nuovo lead | https://www.google.com/maps/search/?api=1&query=Place&query_place_id=ChIJ6atD-WRZwokRULgcZ4TWin8 |
| 8a2a1072c96ffff | ChIJ09yg-llZwokRKAgp0jg6TCU | Nuovo lead | https://www.google.com/maps/search/?api=1&query=Place&query_place_id=ChIJ09yg-llZwokRKAgp0jg6TCU |
Visualizza i lead con Places UI Kit
Anziché fornire un URL di Maps non elaborato, puoi passare direttamente gli place_ids a
Places UI
Kit
per creare una dashboard di generazione di lead interna e completa per il tuo team di vendita.
Disponibile su tutte le piattaforme, puoi inserire i componenti predefiniti per
web,
Android,
e
iOS.
Questi componenti mostrano automaticamente dati POI completi, come foto, valutazioni e orari di apertura, senza richiedere la scrittura di codice UI frontend o la gestione manuale delle risposte API.
Limiti dei dati
Le funzioni di conteggio dei luoghi restituiscono un massimo di 250 ID luogo per cella geografica nell'array sample_place_ids. Se un'area è estremamente densa, l'elenco di lead generato per quella cella specifica sarà limitato a 250. Per assicurarti di acquisire tutti i lead nei mercati ad alta densità, ti consigliamo di seguire una delle strategie riportate di seguito:
- Utilizza filtri di query specifici: anziché raggruppare più tipi in una query (come nell'esempio precedente), esegui query separate per ogni tipo di luogo.
- Riduci l'ambito spaziale: riduci l'area di ricerca complessiva utilizzando un
geography_radiuspiù piccolo oppure dividi l'area in bucket più piccoli e granulari aumentando la risoluzione H3 (fino alla risoluzione 11). - Regola la risoluzione in base alla densità: quando analizzi territori con densità di popolazione variabili, regola dinamicamente le dimensioni della ricerca per evitare di raggiungere il limite di 250 ID luogo. Utilizza una risoluzione H3 più ampia (ad es. 6 o 7) o un
geography_radiuspiù grande nelle aree rurali in cui le attività sono distribuite. Al contrario, utilizza una risoluzione molto granulare (ad es. 10 o 11) nelle aree urbane dense per assicurarti di acquisire ogni potenziale lead senza troncare l'elenco.
Query di produzione
Una volta verificato che i clienti esistenti siano stati identificati correttamente, puoi ripristinare la versione di produzione della query. Sostituisci il blocco SELECT finale con la seguente clausola WHERE per filtrare in modo permanente il tuo attuale portafoglio clienti:
SELECT
t.h3_cell_index,
t.place_id,
CONCAT('https://www.google.com/maps/search/?api=1&query=Place&query_place_id=', t.place_id) AS actionable_maps_url
FROM target_area_businesses t
LEFT JOIN existing_customers e
ON t.place_id = e.place_id
WHERE e.place_id IS NULL; -- Filters out the CRM matches
Governance e conformità dell'architettura
Per mantenere un sistema conforme e con prestazioni più elevate, rispetta questi standard:
- ID luogo come identificatore persistente: oltre all'ID luogo, i Termini di servizio di Google Maps vietano di archiviare o memorizzare nella cache i singoli dati POI restituiti dall'API Places (ad es. numeri di telefono e dettagli di contatto).Utilizza gli ID luogo come identificatore persistente per l'analisi ricorrente dello spazio bianco.
- Assicurati che gli attributi siano aggiornati con le chiamate API in tempo reale: utilizza gli ID luogo per effettuare chiamate "just-in-time" all'API Place Details per assicurarti che il tuo venditore disponga delle informazioni di contatto e sull'attività più aggiornate per il luogo. In alternativa, come mostrato nell'output della query, puoi creare dinamicamente gli URL di Google Maps per fornire al tuo team di vendita link diretti ai profili dell'attività su Google Maps.
Conclusione
Standardizzando l'ID luogo come chiave primaria, hai colmato con successo il divario tra l'analisi di mercato di alto livello e le operazioni di vendita pratiche a livello di base. Questa architettura aggira le imprecisioni del targeting convenzionale basato sulla popolazione, utilizza il data warehousing serverless per le unioni di calcolo pesanti e rispetta rigorosamente le best practice di gestione dei costi e conformità a livello di API.
Azioni successive
- Richiedi l'accesso al set di dati di esempio di Places Insights sample dataset.
- Abbonati al set di dati di Places Insights utilizzando gli elenchi di scambio di dati BigQuery per accedere ai dati di esempio o completi del paese.
- Consulta il riferimento dei parametri di filtro per perfezionare le query SQL di BigQuery in base agli attributi e ai tipi di attività.
- Implementa le ricerche dinamiche dell'API Places nella tua applicazione CRM o di routing delle vendite per esporre i dettagli di contatto aggiornati e conformi per i nuovi lead generati.
Collaboratori
- Henrik Valve | Ingegnere DevX