Audiences give you control over which users are included in a rollout or experiment and have access to your features.
You will describe which users to include based on custom attributes like location, device type or subscription plan.
|[How does Audience Targeting Work in Optimizely?](🔗)||3-minute video explaining high-level how Audience targeting works in Optimizely|
A single audience is defined based on user attributes. These attributes are properties of a user that you pass in when calling the Full Stack APIs like Is Feature Enabled. When you pass attribute values, Optimizely uses them to determine whether the user qualifies for rollout.
## Create an audience
After you have [created and implemented a few attributes](🔗), you can start building audiences. You can reuse audiences that you have created across multiple flags and rules.
## Audience match conditions
Optimizely supports several match comparison operations that you can use in audience conditions:
|`||The only match type that is compatible with the SDK version released before March 2019.
Pre-3.0.0 releases for most major SDKs is `|
|`||For SDK version compatibility with "...or equal to" comparisons. See the [SDK Compatibility Matrix](🔗).|
|`||See the [SDK Compatibility Matrix](🔗) for SDK version compatibility.
You can use `|
While attributes are not explicitly typed in the Optimizely app, you will still need to pass in values of the correct type and format for your audience conditions to evaluate correctly. An attribute value of the incorrect type will result in a false-y audience evaluation.
The **Edit Audience** window lets you define audience conditions by either dragging and dropping attributes from the right side pane or defining complex JSON objects using the **Code Mode** window.
## Build audiences from attributes
To create audiences from attributes:
Navigate to **Audiences** > **Saved**.
Click **Create New Audience**.
Drag and drop the desired attributes into the Audience Conditions field. See [Define attributes](🔗). For example, to create an audience of visitors who are located in the US, based on specific location values, add the "LOCATION" attribute.
Select the match condition (see preceding table). Add other attributes to help create your audience. They can be added as "and" or "or" conditions. When you choose any match type option other than _String equals_ for exact matching, a message displays that the option requires using an SDK version of 3.0, at minimum.
Click **Save Audience**.
After creating an audience, you can set the target audience or audiences for a feature test, or feature rollout.
## Create audience combinations
Using the Optimizely app, you can easily use "and", "or" operators (i.e., 'any' or 'all') to create an audience combination composed of other audiences:
If you want to use more complex nested logical operators with "and, or, not", you can do so in JSON in Code Mode. For details, see [Create advanced audience combinations](🔗).
## Add multiple audiences
You can assign multiple audiences, including audience combinations, to feature tests and feature rollouts.
## Tips and tricks
Here are some tips and tricks for using audiences:
To QA an experiment, base an audience on a test cookie. Use the cookie to manually force a variation. See [Use a QA audience](🔗).
To schedule turning on a feature flag, base an audience on an [epoch time](🔗) attribute. First, compute the time in your application, then pass the time in as an attribute. In this scenario, your audience attribute condition would look something like `
time number is greater than 12312412` and `
time number is less than 12355555`.
## Excluding audiences
You can easily use audiences to include or allowlist users, but not to exclude them.
For example, you cannot exclude all Brazilian users by simply dialing back to 0% traffic for that audience. That is because if you turn off audience evaluation for Brazilian users, they end up in the "Everyone" audience.
To actually _exclude_ or blocklist audiences, you need to define audience combinations using JSON. For more information, see [Create advanced audience combinations](🔗).
## Rollouts vs. experiment audience matching
In rollouts, as soon as an audience member for a rule is bucketed out of receiving a feature, they bypass all other audience conditions and go straight to Everyone Else.
For example, if a user qualified for an 'opt-in beta' audience for audience 1, but then did not bucket into an enabled feature flag, they would not be considered for any other audience condition they might qualify for. As the following diagram shows, they would bypass all other audiences and go straight to Everyone Else:
In contrast, if you define multiple overlapping audiences for an experiment, each user who qualifies for an audience but receives a disabled feature flag for that audience, can potentially still receive an enabled flag if they match to a different, overlapping audience.
## Advanced audience combinations
If you want to use nested logical operators (`
not`) to create audience combinations, you can do so in JSON in Code Mode. Each audience is a rule like "User likes salads", and an audience combination is a Boolean combination of these rules, like "User likes pizza NOT (User likes sandwiches AND User likes soup)."
For more information, see [Configure a custom audience combination](🔗)