Everyone Else Tells You Which Link Got Clicked. We Tell You Which One Opened the App.
A/B split testing is live on Zippy: race 2–4 destinations on one short link and see the app-open rate per variant — the number every other link tool is structurally unable to give you. Hero & up.


⚡ Zippy: a click is someone reaching for the door. an app open is someone walking through it. guess which one your dashboard has been counting.
Here's the test everybody runs. Two captions, two links, one week. Link A gets 1,840 clicks. Link B gets 1,612. You ship link A, you tell your team A won, and you move on.
Now here's what actually happened. Link A sent people to a page that Instagram's in-app browser happily rendered, so they tapped, squinted at a webview, and left. Link B handed them to the real native app — logged in, saved cards, the whole thing — and three quarters of them landed there. A won the click count and lost the only race that pays.
A/B split testing is now live on Zippy — Hero & up. And it reports the number nobody else in this category can: the app-open rate per variant.
One link, up to four destinations
Don't make two links. Make one link with two-to-four destinations and a weight each.
| Variant | Where it goes | Weight | Share of taps |
|---|---|---|---|
| A | shop.com/drop | 1 | 50% |
| B | instagram.com/p/abc123 | 1 | 50% |
Weights are relative, so 50/50 and 1/1 are the same split — the editor draws the bar as you type. Zippy hands each visitor one destination and remembers which one they got. You post one short link, one caption, one QR. The test runs underneath.
Two variants minimum, because one variant isn't a test. Four maximum, because that's the redirect engine's cap and we'd rather refuse the fifth than silently drop it on you.
The part other tools can't do
Every link tool has A/B testing. What they measure is the redirect — a request hit their edge, they incremented a counter, variant A wins. That's the end of their visibility, because a short link's job ends at the redirect.
Zippy's job doesn't end there. The redirect engine fires a native app intent, and the outcome pipeline records what happened next: the real app opened, the visitor got stuck in a browser, or the hand-off broke. So the variant index rides all the way through to the outcome, and the report looks like this:
{
"variants": [
{ "url": "https://shop.com/drop", "clicks": 1840, "opened": 119, "appOpenRate": 0.288 },
{ "url": "https://instagram.com/p/abc123", "clicks": 1612, "opened": 291, "appOpenRate": 0.75 }
],
"sampled": true,
"window": 90
}
Variant A: more clicks, 28.8% of them reached an app. Variant B: fewer clicks, 75%. If your dashboard only had the first column you'd have shipped the wrong one, confidently, with a chart to back it up.
That sampled: true is us being honest rather than impressive. Clicks and outcomes come from two independently sampled datasets, so read it as a trend, not a per-click ratio. The gap between 28% and 75% is real. The last digit isn't. We'd rather tell you that than print a fake decimal.
Full field-by-field breakdown lives in the A/B testing docs.
Split test or route — pick one, and here's why
If you've already set up audience routing on a link — iOS to the App Store, US to your US shop — you can't also split-test that link. Zippy will tell you so instead of quietly ignoring one:
{ "error": "ab_routing_conflict" }
This isn't a limitation we're apologising for. Routing assigns a destination based on who someone is. A split test assigns one at random. Run both and your "winner" is just a map of which countries happened to be awake — the randomisation is gone and the result means nothing. So we make you pick. Switching between the two is one tap and instant, and the link keeps redirecting the entire time.
Scheduling, on the other hand, layers happily on top — scheduled swaps move the default destination on a clock and don't care which mode you're in.
Your UTMs ride every variant
If the link has campaign UTMs, every variant gets them composed on automatically. You never have to hand-tag variant B and then spend a month wondering why its numbers looked weird. Same walker does routed destinations, A/B variants, and scheduled swaps — one code path, no variant can lose its tags.
Ending a test can't break anything
Nothing on this page can kill a link. That's not a footnote, it's the architecture.
A split test only decides which URL a tap resolves to. Clear the test and the link falls back to its default destination and keeps going. Downgrade your plan, let the flag go dark, forget the link exists for two years — it redirects. There is no expiry field to set, no click cap to hit, no end date. The QR on last year's poster works tonight.
Every other tool's A/B feature ships next to an expiry feature. Ours can't, because we don't have one.
Try it in about forty seconds
- Open a link's editor (or the ZIP form) and switch the destination mode to split test.
- Paste two destinations. Leave the weights at 1 and 1.
- Post the short link like you always would.
- Come back in a few days and look at app-open rate, not clicks.
Setup, the API shape, and every guardrail: the docs. Shipped today in the changelog.
FAQ
How do I test two links to see which one works better?
Make one link with two destinations instead of two links. In the link editor, switch the destination mode to split test, add both URLs with a weight each, and share the single short link. Zippy randomly assigns each visitor a destination and reports how each performed — including the share of taps that actually opened the native app.
What's the difference between clicks and app opens in an A/B test?
A click means someone tapped your link. An app open means they ended up inside the real native app instead of a webview. Only the second one behaves like a logged-in user with a saved cart. A variant can win on clicks and lose on app opens — that's the most common result we see, and it's the reason this feature exists.
Can I A/B test and geo-route the same link?
No. Zippy returns an ab_routing_conflict error. Random assignment and audience-based assignment can't share a link without destroying the validity of the test. Clear one, set the other — it's instant, and the link never goes down.
How many variants can I test?
Two to four. One isn't a test; five is past the redirect engine's cap, so Zippy rejects the set rather than silently dropping variants and handing you a wrong result.
Does the split test expire my link?
No. Nothing in Zippy expires a link — no click caps, no end dates, no dead 404s. A split test only chooses which destination a tap resolves to. End the test and the link goes back to its default destination and keeps redirecting forever.
What plan do I need for A/B testing?
Hero ($19/mo) and up, same as scheduled destinations and audience routing. Per-variant results are on the same tier.
Stop optimising for the tap. Optimise for the app. Start zipping →