Back to Blog
Guide·9 min read

Flows & Traffic Routing in BATracker: Geo, Device & Dayparting Targeting

Not every visitor should see the same lander or the same offer. BATracker flows let you route each click to the perfect destination based on geo, device, ISP, sub IDs, and time — with weighted A/B rotation baked in. This guide shows you exactly how.

1. What Flows and Paths Are

In BATracker, a flow is the routing engine attached to a campaign. Its single job is to decide where each incoming visitor goes. It does that by sending the visitor to a path — a specific combination of a landing page and an offer.

Paths are the building blocks. Each path has a few important properties:

  • Weight — controls how much traffic the path receives in weighted rotation. A path weighted 70 gets roughly seven times the traffic of a path weighted 10.
  • isDefault (fallback) — marks a path as the safety net. If no rule matches a visitor, the default path catches them so nobody hits a dead end.
  • directLinking — skips the lander entirely and sends the visitor straight to the offer. Perfect for pre-sold traffic or offers that convert best without an intermediate page.

Because flows sit on BATracker's modern Node.js and ClickHouse stack with sub-10ms redirects, all of this routing logic runs without adding perceptible latency between the click and the destination.

2. The Three Flow Types

BATracker gives you three flow types, from dead-simple to fully conditional:

Flow TypeWhat It DoesBest For
SIMPLEA single path — one lander and one offer for every visitor.Straightforward campaigns with one funnel.
MULTI_PATHSeveral paths with weights, rotated by weight.Split testing landers and offers side by side.
RULE_BASEDOrdered path rules route visitors to different paths by condition.Geo, device, ISP, sub ID, and time targeting.

Start with SIMPLE when you're validating an offer, move to MULTI_PATH when you want to test variants, and reach for RULE_BASED the moment different visitor segments deserve different destinations.

3. How Path Rules Work

In a RULE_BASED flow, path rules decide which path each visitor takes. Three concepts govern how a rule behaves:

Priority

Rules are ordered by priority, lowest first. The first matching rule wins — later rules are never evaluated for that visitor. Put your most specific rules at the top.

matchType

ALL means every condition must be true (AND). ANY means at least one condition must be true (OR). Combine multiple conditions to target precisely.

Conditions

The same dimensions as BATracker filters: country, region, city, device, OS, browser, ISP, connection type, sub IDs, WEEKDAY, TIME_OF_DAY, and more.

Because path rules share the same condition dimensions as BATracker's traffic filters, anything you can filter on you can also route on. And because time conditions evaluate in the campaign timezone, your dayparting always matches the hours you actually configured — not the tracker's server clock.

Golden rule: always keep a default (isDefault) path. Rules handle the segments you care about; the default catches everyone else so no visitor is ever wasted.

4. Path-Rule Actions Reference

Every path rule carries an action that determines what happens when it matches. Here is the full set:

ActionWhat HappensTypical Use
ALLOWExplicitly permits the visitor to take the matched path.Whitelisting a known-good segment.
BLOCKStops the visitor from proceeding down the path.Excluding a geo, device, or bad segment.
REDIRECTSends the visitor elsewhere.Diverting off-target traffic to a fallback.
DO_NOT_TRACKLets the visitor through but does not record the click.Internal QA visits or excluded segments.
DO_NOT_POSTBACKTracks the visitor but suppresses outbound postbacks.Segments you monitor but don't report upstream.

DO_NOT_TRACK and DO_NOT_POSTBACK are the subtle power tools. Use DO_NOT_TRACK to keep test or internal traffic out of your reports entirely, and DO_NOT_POSTBACK when you want the conversion recorded in BATracker but not fired back to a traffic source — useful for segments you audit privately without polluting a platform's optimization signal.

5. Weighted A/B Rotation of Landers & Offers

A single path is not limited to one lander and one offer. Each path can hold multiple landers and multiple offers, and BATracker rotates them independently by weight:

Lander weights (PathLander)

Assign a weight to each landing page in the path. Two landers at 50/50 split traffic evenly; a 70/30 split favors your control while still testing a challenger.

Offer weights (PathOffer)

Assign a weight to each offer in the path. Rotate three offers by weight and let the data reveal which one earns the most per click.

Because lander and offer rotation are independent, you can A/B test two landers and split-test three offers inside the very same path at the same time — no need to clone campaigns. Pair this with BATracker's real-time ClickHouse reporting, which breaks results down by lander, offer, and sub ID, and you can crown a winner fast.

6. A Worked Routing Example

