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
Segments → New segment. A segment is a rule, evaluated live:
| Rule | Means |
|---|---|
min_orders | at least N orders |
min_ltv | lifetime value above N |
is_repeat_buyer | more than one order |
active_within_days | seen in the last N days |
inactive_days | not seen for N days |
has_email | has a usable email address |
Useful combinations:
- VIPs —
min_ltv: 500→ lookalike seed, or a dedicated campaign - Existing buyers —
min_orders: 1→ exclude from acquisition, stop paying to reach people who already bought - At risk —
is_repeat_buyer+inactive_days: 90→ win-back - One-time buyers —
min_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:
| Condition | Means |
|---|---|
| did at least N times | fired the event N or more times |
| did at most N times | fired it N times or fewer — use at most 0 for never |
| did in the last N days | fired it at least once inside the window |
| hasn't done in N days | went 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:
- we resolve who is in the segment right now and take their emails;
- the audience is created once on the platform and its id is stored — re-syncing updates that same audience instead of piling up duplicates;
- members are uploaded: SHA-256 hashed for ad platforms, in clear text only for Klaviyo and HubSpot;
- 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:
| State | Meaning |
|---|---|
| Ready | connected and complete — press Sync |
| Needs setup | connected, but a field is missing (it tells you which) |
| Not connected | no credentials yet |
| Synced | live, 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.