Free tool Deep link generator for App Store and Google Play
An app download link is really several links: an App Store URL whose campaign token shows up in App Analytics, a Google Play URL whose referrer reaches your app after install, a deep link that opens the right screen, and the files your domain must serve for universal links and App Links. Fill in your IDs once and get all of them, checked against Apple’s and Google’s rules, plus a QR code.
- ct / pt per App Store Connect help
- referrer per Google Play docs
- Runs locally
Build store links and deep links
Leave out what you do not need: an iOS-only app can skip the package name, a link without a domain skips the association files.
The number after id in your App Store URL (Apple ID in App Store Connect). Pasting the whole URL works too.
Two-letter code such as us or gb. Leave empty to let the App Store pick the visitor’s storefront.
Fixed for your developer account. You get it the first time you create a campaign link in App Store Connect; it cannot be made up.
Your campaign name: up to 30 letters, digits, spaces and the listed punctuation; no space at the start or end.
The applicationId, for example com.example.shop.
Goes into the Google Play referrer, and into the deep links if the box below is ticked.
For example email, social, cpc.
For example spring_sale.
To tell creatives or placements apart.
Your app’s URL scheme without ://, for example exampleshop.
The HTTPS domain for universal links / App Links, for example link.example.com.
The screen to open, for example product/1024. Extra parameters can follow after ?.
10 characters, from your Apple developer account. Used in apple-app-site-association.
Leave empty if it is the same as the Android package name.
From the signing key (with Play App Signing, the app signing key in Play Console). Colons optional.
A printed code can only hold one link. The universal link opens the app if installed and your web page otherwise.
https://apps.apple.com/app/id123456789?pt=123456&ct=spring_sale&mt=8Campaign results appear in App Store Connect › Analytics › Campaigns, no sooner than 24 hours after launch.
https://play.google.com/store/apps/details?id=com.example.shop&referrer=utm_source%3Dnewsletter%26utm_medium%3Demail%26utm_campaign%3Dspring_saleThe referrer is passed to the app after install; read it once with the Play Install Referrer library.
Checks
- OKApp Store campaign “spring_sale”: both tokens present and within Apple’s rules.
- OKReferrer encoded once more inside the link, 73 / 512 characters.
- NoteTeam ID or SHA-256 fingerprint missing: the association files show placeholders to replace before publishing.
QR code
Download SVG for print, PNG for slides and chats.
https://link.example.com/product/1024?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale
Version 6 · 41 × 41 modules · error correction M · 4-module quiet zone included
Chinese Android app stores
Only formats each store publishes in its own developer documentation. App-internal schemes open the store app; set the store’s package on the Intent so the right store opens.
| Store | Link | How to use it |
|---|---|---|
| Huawei AppGallery (Android) | appmarket://details?id=com.example.shop | Format given in Huawei’s quick app FAQ. Campaign attribution uses links generated in AppGallery Connect; no hand-built parameter is documented. |
| Huawei AppGallery (HarmonyOS app) | store://appgallery.huawei.com/app/detail?id=com.example.shop | Inside a HarmonyOS app, with action ohos.want.action.appdetail. The id is the bundleName (the package name is used here). |
| Huawei AppGallery (HarmonyOS web link) | https://appgallery.huawei.com/app/detail?id=com.example.shop | HarmonyOS App Linking URL; the id is the bundleName. Opens AppGallery on HarmonyOS devices. |
| Honor App Market | honormarket://details?id=com.example.shop | From Honor’s developer docs. setPackage("com.hihonor.appmarket") to go straight to Honor. |
| OPPO App Market | market://details?id=com.example.shop | From OPPO’s self-update docs (optional caller, m and other parameters). setPackage com.oppo.market, falling back to com.heytap.market. |
| vivo App Store | market://details?id=com.example.shop | From vivo’s docs. setPackage("com.bbk.appstore") to open vivo’s store. |
| Xiaomi GetApps | market://details?id=com.example.shop | Xiaomi documents this only for an app opening its own page (self-update). Ad-delivery mimarket:// links must be signed and generated server-side. |
| Meizu App Store | mstore://details?package_name=com.example.shop | Inside an app, setPackage("com.meizu.mstore"); add source_apkname with your own package name. |
| Meizu (web page) | http://app.meizu.com/apps/public/detail?package_name=com.example.shop | Web page from Meizu’s docs; Meizu notes it may need the Meizu browser to open the store. |
| Tencent MyApp (Yingyongbao) | https://a.app.qq.com/o/simple.jsp?pkgname=com.example.shop | MyApp “micro download” link, generated in the MyApp console for apps already listed there. |
https://link.example.com/product/1024?utm_source=newsletter&utm_medium=email&utm_campaign=spring_saleOpens the app when it is installed and the domain is verified; otherwise the page loads in the browser.
exampleshop://product/1024?utm_source=newsletter&utm_medium=email&utm_campaign=spring_saleWorks only when the app is installed. Use it inside your own app, in push payloads or as a fallback.
<!-- Smart App Banner for iOS Safari, inside <head> -->
<meta name="apple-itunes-app" content="app-id=123456789, app-argument=https://link.example.com/product/1024?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale">
<!-- Download links. Get store badges from the official Apple / Google badge pages and follow their guidelines -->
<a href="https://apps.apple.com/app/id123456789?pt=123456&ct=spring_sale&mt=8" rel="noopener">App Store</a>
<a href="https://play.google.com/store/apps/details?id=com.example.shop&referrer=utm_source%3Dnewsletter%26utm_medium%3Demail%26utm_campaign%3Dspring_sale" rel="noopener">Google Play</a>Smart App Banner for iOS Safari and plain download links. Get badge artwork from the official pages linked below.
{
"applinks": {
"details": [
{
"appIDs": [
"TEAM_ID.com.example.shop"
],
"components": [
{
"/": "/product/*",
"comment": "Open links under /product/*"
}
]
}
]
}
}Serve at https://<domain>/.well-known/apple-app-site-association: no file extension, HTTPS, no redirects.
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "com.example.shop",
"sha256_cert_fingerprints": [
"REPLACE_WITH_SHA256_CERT_FINGERPRINT"
]
}
}
]Serve at https://<domain>/.well-known/assetlinks.json and add android:autoVerify="true" to the intent filter.
Share these inputs: the values go after the # in the link, so they never reach a server.
https://tapcub.com/tools/app-deep-link-generator
Version v1.0Updated Update history
What each link does after the tap
Store links decide where the install is credited; deep links decide which screen opens. Most campaigns need both.
App Store link
Opens the product page. When the person downloads within 24 hours, App Store Connect counts it as a first-time download for that campaign token; if they clicked several campaign links, the latest gets the credit. Apple does not pass ct to your app.
Google Play link
The referrer value is stored by Google Play and handed to the app through the Install Referrer API after install (kept for 90 days). Read it once on first launch and send the utm_* values to your analytics.
Universal link / App Link
An HTTPS URL on your own domain. With the association file in place and verified, the system opens the app directly; without the app, the browser shows the page, where you can offer the store links.
Chinese stores
Android in mainland China has no Google Play, and each phone brand runs its own store. market://details without a target package makes Android show a chooser of every installed store, so set the store’s package on the Intent.
None of these links match a click to a specific install on their own. For paid campaigns across many networks you still need an attribution provider or each network’s SDK.
Four steps
Test every link on a real device, once with the app installed and once without.
-
1
Fill in your IDs
App Store ID and provider token from App Store Connect, package name from your Android build.
-
2
Name the campaign
One campaign token for Apple and the utm_* values for Google Play and your deep links. Keep the names the same across platforms.
-
3
Publish the association files
Upload apple-app-site-association and assetlinks.json to
/.well-known/on the link domain, then add the domain to your app’s entitlements and intent filter. -
4
Place the links
Store links in emails and ads, the Smart App Banner on your site, the universal link in a QR code for print.
Link formats and where they come from
Checked against Apple, Google and the Chinese stores’ developer documentation on 2026-11-10. Only formats the platform itself publishes are generated.
- App Store:
https://apps.apple.com/[storefront/]app/id<ID>?pt=<provider>&ct=<campaign>&mt=8; links copied from App Store Connect also have the app name beforeid, which does not change the page - Google Play:
https://play.google.com/store/apps/details?id=<package>&referrer=<encoded utm string>; the referrer is encoded as a whole, e.g.utm_source%3Dsearch%26utm_medium%3Dcpc - Universal links:
applinkswithappIDs= Team ID + bundle ID andcomponentspath patterns; Android App Links:delegate_permission/common.handle_all_urlswith package name and SHA-256 fingerprint - Not published, so not generated: OPPO
oppomarket://, MyApptmast://, web detail pages for Xiaomi, OPPO, vivo and Honor, and hand-built attribution parameters for Huawei and Xiaomi
| Item | Rule | Source |
|---|---|---|
Campaign token ct | Up to 30 letters, digits, spaces and listed punctuation; no leading or trailing space | App Store Connect help |
Provider token pt | Fixed per developer account, issued by App Store Connect | App Store Connect help |
Play referrer | URL-encoded, 512 characters or less | Android developers |
| apple-app-site-association | At /.well-known/, no extension, HTTPS, no redirects | Apple developer docs |
| assetlinks.json | At /.well-known/, SHA-256 of the signing certificate | Android developers |
One spring sale email, both stores
A shop app sends a spring sale newsletter with one button per store and a deep link to the sale screen.
| Link | Result |
|---|---|
| App Store | https://apps.apple.com/app/id123456789?pt=123456&ct=spring_sale&mt=8 |
| Google Play | …details?id=com.example.shop&referrer=utm_source%3Dnewsletter%26utm_medium%3Demail%26utm_campaign%3Dspring_sale |
| Universal link | https://link.example.com/sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale |
Installs from the email show up under campaign spring_sale in App Store Connect and, through the install referrer, as utm_source=newsletter in the app’s own analytics. Existing users tap the universal link and land on the sale screen with the same utm values.
Why app links lose their attribution
Most problems are an encoding slip or a file the system cannot fetch.
Unencoded referrer
&referrer=utm_source=a&utm_medium=b leaves utm_medium as a separate Play parameter. Encode the whole referrer so it stays one value.
Inventing a provider token
pt comes from App Store Connect and is tied to your account. A made-up number means the campaign never appears in App Analytics.
Association file behind a redirect
Apple fetches apple-app-site-association over HTTPS with no redirects, and the file has no .json extension. A CDN or login redirect silently breaks universal links.
Only testing with the app installed
The path without the app (store page, then first launch) is where attribution happens. Test on a clean device or after deleting the app.
Deep link opens and installs next to retention
The TapCub app SDKs record deep link opens, and attribution results land next to day-1 and day-7 retention.
Deep link opens as an event
Call trackDeeplink(url) from your URL handler and TapCub records $deeplink_launch with the URL; token, code and password values are blanked first.
Install attribution with retention
Receive results from AppsFlyer, Adjust and similar platforms by postback, and see installs, D1, D7 and paying rate per campaign.
Learn moreSame person on web and app
A visitor who clicked your web link and later opened the app ends up on one profile.
Learn moreDeep link and store link questions
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
What does a deep link generator do?
It builds the links that send people to your app: store links with campaign parameters, deep links that open a specific screen, and the domain files that let HTTPS links open the app. This one also checks each against Apple’s and Google’s rules.
How do I track App Store downloads from a campaign?
Create a campaign link in App Store Connect once to get your provider token (pt), then add ct=<campaign> to your App Store URL. Downloads within 24 hours of a click are counted in App Analytics › Campaigns, visible after at least 24 hours.
How do I add UTM parameters to a Google Play link?
Put the utm string in the referrer parameter and URL-encode it as a whole: &referrer=utm_source%3Dnewsletter%26utm_medium%3Demail. The app reads it after install with the Play Install Referrer library.
What is the difference between a custom scheme and a universal link?
A custom scheme (exampleshop://product/1024) only works if the app is installed and any app can register the same scheme. A universal link / App Link is an HTTPS URL on your domain, verified by a file you host, that falls back to your web page.
Can one QR code send iPhone users to the App Store and Android users to Google Play?
Not by itself: a QR code holds one fixed link. Use a universal link to your own page that shows both store buttons (or redirects by device on your server), or print two codes.
Which Chinese Android stores publish link formats?
Huawei (Android and HarmonyOS), Honor, OPPO, vivo, Xiaomi (self-update only), Meizu and Tencent MyApp document the formats listed in the tool. Formats seen only on blogs, such as oppomarket:// or tmast://, are left out.
Can I use the App Store and Google Play badges?
Yes, under each company’s guidelines. Download the artwork from Apple’s marketing guidelines and Google Play’s badge page rather than redrawing it; this tool only gives plain links.
Is anything uploaded?
No. Links, files and the QR code are built in your browser. The share link keeps inputs after # in the URL, which browsers do not send to servers.
Update history
New features, fixes and data refreshes for this tool, newest first.
-
· v1.0
LaunchedFirst release.
Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates
See what installs do after day one
TapCub puts app retention, crashes and attribution results in the same project as your website and mini programs.