Targeting & audiences
Who enters an experiment, decided at the edge: a boolean rule tree over sixteen signal types, reusable audiences with real-traffic reach estimates, and a per-rule tester that answers 'would this visitor match?' before you ship.
Rules
| Group | Rule types |
|---|---|
| Page & request | path (globs), query param, cookie, header |
| Geo | country, region, city, continent |
| Device & client | device, OS, browser, language |
| Acquisition | UTM params, referrer (domain or glob) |
| Time | schedule — date window, days of week, hours, timezone-aware |
| Network | IP / CIDR (v4 + v6) |
| Visitor | logged-in, returning, custom attributes, saved audiences |
Rules compose into a full boolean tree — ALL / ANY groups and NOT blocks, nested arbitrarily. Beyond per-experiment rules: mutual-exclusion layers keep experiments off the same visitors, and a program-wide holdout reserves a slice of traffic that never enters any experiment.
Saved audiences
Define conditions once, reuse them across experiments — and inside other audiences (composition is cycle-checked at save time). Each audience shows a live reach estimate: the edge’s own evaluator run over a sample of your recent real traffic, honestly marked ≥ when rules use signals not stored on exposures. An overlap panel shows what share of traffic matches each pair of audiences — the number that decides whether two experiments need to share a mutual-exclusion layer.
The tester
Every rule builder has a “Test these rules” panel. Describe a visitor:
- URL or path, device, country, referrer
- cookies and custom attributes (one name=value per line)
- logged-in / returning, OS, browser, language
…and get the verdict rendered as the full boolean tree with a pass/fail mark on every condition. It runs the same evaluator production uses, so the answer is exactly what the edge would decide.