---
title: Audiences
description: Learn how to use Audiences to power your lifecycle and transactional messaging.
tags:
  [
    "dynamic audiences",
    "static audiences",
    "user segmentation",
    "segmentation",
    "segment",
    "lifecycle",
    "marketing",
    "transactional",
    "audience",
    "groups",
    "segments",
    "cohorts",
    "dynamic",
  ]
section: Concepts
---

An Audience is a user segment that you can use to target users for [workflows](/concepts/workflows), [guides](/in-app-ui/guides/overview), and [broadcasts](/concepts/broadcasts). Knock supports two types of audiences: static and dynamic. Dynamic audiences are maintained in real-time based on a set of defined conditions. Static audiences are mained via direct updates, either via a reverse ETL source such as Hightouch or Census, a CSV upload, the API, or manually in the Knock dashboard.

Use audiences to:

- [Trigger workflows](/send-notifications/triggering-workflows/audiences) for lifecycle messaging (such as new user signups) and transactional messaging (such as payment method updates).
- Orchestrate branch and conditional logic within your workflows using audience membership (e.g. if a user is in a `paid users` audience, opt them out of the workflow).
- Target users for an [in-app guide](/in-app-ui/guides/overview).
- Send a one-time message to a specific audience with a [broadcast](/concepts/broadcasts).

## Creating an audience

To create an audience, navigate to the **Audiences** page under the **Recipients** section on the Knock dashboard’s sidebar, then click “Create audience” in the top right corner. Determine whether the audience will be dynamic or static. Audience types cannot be changed after creation.

### Dynamic audiences

Dynamic audiences are built by creating a set of query rules on top of the [user data in Knock](/concepts/recipients), expressed as [conditions](/concepts/conditions). You can build dynamic audiences using the properties available on your user objects. For a full reference of supported condition types and operators, see the [conditions docs](/concepts/conditions).

Knock will automatically update the dynamic audience in real-time as the [user data](/managing-recipients/identifying-recipients) in Knock changes, moving users in and out of the audience as their properties change. These changes are known as "membership events" and are used to trigger workflows.

When building a dynamic audience, you will see a real-time preview of the audience members that match the query rules you’ve created on the right side of the screen. Remember, these are **users in the current environment** that match the query rules you’ve created.

