Audience routing (geo + device)
Send one Zippy link to different destinations by device/OS (iOS, Android, desktop) and by country — resolved at redirect time, and it still opens the native app.
Audience routing (geo + device)
Audience routing lets a single Zippy link resolve to different destinations for different visitors, based on their device/OS and their country. You set the rules once on the link; Zippy picks the destination the instant someone taps.
Routing is available on Hero and up.
What you can route on
| Rule | Matches | Example destination |
|---|---|---|
| iOS | iPhone / iPad | your App Store page |
| Android | Android devices | your Google Play page |
| Desktop | non-mobile | your website |
| By country | a visitor's country (ISO code, e.g. US, GB) | a localized page |
Any rule you leave blank simply doesn't apply. A link with no rules behaves like a normal Zippy link — one destination for everyone.
Resolution order
When more than one rule could match, Zippy resolves in a fixed, predictable order — the first match wins:
- iOS (if the visitor is on iOS and the rule is set)
- Android (if on Android and set)
- Desktop (if non-mobile and set)
- Country (
geo[country]if set for the visitor's country) - The link's default destination (the URL you created it with)
So an iOS visitor from the US hits your iOS rule, not your US rule — device is the more specific intent for an app link. If nothing matches, the visitor gets the default destination; there's never a dead end.
It still opens the native app
Routing composes with Zippy's native-app spring. If your iOS rule points at an App Store URL, Zippy opens the App Store app — including out of the Instagram / TikTok in-app browser — not just a web redirect. Each routed destination is treated like any Zippy destination: it springs the right native app where one exists.
UTMs ride every destination
If the link also has UTM tracking, Zippy composes your utm_*
parameters onto every routed destination automatically. Your analytics stay accurate no
matter which rule a visitor matched.
Set it up
Dashboard (web): open a link's editor (or the ZIP form), expand **Audience routing (geo
- device)**, fill in the device destinations and add country rows as needed, then save.
Mobile app: open a link's detail screen and use the Audience routing section — the same device fields and per-country rows.
Changes take effect immediately; the short link itself never changes, so anything you've already shared keeps working and simply starts routing.
Routing or a split test — not both
A link can route by audience or A/B split-test, never both.
Routing picks a destination from who a visitor is; a split test picks one at random so you
can compare. Setting one on a link that already has the other returns an
ab_routing_conflict error rather than silently ignoring one of them. Switching between the
two is instant, and the link keeps redirecting throughout.
Scheduled destinations are independent of this choice — a schedule swaps the default destination everyone else falls through to, so it stacks with routing.
Notes
- Country detection uses the visitor's network location (Cloudflare's geo signal) — coarse country only, no precise location and no personal data.
- Routed links are served with
Cache-Control: no-storeso a shared cache never pins one visitor's destination onto the next. - Every destination must be a valid
http(s)URL.
Read more
- Blog: One link, the right destination for everyone
- Changelog: Audience routing
- Stacks with: scheduled destinations · A/B split testing