Skip to main content

Segments & cohorts

Why this matters for your business

Most merchants spend hours every week — or pay a consultant — to build customer lists. "Loyal customers who haven't bought in 30 days." "First-time buyers from Australia." "Anyone who opened the last campaign but didn't click." Then a week later the list is stale, and the work starts again.

Segments fix that. You describe the customer you want to reach once, in plain rules. The system keeps that audience current forever — adding new customers as they qualify, removing them the moment they don't.

The implication is bigger than it sounds. When your audiences maintain themselves, you stop running campaigns because the list happens to be ready. You start running them because the moment is right. The cadence changes from "monthly newsletter to whoever's on the list" to "today, the right offer to the right 200 people." That's a different business.

What this typically unlocks

OutcomeTypical lift
Hours/week on audience-building6–10 hours saved — segments don't decay
Campaign open rate+24% — tighter targeting beats blast
Conversion rate per send+38% — message matches the moment
Audience freshness< 5 seconds after the qualifying event vs. days for spreadsheet-managed lists
Speed from idea → live audience~2 minutes in the rule builder vs. half a day in CSVs

What you actually get

Three flavours of audience:

  • Dynamic segments — defined by a rule (e.g. "anyone who bought twice in the last 90 days, opted into WhatsApp, AOV > $80"). Membership recomputes the moment a customer starts or stops matching. This is the workhorse.
  • Static segments — a fixed list of customers you manage manually (CSV upload, hand-picked from the customer table). Useful for one-off launches or VIP lists you curate yourself.
  • AI-generated segments (Pro+) — describe the audience in English ("loyal high-value customers who've gone quiet for two weeks") and the AI builds the rule for you. Recomputes daily plus on demand.

Plus cohorts — audiences anchored to a moment in time ("first-order in March 2026", "everyone who received the holiday flow"). Cohorts power retention math; segments power live targeting.

How it powers every part of your store

Where segments are usedWhat it makes possible
Campaigns as the audiencePick a segment, pick a message, send. The audience is already current.
Journey enrolmentAuto-enrol everyone who joins a segment ("loyal at-risk" → win-back flow).
Predictive LTV (Pro+) on segmentsSegment-level forecasts: "what will the loyal cohort spend in the next 90 days?"
Attribution by segment"Which segment drove the most revenue this quarter?" without manual joining.
Anomaly detection segment-aware"Sales dropped" → "actually, the loyal segment is fine, but engaged customers fell off".
Ad audiences exportPush a segment to Meta/Google Custom Audiences with one click — refreshes daily.
Storefront widgets by segmentShow a different exit-intent offer to "first-time visitors" vs. "loyal returners".

How it works (without the technical bits)

The "trigger" trick — why it stays fast

If we recomputed every segment on every event, the system would crawl. Instead, each segment declares which event types could possibly affect its membership. A segment about "last order" recomputes only on order events. A segment about "cart abandonment" recomputes only on cart events. A page_view event triggers neither.

This is invisible to you in the rule builder — the system figures out the triggers from the rule. But the consequence is real: you can have hundreds of segments without slowing down the platform.

Authoring rules — what's available

Eight kinds of conditions, combinable with AND / OR / NOT, nested up to 4 levels:

ConditionWhat it capturesExample
EqualityMatch an exact valuelifecycleStage = 'loyal'
ComparisonGreater/less thantotalSpent > 500
ListMatch any of N valuescountry in ('US', 'CA', 'GB')
Tag/textHas a tag or contains texttags contains 'vip'
Time windowHappened within / sincelastOrderAt within 30 days
AggregateCount or sumcount of orders > 3
Event existenceDid/didn't do an eventany event of type 'cart_abandoned' within 24h
NegationThe opposite of any of the aboveNOT (lifecycleStage = 'churned')

That's enough to express almost any real-world audience without needing SQL.

Three example rules

Each is something a merchant actually wants to send to. Each is 2-3 lines.

Cart abandoners (last 24h):

lifecycleStage in (engaged, converted, loyal)
AND last event of type 'cart_abandoned' within 24 hours
AND no event of type 'purchase' since that cart_abandoned

VIP at-risk:

lifecycleStage = 'loyal'
AND lastActivityAt within 60 days
AND lastActivityAt not within 14 days

High-LTV mobile shoppers in UK:

totalSpent > 250
AND country = 'GB'
AND any event of type 'page_view' has device = 'mobile'
AND count of orders > 2

Cohorts — segments anchored in time

A cohort is a snapshot. It captures "the customers who did X in the moment of Y" and never changes. Examples:

CohortDefinition
March 2026 first-orderersCustomers whose first order was in 2026-03
Q1 win-back recipientsCustomers who received the win-back flow step in 2026-Q1
2025 holiday cohortCustomers acquired Nov–Dec 2025

Use cohorts when you want to track a group over time — retention analytics, LTV-by-acquisition-month, win-back effectiveness. Use segments when you want to target customers who currently match a rule.

The two cooperate: a cohort like "March 2026 first-orderers" combined with a segment like "still active" gives you "March 2026 acquisitions who are still active" — your retention narrative.

