> ## Documentation Index
> Fetch the complete documentation index at: https://developers.respondent.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Advanced targeting attributes

> Target participants on lifestyle, professional, technology, and product attributes using the advancedTargeting field

## Overview

Advanced targeting attributes let you target participants on a broader set of
profile characteristics — languages spoken, employment, technology and devices,
products and services used, and more — beyond the core audience fields in
[Targeting audiences effectively](/docs/Projects/targeting-audiences-effectively).

These attributes are **additive**. Every existing targeting field
(`targetCountries`, `targetGenders`, `targetHouseholdIncome`, the B2B
firmographic fields, and so on) is unchanged and continues to work exactly as
before. Advanced attributes are set through a single new object,
`advancedTargeting`, when you create or update a project, and are available
identically to **B2C** and **B2B** projects.

<Note>
  Advanced targeting is rolling out gradually and is enabled per organization.
  **Contact your Respondent account manager to enable advanced targeting for your
  account.** Until it's enabled, `advancedTargeting` is not part of your
  available targeting surface.
</Note>

## How it works

`advancedTargeting` is a flat object whose keys are the attributes you want to
target and whose values are the criteria a participant should meet:

```json theme={null}
{
  "advancedTargeting": {
    "languages": ["en", "es"],
    "streamingServices": ["netflix", "disneyplus"],
    "homeOwner": true
  }
}
```

### Filters vs. signals

Advanced attributes use the same **filter vs. signal** model as the rest of targeting. For a refresher, see [Targeting audiences effectively](/docs/Projects/targeting-audiences-effectively) and [participant qualification and filters](/docs/Guides/b2b-participant-qualification-and-filters).

<Tip>
  **We strongly recommend making an attribute a hard filter whenever it genuinely
  needs to be met** — add its key to `keyQualifiers`. Keep it a signal only when
  you want a soft preference and broader reach.
</Tip>

### Participants who haven't set an attribute yet

Targeting an advanced attribute does **not** shrink your reachable audience to
only participants who have already answered it. Participants who haven't yet set
that attribute can still match on your other criteria and be contacted; when
they apply, they're asked to complete the missing attribute and only continue if
they qualify.

## Available attributes

All attributes below are available on **both B2C and B2B** projects. **Behavior** shows whether an attribute is a soft signal by default (promotable to a hard filter via `keyQualifiers`) or always a hard filter. For each attribute's allowed values, see the [`advancedTargeting` schema in the Create a project reference](/projects/create-a-project#body-one-of-0-advanced-targeting) — it's generated from the API, so it's always current.

### Personal

| Attribute                    | Type      | Behavior               |
| ---------------------------- | --------- | ---------------------- |
| `relationshipStatus`         | string    | Signal · promotable    |
| `languages`                  | string\[] | Signal · promotable    |
| `nationality`                | string\[] | Signal · promotable    |
| `numberOfChildren`           | number    | Signal · promotable    |
| `numberOfChildrenLiveAtHome` | number    | Signal · promotable    |
| `childrenBirthYears`         | string\[] | Signal · promotable    |
| `livingSituation`            | string    | Signal · promotable    |
| `homeOwner`                  | boolean   | Signal · promotable    |
| `pets`                       | string\[] | Signal · promotable    |
| `areaType`                   | string    | **Always hard filter** |

### Professional

| Attribute                | Type      | Behavior               |
| ------------------------ | --------- | ---------------------- |
| `militaryServiceStatus`  | string    | Signal · promotable    |
| `workSetting`            | string    | **Always hard filter** |
| `employmentStatuses`     | string\[] | Signal · promotable    |
| `cloudPlatforms`         | string\[] | Signal · promotable    |
| `codingAITools`          | string\[] | Signal · promotable    |
| `designPrototypingTools` | string\[] | Signal · promotable    |
| `productivitySoftware`   | string\[] | Signal · promotable    |

### Technology & devices

| Attribute                 | Type      | Behavior               |
| ------------------------- | --------- | ---------------------- |
| `browsers`                | string\[] | **Always hard filter** |
| `computerOS`              | string\[] | **Always hard filter** |
| `programmingLanguages`    | string\[] | **Always hard filter** |
| `tabletOS`                | string\[] | **Always hard filter** |
| `smartphoneOS`            | string\[] | **Always hard filter** |
| `webcam`                  | boolean   | **Always hard filter** |
| `mobilePhoneWithInternet` | boolean   | **Always hard filter** |
| `headsetWithMicrophone`   | boolean   | **Always hard filter** |

