Targeting dimension reference
All 43 targeting rule types — enum value, id, picker, rule options and corner cases — grouped as the Targeting card groups them.
The platform defines 43 rule types. 38 of them are dimensions you pick from the add-rule list on the Targeting card; the remaining 5 are blocked-entity types that no picker offers — they are created by blocking actions and are listed at the bottom of this page.
Every dimension below is available at all six entity levels — site, zone and placement on the supply side (where the card is called Pre-targeting), advertiser, campaign and banner on the demand side. Each is permission-gated twice, once per side: a dimension missing from your add-rule list means your role lacks that grant, not that the dimension does not apply here.
Note: the order below is the add-rule list order. Saved rules on the card are grouped in a slightly different order, so a dimension can sit in a different position there.
How to read the tables
- Value · id — the rule type’s name and its numeric id. Both are stable; the REST API
takes the value as
type=. Ids run 1–44; 6 is not in use. - Picker / values — what the add-rule editor shows, and where its option list comes from.
- Rule options — controls beyond the Include / Exclude choice. Relation operators are
always the same five:
=,<,>,>=,<=.
Geographic
| Dimension | Value · id | Picker / values | Rule options | Notes / corner cases |
|---|---|---|---|---|
| Country | COUNTRY · 1 | Multi-select: custom country groups, then world regions, then individual countries — one searchable list | — | Groups come first because the server concatenates them in that order; regions carry a REG prefix, custom groups a CUSTOM one |
| Browser Country | BROWSER_COUNTRY · 43 | The same combined list as Country | — | Country derived from the browser’s time zone (tzn, sent by the JS loader) rather than the visitor’s IP location — so a VPN does not change it. Requests without tzn (VAST, Direct URL, API) have no browser country |
| Location | LOCATION · 7 | Cascading single-select: Country → Region → City | Region and city optional — stop at any level to target the whole country or region | The server needs all three parts, so a level you skip is sent as - |
| Language | LANGUAGE · 2 | Multi-select of browser/device languages | — | |
| Mobile Carrier | MOBILE_CARRIER · 10 | Multi-select of carrier / ISP names | — |
Corner case: Country, Location and Mobile Carrier all read their option lists from the geo service. When it is unavailable the picker is simply empty — there is no error — so a blank list means “cannot reach the data”, not “no options exist”.
Temporal
| Dimension | Value · id | Picker / values | Rule options | Notes / corner cases |
|---|---|---|---|---|
| Time Range | TIME_RANGE · 8 | From / To time inputs | Client local time toggle | Left off, the window is evaluated in UTC — not the ad server’s local zone and not your account’s reporting zone. With it on, in the visitor’s UTC offset — which only the JS loader sends (tz); a VAST, Direct URL or API request without tz is evaluated in UTC. Both ends are inclusive; a range whose end is before its start runs over midnight (22:00–06:00) |
| Day of Week | DAY_OF_WEEK · 9 | Multi-select of weekdays | — | Evaluated in the visitor’s local time, from the time-zone offset the ad tag reports; a request that reports none falls back to UTC. There is no toggle: a standalone Day of Week rule is always visitor-local, unlike Time Range |
| Day and Time | DATE_TIME · 25 | Weekday multi-select + From / To time | Client local time toggle | One rule = the picked days combined with the one time window; same UTC default as Time Range |
Device and Browser
| Dimension | Value · id | Picker / values | Rule options | Notes / corner cases |
|---|---|---|---|---|
| Operating System | OPERATING_SYSTEM · 5 | Multi-select of OS families | With exactly one OS picked: Relation + Version single-select | Picking a second OS clears the version narrowing — the server only reads a version when a single OS was sent |
| Browser | BROWSER · 4 | Multi-select of browsers | With exactly one version-capable browser picked: Relation + numeric Version, 0–999 | Only browsers whose version string the platform can parse offer the field; the server re-checks that before saving the versioned rule |
| Device Format | DEVICE_FORMAT · 13 | Multi-select (desktop / mobile / tablet, …) | — | |
| Device Vendor | DEVICE_VENDOR · 14 | Multi-select of device manufacturers | — | Only vendors the detection database marks as targetable are listed |
| Resolution | RESOLUTION · 18 | Single-select of common screen sizes, plus a Custom… entry | Relation always required; Custom reveals Width + Height, 0–9999 each | One rule per add — repeat the add for several sizes |
| Protocol | PROTOCOL · 21 | Multi-select (HTTP / HTTPS) | — | |
| Wi-Fi Traffic | WIFI_TRAFFIC · 11 | None — a yes/no dimension | Include = Wi-Fi only, Exclude = non-Wi-Fi only | |
| Is Web App | IS_WEB_APP · 38 | None — a yes/no dimension | Include = in-app / WebView traffic, Exclude = ordinary browser | |
| Incognito Mode | INCOGNITO_MODE · 42 | None — a yes/no dimension | Include = private-browsing traffic, Exclude = normal | Detection is best-effort in the ad tag; a request where it could not be determined counts as not incognito |
Device scores and specs
All six take one number and a relation. The scores come from the device-detection database.
| Dimension | Value · id | Input | Default relation | Notes |
|---|---|---|---|---|
| Device Release Year | DEVICE_RELEASE_YEAR · 33 | Year | >= | |
| Device RAM | DEVICE_RAM · 37 | RAM in MB | >= | |
| Browser Rank | BROWSER_RANK · 34 | Rank | <= | Lower rank is better, so the default keeps the top browsers |
| Hardware Rank | HARDWARE_RANK · 35 | Rank | <= | Same direction as Browser Rank |
| Platform Rank | PLATFORM_RANK · 36 | Rank | <= | Same direction as Browser Rank |
| Price Band | PRICE_BAND · 39 | Price in USD | >= | Approximate device price tier |
How device, OS and browser are detected
Every hit is detected on its own: the ad request, the impression pixel and the click each go through device detection with the headers that hit arrived with. The detection reads, in this order:
- a
clientUaparameter on the request (server-to-server API calls pass the visitor’s user agent here), - the
X-Device-User-Agentheader (server-side ad insertion stitchers forward the viewer’s user agent in it), - otherwise the request’s own
User-Agentheader plus its client hints (Sec-CH-UA,Sec-CH-UA-Mobile,Sec-CH-UA-Platform,Sec-CH-UA-Platform-Version,Sec-CH-UA-Model,Sec-CH-UA-Full-Version-Listand the otherSec-CH-UA-*headers).
The detected device type maps to Device Format: phones, small screens and watches → Mobile; tablets and e-readers → Tablet; desktops and kiosks → Desktop; TVs, consoles, media hubs, VR headsets, smart speakers and car displays → Smart TV. When detection gives no device type, the device format is taken from the operating system parsed from the user agent. IoT devices and routers get no device format at all. A request whose format (or OS, browser, vendor) is unknown fails an Include rule of that dimension and passes an Exclude rule.
Why does a report show mobile traffic when the campaign excludes mobile?
Targeting is decided once, on the ad request. The device you see in a report row comes from the hit that was counted — an impression is logged with the device detected from the impression pixel’s own request, a click with the click’s. The two can disagree:
- Different evidence. Chromium browsers send only a reduced user agent (no phone model,
frozen OS version) plus low-entropy client hints. The detailed hints (model, OS version) are
sent only after the browser has seen the ad server’s
Accept-CHanswer and only where the page allows them, so two requests of the same page view can carry different evidence — the ad request classified as Tablet, the impression pixel as Mobile, or the other way round. - A different client fired the hit. A video player SDK, a server-side stitcher or a
third-party wrapper may request the VAST or fire the impression pixel from somewhere other
than the viewer’s browser. Unless it forwards the viewer’s user agent (
X-Device-User-AgentorclientUa), the hit is detected as the player or the server.
A small share of such rows is expected. A large one means the tag or the player is not passing the viewer’s user agent.
Client hints: what publishers can add for better device data
Every ad-server response carries an Accept-CH header asking the browser for Sec-CH-UA,
Sec-CH-UA-Full-Version-List, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform and
Sec-CH-UA-Platform-Version. A browser sends the high-entropy ones (model, platform version,
full version list) to a third-party ad domain only when the publisher’s page delegates them. The
publisher adds a response header on its pages, for example:
Permissions-Policy: ch-ua-model=(self "https://<ad-serving-domain>"), ch-ua-platform-version=(self "https://<ad-serving-domain>"), ch-ua-full-version-list=(self "https://<ad-serving-domain>")
with your network’s ad-serving domain in place of <ad-serving-domain>. Without it the Device Vendor,
model-based specs and OS-version rules have less to work with on Chromium browsers.
Targeting a range of OS versions (all iOS 17 and newer)
There are no version groups — pick one operating system in the Operating System editor and
set Relation >= and the Version: one rule covers every newer version too. For a band
(Android 12 to 14) add an Include rule >= 12 and an Exclude rule >= 15.
Content and Apps
| Dimension | Value · id | Picker / values | Rule options | Notes / corner cases |
|---|---|---|---|---|
| Domain | DOMAIN · 17 | Free-text domain | — | One domain per rule. Matches the host and its subdomains (example.com also matches news.example.com), never a path. Checked against the rd parameter, the Referer, requestUrl, the request URL and the origin — any match counts. For URL paths see Can I target a URL? |
| Channel | CHANNEL · 16 | Free-text channel value(s) | — | A comma- or semicolon-separated list is split client-side and creates one rule per entry in a single click |
| App Package | APP_PACKAGE · 30 | Free-text package / bundle id | — | |
| Cookie Value | COOKIE_VALUE · 15 | Cookie Name + Value text fields | — | Matches a cookie on the visitor’s browser |
| Custom Parameter | CUSTOM · 12 | Parameter-kind single-select; kind Expression shows one free-text expression, every other kind shows Operator + Parameter + Value | The operator list depends on the picked kind | Matches key-value parameters passed in the ad request — see Custom-parameter targeting |
Network
| Dimension | Value · id | Picker / values | Rule options | Notes / corner cases |
|---|---|---|---|---|
| IP Range | IP_RANGE · 3 | From IP + To IP text fields | — | IPv4 and IPv6 both accepted; a single address is the same value in both fields |
| Proxy | PROXY · 32 | Multi-select of proxy / VPN detection categories | — | |
| Connection Type | CONNECTION_TYPE · 41 | Multi-select of connection types | — | The UNKNOWN value is filtered out of the list, so a request whose connection type could not be determined can be matched by neither Include nor Exclude |
| Traffic Source | TRAFFIC_SOURCE · 44 | Multi-select; Header Bidding is the only value today | — | Names the integration a request arrived through, not anything about the visitor. An ordinary ad tag carries no traffic source, so include Header Bidding refuses tag traffic and exclude Header Bidding lets it through |
Presets
All three take one admin-defined group. See Preset groups.
| Dimension | Value · id | Picker / values | Notes |
|---|---|---|---|
| Preset Domains | PRESET_DOMAINS · 20 | Single-select of domain groups | One group per rule |
| Preset IP Ranges | PRESET_IP_RANGES · 26 | Single-select of IP-range groups | One group per rule |
| Preset App Packages | PRESET_APP_PACKAGES · 29 | Single-select of app-package groups | One group per rule |
Data and API
| Dimension | Value · id | Picker / values | Rule options | Notes / corner cases |
|---|---|---|---|---|
| DMP | DMP · 19 | Provider single-select, then a drill-down through segment levels | The deepest segment you drilled to is what gets targeted | Providers are permission-gated one by one — the segment tree of a provider your role lacks stays empty; segment levels load as you drill |
| API JSON Field | API_JSON_FIELD · 31 | API URL + JSON field + Value text fields | — | The platform calls the URL and compares the named JSON field against the value |
Risk
| Dimension | Value · id | Picker / values | Rule options | Notes / corner cases |
|---|---|---|---|---|
| Traffic Risk Score | TRAFFIC_RISK_SCORE · 40 | Risk-level single-select + optional risk-category multi-select | Relation, default >= | Leaving the categories empty means all categories. See Invalid traffic and risk scoring |
Targeting and DSP demand
Every targeting dimension applies to external DSP (RTB) demand too: targeting rules are evaluated locally, on every candidate, before any bid request is built. The rule engine makes no distinction by creative type, and the RTB pool is assembled after targeting exclusions have been applied — so a campaign or banner your rules exclude never reaches the DSP at all. Your rules are not forwarded to the DSP either; the DSP sees the ordinary OpenRTB request fields.
The one place a per-value DSP flag is real is inside the Operating System and Browser option lists, where individual values are marked DSP-capable or not. The flag is served with those lists but no screen displays it, so you cannot see it in the product today.
Where the option lists come from
Every multi-select and single-select dimension fills its list from one shared endpoint,
GET /account/target/all-targets.do?type=<VALUE>, except the three preset dimensions, which
each read their own group list. Dimensions with no entry in that endpoint — the yes/no ones,
the numeric ones, the free-text ones and Custom Parameter — have nothing to fetch.
Blocked-entity rule types
These five appear on the card under the Blocking and is Blocked by groups, but the server strips all five out of the add-rule list for every user regardless of permission. They are created only by blocking actions — see Blocking demand and inventory.
| Rule type | Value · id | Held by | Blocks |
|---|---|---|---|
| Blocked Banners | BLOCKED_BANNERS · 22 | Site / zone / placement | One banner |
| Blocked Campaigns | BLOCKED_CAMPAIGNS · 27 | Site / zone / placement | One campaign and its banners |
| Blocked Advertisers | BLOCKED_ADVERTISERS · 28 | Site / zone / placement | All demand of one advertiser |
| Blocked Placements | BLOCKED_PLACEMENTS · 23 | Banner / campaign | One placement |
| Blocked Sites | BLOCKED_SITES · 24 | Banner / campaign | One site’s whole inventory |
Note: blocked-entity rules keep applying even when the entity’s targeting switch is off, and creating one silently switches targeting on for the receiving entity.
Placement types
Every one of the 38 dimensions lists the same seven placement types — Site, Mobile Site, Video, Non-standard, Application, Email and Native. Click-through placements are the exception: no dimension lists them, so the type filter would return an empty list for one.
That filter only runs when the caller asks for it by placement type, and the new UI never does, so in practice the Pre-targeting card on a click-through placement shows the full list anyway. Treat targeting on a click-through placement as unsupported rather than as working.