Paths and Rules
This is the engine that decides which destination URL each visitor sees. Two layers:
- Default Paths — the baseline distribution. Without rules, every visitor goes through here.
- Rules — conditional overrides. If a rule's criteria all match, the rule's paths are used instead of the default.
Rules are evaluated first (highest priority wins). If no rule matches, the default paths are used.
Default Paths
Each link has at least one default path. A path contains one or more landing pages, offers, or direct URLs — the actual destinations that get picked from.
When a visitor arrives, the link's Distribution Type determines how the path's URLs are picked.
Distribution Types
| Distribution Type | How the URL is picked |
|---|---|
| Random | Equal-probability random pick across all enabled URLs |
| Weighted | Weighted random — each URL has a weight; pick probability is proportional |
| Sequential | Cycle in order: 1st visitor gets URL A, 2nd gets URL B, 3rd gets URL A, etc. |
| Geo | Picks based on geo rules; falls back to first URL if no rule matches |
Adding Paths
A link can have multiple default paths, each with its own weight. Use this when you want grouped distribution — e.g. "70% of traffic to Path 1 (which has its own A/B test inside), 30% to Path 2 (different campaign)."
Path Weights
Each path has a numeric weight. When the system picks a path, it picks proportionally to weight:
- Weights
1, 1→ 50/50 split - Weights
70, 30→ 70/30 split - Weights
4, 1→ 80/20 split
Weights don't have to sum to 100 or any specific number. The system normalizes them.
URL Weights Inside a Path
Within a single path, each URL (landing page, offer, or direct URL) ALSO has its own weight. The same proportional pick applies.
So you can have a setup like:
- Path 1 (weight 70) → A/B between Lander-A (weight 1) and Lander-B (weight 1)
- Path 2 (weight 30) → Always goes to Offer-X
70% of clicks split 50/50 between Lander-A and Lander-B. 30% of clicks go to Offer-X.
Direct URL vs Lander vs Offer
Three ways to add a destination to a path:
| Type | When to Use |
|---|---|
| Direct URL | One-off destinations you don't reuse elsewhere. Just paste the URL. |
| Lander | Reusable landing pages defined in Landers. Same lander can be added to many paths across many links. |
| Offer | Conversion-tracked destinations defined in Offers, often with payouts and caps. |
The mechanics are identical from the visitor's perspective — the system picks one URL and redirects to it. Landers and Offers are organizational conveniences for managing destinations across many links.
Rules
A Rule overrides the default path distribution when its criteria all match the visitor.
Anatomy of a Rule
| Field | What It Does |
|---|---|
| Name | Free-form label for the rule |
| Priority | Higher numbers evaluated first. If multiple rules match, the highest-priority one wins. |
| Bot | When ON, this rule only matches bot visitors. When OFF (default), only non-bot visitors. |
| Enabled | Disabled rules are skipped entirely |
| Criteria | List of conditions ALL of which must match (AND logic) |
| Paths | The destinations to use when this rule wins |
How Priority Works
Rules are sorted by priority descending. The first one whose ALL criteria match is selected. Lower-priority rules below a matching rule are not evaluated.
Example:
| Rule | Priority | Criteria | Result |
|---|---|---|---|
| US Mobile Special | 100 | country_code is US AND device_type is mobile | Highest priority |
| US Default | 50 | country_code is US | Mid priority |
| Default Path | (no rule) | (matches everything that no rule caught) | Fallback |
A visitor from US on a mobile device matches the first rule (priority 100) and gets that rule's paths. The "US Default" rule never evaluates.
A visitor from US on desktop misses the first rule (mobile criterion fails), matches "US Default" (priority 50), and gets that rule's paths.
A visitor from Germany matches neither rule and falls through to the link's default paths.
Adding Criteria
Each criterion has three parts:
- Field — what visitor attribute to check (country_code, device_type, utm_source, etc.)
- Operator — how to compare (is, is not, contains, matches regex, etc.)
- Value — what to compare against
Available Fields
Grouped by what they describe:
Geo (from visitor's IP address)
| Field | Examples |
|---|---|
country_code | US, GB, BR |
country_name | United States |
region_code | CA (California), NY |
region_name | California |
city | Los Angeles |
postal_code | 90210 |
timezone | America/Los_Angeles |
latitude / longitude | numeric coordinates |
Device (from visitor's User-Agent)
| Field | Examples |
|---|---|
device_type | desktop, mobile, tablet |
device_brand | Apple, Samsung, Google |
device_model | iPhone 15, Galaxy S23 |
os_name | iOS, Android, Windows, macOS |
os_version | 17.0, 14 |
browser_name | Chrome, Safari, Firefox, Edge |
browser_version | 119.0 |
Network
| Field | Examples |
|---|---|
isp | Comcast, T-Mobile USA |
connection_type | wifi, cellular, cable, dsl |
is_proxy | true / false |
is_vpn | true / false |
is_tor | true / false |
is_datacenter | true / false |
ip_address | 203.0.113.42 |
Bot Detection
| Field | Examples |
|---|---|
is_bot | true / false |
bot_name | Googlebot, Bingbot |
bot_category | search engine, crawler |
Language
| Field | Examples |
|---|---|
language_code | en, es, fr |
language_name | English, Spanish |
UTMs and Click IDs
| Field | Examples |
|---|---|
utm_source | facebook, google |
utm_medium | cpc, email |
utm_campaign | spring-promo-2026 |
utm_content | headline-a, image-blue |
utm_term | (search keyword) |
utm_id | (campaign identifier) |
click_id_type | gclid, fbclid, msclkid, ttclid, etc. |
click_id_platform | google_ads, meta, microsoft_ads, tiktok_ads |
Referrer
| Field | Examples |
|---|---|
referrer_url | https://example.com/some-page |
referrer_domain | example.com |
Custom Variables
| Field | Examples |
|---|---|
external_id | (your own tracking ID from URL) |
v1 through v10 | Custom variables 1-10. Mapped via Sources. |
Time-based (computed)
| Field | Examples |
|---|---|
hour_of_day | 0 through 23 (UTC) |
day_of_week | mon, tue, wed, etc. |
Operators
| Operator | Meaning | Example |
|---|---|---|
| is | Exact match (case-insensitive for strings) | country_code is US |
| is not | Inverse of "is" | country_code is not CA |
| contains | Substring match (case-insensitive) | user_agent contains iPhone |
| does not contain | Inverse of "contains" | referrer_url does not contain spam-domain.com |
| matches | Regex match (case-insensitive) | utm_campaign matches ^summer- |
| in | Value is one of a comma-separated list | country_code in US,CA,GB |
| not in | Value is NOT in the list | country_code not in US,CA |
Bot vs Non-Bot Rules
Each rule has a Bot toggle that determines which visitor population it applies to:
- Bot OFF (default) → rule only matches NON-bot visitors. Real human traffic.
- Bot ON → rule only matches BOT visitors. Crawlers, scrapers, search engines.
A rule with Bot: OFF and a visitor that's a bot will never match. And vice versa.
This lets you set different routing for SEO crawlers vs real visitors. For example, send Googlebot to a stripped-down indexable page while sending humans through the A/B test.
Showing search engines different content than humans is the textbook definition of "cloaking" and gets accounts banned by Google, Meta, and other ad platforms. Only use bot rules to send bots to non-indexable error pages or to skip them — don't use bot rules to show different commercial content to bots vs humans.
Rule Paths
A rule has its own paths, separate from the link's default paths. Same structure: each path has weights, each URL inside has weights.
When a rule matches, the rule's paths replace the default paths for picking destinations.
Worked Examples
Example 1: 50/50 A/B test
- Distribution Type: Random
- Default Path 1: weight
1, contains 1 landing page (Variant A) - Default Path 2: weight
1, contains 1 landing page (Variant B) - No rules.
Each visitor → 50% chance Variant A, 50% chance Variant B.
Example 2: Country-specific landing pages
- Default paths:
/landing-international(catches everyone else) - Rule: priority
10, criteriacountry_code in US,CA, paths →/landing-na - Rule: priority
9, criteriacountry_code in GB,IE, paths →/landing-uk - Rule: priority
8, criteriacountry_code in DE,AT,CH, paths →/landing-de
US/Canada visitors → North America page. UK/Ireland → UK page. German-speaking → German page. Everyone else → International page.
Example 3: Mobile-first vs desktop split
- Distribution Type: Random
- Default paths: 50/50 between
/desktop-lander-aand/desktop-lander-b - Rule: priority
10, criteriadevice_type is mobile, paths →/mobile-lander(single URL, no A/B)
Mobile visitors all get the mobile-optimized lander. Desktop visitors get A/B tested between two desktop landers.
Example 4: Time-of-day routing
- Default path:
/standard-page - Rule: priority
10, criteriahour_of_day in 0,1,2,3,4,5, paths →/late-night-page
Visitors arriving between midnight and 6 AM UTC see the late-night variant.