How ChatGPT surfaces local businesses

How ChatGPT surfaces local businesses

In short

We inspected ChatGPT’s SSE streams to understand how local business search works. We found business facts that closely matched Google Maps, alongside rewritten web searches and different ways to display the results.

Published
Reading time
20 min
Last updated

August is co-founder and CPO of scaile and leads the product: the research, writing and publishing engine behind visibility in AI search.

Key takeaways

  • 100% (12/12): of primary city-specific recommendation prompts produced maps.

  • 50% (6/12): included reviews or ratings in the exposed search queries.

  • 100% (4/4): of the pharmacy records matched with Google had the same rating and review count.

Our hypothesis was that searching for a local business works differently from asking a general question in ChatGPT.

To investigate, we tested 50 conversations across 12 industries and inspected the responses sent to the browser. These arrive as server-sent events, or SSE: a stream of updates containing parts of the answer, search metadata and business records.

The study includes 36 primary trials (12 industries × 3 prompt types), 8 repeat trials and 6 pharmacy wording tests. Aggregate totals below cover all 50 conversations; prompt comparisons use the relevant subset.

The denominators differ: 12 primary city prompts versus four matched businesses from one response. These percentages describe our tests.

What happens when you search for a local business

Let’s walk through a real example from the experiment.

1. The user asks a question

We entered this prompt in a fresh ChatGPT conversation:

Welche Apotheken in München empfiehlst du?
Which pharmacies in Munich do you recommend?

The browser submitted it through:

POST /backend-api/f/conversation

This is the conversation endpoint we observed. The question sits inside messages[].content.parts in the request body.

2. ChatGPT chooses how to respond

ChatGPT can answer directly, ask for a location or search for options. The model and its surrounding software, called the harness, control that behavior.

We can see which response it produces. The stream does not expose the complete decision logic or separate the model’s decisions from the harness.

3. ChatGPT reformulates the question into search queries

Our pharmacy prompt became this search string in the exposed metadata:

München Apotheke Hauptbahnhof Marienplatz Öffnungszeiten Apotheke offiziell 2026

ChatGPT added specific locations, opening hours, “official” and a year. The query appeared in a field called search_model_queries.

We checked the same field across all 12 primary city-specific recommendation runs. Including the six repeated city prompts gives 18 city-search conversations in total; their counts are shown separately so frequently repeated industries do not change the primary comparison.

Query modifier12 primary city runsAll 18 city runs
Year 202610/12 · 83%15/18
Best or reputable7/12 · 58%10/18
Reviews or ratings6/12 · 50%7/18
Named guides or institutions3/12 · 25%3/18
Opening hours1/12 · 8%2/18

Each run counts once per category; categories overlap. 13 exposed strings across 12 primary city runs. Observed queries are not proven ranking factors.

The additions were specific to the industry. The dentist query included jameda and Doctolib. Restaurants included Michelin Guide. Plumbers included Handwerkskammer, the chamber of crafts.

It also changed language: our German hotel prompt became an English query with “luxury,” “boutique,” “central,” “affordable” and “reviews.”

4. ChatGPT makes a tool call

In the pharmacy example, the stream exposed two assistant messages addressed to web.run. This is a shortened message excerpt:

{
  "author": { "role": "assistant" },
  "recipient": "web.run"
}

Across all 50 conversations, 28 exposed search activity, with 39 visible web.run invocations in total. A visible invocation is not necessarily one underlying search query.

We saw web.run in answers with maps and in answers without maps. The field map_search_model_queries also appeared, but it is metadata, not proof of a separate callable maps tool.

5. ChatGPT returns business facts and an answer

The ordinary pharmacy answer mapped five places. Its stream included structured records like this one:

{
  "id": "ChIJ0zyJSvp1nkcRi483DLeru3Y",
  "provider": "serp",
  "name": "Inter Apotheke",
  "address": "Elisenstraße 5, 80335 München, Germany",
  "latitude": 48.1418702,
  "longitude": 11.561119099999999,
  "rating": 4.8,
  "review_count": 130,
  "website_url": "http://www.inter-apotheke.de/",
  "ranking_score": null
}