### Products & services

| Attribute                    | Type      | Behavior            |
| ---------------------------- | --------- | ------------------- |
| `streamingServices`          | string\[] | Signal · promotable |
| `foodDeliveryServices`       | string\[] | Signal · promotable |
| `onlineBankingTools`         | string\[] | Signal · promotable |
| `onlineLearningPlatforms`    | string\[] | Signal · promotable |
| `onlineMarketplacePlatforms` | string\[] | Signal · promotable |
| `onlineTravelBooking`        | string\[] | Signal · promotable |
| `smartHomeDevices`           | string\[] | Signal · promotable |
| `socialNetworkPlatforms`     | string\[] | Signal · promotable |
| `vehicleBrands`              | string\[] | Signal · promotable |

### Health

| Attribute            | Type      | Behavior            |
| -------------------- | --------- | ------------------- |
| `healthWellnessApps` | string\[] | Signal · promotable |

### Shopping

| Attribute                 | Type   | Behavior            |
| ------------------------- | ------ | ------------------- |
| `onlineShoppingFrequency` | string | Signal · promotable |

## Setting advanced attributes

Set `advancedTargeting` when you create a project (`POST /v1/projects`) or update
a draft (`PATCH /v1/projects/{projectId}`). Add any attribute keys you want
promoted to hard filters to `keyQualifiers`.

In the create examples below, `languages` (B2C) / `cloudPlatforms` (B2B) are
promoted to hard filters via `keyQualifiers`; the other set attributes act as
soft signals; and the always-hard attributes (`webcam`, `workSetting`) filter
automatically without appearing in `keyQualifiers`.

<CodeGroup>
  ```json B2C create theme={null}
  // POST /v1/projects
  {
    // … required project fields — see "Create a project" in the API reference
    "publicTitle": "Streaming habits study",
    "targetMarketType": "b2c",
    "advancedTargeting": {
      "languages": ["en", "es"],
      "streamingServices": ["netflix", "disneyplus"],
      "homeOwner": true,
      "webcam": true
    },
    "keyQualifiers": ["languages"]
  }
  ```

  ```json B2B create theme={null}
  // POST /v1/projects
  {
    // … required project fields — see "Create a project" in the API reference
    "publicTitle": "Cloud engineering panel",
    "targetMarketType": "b2b",
    "advancedTargeting": {
      "employmentStatuses": ["employedfulltime"],
      "cloudPlatforms": ["aws", "googlecloud"],
      "workSetting": "remote"
    },
    "keyQualifiers": ["cloudPlatforms"]
  }
  ```

  ```json Update a draft theme={null}
  // PATCH /v1/projects/{projectId}
  {
    "advancedTargeting": {
      "streamingServices": ["netflix", "hulu", "max"]
    },
    "keyQualifiers": ["languages", "streamingServices"]
  }
  ```
</CodeGroup>

### Updating and clearing attributes

On `PATCH /v1/projects/{projectId}`, `advancedTargeting` is **merged per
attribute** — send only the attributes you want to change:

| Goal                             | What to send                                                                               |
| -------------------------------- | ------------------------------------------------------------------------------------------ |
| **Set / change** an attribute    | Include the key with its new value                                                         |
| **Clear** an attribute           | Send the key with the value `null`                                                         |
| **Clear an array attribute**     | Send `[]` — it's stored as an empty list and treated as *no target* (no filter, no signal) |
| **Leave an attribute unchanged** | Omit the key                                                                               |

`keyQualifiers` is **not** merged — it's replaced as a whole, so always send the
complete set of hard filters you want in effect (send `[]` to remove all of
them).

```json Clearing examples theme={null}
// PATCH /v1/projects/{projectId}
{
  "advancedTargeting": {
    "languages": ["en"],          // set / change
    "relationshipStatus": null,   // clear (remove the target)
    "streamingServices": []       // clear an array attribute (no target)
    // workSetting omitted        // left unchanged
  },
  "keyQualifiers": ["languages"]  // replaces the whole hard-filter set
}
```

## See also

* [Targeting audiences effectively](/docs/Projects/targeting-audiences-effectively)
* [Participant qualification and filters](/docs/Guides/b2b-participant-qualification-and-filters)
* [Audience quotas](/docs/Projects/audience-quotas)
