---
title: "Find ChatGPT Ads location ids"
method: POST
path: "/api/v1/tools/chatgpt_geo_lookup/execute"
tags: ["ChatGPT Ads"]
---

# Find ChatGPT Ads location ids

`POST /api/v1/tools/chatgpt_geo_lookup/execute`

## Request

- Base URL: `https://adako.ai`
- URL: `https://adako.ai/api/v1/tools/chatgpt_geo_lookup/execute`
- Auth: HTTP bearer

Turns a place name into the location ids the platform targets by. "Berlin", "California", "Japan" go in; ids, canonical names and location types come out.
Use when: the user names any place the ad should run in, always before chatgpt_launch_ad. The launch tool accepts ids only and refuses anything that looks like a name.
Do not guess an id, reuse one from another ad platform, or pass a place name straight into a write — a wrong id spends real money in the wrong country and the platform will not warn you.
Returns every match with its type and country code, so you can tell one Springfield from another. Types include country, region, city and dma (a US media market covering several cities, which is often what a metro name resolves to). If several matches look plausible, show them and ask the user which one they mean rather than taking the first.
A match only proves the place exists. It does not mean this ad account can advertise there: ask the user to confirm the market is enabled for their account before launching in it.
Costs nothing, so resolve every place the user mentions, one place per call.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object, required
    - `ad_account_id` string: ChatGPT Ads advertiser account id. One advertiser key belongs to one account, so this is only needed when the user has connected more than one key. Omit it to use the primary account.
    - `query` string, required: The place name to look up, as the user said it. One place per call.
    - `limit` integer: Maximum matches to return (default 10).
    - `raw_data` boolean: Return compact JSON only (no markdown). Use when you will compute on the result.

## Response `200`

The tool ran. A write returns proposal_id and approve_url while the change waits for approval.

- SuccessEnvelope
  - `success` unknown, required
  - `tool` string, required
  - `data` object, required: Machine-readable result.
  - `markdown` string, required: The same result written for a person or a model.
  - `quota` Quota: Task usage for the current billing period.
    - `plan` string
    - `used` integer
    - `limit` integer
    - `period_end` string
    - `upgrade_url` string
  - `proposal_id` string: Present for writes. Nothing changes on the ad platform until it is approved.
  - `approve_url` string: Where a person approves the proposal.
  - `request_id` string, required

## Other responses

- `400`: Invalid arguments, or the ad account could not be resolved.
- `401`: Missing, invalid, revoked or expired API key.
- `402`: Monthly task quota used up, or the plan does not include this tool.
- `403`: The connected ad account lacks the access level this tool needs.
- `404`: Unknown tool name.
- `409`: Not connected, reconnect needed, confirmation required, a proposal already pending or no longer pending, an identical create that failed earlier today (proposal_failed_before), a create that duplicates an approved one (duplicate_create), the ad-account limit of the plan reached (account_limit), or an Idempotency-Key reused with different arguments.
- `429`: Rate limited by Adako or by the ad platform. See Retry-After.
- `500`: Unexpected error inside Adako.
- `502`: The ad platform returned an error.

---

[API](https://skmtc.dev/adako/apis/adako-rest-api.md) · [All operations](https://skmtc.dev/adako/apis/adako-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adako/apis/adako-rest-api/revisions/59ee60d48a56?raw)
