Skip to content

Build segments

How-to guide
For:
Publishers and marketers
Needs permission:
segments:edit, segments:sqlsensitive
In the app:
Audience, then Segments

A segment picks contacts by what they are and what they did: their lists, tier, mailbox provider, opens, clicks, fields, score and more. Email list segmentation in ReputeCast happens in the condition builder, with a live count as you edit; workspace admins can also write the query in SQL.

  • Building and saving segments needs segments:edit (Owner, Admin and Editor). Anyone who can see contacts can see segments and their counts.
  • SQL segments need segments:sql (Owner and Admin; sensitive) and a database role your server operator sets up once (see Set up the database role).
  1. Go to Audience, then Segments and select New segment.

  2. Name the segment and choose how it refreshes under Refresh:

    • Dynamic · re-evaluated at send time (default): membership is worked out each time a send prepares its audience. The saved count is updated every night.
    • Static snapshot: the members are fixed each time you save, and nothing else changes them.
  3. Under Conditions, pick a field, an operator and a value. Inside a group, choose Match ALL of these or Match ANY of these. Select Add condition for another condition in the same group, or Add group for a new group. Groups always combine with AND.

    A segment named Engaged Outlook users on paid plans: Group 1 matches all of mailbox provider Outlook, opened any email in the last 30 days and list Weekly Digest; the live count shows 2,118 contacts, 4.4% of the workspace.
  4. Watch the live count on the right. It shows how many contacts match, their share of the workspace and the tier mix of the segment, and updates as you edit.

  5. Select Save segment.

Suppressed and role addresses are always left out at send time, whatever the segment says.

Field Operators
Mailbox provider (Gmail, Outlook, Yahoo, iCloud, Other) is, is not
Email domain, referring domain is, is not, ends with
List membership (subscribed members) includes, excludes
Tier (Active, Cooling, At risk, Sunset) is, is not
Last open in the last, not in the last, never (days or weeks)
Opened any email, clicked any email, joined in the last, not in the last
Opened campaign (recent campaigns) opened, didn’t open
Score (0–100) is at least, is at most, is between
Score band (Cold, Warm, Hot) is, is not
Consent (Double opt-in, Single opt-in, Imported, pending) is, is not
Source, growth source, country, language is, is not
UTM source, UTM medium, UTM campaign is, is not, contains
Tag has, doesn’t have
Custom field, text equals, not equals, is one of, contains, is empty, is not empty
Custom field, number equals, not equals, greater than, less than, is empty, is not empty
Custom field, date before, after, is empty, is not empty
Custom field, yes/no is true, is false

Conditions for referrals, phone and SMS, paid subscriptions, purchases, website sign-ins, push, WhatsApp and store customers appear once those features are in use.

With an AI model connected, the Describe the segment card turns a sentence such as “Team-plan customers who clicked something in the last 30 days” into builder conditions, marked as added or removed, with the live count. Only your description and the condition schema are sent: field names and types, and list, segment and tag names. Values from contacts are never sent. It needs ai:use and never writes SQL.

Every builder segment shows the exact query it runs under Generated SQL (read only). Select Copy to reuse it.

  • Campaign audience: pick it under Segments in the campaign’s audience picker. SMS, push, WhatsApp and digest audiences offer segments too.
  • Conditional content: show or hide a block for a segment.
  • Audience, then Contacts: Preview contacts opens the contacts filtered by the saved segment.

Use in a campaign opens a new campaign draft; choose the segment in its audience. Automations don’t start from segments; use a list, tag, score or other trigger.

Deleting a segment can’t be undone. If a conditional block uses it, the page warns you, and Send Readiness blocks that campaign until you fix the block.

  1. In the builder, select Open in SQL editor. The generated SQL is copied into the editor.

  2. Write one SELECT (or WITH … SELECT) that returns contact ids in a column named id:

    Segment SQL
    SELECT c.id
    FROM contacts c
    WHERE c.tier = 'active'
    AND c.mailbox_provider = 'outlook'
    AND c.score >= 50
  3. Check the live count, then select Save segment.

The query runs read-only, with a 10-second limit, against views of the current workspace only:

View Columns
contacts id, email, first_name, last_name, company, country, timezone, language, mailbox_provider, tier, consent, source, status, tags, fields (custom fields, jsonb), role_address, created_at, last_open_at, last_human_open_at, last_click_at, suppressed_at, score, score_band, growth_source, utm_source, utm_medium, utm_campaign, referring_domain, signed_in_at, referrals_counted, referral_milestones, phone, phone_country, sms_lists, last_text_at, last_text_click_at
list_members contact_id, list_id, list, status, subscribed_at, unsubscribed_at
events contact_id, type, human, occurred_at, campaign_id, url, mailbox_provider
lists id, name
paid_members contact_id, status, kind, period, started_at, ended_at, tier_id, tier_rank, access, paid
paid_tiers id, name, rank
purchases contact_id, product_id, product, status, paid, currency, paid_at

Creating or changing a SQL segment needs segments:sql; an Editor can open one but can’t save it. Back to the builder drops the SQL text without asking.

If Open in SQL editor says “SQL segments are turned off on this database”, the reputecast_segments role is missing. Your server operator creates it and runs the migrations, as described in PostgreSQL: SQL segments, then restarts ReputeCast so it notices the change.

SettingDefaultHow to change
Live count timeout10 s; the last known count is shown after thatFixed
SQL segment statement timeout10 s, in a read-only transactionFixed
SQL segment length20,000 characters, one SELECT or WITH … SELECTFixed
Builder limits20 groups, 50 conditions per groupFixed

At send time, builder segments have 30 seconds to resolve and SQL segments keep their 10-second limit; static segments use the members saved with them.

  • The segment appears under Saved segments with its count.
  • Preview contacts lists the contacts you expected.
  • The live count says “Timed out” → counting took longer than 10 seconds, usually on large workspaces with event conditions. The last known count is shown instead, and builder segments still resolve at send time. Ask your operator to tune PostgreSQL (see PostgreSQL).
  • “A segment can have at most 20 groups” or “A group can have at most 50 conditions” → split the segment, or write it in SQL.
  • “Your SQL can only read the contacts, list_members, … views” → the query names another table. Use the views above.
  • “Only one statement is allowed” → remove the semicolon and anything after it.
  • Open in SQL editor is disabled → you don’t have segments:sql, or SQL segments are turned off on the database.