Membership semantics — the fine print

  • A customer can be in many segments simultaneously. Don't worry about overlap.
  • Joining or leaving a segment doesn't trigger anything by itself. Journeys subscribe to the event that caused the join, not the membership change. (This avoids loops where recomputing the segment fires the journey fires another event fires another recompute.)
  • Membership is eventually consistent. P95 lag from event to membership change is under 5 seconds; the rare exception is during heavy backfills, which surface in the audit log.

Real merchant scenarios

Scenario A — Founder-led store, 5 segments

Setup. New merchant, 800 customers, free tier. Builds five segments: cart abandoners, first-time buyers, second-time buyers, 30-day silent, opted-in to WhatsApp.

90 days later.

SegmentMembersUsed byNotes
Cart abandoners 24h~25 (rolling)Cart-recovery flowDrives 11% of recovered revenue
First-time buyersAll-time + last-90d filterPost-purchase upsell7-day re-buy rate up 3.2×
Second-time buyersPool of returning customersLoyalty seeding flowFirst step toward loyal tier
30-day silentWax-and-wane based on cadenceWin-backRecovers 4-5 customers/week
WhatsApp opt-in~180 of 800Flash offersReplaced 80% of email blasts

Total time spent maintaining segments: ~0 hours. They maintain themselves.

Scenario B — Mid-market brand, 50K customers, 60+ segments

Pain point. Marketing manager spent ~8 hours/week building audience CSVs in Klaviyo and exporting them to Meta. Three of the ten weekly campaigns were "the list nobody had time to refine".

After. All 60 segments live in the platform, exported daily to Meta Custom Audiences via the ad audience sync. Marketing time shifts from list-building to creative + offer testing.

MetricBeforeAfter
Hours/week on segments8< 1 (review only)
Campaigns sent to "any list"3/week0/week
Avg open rate18%27% (tighter targeting)
Avg conversion per send1.4%2.1%
Meta lookalike performance2.1× ROAS2.9× ROAS (cleaner seed audience)

Scenario C — Agency managing 12 brands

Setup. The agency builds a segment library — a set of 30 template segments (cart abandoners, win-back candidates, loyal at-risk, etc.) cloned into each new client account on day one.

Why it matters. Onboarding a new client used to take a week of segment-building. Now it's an hour. The agency can charge flat-fee for that hour and keep the rest as margin.

The roll-up dashboard shows segment-coverage health across all 12 brands — flags when a client's segments aren't growing (deliverability problem, pixel broken) or shrinking too fast (churn spike).

Best practices

Lead with lifecycle stages. lifecycleStage = 'loyal' is already a dynamic, multi-signal rule. Start there before building custom thresholds.

Preview the count before saving. The rule builder shows the live count as you type. If it's 0 or unexpectedly massive, fix the rule before it becomes a campaign audience.

Use cohorts for retention math, segments for targeting. A common mistake is to build a "March 2026 first-orderers" as a dynamic segment — the membership shifts as customers buy again and the cohort dissolves. Use a cohort instead.

Tag once, segment often. Add a free-form tag like vip or b2b to important customers, then use it in multiple segments (tags contains 'vip'). One source of truth, many audiences.

Don't pile every condition into one segment. If your rule has 9 conditions, you're really building an audience matrix — better to split into 3 segments at lifecycle level + 3 at LTV level, then combine in the campaign or journey logic.

Don't use full-text search in rules. "Body contains 'X'" forces a full table scan and slows recomputes. If you need it, add it as a tag instead and segment on the tag.

Don't manually edit dynamic segment membership. It will get overwritten on the next recompute. If you want a fixed list, make it a static segment.

Plan tiers

CapabilityFreeStarterProAgencyEnterprise
Static segments525100unlimitedunlimited
Dynamic segments525100unlimitedunlimited
Members per segment1,00010,000unlimitedunlimitedunlimited
AI-generated segments
Cohort definitions525100unlimited
Segment library / cloning
Real-time membership updates
Daily Meta/Google ad-audience sync
Custom recompute schedule

Hitting a cap blocks creating new segments; existing segments keep working. The merchant sees a clear upgrade prompt with the size of the audiences that would be unlocked.

Frequently asked

My segment is empty — what's wrong? Usually the rule is too restrictive (an AND condition nobody satisfies). The rule builder shows the live count as you edit; if it's 0 at save, look for AND conditions that contradict each other or use a value no customer has.

Why is recompute slow on this one segment? Almost always a full-table-scan operator like body contains '<long string>'. Move that match to a tag in the customer profile and segment on the tag instead — instant.

Can I exclude customers from a segment? Yes — use NOT in the rule, or use the campaign-level "exclude audience" filter when sending. The latter is non-destructive (the segment stays correct).

Do segments respect opt-out? Yes, automatically. The segment membership doesn't change, but the campaign send-time gauntlet (described in Customer 360) filters out anyone who's opted out of the campaign's channel.

Can I time-box a segment? Use a cohort if you want a fixed snapshot. Use a dynamic segment with a within X days clause if you want a rolling window.

What happens during a backfill? Membership is eventually consistent — during a heavy backfill (e.g. you imported 50K Shopify customers), recompute can lag by minutes. The audit log shows backfill events; campaigns started during a backfill are queued until consistent.

See also