The answer combines written recommendations with business cards and a map. The record gives the interface facts about the business. ranking_score: null means this record exposes no ranking score.

A text-only answer can use web search too. When we explicitly asked for no map or business cards, ChatGPT exposed one web call and recommended six pharmacies as text.

The prompt and its context go into ChatGPT’s conversation flow, which exposes search activity and structured business records. The answer combines text, business cards and a map; clicking a business sends a separate detail request. Retrieval arguments, suppliers and ranking rules stay hidden.
The visible components of a local answer, not every server-side step.

6. Clicking a business opens a separate detail request

The observed detail flow used:

POST /backend-api/sidebar/conversation

That request identifies a particular business by name and location/address, together with conversation and message IDs. It retrieves more detail about that business. The category search happened through the conversation flow above.

Testing location parameters in the conversation request

We also tested adding this object to the top level of the JSON body sent to POST /backend-api/f/conversation:

{
  "map_search_params": {
    "latitude": 48.137154,
    "longitude": 11.576124,
    "latitude_span": 0.05,
    "longitude_span": 0.08,
    "search_here": true
  }
}

The coordinates specify a public point in central Munich. The field names suggest a search area centered there: latitude_span and longitude_span describe its extent, while search_here appears to request a search in that area. These interpretations are not a documented API contract or a verified distance filter.

This object supplies location context; the actual search request, such as “Which pharmacies in Munich do you recommend?”, still goes in messages[].content.parts. The snippet above is an addition to the full conversation request, not a complete standalone request.

Our pharmacy parameter probe completed and returned 11 place IDs with descriptions, but its map did not render. That confirms a response to this modified request. It does not prove that every parameter affected retrieval, guarantee results within the area, or establish a working public maps API.

map_search_params is the request object we supplied in the separate parameter probe. map_search_model_queries is query metadata observed in responses. None of the 50 ordinary conversations in the main study injected this object.

Which searches produced maps

Our balanced primary panel tests three prompt types across 12 industries: a recommendation with Munich named, a recommendation without a city and a definition question. Repeat trials are counted separately.

IndustryRecommendation + MunichRecommendation, no cityDefinition question
PharmaciesMap · 5 placesNo visible searchNo visible search
RestaurantsMap · 8 placesNo visible searchNo visible search
DentistsMap · 6 placesMap · 5 placesNo visible search
PlumbersMap · 5 placesMap · 5 placesNo visible search
Tax advisersMap · 6 placesNo visible searchNo visible search
HotelsMap · 6 placesWeb search onlyNo visible search
Car repairMap · 6 placesMap · 6 placesNo visible search
CRM softwareMap · 5 placesWeb search onlyNo visible search
BakeriesMap · 6 placesNo visible searchNo visible search
Hair salonsMap · 7 placesNo visible searchNo visible search
GymsMap · 6 placesNo visible searchNo visible search
FloristsMap · 6 placesNo visible searchNo visible search

36 primary trials, one per cell. Search = exposed web.run call; map = rendered map.

Maps appeared in 100% (12/12) of city recommendations, 25% (3/12) without a city and 0% (0/12) of definitions.

Even CRM software providers produced a map when the prompt named Munich. Local intent mattered alongside the industry.

Dentists, plumbers and car repair produced maps without a city in the prompt. In the dentist answer, ChatGPT said Munich was our approximate location. The capture does not establish whether that location came from an IP address or another source.

In the eight newest trials, all four recommendations without a city asked where we wanted to search. The four definition questions answered directly. None exposed a web call or produced a map. For these industries, the earlier city-specific versions had all produced maps.

We then varied the pharmacy wording:

Prompt translated from GermanVisible web callsMap places
“Pharmacy”00; asked for clarification
“Which pharmacies near me do you recommend?”15
“Pharmacies in Munich”14
“Which online pharmacies do you recommend?”20
“Which pharmacies in Munich do you recommend? Answer only as text, without a map or business cards.”10
“Show pharmacies in Munich on a map.”114

Six exploratory follow-ups, one run each.

