---
title: "Read a Google campaign's device, location, and language targeting"
method: GET
path: "/v1/ads/campaigns/{campaignId}/targeting"
tags: ["Ad Campaigns"]
---

# Read a Google campaign's device, location, and language targeting

`GET /v1/ads/campaigns/{campaignId}/targeting`

Google Ads compliance requires geo, language, budget, and bidding targeting
set at creation to stay editable afterwards; this reads the campaign state
so an integrator can build an editor around it. Cached for the quota window
(10 minutes fresh, up to 7 days last-good), not always a live read. Google
only; every other platform returns 501.

`devices` lists the device criteria the campaign carries, which depends on
its channel: Search campaigns have MOBILE, DESKTOP and TABLET, Display
campaigns also have CONNECTED_TV. `bidModifier` is Google's bid adjustment
for that device, `null` when it has none, and `0` when the device is
switched off; `included` is false for exactly that case.

## Path parameters

- `campaignId` string, required

## Query parameters

- `platform` 'google'

## Response `200`

Current campaign targeting

- object
  - `devices` object[]
    - `device` 'MOBILE' | 'DESKTOP' | 'TABLET' | 'CONNECTED_TV'
    - `included` boolean
    - `bidModifier` number, nullable — Google's bid adjustment for this device: null when it has none, 0 when the device is switched off, otherwise 0.1 to 10.
  - `locations` object[]
    - `geoTargetId` string — Numeric id from Google's geoTargetConstants/{id}.
    - `negative` boolean — true = excluded location.
    - `name` string, nullable — Google's geo_target_constant.name, e.g. "United States"; null when the id could not be resolved.
    - `canonicalName` string, nullable — Google's geo_target_constant.canonical_name, e.g. "California, United States"; null when the id could not be resolved.
    - `type` string, nullable — Google's geo_target_constant.target_type, e.g. "Country", "Region", "City"; null when the id could not be resolved.
    - `countryCode` string, nullable — Google's geo_target_constant.country_code, an ISO 3166-1 alpha-2 code; null when the id could not be resolved.
  - `languages` object[]
    - `code` string — Google's language code (ISO 639-1, plus variants such as `zh_CN`). Empty when the campaign's language_constant id is not in Zernio's checked-in table.
    - `id` string — Google's languageConstants/{id} numeric id.
    - `name` string
  - `cachedAt` string, date-time, nullable — When this targeting was fetched from Google. Null when it was never served from cache.
  - `stale` boolean — True when Google's daily API quota was exhausted and this is the last successful fetch, not a live read.

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — Ads access required (Ads add-on on legacy plans, included on usage-based plans).
- `404` — Campaign not found
- `501` — Only available on Google Ads campaigns

## Changes

- **2026-09-16** `3e6ddf2a99ea` — 1 info
  - added the optional property `details/budgetScope` to the response with the `400` status
- **2026-09-15** `0dba7d004d75` — 2 info
  - added the optional property `details/quotaExhausted` to the response with the `400` status
  - added the optional property `details/quotaScope` to the response with the `400` status
- **2026-09-09** `41eff0cffb2d` — 4 info
  - added the optional property `locations/items/canonicalName` to the response with the `200` status
  - added the optional property `locations/items/countryCode` to the response with the `200` status
  - added the optional property `locations/items/name` to the response with the `200` status
  - added the optional property `locations/items/type` to the response with the `200` status
- **2026-09-08** `d7a8fa118ef0` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/campaigns/:campaignId/targeting/get.md)

---

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