Deep linking · iOS, Android and web
Send people to the right screen in your app.
A link to your app usually dumps people on your home screen — or in the App Store with no idea where they were going. QubeRoute takes them to the exact page you meant, and shows you which link got them there.
The Firebase Dynamic Links replacement. Your links, working again — without an attribution suite you did not ask for. iOS, Android and web. One integration.
- Free plan, no card
- Set up in ten to twenty minutes
Attribution
Example
Totals, across every link
- Clicks
- Installs
- Attributed
By link
- /spring-sale
- /invite-a-friend
- /black-friday
Clicks and Installs sit beside each one.
How sure we are
- Certain
- High
- Medium
Every attribution lands in one of these.
- Five lines of code
- iOS, Android and web
- No native code to write
- Free plan, no card
- From £19 a month
Who this is for
If one of these is you, this is the right tool.
You run a referral or affiliate programme
You need to know which partner earned each install — not just that an install happened. Every link is tied to whoever shared it.
Firebase Dynamic Links shut down and took your links with it
This is the replacement, and moving across is an afternoon. Your existing links keep the same shape.
You send links by email, SMS or social
And you want them to open the app at the right place, rather than the website — including for people who do not have the app yet.
You have an Ionic, Capacitor or React Native app
Five lines of JavaScript on iOS, Android and web, no native code to write and nothing to maintain per release.
Unattributed installs
Know which installs you cannot credit.
A report that shows only what it matched hands you a figure you cannot act on, because the installs it could not place are still being paid for. Ours is a field in the report, at the top, in the colour that means look at this.
Attribution
Example
Not attributed
Installs we could not join to a click. Shown first, on purpose — everybody reports what they matched, and this is the row that says what they did not.
Attributed
- Certain
- High
- Medium
- Low
Every attribution lands in one of these, with the confidence on the row.
When the link survives, it is exact. When it does not, it is a guess.
On Android the referrer survives the install, so the match is exact. On iOS nothing survives, so the fallback is a probabilistic guess rather than a certainty — and it stays off until you switch it on, because a wrong match is worse than no match.
We measure how often that guess is right and how often it is wrong, and we publish both — including the case that makes us look worst. The method, the sample it rests on and the figures themselves are in the documentation.
How it is measured, and how to turn the guessing off →
- Certain
The link survived
Exact. The app was opened by the link itself, so there is nothing to infer.
- Certain
A clipboard token
Exact, and off by default: iOS asks your user first, and they can refuse. Android does not need it — the install referrer is exact already.
- High or medium
Coarse signals
A guess, from six coarse signals inside the match window — sixty minutes by default.
While you are still integrating
Is it working right now?
Every tap and every install as it happens, with what we decided and how sure we were. Bots and refusals are on the list too — you cannot debug a screen that only shows you the good rows.
Live view
Example
- ATTRIBUTED · Certaininstall
- OKclick · iOS
- NO MATCHinstall
- OKclick · Android
- BOTclick · preview fetch
- REFUSEDclick · rate limited
One link, every case
Where does a tap go if they do not have the app?
To the store, and then to the right screen once they open it. To your website on a desktop. Each link carries its own fallback, and the host it is printed under is allocated once and never reused — so a link on a poster outlives the campaign that made it.
Links
Example
| Link | Web fallback | Tags | Status |
|---|---|---|---|
| /spring-sale | example.com/spring | Live | |
| /invite-a-friend | example.com/invite | referral | Live |
| /black-friday | example.com/bf | Live | |
| /app-of-the-day | example.com/featured | press | Live |
Clicks sits in the last column.
The whole integration
Five lines, and none of them are ours to break.
Not an excerpt — the entire @quberoute/sdk integration. init never throws and never waits for the network.
npm install @quberoute/sdkv0.2.1 on npm, MITNo native module and nothing to rebuild. What iOS asks for is its own: the Associated Domains entitlement, your Team ID, and your bundle identifier — three fields, once, in Xcode. The whole path, end to end sets out what we serve and what the platform does.
import { QubeRoute } from '@quberoute/sdk'
const qr = await QubeRoute.init({ key: 'qr_test_YOUR_KEY' })
qr.onLink(link => {
// link.data is whatever you put in the link when you created it.
this.router.navigateByUrl(link.data.path as string)
})Pricing
What each plan costs.
From Free, with a paid plan at £19 a month.
Before you start
Last questions
Start free. Stay free until you outgrow it.
One app, 1,000 clicks a month, both environments, and two-factor authentication. No card.