The output format responded to the instruction. In a separate earlier test, 100% of eight default answers showed maps, compared with 0% of eight text-only answers, across four industries. That measures what appeared on screen; it does not establish the absence of hidden place retrieval.

ChatGPT answering “Zeige Apotheken in München auf einer Karte.” with an interactive map of Munich, rating pins and business cards for Rathaus Apotheke and Pharmacy Schwabing Nord.
Screenshot from “Show pharmacies in Munich on a map.” This separate trial returned 14 map points; the ordinary recommendation example above returned five.

How similar are the results to Google Maps?

We compared business facts and business selection separately.

The business facts matched in our small samples

Four of the five pharmacies in the ordinary ChatGPT answer appeared in the first 20 Google Maps results we captured. Their ratings and review counts matched in 100% of those four cases.

BusinessRating on bothReviews on both
Inter Apotheke4.8130
Apotheke Maxvorstadt4.7105
Dr. Beckers Central Apotheke4.5270
Barer Apotheke4.7116

The fifth business was absent from the first 20 Google results captured.

An earlier check of eight selected businesses across eight industries also found a 100% match for ratings, review counts and coordinates rounded to six decimal places. Google was checked 63–76 minutes later.

The business lists were different

A separate request with injected map-location parameters returned 11 place IDs. Of these, 90.9% (10/11) appeared in Google’s first 20 organic results for the same recommendation wording. For “Apotheken München,” the overlap was 54.5% (6/11).

Google Maps queryChatGPT place IDs in Google’s first 20
Same recommendation wording10/11 · 90.9%
Short category query6/11 · 54.5%

This parameter probe returned IDs and descriptions, but its map did not render. It is separate from the ordinary chat tests. Google viewports, language settings and capture times were not fully matched. This is identity overlap, not a controlled ranking comparison.

The order also differed. The first three ChatGPT IDs appeared at Google positions 3, 5 and 13. We cannot attribute those differences to wording alone.

The matching facts and IDs support a connection to Google-compatible business data. They do not identify the supplier or prove a direct Google API call. The label serp is not enough to establish either.

We also found the same hotel under two provider labels: serp and tripadvisor-feed. Both ratings were 4.4, but review totals were 1,872 and 1,078. The records show that more than one data source can appear.

Yelp had the same businesses but different review totals

We also matched four businesses with live Yelp pages using their names and street addresses. All four addresses matched; three phone numbers matched after formatting. The review figures differed:

Business and Yelp sourceChatGPT rating / reviewsYelp rating / reviews
Inter Apotheke4.8 / 1301.0 / 1
Wirtshaus in der Au4.5 / 6,0594.2 / 284
Cortiina Hotel4.5 / 5934.3 / 28
Brotraum4.7 / 5594.7 / 29

Four selected matches across pharmacies, restaurants, hotels and bakeries; not a random coverage sample. Live Yelp pages checked on 9 October, after the ChatGPT captures.

Only one of four ratings matched, and none of the four review counts matched. Brotraum illustrates why matching the star rating alone is weak evidence: both showed 4.7, but their review totals were 559 and 29.

We scanned all 50 captured conversations. Across 146 map-record appearances, the provider labels were serp in 142, tripadvisor-feed in 1, and empty in 3. We found no Yelp URLs or populated Yelp-specific fields in the reconstructed messages. A schema field such as yelp_menu_url: null is not evidence of Yelp data.

These tests establish overlapping businesses and different displayed review data. They cannot rule out indirect Yelp use elsewhere in the retrieval chain.

What the individual business records reveal

Across the full 50-conversation study, we extracted 146 map-record appearances from 24 map-producing conversations. The 12 primary city recommendations contained 72 map points, including two generic points without ratings. Repeated appearances count separately in the full-study totals.

The highest rating usually did not get the first position

Of the 12 primary city lists, 11 had ratings for every map point. In 10/11 of those complete lists, a lower-positioned business had a higher rating than the first. One of 11 followed descending rating order; none of 11 followed descending review-count order.

The pharmacy list started with a 4.8-rated business, followed by one rated 4.9. Dentists started at 4.8 while the final two businesses were rated 4.9.

