A deep link is a link that opens a specific screen of an app rather than its home screen: a product card, a doctor's appointment, a payment form. Working out where the person came from is a separate job, handled by a tag inside the link and by an attribution mechanism. The two are often treated as one, yet they are set up differently and break in different places.
Key takeaways
The difference is where the link takes the person and what remains known about their source. An ordinary link opens a page in the browser, a deep link opens a screen in an installed app, and a deferred deep link carries the user through installation and then opens that same screen.
| Link type | What it does | If the app is missing | What is known about the source |
|---|---|---|---|
| Ordinary web link | Opens a page on the site | Works as usual | Tags in the page address |
| Deep link | Opens the right screen of the app | Nothing opens, or the user lands in the browser | A parameter inside the link |
| Deferred deep link | Leads to the app store and opens the same screen after installation | Leads to installation and remembers the destination | The tag survives until first launch |
| Tagged Telegram bot link | Starts the bot and hands it the tag | The Telegram app is already installed | The tag arrives with the very first event |
Hence the main practical point: the scenario "a person sees an ad for a product and opens it inside the app" only works with a deferred deep link. Without one, a new user lands on the home screen after installing and has to look for the product again.
A link opens an app once the app has proven its claim to a domain. On Android this is Android App Links: the association between the app and the website is verified, and after verification the link opens the matching content in the app straight away, with no app-picker dialog. On iOS the same role is played by Universal Links.
Plain deep links on a custom scheme such as myapp:// also work, but they behave worse: the system does not know who owns such a link and may show an app-picker dialog or open nothing at all when the app is not installed.
Verification runs through a file on the website. Android requests an assetlinks.json file at /.well-known/assetlinks.json from every domain declared in the app; it lists the package name and the fingerprint of the signing certificate. While the file is unavailable or does not match the app, verification fails: the app does not become the handler for the link, and the person either picks the app by hand or stays in the browser.
They were switched off. Firebase Dynamic Links, the service that carried half of the deferred deep links in the world, shut down on 25 August 2025: every link it served, both on custom domains and on page.link subdomains, stopped working and now returns a 404 response.
The practical lesson is broader than one discontinued service. Links from advertising campaigns live for years: they stay in posts, in printed materials, on packaging and in chat histories. So it is better to keep the short link domain in your own hands and to pick an attribution service you could replace without rebuilding every link.
The two platforms work differently, and the difference decides what you can measure at all.
The store passes the tag from the advertising link to the app. The Play Install Referrer API returns the referrer string, the referrer click time and the install begin time; the data is available for 90 days and does not change until the app is reinstalled. The recommendation is to call the API once, on the first run after installation.
Here the link between an ad and a specific person is unavailable by default. Apple states it plainly: to access the IDFA advertising identifier on iOS 14.5 and later you first need the user's permission through the App Tracking Transparency prompt, and without that permission the identifier comes back as zeros. Apple defines tracking as linking data from your app with data collected from other companies' apps, websites or offline properties for targeted advertising or advertising measurement.
There is no built-in equivalent of the Google Play referrer string on iOS, so deferred deep links there are assembled by workarounds and do not always fire. The longer the pause between the click and the first launch, the higher the chance that after installing the person sees the home screen instead of the promised product. If an ad points at a specific offer, decide in advance what to show when the jump fails.
Important The promise "we will tell you exactly which ad brought this particular customer" does not always hold on iOS. On Android and on the web the link can be built; on iOS, without consent to tracking, what remains is aggregated campaign-level data. The exact link comes from your own tagged link plus a sign-up inside the product: the person identifies themselves when they create an account or send a request.
In Telegram the tag goes straight into the link, and no separate system is needed for it. A start parameter is added to an address of the form t.me/bot_name, and the bot receives the tag with its very first event: the documentation allows up to 64 characters of Latin letters, digits, underscore and hyphen, and recommends base64url encoding for more complex values.
Mini Apps use the same mechanism with a parameter named startapp: its value reaches the app as start_param and is duplicated in the page address. From there the tag travels with the user — in the profile or in the deal record.
How to carry the tag from a bot into the CRM, which fields to create and what to do when the exchange fails is covered in our article on connecting a Telegram bot to a CRM. It also sets out naming rules for tags, without which a report ends up holding two dozen values of unknown origin within six months.
At the UzFranchise Expo registration ran through a bot, and the source tag travelled with the guest: you could see which ad each guest came from and how the database grew day by day.
Deep link and attribution metrics answer three questions: do people arrive through the link, do they reach the target action, and does the channel pay for itself.
| Metric | Formula | Where to look |
|---|---|---|
| Install rate (click-to-install) | installs ÷ ad clicks | Ad account and attribution service |
| CPI | channel cost ÷ number of installs | Ad account |
| Install-to-sign-up rate | sign-ups ÷ installs | Product analytics |
| Retention D1, D7, D30 | users returning on day N ÷ users who installed | Product analytics |
| CAC | acquisition cost ÷ number of new customers | Channel report on top of the CRM |
| ROAS | channel revenue ÷ channel cost | Channel report on top of the CRM |
Install rate is a share, not a number of installs. The mistake is common and expensive: counted in units, two campaigns with the same install count look identical even though one of them bought five times more clicks.
The last two rows of the table no longer live in app analytics but in the CRM: an install and a sign-up say nothing about money. How to tie them to payments and costs is covered in our article on end-to-end analytics from the ad to the payment.
Tagging is designed before the first campaign, not after it. Data you failed to collect does not appear retroactively: the clicks already happened, and nobody remembers how they were labelled.
The fourth point is skipped more often than the rest, and it breaks regularly: some messengers and social apps open links in an in-app browser where a deep link behaves differently from the normal one.
We do not sell "deep link setup" as a separate service: it is part of the work on the product and on collecting requests. On our service pages the three closest formats are these.
The budget rises above the starting figure with the number of channels, the number of platforms the link has to be tested on, and the depth of the event map. What the bot work includes is set out on our bots and AI assistants page.
Syntra Systems starts with an event map and a tagging scheme rather than with plugging in a service. We work out which transitions the product actually needs, what a person should see after the click, which actions count as targets and in which system they turn into money. Then we fix the scheme and build the links — web, app, bot — under one set of rules.
After that we connect the delivery of the tag into the product and the CRM, test link opening on both platforms and set up a report where installs, sign-ups and payments stand side by side. In our own product Syntra Health this is part of the architecture: the app is built on Next.js and Capacitor, with the App Store and Google Play release ahead. How to keep users coming back after the first session is covered in our article on push notifications in an app.
Let’s discuss your project
Tell us what you need, and we will estimate the timeline and cost and suggest a solution.
They are different layers of the same task. A deep link decides which screen opens, while a tag decides what you learn about the source of the visit. A tag can sit in an ordinary web link, in a deep link or in a Telegram bot link; without a deep link it simply drops the person on the home page.
A paid service doesn't pay for itself at the start. While there are only two or three channels, tagged links, the referrer passed through Google Play on Android and your own in-app sign-up event are enough. A paid service becomes worthwhile once campaigns multiply, affiliate networks join in, and their reports need to be reconciled against each other.
A correctly built link then opens an ordinary page on the website, where you can offer the install instead. That's how links tied to your own domain work — App Links on Android and Universal Links on iOS. A link like myapp:// opens nothing once the app is deleted, which is why it isn't used in advertising.
Each placement gets its own tagged link, and the QR code is printed from exactly that link. The report then shows a particular poster or stand rather than a generic «QR code». For Telegram this is a link with a start parameter; for a site or an app it is an address with campaign tags.
Yes, provided the tag survives until the moment the person identifies themselves: a sign-up, a request or an order. At that point the tag is written into the user profile and the deal record, and from there it travels with the customer. App analytics on its own never sees the payment.
The systems follow different rules: attribution windows, the moment an install is counted, the handling of repeat installs and reinstalls. An exact match is unreachable and not worth chasing. Pick one system as the source of truth for budget decisions and follow the trend inside it.
No. The same principle works in Telegram bots and Mini Apps, where the tag travels in the start or startapp parameter, and in web services, where a link leads straight to the right section of a customer portal. The task is always the same: shorten the path to the goal without losing the source.
Sources