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.
iOS and Android are both confirmed on a physical device, deferred attribution included: a tap, an install, and the click carried through. The Android page says what the test covered and what it did not.
- Free plan, no card
- Separate test environment, never billed
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. You point your links at us, swap the SDK call, and 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
One npm package, and upgrading it costs you nothing.
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 publish how often that guess is right and how often it is wrong — 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
None of it is 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.6 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)
})Why us
Four things we already do.
Each of these is checkable today.
The free plan is a plan, not a trial
It does not expire, and its limits are enforced from the first day.
The prices are on the website
All of them, and no sales team to get past.
The SDK reads nothing about your users
No advertising identifier, no contacts, no location, no dependencies.
Every security claim names its mechanism
The security page also names the audits we lack.
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.