These results rule out a universal highest-rating-first sort. They do not tell us how much reviews influence selection or ranking.

A mapped business need not have its website in the exposed web results

Across all map-record appearances, 138 had a website URL. Only 15.2% (21/138) of those website hosts also appeared in that run’s exposed web-result URLs. In the 12 primary city lists alone, the overlap was 16.2% (11/68). We matched hostnames after removing www.. These are appearance counts, not independent businesses.

In the pharmacy example, none of the five mapped businesses’ website hosts appeared in the exposed web results. A business can therefore appear on the map without that visible website match. The stream does not expose every retrieval step, and third-party pages can cover the same business.

The map and written recommendations can differ

In 11/12 primary city runs, the map’s business IDs and order matched the business entity components in the answer. The bakery exception included generic map points. Separately, the repeated CRM trial included six business entities in the answer and five on the map: Shore appeared as an additional recommendation in a sentence and was absent from the map.

Measuring only map pins would miss that recommendation. Plain text mentions, business entities, maps and citations deserve separate counts.

The records expose useful facts but no ranking score

Field across all 146 map-record appearancesAppearances with a value
Rating and review count each97.9% · 143/146
Phone number97.9% · 143/146
Website URL94.5% · 138/146
Opening hours93.2% · 136/146
Ranking score0% · 0/146
Individual reviews and review highlights each0% · 0/146

A review total is not the underlying review text. Missing fields also do not prove that the server lacks that information.

Recalculated from every completed study conversation. We use the single visible final answer per run and exclude hidden message fragments to avoid double counting.

Repeating the same city prompts changed the shortlist

The full study includes two identical city-recommendation prompts each for bakeries, hair salons, gyms and florists, alongside the pharmacy and CRM repeats. Every run used a fresh temporary, unpersonalized chat. The request model was gpt-6-thinking; the interface showed Medium.

All 18/18 city-recommendation conversations, including repeats, produced maps. The six repeated industry pairs looked like this:

IndustryMap pins first / secondShared listings
Pharmacies5 / 64
CRM software5 / 54
Bakeries6 / 62
Hair salons7 / 74
Gyms6 / 52
Florists6 / 63

We match stable provider IDs, falling back to exact normalized names and coordinates rounded to five decimals. Branches count separately.

The bakery answers both had six pins, but shared only two physical listings. Even where a brand recurred, the selected branch could change: Dompierre moved from Türkenstraße to Tengstraße.

The search strings also changed. The first bakery query added “Sauerteig” and “Brezen.” The repeat named Julius Brantner, Neulinger and Dompierre. The first gym query already named FitX, Fit Star, McFIT, body + soul, Fitness First and Elements. These brand names were not in our prompts.

A map pin does not always contain a full business record

The first bakery answer mapped six places. Four came through referenced business records. The other two were supplied to the map component as names and addresses, including this object:

{
  "id": "gat",
  "name": "Bäckerei Gattinger",
  "address": "Johann-Clanze-Straße 104, 81369 München"
}

The returned point had coordinates and a map-widget-point- ID, but an empty provider label and no rating or review count. We did not establish which geocoder supplied the coordinates.

That is another reason not to treat every pin as proof of a complete Google-style listing.

Why the same prompt can return different businesses

We repeated the exact Munich pharmacy prompt in a fresh conversation. The first run mapped five places and exposed two web calls. The second mapped six places and exposed one.

Four businesses appeared in both answers, out of seven distinct businesses across the pair. Both the visible search activity and the selection changed.

The stream does not tell us how much came from generation variability, retrieval changes or hidden ranking logic. It does show why one answer is too little to treat as a permanent ranking.

What this means for local businesses

The observations point to business profiles, local website content and third-party listings as practical places to work. We have not measured the ChatGPT recommendation lift from changing them.

Keep your Google Business Profile accurate

Check your category, address, phone number, website and opening hours. Maintain special hours, useful photos and genuine reviews. The Google-matching facts in our samples make this a sensible priority.

Google recommends complete, accurate information and describes relevance, distance and prominence as local ranking factors. That is Google’s guidance, not a verified ChatGPT ranking formula. Google’s guidance

