list_local_places
list_local_places MCP tool: businesses shown in the ChatGPT and Google AI Overview map pack for your prompts, with appearances, average rank, ratings, and a local visibility summary.
Updated 2026-09-29
list_local_places lists the businesses that appear in the map pack attached to a project's answers. When a prompt has local intent ("best bakery in Nice"), ChatGPT and Google AI Overview return a list of businesses alongside the text. Each row aggregates one business across the period: how many maps it appeared in, its average rank, its rating and review count, and its coordinates when the engine returned them.
The summary object carries local visibility as a whole, so a single call answers both "who is on the map" and "how am I doing".
When to use
Use it whenever the question is about a physical location rather than a website: "am I in the map when someone asks ChatGPT for a plumber in Lyon?", "which competitors sit above me in the local pack?", "is my rating below the ones AI recommends?".
Two numbers in the summary point at what to fix. citedNotInMap counts answers where the brand is named in the text but missing from the map: the business listing is at fault (wrong category, unverified profile, missing address). inMapNotCited counts the reverse, where the listing is fine but the content the engine quotes never mentions the brand.
Only ChatGPT and Google AI Overview return a map pack. The other engines are silently dropped from filters.llms, so a query asking for Perplexity returns an empty page rather than an error.
Input
| Field | Type | Default | Description |
|---|---|---|---|
projectId |
string (CUID) | required | Project to query. |
cursor |
string | - | Opaque pagination cursor from a prior pageInfo.nextCursor. |
limit |
integer | 20 | 1 to 100. |
filters.dateRange.from |
date/datetime | 30 days ago | ISO 8601 date or datetime. |
filters.dateRange.to |
date/datetime | now | ISO 8601 date or datetime. |
filters.llms |
enum[] | map-capable engines | Only CHATGPT and GOOGLE_AIO produce a map pack. |
filters.promptIds |
string[] (CUID) | - | Only count maps produced by these prompts. |
filters.brandOnly |
boolean | false | Keep only the tracked brand's own listing. |
sortBy |
enum | appearances_desc |
appearances_desc, rank_asc, reviews_desc, name_asc. |
Response
data holds one row per business, pageInfo the usual pagination envelope, and summary the period's local visibility. The deltas compare the requested period to the previous window of the same length. lat and lng are null on Google AI Overview, which returns no coordinates.
{
"data": [
{
"id": "chatgpt:boulangerie-durand-nice",
"name": "Boulangerie Durand",
"domain": "boulangerie-durand.fr",
"url": "https://boulangerie-durand.fr",
"isBrand": true,
"appearances": 14,
"avgRank": 2.3,
"rating": 4.6,
"reviewCount": 312,
"lat": 43.7009,
"lng": 7.2683
}
],
"pageInfo": { "hasMore": true, "nextCursor": "20", "totalCount": 37 },
"summary": {
"periodFrom": "2026-08-23T00:00:00.000Z",
"periodTo": "2026-09-22T00:00:00.000Z",
"totalResults": 60,
"mapCount": 21,
"presence": 67,
"presenceDelta": 12,
"avgRank": 2.3,
"avgRankDelta": -0.4,
"anchor": { "city": "Nice", "share": 82 },
"brandRating": 4.6,
"brandReviewCount": 312,
"medianRating": 4.4,
"medianReviewCount": 180,
"topCategory": "Bakery",
"citedNotInMap": 3,
"inMapNotCited": 5,
"placesWithoutCoords": 4,
"promptsWithMaps": 9,
"ignoredMaps": 2
}
}
presence is the share of maps the brand appears in, in percent. avgRank is its average position when it does appear, so a negative avgRankDelta is an improvement. anchor is the city the engines actually answer for, with its share of listings: when it is not the city you target, the prompts themselves are pointing somewhere else.
Project without customers on site
When the project's Customers on site setting is off, the tool reads nothing and returns an empty list with the reason:
{
"data": [],
"pageInfo": { "hasMore": false, "nextCursor": null, "totalCount": 0 },
"summary": { "localDisabled": true }
}
Tips and patterns
ignoredMapscounts maps left out of every figure: their prompt names no place ("best bakery near me"), so the engine answers for wherever the user is. Add the city to those prompts to measure them.- Read
summaryfirst.mapCountagainsttotalResultstells you how many answers even carry a map: a low ratio means the prompts have little local intent, not that visibility dropped. - Compare
brandRatingtomedianRatingbefore touching content. A business rated below the map median rarely climbs on copywriting alone. - Pass
filters.promptIdsto isolate one question, then callget_prompt_resultwithinclude.localPlacesto read the raw map of a single answer. sortBy: "rank_asc"surfaces who is at the top of the pack;appearances_descsurfaces who is there most often. Both matter, and they rarely agree.- Row ids are stable across scans, so diffing two calls tells you which businesses entered or left the pack.
Related tools
get_prompt_result: the raw map pack of a single answer, withinclude.localPlaceslist_prompts: the prompts behind those mapslist_competitors: competitors as named in the text, beyond the map