ads-geolisted
Install: claude install-skill devaimani/openai-ads-mcp
# Location targeting
## Available levels
Verified against the live API on 2026-09-04 for Germany:
| Type | Example | ID |
|---|---|---|
| `country` | Germany | `1000056` |
| `region` | Baden-Württemberg | `2000346` |
| **`postal_code`** | 10115 Berlin | `10015849` |
**`postal_code` appears in no documentation but works.** Postcode-level
targeting is therefore possible.
**`dma` does not exist for Germany.** It never appeared in any query and looks
US-specific.
**Radius targeting does not exist.** Model a catchment area as a list of
postcodes. In practice that is more precise, because it follows municipal
boundaries rather than a circle.
With no location set, the campaign runs across every available area.
## Three pitfalls
**Umlauts are mandatory.**
| Input | Results |
|---|---|
| `Muenchen` | 0 |
| `München` | 78 |
| `Koeln` | 0 |
| `Köln` | 48 |
The `search_geo` tool rewrites ae/oe/ue automatically and tries both forms.
Calling the API directly requires handling this yourself.
**English exonyms find nothing German.** `Munich` returns two results, none
with `country_code: DE`. Same for `Cologne`.
**Districts and localities do not exist.** A German `Landkreis` returns no
results, and neither do sub-municipal localities — those are covered by the
parent town's postcode.
**Duplicate names.** `Birkenfeld` exists three times: 55765, 75217 and 97834.
Always select by postcode, never by name.
## Procedure
```
1. search_geo("Karlsruhe", country="DE") -> collect IDs
2.