---
title: "Search locations for local rank tracking (city/county/region/country)"
method: GET
path: "/v3/region-search/canonical-cities"
tags: ["Utilities"]
---

# Search locations for local rank tracking (city/county/region/country)

`GET /v3/region-search/canonical-cities`

Resolves a place name to the `criteriaId` + `canonicalName` that `track_keywords` needs for local (sub-country) rank tracking. Call this FIRST whenever the user names anywhere more specific than a country - a city, county, state, province, borough or neighbourhood - then pass the chosen row's `criteriaId` as `locationCriteriaId` and its `canonicalName` as `locationCanonicalName`. Never guess a criteriaId: they are Google Ads geo-target IDs and an invented one will not resolve. Search terms are comma-separated and ANDed (e.g. "palm beach,county"). Use `targetTypes=Country` for country-level lookups, or `excludeTargetTypes=Country,Postal Code` to search only sub-country places. Country-only tracking needs no lookup - pass ISO2 as `countryId`.

## Query parameters

- `q` string
- `targetTypes` string
- `excludeTargetTypes` string
- `limit` integer
- `offset` integer

## Response `200`

Up to 75 matching geo-targets.

- object[] — Up to 75 matching geo-targets.
  - `criteriaId` number, required
  - `name` string, required
  - `canonicalName` string, required
  - `parentId` number, nullable, required
  - `countryCode` string, required
  - `targetType` string, required

## Other responses

- `400` — Bad request (missing or empty q parameter).
- `500` — Canonical city search failed.
- `503` — Region database not configured.

---

[API](https://skmtc.net/snowseo/apis/snowseo-api.md) · [All operations](https://skmtc.net/snowseo/apis/snowseo-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/snowseo/snowseo-api/revisions/c8f1f876a92c/schema)