Let's route a real campaign. The goal: US visitors on mobile get a mobile-optimized lander with Offer A, UK visitors get Offer B, datacenter traffic is blocked, and everyone else falls back to a default offer — but only during business hours in the campaign timezone.

PrioritymatchTypeConditionsAction → Path
10ALLconnection type is datacenterBLOCK
20ALLcountry is US and device is mobileALLOW → US Mobile path (Offer A)
30ALLcountry is UKALLOW → UK path (Offer B)
40ALLTIME_OF_DAY between 09:00–17:00ALLOW → Default path

Here's how the engine resolves a visitor. It walks the rules in priority order and the first match wins:

  • • A visitor flagged as datacenter hits Rule 10 first and is blocked — they never reach an offer.
  • • A US mobile visitor skips Rule 10, matches Rule 20 (both conditions true under ALL), and lands on the US Mobile path with Offer A.
  • • A UK desktop visitor skips 10 and 20, matches Rule 30, and gets Offer B.
  • • Everyone else falls to Rule 40. Because TIME_OF_DAY evaluates in the campaign timezone, they only reach the default path between 9am and 5pm — outside those hours no rule matches and you keep the visitor off a poorly-performing time slot.

Add a genuine default (isDefault) path as the ultimate safety net, and layer weighted landers and offers inside each path to A/B test within every segment.

7. Real-World Use Cases

Geo-targeting

Route US → Offer A, UK → Offer B, and everyone else → the default path. One campaign serves the right offer to each country instead of forcing a single geo-blind funnel.

Device targeting

Send mobile visitors to a mobile-optimized lander and desktop visitors to a desktop lander. Matching the page to the device typically lifts conversion rates without touching your ads.

Dayparting

Use WEEKDAY and TIME_OF_DAY conditions to run a campaign only 9am–5pm in the campaign timezone. Off-hours traffic that historically wastes budget simply doesn't reach the offer.

ISP & connection targeting

Route by ISP or connection type — for instance, keep datacenter traffic out with a BLOCK rule, or send a particular carrier's users to a tailored path.

Selective tracking with DO_NOT_TRACK / DO_NOT_POSTBACK

Apply DO_NOT_TRACK to internal QA or excluded sub IDs so they never touch your reports, and DO_NOT_POSTBACK to segments you want recorded in BATracker but not reported back to the traffic source.

8. Frequently Asked Questions

What is a flow in BATracker?
A flow is the routing engine that decides where each visitor goes. It routes every visitor to a path — a combination of a landing page and an offer. BATracker supports three flow types: SIMPLE (one path), MULTI_PATH (several weighted paths for rotation and split testing), and RULE_BASED (ordered rules that send visitors to different paths based on conditions like country, device, ISP, or time). Every flow should keep an isDefault fallback path so no visitor is ever left without a destination.
What is the difference between a path and a rule?
A path is a destination: a lander plus an offer (or direct linking straight to the offer). A path carries a weight for weighted rotation and can be marked isDefault as a fallback. A path rule is the logic that decides whether a visitor takes a given path. Rules are ordered by priority (lowest first), use matchType ALL (AND) or ANY (OR) across a set of conditions, and carry an action such as ALLOW, BLOCK, REDIRECT, DO_NOT_TRACK, or DO_NOT_POSTBACK. The first matching rule wins.
How do I set up geo-targeting with flows?
Use a RULE_BASED flow. Create one path per geo — for example a US path pointing to Offer A and a UK path pointing to Offer B — then add ordered rules: Rule 1 (priority 10) matches country is US and routes to the US path, Rule 2 (priority 20) matches country is UK and routes to the UK path. Keep a default path (isDefault) so everyone else still reaches a valid offer. The first matching rule wins, so put your most specific geos highest.
Does dayparting use my server time or the campaign timezone?
Dayparting in BATracker evaluates WEEKDAY and TIME_OF_DAY conditions in the campaign timezone, not server time. The campaign timezone is an IANA zone (default UTC), and time is parsed with Intl-based date parts, so a rule set to run 9am to 5pm matches exactly the hours you configured for that campaign no matter where the tracker runs.
How do weighted landers and offers work in a path?
Each path can hold multiple landers (PathLander) and multiple offers (PathOffer), each with its own weight. BATracker rotates landers and offers independently by weight, so you can A/B test two landing pages 50/50 while simultaneously split-testing three offers by weight within the same path. This lets you find the best lander and the best offer at the same time without building separate campaigns.

Route Every Visitor to the Perfect Offer

BATracker flows give you rule-based geo, device, ISP, and dayparting routing with weighted A/B rotation of landers and offers — all on a sub-10ms, real-time stack. Build smarter campaigns today.

Start Your Free Trial