Skip to main content
A dynamic audience is a saved filter that re-evaluates every time you use it. Define it once, and every campaign or sequence that references it picks up the right people automatically — newly tagged, newly engaged, freshly imported. If you’d rather work with a fixed roster, see the static audience pattern in Audiences.

When to use dynamic vs static

Use dynamic when:
  • Membership is rule-based (“paid users”, “tag = newsletter”).
  • The list grows or shrinks naturally over time.
  • You want a sequence to keep enrolling new matches.
Use static when:
  • You imported a one-time list (event RSVPs, beta cohort).
  • You need a frozen list for compliance or audit.
  • You’re sending to a hand-picked group that doesn’t share a clean rule.

Examples

Three filters that cover most real use cases:
“All customers who opened the last 3 emails”
Lifecycle stage IS customer
AND Opened in last 3 campaigns IS true
Use this for product updates and high-trust offers — you know they’re paying attention.

The flow

1

Open the audience editor

Go to /dashboard/marketing/email/audiences and click New audience > Dynamic.
2

Compose the filter

Each row is one predicate. Pick a field, an operator, and a value:
  • Fieldlifecycle stage, tag, last opened at, custom property, etc.
  • OperatorIS, IS NOT, CONTAINS, WITHIN, IS EMPTY.
  • Value — text, date, or boolean depending on the field.
Stack rows with AND or OR. Group rows with parentheses for compound logic — the editor exposes a grouping toggle to the right of each row.
3

Preview membership

Click Preview. You’ll see:
  • Total matching — how many contacts hit the filter.
  • Sendable — total minus suppressions, hard bounces, and missing addresses.
  • A 25-row sample — verify the filter is doing what you think.
Always check the sample. A single mis-spelled tag value (Newsletter vs newsletter) silently produces the wrong list — the preview catches it.
4

Name and save

Use a descriptive name that conveys both the segment and the filter: Customers — engaged 60d or Leads — created 14d, not yet mailed. Save.The audience is now selectable from any campaign or sequence picker.

AI-assisted audience building

The Email Coach can write the filter from a sentence. From any email page sidebar, try:
  • Build an audience of paid users in California who opened the last newsletter.
  • I need people who clicked any link in the last 30 days but haven’t bought yet.
  • Audience of contacts tagged webinar-attendee who are still leads.
The coach drafts the filter, runs the preview for you, and saves with a name you approve. If it’s not quite right, you can edit any row inline.

Re-evaluation timing

Dynamic audiences re-evaluate at three moments:
  1. In the editor — when you click Preview or save.
  2. At schedule time — the picker shows the current count.
  3. At send time — the actual recipient list is materialized from the live filter.
This means a campaign you scheduled three days ago will pick up contacts who became eligible since. If you want a frozen list (“send to exactly these 1,200 people, not anyone added later”), convert to static before scheduling — there’s a Convert to static button in the editor.

Membership snapshots

Even on a dynamic audience, the actual contacts that received a campaign are recorded in marketing_audience_membership. So:
  • Reports stay accurate even if the filter shifts later.
  • “Re-send to non-openers” works against the original list.
  • Compliance audits can prove who was sent to.

Refining over time

A common pattern: your dynamic filter starts loose (“all customers”), then tightens as you learn (“all customers who opened in the last 60 days”). To refine without breaking history:
  1. Duplicate the audience in the editor.
  2. Tighten the filter on the duplicate.
  3. Verify with a preview.
  4. Switch your sequences and campaign templates to reference the new audience.
  5. Archive the old one.
History on the original campaigns is preserved.

Troubleshooting

Most common cause: tag spelling. Tags are case-sensitive — Newsletter and newsletter are different. Open a known-good contact, copy the tag value verbatim into your filter.Second most common: AND’d a Last opened at WITHIN 30 days filter on a brand-new list where nobody has opened anything yet.
Three things to check:
  • You OR’d two conditions instead of AND’ing them.
  • The default unsubscribe exclusion is off.
  • A Tag CONTAINS newsletter is matching all variants of the tag (newsletter-monthly, newsletter-weekly). Use exact match (Tag IS).
Audiences aren’t mutually exclusive by default — overlapping filters can put the same contact in both. Either tighten one filter to explicitly exclude the other’s tag, or use the Subtract another audience option in the editor.
By design — that’s what “dynamic” means. If you need a stable list, convert to static before scheduling.

Audiences reference

Full reference for static and dynamic audiences.

Send your first campaign

Use your new audience in a broadcast.