Home Lists Segmenting your contact database

Segmenting your contact database

By mario· Mar 29, 2026 · Lists

Segmentation is how you target campaigns at the right audience without manually maintaining membership lists. PortalHQ supports rule-based (dynamic) lists — you define the rules once and the list keeps itself up to date as contact attributes change.

Static vs. dynamic lists

Type Members determined by Best for
Static Manual add/remove Small, stable lists (e.g. Board Members, Specific Project Stakeholders).
Dynamic / rule-based Rules you define Any list that should auto-update as data changes (year-level segments, role-based segments, opt-in segments).

For school audiences, dynamic lists are almost always the right choice — students move year groups, parents become alumni parents, staff arrive and leave.

Creating a dynamic list

Go to Newsroom → Lists → New list.

  1. Pick Dynamic (rule-based) as the list type.
  2. Set the name.
  3. Add one or more rules — see below.
  4. Save.

The list shows a live count of matching contacts. As contact attributes change, the count updates automatically.

Rules

Each rule is a clause like contact field X matches value Y. Available fields:

  • Custom fields — anything tracked on contacts. Year group, campus, role, region.
  • Subscription tags — automatically applied tags from other modules (activity group memberships, booked event signups, slip completions).
  • Activity — opened a recent campaign, clicked a link, didn’t open last 5 campaigns.
  • Subscription status — subscribed, unsubscribed, bounced.
  • Date fields — added before/after a date, etc.

Operators include: equals, contains, doesn’t contain, is empty, is in list, etc.

Combining rules

When you have multiple rules:

  • Match all (AND) — contact must satisfy every rule to be in the list. Use for tight targeting (parents in Year 7 AND on the sports list).
  • Match any (OR) — contact satisfies at least one rule. Use for broad targeting (parents OR alumni).

For more complex logic, nest rule groups (e.g. (Year 7 OR Year 8) AND signed up to camp).

Common segments

Segment Rules
Year 7 Parents Custom field Year Group = 7
Sports Parents Subscription tag includes any Co-Curricular Sport tag
Engaged Parents (opened last 3 campaigns) Activity: opened in last 30 days
Lapsed Contacts Subscription tag empty AND last open over 6 months ago
Unsubscribed Subscription status = Unsubscribed
New Parents Custom field Enrolment year = current year

Excluding from a campaign

You can exclude a segment from a campaign even if it overlaps with the recipient list:

  1. On the campaign, add the include list (e.g. All Parents).
  2. Add the exclude list (e.g. Year 12 Parents Already Notified).

The campaign goes to All Parents minus Year 12 Parents Already Notified.

Maintaining rules

Rule-based lists are low-maintenance, but a few periodic checks:

  • Counts that look wrong — if a list count drops to zero or spikes unexpectedly, a custom field probably changed format or values.
  • Stale custom fields — fields tracking time-bound data (e.g. Term 1 Sport) should be updated each term so the rules still match.
  • Performance — very complex rule sets can slow list generation. If a list takes minutes to compute, simplify the rules or split into smaller lists.

Combining static and dynamic

A common pattern: a base dynamic list (All Parents) plus a small static override list (VIPs to always include). Add both to the campaign — every parent gets it, plus the VIPs guaranteed.

Testing a segment before campaigning

Before sending to a new segment:

  1. View the list and check the count is what you expect.
  2. Browse a sample of the contacts — confirm they’re the right people.
  3. Send a test campaign to a small portion of the segment first.

Catching a mis-targeted segment before send is much easier than apologising afterwards.