> [!IMPORTANT]
> **Important:** Before you can query Places Insights data, you must first [sign
> up](https://mapsplatform.google.com/assets/geo-analytics-sample-data/) to get access to the Places Insights product.

Places Insights lets you conduct advanced statistical analysis on Google Maps'
rich Places data. It provides aggregated counts and density information for
millions of Points-of-Interest (POI) data points, allowing for powerful
geospatial intelligence.

## Key capabilities

- **Geospatial Intelligence:** Get a "bird's eye view" of the density and distribution of different categories of POIs (for example, retail, restaurants, and services) across specific geographic areas.
- **Secure Data Access:** The data is deployed using [BigQuery data exchange
  listings](https://cloud.google.com/bigquery/docs/analytics-hub-introduction#listings) with data protections in place, enabling a secure and protected environment for data sharing and analysis.
- **Actionable Detail:** While Places Insights focuses on aggregate trends, you can use the outputted Place IDs to drill down and retrieve individual Place information using other Google Maps Platform APIs to go from statistical insight to detailed action.

## Understand places data and use cases

Google Maps curates places data for millions of establishments worldwide.
Places Insights makes this comprehensive places data available in BigQuery so
that you can derive aggregated insights about Google Maps' places data based on
a variety of attributes such as [place
types](https://developers.google.com/maps/documentation/placesinsights/place-types), ratings, store hours,
wheelchair accessibility, and more.

To use Places Insights, you write SQL queries in BigQuery that return
statistical insights about places data. These insights let you answer questions
such as:

- How many similar businesses are operating near a potential new store location?
- What kinds of businesses are most commonly found near my most successful stores?
- What areas have a high concentration of complementary businesses that could attract my target customers?
- How many 5-star sushi restaurants are open at 8pm in Madrid, have wheelchair-accessible parking, and offer takeout?
- Which zip codes in California have the highest concentration of EV charging stations?

### Supported use cases

- **Site selection:** Evaluate and choose the most suitable locations for a new business or placement of a physical asset. By analyzing the density and mix of surrounding POIs, you can ensure a prospective site is optimally positioned within its competitive and complementary business environment. This data-driven approach can reduce the risk associated with investment in new locations.
- **Location performance evaluation:** Determine what geospatial variables, such as proximity to certain types of POIs like supermarkets or event venues, correlate with positive or negative performance across your existing locations. This data lets you identify prospective sites that share the best mix of geospatial characteristics for your use case. You can also use this information to deploy predictive models that forecast the future performance of any new locations based on its surrounding POI context.
- **Geotargeted marketing:** Determine what types of marketing campaigns or advertisements will be successful in an area. Places Insights provides the context needed to understand commercial activity, allowing you to tailor messaging based on the concentration of relevant businesses or activities.
- **Sales forecasting:** Predict future sales at a prospective location. Modeling the impact of surrounding geospatial characteristics lets you create robust predictive models to drive investment decisions.
- **Market research:** Inform which geographies to expand your business or service to next. Analyze existing market saturation and POI density to identify underserved or highly concentrated target markets that offer the greatest opportunity. This analysis provides evidence to support strategic growth and expansion initiatives.
- **Trends analysis:** Explore changes that occur over a period of time. Compare place counts, including added and removed places, month-over-month back to January 2024.

You can query Places Insights datasets using
[Places Count functions](https://developers.google.com/maps/documentation/placesinsights/get-started.md.txt#select-the-optimal-places-count-function)
or [direct SQL queries](https://developers.google.com/maps/documentation/placesinsights/queries.md.txt).

[See the Schema reference](https://developers.google.com/maps/documentation/placesinsights/reference.md.txt).

### Combine with related Google Maps Platform analytics datasets

While Places Insights provides aggregated POI counts and brand density,
location decisions often depend on understanding human behavior and local
surroundings. To enrich POI data in BigQuery with machine-learning embeddings
that capture Google Search trends, the built environment and human activity
patterns, and environmental context (such as weather and air quality), pair
Places Insights with
[Population Dynamics Insights (PDI)](https://developers.google.com/maps/documentation/population-dynamics-insights/overview.md.txt)
([Preview](https://developers.google.com/maps/launch-stages.md.txt#preview)).

## Choose your query method: Places Count functions versus direct SQL

To accommodate different analysis scales and privacy requirements,
Places Insights offers two querying pathways: **Places Count Functions**
(native BigQuery functions) and **Direct SQL Queries** (table joins).

> [!TIP]
> **Tip:** Not sure where to begin? We recommend starting with [`PLACES_COUNT_PER_H3`](https://developers.google.com/maps/documentation/placesinsights/place-count-functions/places-count-per-h3.md.txt). It provides immediate spatial density insights across standardized grid cells, returns Place IDs for ground-truth inspection, and is purpose-built for geospatial feature engineering and ML models.

Use this decision matrix to determine the correct query path for your
implementation:

| Your Analysis Goal | Recommended Query Method | Returned Data \& Outputs | Privacy \& Spatial Considerations |
|---|---|---|---|
| **Analyze regional POI density \& build heatmaps** | [`PLACES_COUNT_PER_H3`](https://developers.google.com/maps/documentation/placesinsights/place-count-functions/places-count-per-h3.md.txt) | - Returns H3 hexagon polygons with exact counts (including 0) - Returns up to 250 `place_id` values per cell | - Purpose-built for spatial ML models \& feature engineering - Minimum search area of **40m × 40m (1,600 m²)** - Optimized for performance and low processing cost - Validates input parameters and returns clear errors for easier debugging |
| **Get counts for specific sites and retrieve Place IDs to lookup details** | [`PLACES_COUNT_V2`](https://developers.google.com/maps/documentation/placesinsights/place-count-functions/places-count-v2.md.txt) or [`PLACES_COUNT_PER_TYPE_V2`](https://developers.google.com/maps/documentation/placesinsights/place-count-functions/places-count-per-type-v2.md.txt) | - Returns exact counts (including 0) for custom geometries - Returns up to 250 `place_id` values per row | - Minimum search area of **40m × 40m (1,600 m²)** - Scalable to thousands of locations using `TABLE` parameters - Optimized for performance and low processing cost - Validates input parameters and returns clear errors for easier debugging |
| **Track POI changes \& growth trends over time between two months** | [`PLACES_COUNT_CHANGE`](https://developers.google.com/maps/documentation/placesinsights/place-count-functions/places-count-change.md.txt) | - Returns `start_count`, `end_count`, `net_change`, `percentage_change`, and `compound_monthly_growth_rate` - Returns arrays of newly added (`sample_added_place_ids`) and removed (`sample_removed_place_ids`) Place IDs | - Requires `month1` and `month2` parameters in `YYYY-MM` format - Minimum search area of **40m × 40m (1,600 m²)** - Scalable to thousands of custom locations using `TABLE` parameters |
| **Execute advanced custom logic, averages, or join with your data** | [Direct SQL Queries](https://developers.google.com/maps/documentation/placesinsights/queries.md.txt) | - Full SQL flexibility across raw tables - Enables custom SQL metrics (`AVG`, `SUM`, etc.) | - Doesn't return Place IDs - **Privacy Threshold:** Counts of 0 to 4 are **completely omitted** - No minimum search area restriction |

> [!IMPORTANT]
> **Important:** To retrieve exact low counts (under 5) or Place IDs, you must use the [Places Count Functions](https://developers.google.com/maps/documentation/placesinsights/get-started.md.txt#select-the-optimal-places-count-function). Standard SQL queries run directly on the raw tables enforce a differential privacy aggregation threshold. If a query yields a count of 0--4 matching places, the entire row is omitted from the results. To bypass this restriction, use the Places Count Functions that can return any counts, including 0, over a minimum search area of 40m × 40m (1,600 m²).

## Analyze historical trends using snapshot dates

Places Insights allows you to conduct historical analysis by querying monthly
snapshots of Places data dating back to January 2024. This enables you to
evaluate how business density, commercial activity, and competitive landscapes
have evolved over time.

To query historical data using Places Count functions, pass the optional
`snapshot_date` filter parameter inside your `JSON_OBJECT`. The value must be
formatted as `YYYY-MM` (for example, `'2026-01'`).

> [!NOTE]
> **Note:** If `snapshot_date` is omitted, the query defaults to returning data from the most recent available snapshot.

### Example: Query historical restaurant counts in New York City with PLACES_COUNT_V2

The following example uses `PLACES_COUNT_V2` to analyze operational restaurant
counts around the Empire State Building and Times Square in New York City as
they existed in January 2026:

```googlesql
-- Create a table for the input search geographies
WITH my_search_areas AS (
  SELECT
    'Empire State Building' AS geo_id,
    ST_GEOGPOINT(-73.9857, 40.7484) AS geo
  UNION ALL
  SELECT
    'Times Square' AS geo_id,
    ST_GEOGPOINT(-73.9851, 40.7580) AS geo
)

-- Query restaurant counts for the January 2026 snapshot
SELECT *
FROM `PROJECT_NAME.places_insights___us.PLACES_COUNT_V2`(
  TABLE my_search_areas,
  JSON_OBJECT(
      'geography_radius', 1000, -- Radius in meters around each point
      'business_status', ['OPERATIONAL'],
      'types', ['restaurant'],
      'snapshot_date', '2026-01'
  )
);
```

### Analyzing historical output

The returned BigQuery table contains the `geo_id`, the input geography polygon,
the place count, and sample Place IDs as they were recorded during the specified
snapshot month (2026-01). You can run identical queries across multiple snapshot
months to calculate growth trends, store openings, or market contraction.

## Aggregate regional POI density using PLACES_COUNT_PER_H3

The `PLACES_COUNT_PER_H3` function is the recommended pathway for analyzing POI
density over large areas. By dividing your target region into standardized H3
hexagonal grid cells, you eliminate the need to draw custom boundaries and can
feed results directly into visual mapping tools, such as Looker Studio.

### Example: Count wheelchair-accessible grocery and convenience stores in New York State

The following query aggregates wheelchair-accessible grocery and convenience
stores in New York State into H3 cells at resolution level 8. It uses
boundary geometry dynamically retrieved from the
`bigquery-public-data.geo_us_boundaries.states` public dataset.

```googlesql
-- Query POI count per H3 cell intersecting the New York State polygon boundary
SELECT *
FROM `PROJECT_NAME.places_insights___us.PLACES_COUNT_PER_H3`(
  JSON_OBJECT(
      'geography', (
        -- Dynamically retrieve the boundary geography for New York State
        SELECT state_geom
        FROM `bigquery-public-data.geo_us_boundaries.states`
        WHERE state = 'NY'
        LIMIT 1
      ),
      'types', ['grocery_store', 'convenience_store'],
      'business_status', ['OPERATIONAL'],
      'h3_resolution', 8,
      'wheelchair_accessible_entrance', TRUE
  )
)
ORDER BY count DESC;
```

### Analyzing the output

This query returns a structured table mapping each distinct H3 index
(`h3_cell_index`) to its boundary polygon (`geography`), POI count (`count`),
and up to 250 representative `sample_place_ids`.

- **Zero-Counts Included:** If a cell in the New York State grid has zero matching stores, it still returns a row with a count of `0`. This is critical for locating commercial or service deserts.
- **Direct Visual Mapping:** Because the output includes a `GEOGRAPHY` polygon, you can render heatmaps directly inside BigQuery Studio or Looker Studio.

## Retrieve Place IDs to inspect place details

While Places Insights is built for statistical intelligence, you can transition
from aggregated insights to granular actions.

All primary Places Count functions, including `PLACES_COUNT_PER_H3`,
`PLACES_COUNT_V2`, and `PLACES_COUNT_PER_TYPE_V2` (with the exception of the
legacy `PLACES_COUNT` function), return an array of up to 250 Place IDs per row
matching your query criteria.

These Place IDs act as a bridge, allowing you to use other Google Maps Platform
APIs, such as the [Place Details
API](https://developers.google.com/maps/documentation/places/web-service/place-details), to retrieve specific
details like store names, reviews, phone numbers, and addresses.

## Analyze multi-location brand presence

> [!NOTE]
> **Note:** Brands data is available for the United States, Canada, Great Britain, and Australia datasets.

Along with the places data, Places Insights includes data about brands, or
stores that have multiple locations that operate under the same brand name.

You can query brand data to:

- Identify the density of competitor brands in a target market.
- Filter your POI counts specifically by brand IDs.
- Examine market penetration by comparing branded versus independent establishments.

## What's next

- [Get started with Places Insights](https://developers.google.com/maps/documentation/placesinsights/get-started.md.txt) -- Read the overview of all optimized table-valued functions.
- [PLACES_COUNT_PER_H3 reference](https://developers.google.com/maps/documentation/placesinsights/place-count-functions/places-count-per-h3.md.txt) -- Learn about the hexagonal spatial indexing function.
- [Advanced: Query the dataset
  directly](https://developers.google.com/maps/documentation/placesinsights/queries) -- Learn standard SQL queries, join workflows, and brands data filtering.
- [View the Schema reference](https://developers.google.com/maps/documentation/placesinsights/reference.md.txt) -- Read detailed field tables for both core and country-specific schemas.