Write content for the local searches ChatGPT actually makes

Our pharmacy query added the main station, Marienplatz and opening hours. A business with a relevant location or service should explain it clearly on its website.

Publish useful details about your real service area, specialties, availability and booking process. Keep time-sensitive facts current. The appearance of “2026” in 83.3% (10/12) of the primary city-query runs does not mean adding a year to every page will improve your position.

Keep relevant third-party listings current

The dentist query named Jameda and Doctolib. Restaurant and tradesperson queries named different sources. Check the directories and institutions relevant to your industry and keep your business details consistent.

LocalBusiness structured data can also express facts such as your address and hours. Google documents its use; our experiment did not test a ChatGPT benefit from schema. Structured-data guidance

Measure each type of visibility

Repeat realistic prompts and record whether your business is recommended in text, shown on a map or linked through a citation. Match the right branch by its address or place ID.

Our tests show that those outcomes can differ. Improving visibility starts with knowing which outcome you are measuring. The free AI Visibility Check from scaile is a starting point for tracking whether AI answers name your business.

FAQ

Does ChatGPT always show a map for local searches?

No. All 12 primary city-specific recommendation prompts produced maps, compared with 3/12 recommendations without a city and 0/12 definitions. The text-only pharmacy instruction also produced recommendations without a map. These are observed outcomes, not a guaranteed rule.

Does ChatGPT use a separate maps tool?

Both map and text-only answers exposed calls to web.run. We also saw map_search_model_queries, but that is a metadata field. It does not establish a separate callable maps endpoint or reveal all internal tool arguments.

Is ChatGPT using Google Maps data?

Our matched samples had Google-compatible place IDs and matching ratings and review counts. That supports a connection to Google-compatible business data, but does not identify the supplier. We also observed a tripadvisor-feed record.

Is there also overlap with Yelp?

Yes. Four selected businesses matched Yelp by street address. One rating matched, but none of the four review counts did. Our 50 captured conversations exposed no Yelp URLs or populated Yelp-specific fields. This establishes business overlap without proving Yelp supplied the displayed review data.

Does the highest-rated business appear first?

Usually not in our sample. Among the 11 primary city lists with ratings for every point, 10 started with a business rated lower than another business in the list. One list did follow descending rating order. Ratings may still influence selection; the records do not expose the weights.

Can a business be recommended without appearing on the map?

Yes. In the repeated CRM trial, ChatGPT recommended Shore in an additional sentence but omitted it from the five map points. Track written recommendations separately from map appearances.

Can ChatGPT find nearby businesses without a city in the prompt?

Yes. Three of 12 primary recommendations without a named city produced Munich maps. A separate “near me” pharmacy prompt did too. The four newest no-city trials instead asked for a city or district. The captures do not establish the source of the inferred location.

Why does the same question return different businesses?

Our repeated pharmacy prompt changed both the shortlist and visible web-call count. The streams do not let us isolate generation variability, retrieval changes or hidden ranking logic as the cause. Repeat prompts before drawing conclusions about visibility.

What should a local business optimize?

Keep business profiles accurate and publish clear, useful information about real services, locations, hours and booking. Maintain relevant industry listings. These are practical recommendations from the observed inputs; we have not measured their causal effect on ChatGPT recommendations.

Is there a public API for reproducing this research?

The routes we tested are internal ChatGPT endpoints. /backend-api/f/conversation carried the discovery conversation; /backend-api/sidebar/conversation handled a selected business’s detail view. This study does not establish a supported public contract for either route.

How broadly do these results apply?

The study contains 50 conversations: 36 primary trials across 12 industries and three prompt types, eight repeats and six pharmacy wording variants. They used one account, German prompts and a Munich research context. These small, fixed-order samples are not population-wide trigger rates or proof of hidden server logic.

Technical appendix

The two endpoints serve different purposes

Observed requestRole in the captures
POST /backend-api/f/conversationSubmit the conversation prompt; receive the streamed answer, search metadata and optional business/map components.
POST /backend-api/sidebar/conversationRetrieve more information about an individual selected business, using its name, location/address and conversation/message context.

