How to see ChatGPT answers by US state
To see ChatGPT’s answer in a US state, send the prompt with state set to the state’s two-letter code. ChatGPT and Gemini answer from inside that state, in all 50 states and DC. To see all of them, put 51 tasks in one batch, one per code from GET /v1/states?country=US, then compare the brands, places and sources across the answers. One prompt in every state costs $0.0765 at the Starter tier.
Why answers differ by state
OpenAI’s help article Searching the web with ChatGPT (checked 2026-11-11) says ChatGPT may use the user’s approximate location to give local results. Its example: asked “What are some good restaurants near me?” by a user in San Francisco, ChatGPT may search for “top restaurants San Francisco”. The article also suggests adding a city or postal code to the question when the location is wrong.
So the same question gets a different search, and a different answer, depending on where it is asked. We measured it. On 2026-11-09 we asked ChatGPT “best pizza near me” once in each state and once without a state:
- Each of the 50 state answers was placed in a city inside the state asked: Anchorage for Alaska, Birmingham for Alabama, San Antonio for Texas, Cleveland for Ohio.
- Without a state, ChatGPT picked New York.
- We kept the first five places each answer named, 241 across the 51 answers. Only three names appear in two states, such as Pizza Works in Arkansas and Connecticut, at different streets.
- The DC answer was placed outside DC.
The homepage map shows every recorded answer. For questions with no “near me”, such as insurance or legal services, the effect shows up in which brands and sources are named rather than in a map.
Step 1: one state
Start with one synchronous call to see the shape:
curl -X POST "https://api.answerline.dev/v1/monitor/chatgpt" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "Which home insurance company should I choose?", "state": "OH"}'
state implies country "US". With any other country the request is refused with a 400 and not billed. The answer’s result.provenance.requestedState is "OH".
The fields to compare across states:
entities: every brand, product and local business the answer names, with ChatGPT’s name for it and atype.map: the businesses shown as cards, withname,address,rating,latitudeandlongitude. Absent when the answer has none.citationPills: the cited sources, each with itsdomain.sourceslists the cited pages in order.
Step 2: all 51 in one batch
GET /v1/states?country=US returns 51 entries, the 50 states and DC. POST /v1/async/task/batch takes up to 500 tasks, so the whole run is one call. This uses the Python SDK (pip install answerline):
import os
from answerline import Client
PROMPT = "Which home insurance company should I choose?"
RUN = "2026-11-11"
with Client(os.environ["API_KEY"]) as client:
states = client.states()
batch = client.create_batch([
{"taskType": "CHATGPT",
"payload": {"prompt": PROMPT, "state": s["code"]},
"idempotencyKey": f"home-insurance-{s['code']}-{RUN}"}
for s in states
])
answers = {}
for item in batch["results"]:
code = states[item["index"]]["code"]
if not item["success"]:
print("not created:", code, item["error"]["code"])
continue
done = client.wait_for_task(item["task"]["id"])
if done["task"]["status"] == "COMPLETED":
answers[code] = done["response"]["result"]
else:
print("failed:", code)
print(len(answers), "of", len(states), "states answered")
The 51 tasks run on our side whether or not you wait; the loop only collects them. For a scheduled run, give each task a webhook and store each answer as it arrives (webhooks). Keep the state with every stored row: provenance.requestedState is on every completed answer, and a failed task has no result, so the code above keys answers by the code it sent.
Step 3: compare the states
Count in how many states each brand is named and each domain is cited:
from collections import defaultdict
brand_states = defaultdict(set)
domain_states = defaultdict(set)
for code, result in answers.items():
for entity in result.get("entities", []):
brand_states[entity["name"]].add(code)
for pill in result.get("citationPills", []):
domain_states[pill["domain"]].add(code)
def top(table, n=10):
for name, codes in sorted(table.items(), key=lambda kv: -len(kv[1]))[:n]:
print(f"{len(codes):>2} states {name}")
top(brand_states)
top(domain_states)
What to look for:
- National brands: named in most states. The states where one is missing are where to look first.
- Regional brands: named in a handful of neighboring states. These are the competitors a national report misses.
- Local sources: state agencies, regional newspapers and local review sites that appear in only one or two states.
- Places: for local prompts, list
map[].nameandmap[].addressper state, and check that each address is in the state asked.
To check your own brand, filter brand_states for your names and print the states where it is missing.
Step 4: separate states from noise
The same prompt in the same state can name different brands from one run to the next. Before reporting “Ohio sees different insurers than Texas”:
- Repeat each state 3 to 5 times on the same day. Put the repeat number in the idempotency key (
home-insurance-OH-r2-2026-11-11), or the repeat is refused as a duplicate of the first. - Report rates: “named in 4 of 5 Ohio runs and 0 of 5 Texas runs” is a finding. One run each is not.
- Keep the prompt identical in every state. Writing the city into the prompt measures the prompt, not the state.
AI answer volatility covers how many repeats to take.
What it costs
A state does not change the price. Starter-tier costs:
- One prompt in all 51: 51 × $0.0015 = $0.0765.
- Three repeats to measure variance: $0.2295.
- 20 prompts in all 51, weekly for 4 weeks: 4,080 requests, $6.12.
Higher tiers, reached by 30-day spend, cost less: ChatGPT is $1.00–$1.50 per 1,000 across tiers. A failed request is not charged.
Other engines and cities
Every other engine accepts state and answers for the whole US, the same as without it, so a Perplexity answer sent with state is not a state answer. For city-level answers, Google AI Mode and Google Search take location, such as Austin,Texas,United States. The coverage page lists what each engine does.
ChatGPT state targeting has the same run in TypeScript and the request reference. Local AI answers by country, state and city covers sweeps with many prompts and per-market metrics.
Questions
How do I see what ChatGPT answers in a specific US state?
Send the prompt to POST /v1/monitor/chatgpt with state set to a two-letter code, for example OH. ChatGPT and Gemini answer from inside that state, in all 50 states and DC. The state implies country US.
How do I run one prompt in every state at once?
Fetch the 51 codes from GET /v1/states?country=US, build one CHATGPT task per code, and submit them in one call to POST /v1/async/task/batch, which takes up to 500 tasks. Collect the answers by polling each task or with a webhook.
What does a 51-state run cost?
51 ChatGPT requests at $0.0015 each at the Starter tier: $0.0765. A state does not change the price, and a failed request is not charged.
Do Perplexity and the other engines answer by state too?
No. They accept state and answer for the whole US, the same as without it. Only ChatGPT and Gemini answer from inside the state. Google AI Mode and Google Search take a city with location instead.
Why does ChatGPT give different answers in different states?
OpenAI's help article on searching the web with ChatGPT says it may use the user's approximate location to give local results. In our run of 'best pizza near me' on 2026-11-09, each state's answer was placed in a city in that state and named its own pizzerias.
Is one run per state enough?
No. Answers vary between identical runs. Repeat each state a few times and treat only differences larger than the run-to-run variation as differences between states.