Segments & audience activation

This is where SetRoasFlow stops being a tracking tool and starts being a customer data platform.

Your events don't just get forwarded — they're unified into one profile per customer. Once you have profiles, you can slice them into segments, and push those segments to your ad platforms as audiences. No CSV exports, no data team, no re-uploading every month.


1. Profiles come first

Every event updates a customer profile: lifetime value, order count, first and last seen, repeat-buyer status. Someone who browsed anonymously for two weeks and then bought becomes one profile, not two — that's identity resolution, and it happens automatically when an email or a customer ID shows up.

The single biggest unification upgrade is passing your own customer ID (external_id) when users log in — it's the only identifier that merges profiles across devices. One line of code: see Best practice #1 in Installation.

See them under Customers. Visitors who never identify and never buy are counted separately ("Anonymous visitors") and are cleaned up automatically after 90 days of inactivity.

2. Build a segment

SegmentsNew segment. A segment is a rule, evaluated live:

RuleMeans
min_ordersat least N orders
min_ltvlifetime value above N
is_repeat_buyermore than one order
active_within_daysseen in the last N days
inactive_daysnot seen for N days
has_emailhas a usable email address

Useful combinations:

  • VIPsmin_ltv: 500 → lookalike seed, or a dedicated campaign
  • Existing buyersmin_orders: 1exclude from acquisition, stop paying to reach people who already bought
  • At riskis_repeat_buyer + inactive_days: 90 → win-back
  • One-time buyersmin_orders: 1 + not repeat → push the second purchase
Add has_email to any segment you plan to activate: activation works on email addresses, so profiles without one can't be included. Passing customer emails with your events is what fills this in — see Install the tracking.

Segment by behavior, not just totals

The rules above look at totals — orders, lifetime value, how recently someone was seen. You can now also build a segment from what people did: individual events, counted and timed.

Each behavioral condition is an event plus one test:

ConditionMeans
did at least N timesfired the event N or more times
did at most N timesfired it N times or fewer — use at most 0 for never
did in the last N daysfired it at least once inside the window
hasn't done in N dayswent N days without firing it

Stack conditions to describe a moment in the customer lifecycle:

  • Abandoned cart — added to cart at least 1 and purchased at most 0
  • Win-back — bought before and no order in the last 60 days
  • Engaged non-buyer — page view at least 5 and purchased at most 0
  • Product interest — viewed a product in the last 30 days
Behavioral data is not retroactive. It starts accumulating the moment you enable it, so a "viewed in the last 30 days" segment only sees activity from that point forward. Turn it on before you need it, not the day you do.

Describe it in plain words

Don't want to assemble rules by hand? Open the Describe your audience box and type what you mean — "customers who added to cart in the last 14 days but never bought" — and it fills in the rule fields for you. It's a starting point, not a black box: the rules land in the builder, where you review and adjust them before saving.

Going the other way, Suggest reads the rules you've built and proposes a name for the segment, so a tangle of conditions ends up called something you'll still recognise next month. Both features are covered again in AI helpers.

3. Activate it

Every saved segment has a sync panel — open it with Manage destinations. From there you push the segment to your ad platforms (Meta, Google Ads, TikTok, Snapchat, Reddit, Pinterest) and your CRMs (Klaviyo, HubSpot). A destination only shows up here once you've connected it under Integrations — connect it there first, then come back and Sync.

What happens:

  1. we resolve who is in the segment right now and take their emails;
  2. the audience is created once on the platform and its id is stored — re-syncing updates that same audience instead of piling up duplicates;
  3. members are uploaded: SHA-256 hashed for ad platforms, in clear text only for Klaviyo and HubSpot;
  4. you use it on the platform.

We never create or modify campaigns. We hand you the audience; the targeting is yours.

Once a sync succeeds, the segment carries a green badge for each destination it's live on — so you can see at a glance where an audience is active without opening the panel. Re-syncing updates that same audience in place; it never creates a duplicate.

Keep it alive

Turn on Auto-sync and the audience is re-uploaded every 6 hours, following people as they enter and leave the segment. A "VIP customers" audience stays genuinely current instead of decaying into a snapshot of the day you made it.

Preview before you touch a real account

Preview builds the exact API calls and shows them to you — endpoint, headers, body — without sending anything. Secrets are redacted, emails masked. It works even on a platform you haven't connected yet, so you can see what a destination would do before committing to it.


What you can do with it

Exclude buyers from acquisition. The single highest-ROI use. Most DTC accounts spend a meaningful share of prospecting budget re-reaching people who already bought.

Seed a lookalike from your best customers. A lookalike built on high-LTV buyers beats one built on all purchasers, because you're telling the algorithm what good looks like, not just what converted.

Bid differently by value. Push a VIP segment as its own audience and raise bids on it.

Win back. A "hasn't ordered in 90 days" segment synced to Klaviyo or HubSpot triggers your existing flows.


The same segment can do two more things

Change what people see on your site. Every segment has a short id, shown with a copy button. Put it on any element as data-srf-audience="…" and only that segment sees it — evaluated at the edge, applied before the first paint. See On-site personalization.

Tell you when someone enters it. Flip Notify on entry and you get an alert the moment a customer crosses into the segment — while they are still on the site. Set the channel (Slack, or your own webhook) under Alerts.

Both are off by default. Turn on notifications only for segments where a single customer matters: on a busy store, notifying every entry into every segment makes the channel unreadable within an hour.


Where it can go wrong

Before you press Sync, each destination shows its state:

StateMeaning
Readyconnected and complete — press Sync
Needs setupconnected, but a field is missing (it tells you which)
Not connectedno credentials yet
Syncedlive, with member count and last sync date

If a sync fails, the error is labelled:

  • [config] — credentials, scopes or permissions. Fix it on the destination tab.
  • [transient] — the platform was rate-limiting or down. Already retried with backoff; try again shortly.
  • [permanent] — the platform rejected the request. Read the detail.

Full history is under Sync history in the panel.

Managing many audiences? The Activations page brings them all together: every audience, each with the full list of destinations you can push it to and their state (synced, ready, needs setup, not connected), plus a health summary — active syncs, destinations, and how many need attention — at the top. Activate, re-sync and toggle auto-sync right there, without opening one segment at a time. It's the same activation panel you see inside a segment, just across all of them.

Platform quirks worth knowing

  • Meta keeps a new audience in Populating for a few hours, and won't let you target it below a minimum size.
  • Google Customer Match requires your account to be eligible (spend history and policy compliance). Credentials can be perfect and still be refused.
  • Klaviyo / HubSpot are capped at 10,000 members per sync.
  • Deleting a segment here does not delete the audience on the platform — remove it there.