The following is a shortened excerpt of the ordinary discovery request, not a complete replay recipe:

{
  "action": "next",
  "model": "gpt-6-thinking",
  "history_and_training_disabled": true,
  "temporary_chat_requests_personalization": false,
  "messages": [{
    "author": { "role": "user" },
    "content": {
      "content_type": "text",
      "parts": ["Welche Apotheken in München empfiehlst du?"]
    }
  }]
}

The subject is inside messages[].content.parts. The ordinary trigger experiment supplied no map_search_params. The complete captured body also has client context, a parent-message identifier and other fields.

A separate parameter probe added latitude, longitude, latitude_span, longitude_span and search_here inside map_search_params. It returned 11 place IDs and descriptions, but no usable rendered map. That probe shows an accepted request variation; it does not establish a stable public API.

The sidebar request instead used category: "generic_entity", generic_entity_params.category: "local_business", a business name, address/location, and conversation/message IDs. It looks up a selected entity; it is not the category-discovery flow measured here.

What we can read from the stream

The response content type was text/event-stream. Server-sent events (SSE) deliver updates as the answer is built. One event is not one search, business or finished message.

  1. Reconstruct message updates rather than counting repeated snapshots as new calls.
  2. Identify exposed assistant messages addressed to web.run. Count those as visible invocations.
  3. Read query and result metadata on the tool messages. Full tool arguments were often absent.
  4. Inspect the reconstructed answer for business records and map components, including MapWidgetV2 in these captures.
  5. Compare the components with the actual interface. All 50 map/no-map outcomes agreed with our live observations. Full completed DOM snapshots are retained for 49; the first added bakery run has a local accessibility-tree diff and a map observation in the tool transcript.

This is our reading procedure, not a claim that every server stage occurs in this order. Updates can interleave, and the client receives only part of the server activity.

The 50 captures contained 4,184 SSE events. 28 runs exposed search activity, with 39 visible web.run invocations. 24 produced maps with 146 map-record appearances. All 50 completed with HTTP 200, [DONE] and message_stream_complete.

Why map search query metadata is not a complete map search log

search_model_queries and map_search_model_queries are exposed metadata fields. Their names do not establish separate callable endpoints or separate tool implementations.

In the “pharmacies near me” run, the only exposed query string was:

Apotheke Notdienst Deutschland offizielle Apothekensuche aponet

It appeared in both fields. Yet the answer mapped five pharmacies in Munich, although that city was absent from the exposed string. There was no map-parameter metadata in this ordinary run. The query field therefore cannot be treated as a complete record of geographic retrieval inputs.

In another run, map_search_model_queries held a consumer-advice query about tradespeople and emergency-service costs. The safest interpretation is that these fields expose query-related metadata, with incomplete provenance. They do not reveal the full server-side ranking algorithm.

All 12 primary city search rewrites

Exact strings from search_model_queries, counted once per run for each keyword category. Final map_search_model_queries fields are excluded from the keyword statistic.

IndustryExposed search string
PharmaciesMünchen Apotheke Hauptbahnhof Marienplatz Öffnungszeiten Apotheke offiziell 2026
RestaurantsMünchen beste Restaurants 2026 Empfehlungen bayerisch modern Michelin Michelin Guide
DentistsMünchen Zahnarzt Empfehlungen Bewertungen jameda Doctolib München Zahnärzte 2026
PlumbersMünchen seriöse Sanitärbetriebe Klempner Reparaturen Bewertungen Handwerkskammer
Tax advisersSteuerberater München Kanzlei Privatpersonen Selbständige Unternehmen Empfehlungen Bewertungen 2026
Hotelsbest hotels Munich 2026 luxury boutique central affordable reviews Hotel Torbräu Cortiina Louis 25hours Motel One
Car repairbeste freie Autowerkstatt München Bewertungen Empfehlungen 2025 2026
CRM softwareCRM Software Hersteller München CAS? cobra? CentralStationCRM München Anbieter CRM München and München CRM Software Anbieter eigene Software München evalanche update? snapADDY München CRM Anbieter
Bakeriesbeste Bäckereien München 2025 2026 Brot Sauerteig Brezen Empfehlungen
Hair salonsbeste Friseure München Empfehlungen 2025 2026 Salons Bewertungen Treatwell
GymsFitnessstudio München FitX Fit Star McFIT body soul Fitness First Elements Preise 2026 Standorte
Floristsbeste Blumenläden München Floristik Empfehlungen 2025 2026

