Audiences

Every email SiteOps drafts has to answer one question before it can send: who gets it. Audiences are how that question is answered — and the design starts from an honest admission: most people do not want to think in cohort math. So the engine builds the audiences it can honestly stand behind, gives each one a plain name and a recipient count, and you pick a name. The form-filling is the exception, not the entrance.

There are exactly three shapes an audience can take. Everyone — the whole list in your email tool, always available. A cohort — a chain of plain conditions that must all hold at once: did, or didn't, fire one of your site's events within some number of days, or carries a trait like plan = free or company_size > 50. Conditions AND together, so 'did signup and no checkout within 14 days' is one honest cohort, said exactly. Cohorts are built from SiteOps SDK events and the traits identify() and group() send, so they exist only while the SDK is connected. A segment — a group that already lives in another tool, referenced by name: your email tool's segments (Brevo and Reteno list theirs), and, when HubSpot is connected, the lists your team curates in the CRM.

The named audiences are derived fresh on every read, never stored — what is saved on each draft is the exact audience the name stands for, so a name going away later cannot break a send. Each name carries a one-line why that says plainly what it is, and the recipients line under any cohort narrates the whole chain — 'did signup in 90d · didn't checkout in 90d — ~240 people' — with every condition narrowing the count, never growing it. 'Signed up, never bought' really is the two-condition cut it claims to be.

How your numbers travel

Quick links

What SiteOps reads

  • Alone: derives the named audiences fresh on every read — from your list size, your SDK events and traits, your email tool's segments and your HubSpot lists — and recounts them; names are never stored, so a stale name cannot linger.
  • Alone: seeds a default audience on new drafts — the new-signups cohort for SDK projects, everyone otherwise — and puts a named audience on every email step of a plan it proposes.
  • Alone: refuses half-built audiences — a cohort without the SDK, a condition without its event or trait, a trait that never arrived, or a segment without a name previews zero and will not save as sendable.
  • Waits for you: every pick. The engine names audiences and suggests them; it never changes who a draft goes to behind your back — the audience saved on the draft is the only truth.
  • Waits for you: the send itself. An audience decides who, not whether — the email still waits in review at whatever trust level its channel runs on.
  • Never: your contacts. Segments and CRM lists are referenced by name and resolved by the tool they live in at send time — SiteOps never copies, edits or exports your lists.

Set it up, step by step

0 of 9 done

    1. Emails
    2. Audiences — where the names come from
    1. Emails
    2. an email row
    3. Who gets it
    1. Settings
    2. your project
    3. SiteOps SDK
    1. Settings
    2. Email
    3. Sends go through
    1. Settings
    2. Connections
    3. HubSpot
    1. Who gets it
    2. Adjust manually
    1. Assistant
    2. a proposed plan
    3. email step

If something does not work

The cohort option is greyed out — 'needs the SDK'
Cohorts are counted from your site's own events, and those arrive through the SiteOps SDK. Until it is connected, the engine has no events to count, so the composer honestly offers only everyone and segments. Connect the SDK from your project's Settings and the behavioural names appear.
I picked a preset, then it deselected and says 'custom audience'
Selection is an exact match on the whole condition set — same events and traits, same windows, same did-or-didn't, order aside. The moment you nudge any manual control, your audience no longer is any named one, so the row honestly deselects. Nothing is lost: the draft keeps exactly what you built, and clicking a name again overwrites it with that name's audience.
Can a cohort really say 'signed up but never bought' now?
Yes — cohort conditions AND together, so the preset is literally did signup in the last 90 days AND didn't checkout in the same window, two conditions on one audience. Older drafts saved in the earlier single-condition shape migrate on load and keep their meaning. Whatever the chain, the recipients line reads it out in full before anything sends.
My trait condition previews zero people
A trait can only be targeted after it has arrived — your site must have sent it at least once with siteops("identify", { plan: … }) for personal traits or siteops("group", { company_size: … }) for company ones. The preview names the missing trait. Wire the call, load the site once, and the condition starts counting.
The counts changed since yesterday
By design. Counts are today's estimate — audiences are derived and recounted on every read, and the engine resolves the real recipients when the send actually fires. A cohort's count moves as people trigger events and windows roll; a segment's count is whatever your email tool holds that day.
The Audience section in Settings looks nothing like this
Different mechanic, same word. That Settings section is the ads targeting default — age, gender, countries, languages, interests — used when campaigns launch. Email audiences live where emails do: the 'Who gets it' row in each draft's composer and the explainer panel on the Emails tab.
My Brevo segment isn't in the named row
Segments appear as names when your sender is Brevo or Reteno — check which tool the 'Sends go through' picker in Settings names. If your sender is a pure sending pipe like Resend or Postmark, there are no segments to list; you can still target one by choosing 'A segment from your email tool' under Adjust manually and typing its name exactly.
My HubSpot lists aren't in the named row
Lists join the picker while HubSpot's connection in Settings reads connected — check the status first, then that the lists exist in the portal you approved. They are CRM lists, not email-tool segments, so they appear regardless of which mailer sends; the send itself still goes through the email provider picked under 'Sends go through'.

Set up once, see everything every morning

Get started