Changes to dynamic audience are [versioned](/version-control/commits) and [promoted](/version-control/commits#promoting-commits) to environments. These changes must be made in your environment's `main` [branch](/version-control/branches).

<Callout
  type="roadmap"
  title="Additional filtering capabilities are coming soon."
  text={
    <>
      Support for filtering by event data and tenant or object data is on the
      roadmap. If you’re currently hitting a limitation with dynamic audiences,{" "}
      <a href="mailto:support@knock.app?subject=Dynamic audiences feedback">
        send us your feedback
      </a>
      .
    </>
  }
/>

### Static audiences

Static audiences are populated by adding users directly. You can populate a static audience in a variety of ways:

- **Workflows.** You can use the [update audience function](/designing-workflows/update-audience-function) in a workflow to add or remove users from a static audience.
- **Reverse ETL support.** Audiences can easily be synced from [Hightouch](/integrations/sources/hightouch#syncing-audiences-into-knock-from-hightouch) Models and [Census](/integrations/sources/census) Segments by configuring Knock as a sync destination. Click through to the integration-specific documentation for more information.
- **Audiences API.** The Knock API can be used to sync audiences from any data warehouse or reverse ETL system. Create the audience in the Knock dashboard, then use the add and remove API operations to power your sync. The API is designed for batch processing and accepts payloads of up to 1,000 members at a time. For more information see the [audiences API docs](/api-reference/audiences).
- **CSV upload.** You can upload a CSV of users to an audience. After uploading your CSV, you can map the CSV fields to the corresponding user fields in Knock. Knock will upsert the users as they are added to the audience and skip any users with malformed or missing IDs. The maximum size of a CSV upload is capped at 10MB.
- **Manually.** You can manually add existing users to an audience in the dashboard.

## Audiences and workflows

Audiences integrate with workflows in two key ways. You can configure a workflow to [trigger automatically whenever a user enters an audience](/send-notifications/triggering-workflows/audiences), enabling event-driven lifecycle messaging without additional API calls. You can also use audience membership as a condition in [branch](/designing-workflows/branch-function) and [step conditions](/designing-workflows/step-conditions) to gate logic based on which audiences a user belongs to at the time of execution.

## Audiences and tenants

<Callout
  type="roadmap"
  title="Tenant targeting is only supported for static audiences."
  text={
    <>
      Currently, tenant targeting is only supported for static audiences, but
      support for dynamic audiences is coming soon.
    </>
  }
/>

When adding users to static audience you can optionally include a tenant ID to power per-user, per-tenant notifications. When uploading an audience via CSV, the column that contains your tenant IDs should be mapped to the Knock field `tenant_id`.

A user can exist in an audience with multiple distinct tenants:

<Image
  src="/images/concepts/audiences/audience-member-with-multiple-tenant-ids.png"
  alt="An audience member with multiple distinct tenant ids"
  width={1710}
  height={550}
  className="rounded-md border border-gray-200"
/>

When a tenant is provided as part of a user's audience membership record, it will be passed as the `tenant` context on any broadcast or workflow runs that are triggered for that audience:

- For broadcasts, tenants that are mapped in your audience are included when the broadcast is sent. If a user is included in the audience with multiple distinct tenants, the broadcast will be sent once per tenant.
- For workflows that are triggered from an audience entry event, the tenant ID provided for the member will be passed along to the workflow trigger. If the same user is added with multiple distinct tenants, the workflow will trigger each time by default. To configure this behavior use [trigger frequency](/send-notifications/triggering-workflows#controlling-workflow-trigger-frequency) controls.

These runs will respect any tenant-specific [preferences](/multi-tenancy/per-tenant-preferences), [branding](/multi-tenancy/per-tenant-branding), and [translations](/multi-tenancy/per-tenant-translations) that have been configured for the tenant and recipient.

### Conditional evaluation

Tenancy is also taken into account when [audience membership conditions](/concepts/conditions#condition-types) are evaluated. For a recipient to be considered a member of an audience when a condition is evaluated, the `tenant` ID provided as context on the current broadcast or workflow run must match the user’s audience membership record. If no tenant ID was provided with the trigger, the user must have been added to the audience with no tenant ID.

For more information about how audience membership is evaluated for guides eligibility, see the [guides documentation](/in-app-ui/guides/create-guides#targeting).

## Frequently asked questions

<AccordionGroup>
  <Accordion title="What happens if my audience contains a 'missing user' who I subsequently identify to Knock?" anchorSlug="faq-audience-missing-user-identified">
    If you add a user to an Audience who has not yet been identified to Knock, they will be indicated as a "missing user" in the audience. If you subsequently identify a user with the missing `user_id`, they will be a member of the audience and no longer "missing."

    However, Knock will not retroactively trigger any audience-entry triggered workflows for users that are identified after being added to the audience.

  </Accordion>
  <Accordion title="Can I create a dynamic audience from user data in Knock?" anchorSlug="faq-dynamic-audience-from-user-data">
    Yes, you can create a dynamic audience by querying the user data in Knock. Learn more about [building a dynamic audience](/concepts/audiences#dynamic-audiences).
  </Accordion>
  <Accordion title="Can I use source event data to build a dynamic audience?" anchorSlug="faq-dynamic-audience-source-event-data">
    No, currently you cannot use [source event data](/integrations/sources/overview) to build a dynamic audience. We will be adding this capability in the future. Please [get in touch](mailto:support@knock.app) if you have a specific use case for this functionality.
  </Accordion>
  <Accordion title="Can I use tenant or other object data to build a dynamic audience?" anchorSlug="faq-dynamic-audience-tenant-object-data">
    No, you can currently only build dynamic audiences using user data in Knock. We will be adding support for other object data in the future, including the ability to build a list of users based on their relationship to other objects in your system (like tenants). Please [get in touch](mailto:support@knock.app) if you have a specific use case for this functionality.
  </Accordion>
  <Accordion title="How quickly are dynamic audiences updated?" anchorSlug="faq-dynamic-audience-update-speed">
    Dynamic audiences are updated in real-time. Any changes to the user data in Knock will be reflected in the dynamic audience immediately. That means if you have a property `plan_type` on the user object, and you build a dynamic audience for users on the `pro` plan, setting the `plan_type` to `pro` will immediately add the user to the dynamic audience.
  </Accordion>
  <Accordion title="Can I use audiences on a branch?" anchorSlug="faq-audiences-on-branch">
    While you can use an audience on a development [branch](/version-control/branches) to power workflows, broadcasts, and guides, you cannot make changes to an audience on a branch. You can only make changes to an audience on the main branch.
  </Accordion>
  <Accordion title="Are all user properties available in the audience builder?" anchorSlug="faq-user-properties-in-audience-builder">
    The reserved `created_at` and `updated_at` properties on user objects cannot be used in dynamic audience conditions. If you need to filter users by these values, store them as custom properties on your user objects in Knock.
  </Accordion>
  <Accordion title="How can I remove users from a static audience?" anchorSlug="faq-remove-users-from-static-audience">
    Users can be removed from a static audience in the following ways:
    - During a workflow run, using the [update audience function](/designing-workflows/update-audience-function)
    - Individually via the Knock dashboard
    - In bulk using [the Knock API](/api-reference/audiences/remove_members), which supports removing up to 1,000 users at a time
    - Through [reverse ETL syncs](#static-audiences)
  </Accordion>
</AccordionGroup>