The coding rules retain the original case-insensitive text matches. “Named guides or institutions” counts Jameda, Doctolib, Michelin or Handwerkskammer. Treatwell appears in the hair-salon query but is outside that fixed category; it is reported as an additional observation rather than silently changing the rule.

Study design limits and what we did not establish

The full study contains 50 fresh conversations collected in three batches: 34 initial trials, eight additional city recommendations and eight additional no-city/definition trials. The balanced primary panel is 36 conversations: 12 industries × three intents. Eight repeat trials comprise pharmacy and CRM recommendation/definition repeats plus one additional city recommendation for each of bakeries, hair salons, gyms and florists. Six pharmacy variants test keyword, near-me, category-city, online, text-only and explicit-map wording. A UI-only preflight is excluded.

The captured request model was gpt-6-thinking; the interface showed Medium effort. Requests did not include an explicit thinking-effort field. These were temporary chats with personalization disabled, in one account, mostly about Munich and in German. The browser client reported client_contextual_info.app_surface: "codex_browser".

Collection order was fixed rather than randomized. The initial batch used up to two concurrent isolated tabs; the extensions ran sequentially. Each primary cell has one trial. Aggregate totals cover all 50; primary comparisons use the first trial per industry and intent so repeated industries do not receive extra weight. These figures describe this pilot and do not estimate population-wide trigger probabilities.

The older format test, the eight-business Google check and the parameter probe are separate cohorts. They are not pooled into a larger success rate. The Google comparisons excluded sponsored results, captured only the first 20 organic listings, and did not fully match location, timing or interface language.

We observed browser-visible traffic and UI behavior. We did not obtain OpenAI’s server logs, supplier contracts, complete tool inputs or ranking weights. We did not run a causal optimization experiment or measure traffic, leads or conversions.

Saved SSE files retain event framing but redact and reserialize JSON payloads; they are not byte-for-byte originals. The evidence bundle contains request excerpts, reconstructed messages, per-run summaries, UI evidence and redacted streams. The register records source hashes. No authentication headers are included.

What the deeper technical probes revealed

These supporting probes use earlier UI observations, historical streams and saved client code. They are separate from the 50-conversation panel and do not change its denominators.

Opening details can replace the original card data. For International Pharmacy Hauptbahnhof, the discovery card showed 4.6 stars and 261 reviews. On two detail opens, the panel began at 4.6 while loading and then changed to 4.3. The saved client code supports replacing an initial placeholder when the loaded business matches by ID or normalized name. The server-side reason for the rating difference remains unknown.

A visible map label is not the recommendation order. The inspected client code prioritizes selected or hovered labels, then open status and rating, while hiding labels that collide on screen. This is a display rule. It does not explain which businesses the server retrieved or why the answer recommended them.

A cache flag does not prove freshness. Historical sidebar responses marked entity knowledge as cached while the business record said from_cache: false. One 8 October lookup reused a description captured on 30 September. Different flags can describe different layers; these observations do not establish an eight-day cache lifetime.

Saving the live stream matters. In three earlier comparisons, later saved-conversation responses omitted both query-metadata fields even though the live streams had exposed them. Reading the saved answer alone would have lost that evidence. This is why our new trials retain the stream, reconstructed messages and UI observations together.


Research scope: 50 fresh, temporary ChatGPT conversations in one account, collected on 9 October 2026 with gpt-6-thinking at Medium effort, mostly German prompts about Munich. These observations describe this setup, not a universal ChatGPT ranking or a controlled demonstration of content-driven uplift.

More articles

See where your brand stands in AI search

Book a call and we walk through your category: the questions your buyers ask, who gets cited today, and where the opportunity is.